homebrew-core/Formula/gloox.rb
Max Howell d6351d4b88 Less deps for Gloox, and it works better too
Had reports that gnutls broke gloox for https connnections. But good ol' comes-with-osx openssl works.
2010-06-21 17:33:16 +01:00

77 lines
2.2 KiB
Ruby

require 'formula'
class Gloox <Formula
url 'http://camaya.net/download/gloox-1.0.tar.bz2'
homepage 'http://camaya.net/glooxdownload'
md5 'f8eacf1c6476e0a309b453fd04f90e31'
depends_on 'pkg-config'
def patches
# Fix memory leak
# http://bugs.camaya.net/horde/whups/ticket/?id=181
DATA
end
def install
system "./configure", "--with-openssl",
"--without-gnutls",
"--with-zlib",
"--disable-debug",
"--prefix=#{prefix}"
system "make install"
end
end
__END__
diff --git a/src/tlsgnutlsbase.cpp b/src/tlsgnutlsbase.cpp
index d98c802..37f702d 100644
--- a/src/tlsgnutlsbase.cpp
+++ b/src/tlsgnutlsbase.cpp
@@ -97,7 +97,7 @@ namespace gloox
gnutls_bye( *m_session, GNUTLS_SHUT_RDWR );
gnutls_db_remove_session( *m_session );
gnutls_credentials_clear( *m_session );
- if( m_secure )
+ if( m_session )
gnutls_deinit( *m_session );
m_secure = false;
diff --git a/src/tlsgnutlsclient.cpp b/src/tlsgnutlsclient.cpp
index c1d24c2..d250f32 100644
--- a/src/tlsgnutlsclient.cpp
+++ b/src/tlsgnutlsclient.cpp
@@ -33,6 +33,8 @@ namespace gloox
void GnuTLSClient::cleanup()
{
GnuTLSBase::cleanup();
+ if (m_credentials)
+ gnutls_certificate_free_credentials( m_credentials );
init();
}
@@ -120,6 +122,7 @@ namespace gloox
m_certInfo.status |= CertSignerNotCa;
const gnutls_datum_t* certList = 0;
unsigned int certListSize;
+ unsigned int certListSizeFull;
if( !error && ( ( certList = gnutls_certificate_get_peers( *m_session, &certListSize ) ) == 0 ) )
error = true;
@@ -131,6 +134,7 @@ namespace gloox
error = true;
}
+ certListSizeFull = certListSize;
if( ( gnutls_x509_crt_check_issuer( cert[certListSize-1], cert[certListSize-1] ) > 0 )
&& certListSize > 0 )
certListSize--;
@@ -189,7 +193,7 @@ namespace gloox
if( !gnutls_x509_crt_check_hostname( cert[0], m_server.c_str() ) )
m_certInfo.status |= CertWrongPeer;
- for( unsigned int i = 0; i < certListSize; ++i )
+ for( unsigned int i = 0; i < certListSizeFull; ++i )
gnutls_x509_crt_deinit( cert[i] );
delete[] cert;