From 96900dbce3aaa1fcac74a07a71482c5c6fcd3cab Mon Sep 17 00:00:00 2001 From: tpearson Date: Thu, 2 Sep 2010 21:21:15 +0000 Subject: * Large set of SuSE patches to fix bugs and add functionality * kdemm is included but not used by knotify as it does not work out of the box git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdelibs@1171141 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- kio/kssl/kopenssl.cc | 22 +++++++++++++++++++--- kio/kssl/kopenssl.h | 16 ++++++++++++++-- kio/kssl/ksmimecrypto.cc | 2 +- kio/kssl/ksslcertificate.cc | 32 +++++++++++++++++++++++--------- 4 files changed, 57 insertions(+), 15 deletions(-) (limited to 'kio/kssl') diff --git a/kio/kssl/kopenssl.cc b/kio/kssl/kopenssl.cc index 9252bd223..ababf37a0 100644 --- a/kio/kssl/kopenssl.cc +++ b/kio/kssl/kopenssl.cc @@ -96,9 +96,14 @@ static int (*K_BIO_write) (BIO *b, const void *data, int len) = 0L; static int (*K_PEM_ASN1_write_bio) (int (*)(),const char *,BIO *,char *, const EVP_CIPHER *,unsigned char *,int , pem_password_cb *, void *) = 0L; +#if OPENSSL_VERSION_NUMBER >= 0x10000000L +static int (*K_ASN1_item_i2d_fp)(ASN1_ITEM *,FILE *,unsigned char *) = 0L; +static ASN1_ITEM *K_NETSCAPE_X509_it = 0L; +#else static ASN1_METHOD* (*K_X509_asn1_meth) (void) = 0L; static int (*K_ASN1_i2d_fp)(int (*)(),FILE *,unsigned char *) = 0L; static int (*K_i2d_ASN1_HEADER)(ASN1_HEADER *, unsigned char **) = 0L; +#endif static int (*K_X509_print_fp) (FILE *, X509*) = 0L; static int (*K_i2d_PKCS12) (PKCS12*, unsigned char**) = 0L; static int (*K_i2d_PKCS12_fp) (FILE *, PKCS12*) = 0L; @@ -404,9 +409,14 @@ KConfig *cfg; K_BIO_ctrl = (long (*) (BIO *,int,long,void *)) _cryptoLib->symbol("BIO_ctrl"); K_BIO_write = (int (*) (BIO *b, const void *data, int len)) _cryptoLib->symbol("BIO_write"); K_PEM_ASN1_write_bio = (int (*)(int (*)(), const char *,BIO*, char*, const EVP_CIPHER *, unsigned char *, int, pem_password_cb *, void *)) _cryptoLib->symbol("PEM_ASN1_write_bio"); +#if OPENSSL_VERSION_NUMBER >= 0x10000000L + K_ASN1_item_i2d_fp = (int (*)(ASN1_ITEM *, FILE*, unsigned char *)) _cryptoLib->symbol("ASN1_item_i2d_fp"); + K_NETSCAPE_X509_it = (ASN1_ITEM *) _cryptoLib->symbol("NETSCAPE_X509_it"); +#else K_X509_asn1_meth = (ASN1_METHOD* (*)(void)) _cryptoLib->symbol("X509_asn1_meth"); K_ASN1_i2d_fp = (int (*)(int (*)(), FILE*, unsigned char *)) _cryptoLib->symbol("ASN1_i2d_fp"); K_i2d_ASN1_HEADER = (int (*)(ASN1_HEADER *, unsigned char **)) _cryptoLib->symbol("i2d_ASN1_HEADER"); +#endif K_X509_print_fp = (int (*)(FILE*, X509*)) _cryptoLib->symbol("X509_print_fp"); K_i2d_PKCS12 = (int (*)(PKCS12*, unsigned char**)) _cryptoLib->symbol("i2d_PKCS12"); K_i2d_PKCS12_fp = (int (*)(FILE *, PKCS12*)) _cryptoLib->symbol("i2d_PKCS12_fp"); @@ -568,7 +578,7 @@ KConfig *cfg; K_SSL_set_session = (int (*)(SSL*,SSL_SESSION*)) _sslLib->symbol("SSL_set_session"); K_d2i_SSL_SESSION = (SSL_SESSION* (*)(SSL_SESSION**,unsigned char**, long)) _sslLib->symbol("d2i_SSL_SESSION"); K_i2d_SSL_SESSION = (int (*)(SSL_SESSION*,unsigned char**)) _sslLib->symbol("i2d_SSL_SESSION"); - K_SSL_get_ciphers = (STACK *(*)(const SSL*)) _sslLib->symbol("SSL_get_ciphers"); + K_SSL_get_ciphers = (STACK_OF(SSL_CIPHER) *(*)(const SSL*)) _sslLib->symbol("SSL_get_ciphers"); #endif @@ -956,7 +966,13 @@ int KOpenSSLProxy::PEM_write_bio_X509(BIO *bp, X509 *x) { else return -1; } - +#if OPENSSL_VERSION_NUMBER >= 0x10000000L +int KOpenSSLProxy::ASN1_i2d_fp(FILE *out,unsigned char *x) { + if (K_ASN1_item_i2d_fp && K_NETSCAPE_X509_it) + return (K_ASN1_item_i2d_fp)(K_NETSCAPE_X509_it, out, x); + else return -1; +} +#else ASN1_METHOD *KOpenSSLProxy::X509_asn1_meth(void) { if (K_X509_asn1_meth) return (K_X509_asn1_meth)(); else return 0L; @@ -968,7 +984,7 @@ int KOpenSSLProxy::ASN1_i2d_fp(FILE *out,unsigned char *x) { return (K_ASN1_i2d_fp)((int (*)())K_i2d_ASN1_HEADER, out, x); else return -1; } - +#endif int KOpenSSLProxy::X509_print(FILE *fp, X509 *x) { if (K_X509_print_fp) return (K_X509_print_fp)(fp, x); diff --git a/kio/kssl/kopenssl.h b/kio/kssl/kopenssl.h index 68d6733cd..e4f6de0e8 100644 --- a/kio/kssl/kopenssl.h +++ b/kio/kssl/kopenssl.h @@ -48,6 +48,9 @@ class KOpenSSLProxyPrivate; #include #include #undef crypt +#if OPENSSL_VERSION_NUMBER >= 0x10000000L +#define STACK _STACK +#endif #endif #include @@ -446,12 +449,12 @@ public: */ int PEM_write_bio_X509(BIO *bp, X509 *x); - +#if OPENSSL_VERSION_NUMBER < 0x10000000L /* * X509_asn1_meth - used for netscape output */ ASN1_METHOD *X509_asn1_meth(); - +#endif /* * ASN1_i2d_fp - used for netscape output @@ -531,6 +534,9 @@ public: */ void sk_free(STACK *s); +#if OPENSSL_VERSION_NUMBER >= 0x10000000L + void sk_free(void *s) { return sk_free(reinterpret_cast(s)); } +#endif /* * Number of elements in the stack @@ -543,6 +549,9 @@ public: */ char *sk_value(STACK *s, int n); +#if OPENSSL_VERSION_NUMBER >= 0x10000000L + char *sk_value(void *s, int n) { return sk_value(reinterpret_cast(s), n); } +#endif /* * Create a new stack @@ -555,6 +564,9 @@ public: */ int sk_push(STACK *s, char *d); +#if OPENSSL_VERSION_NUMBER >= 0x10000000L + int sk_push(void *s, void *d) { return sk_push(reinterpret_cast(s), reinterpret_cast(d)); } +#endif /* * Duplicate the stack diff --git a/kio/kssl/ksmimecrypto.cc b/kio/kssl/ksmimecrypto.cc index c96f9ec6d..1a9e37e60 100644 --- a/kio/kssl/ksmimecrypto.cc +++ b/kio/kssl/ksmimecrypto.cc @@ -87,7 +87,7 @@ KSMIMECryptoPrivate::KSMIMECryptoPrivate(KOpenSSLProxy *kossl): kossl(kossl) { STACK_OF(X509) *KSMIMECryptoPrivate::certsToX509(TQPtrList &certs) { - STACK_OF(X509) *x509 = sk_new(NULL); + STACK_OF(X509) *x509 = reinterpret_cast(sk_new(NULL)); KSSLCertificate *cert = certs.first(); while(cert) { sk_X509_push(x509, cert->getCert()); diff --git a/kio/kssl/ksslcertificate.cc b/kio/kssl/ksslcertificate.cc index a76b235d7..73a8451ca 100644 --- a/kio/kssl/ksslcertificate.cc +++ b/kio/kssl/ksslcertificate.cc @@ -1003,17 +1003,31 @@ return qba; TQByteArray KSSLCertificate::toNetscape() { TQByteArray qba; #ifdef KSSL_HAVE_SSL -ASN1_HEADER ah; -ASN1_OCTET_STRING os; -KTempFile ktf; +#if OPENSSL_VERSION_NUMBER >= 0x10000000L + NETSCAPE_X509 nx; + ASN1_OCTET_STRING hdr; +#else + ASN1_HEADER ah; + ASN1_OCTET_STRING os; +#endif + KTempFile ktf; - os.data = (unsigned char *)NETSCAPE_CERT_HDR; - os.length = strlen(NETSCAPE_CERT_HDR); - ah.header = &os; - ah.data = (char *)getCert(); - ah.meth = d->kossl->X509_asn1_meth(); +#if OPENSSL_VERSION_NUMBER >= 0x10000000L + hdr.data = (unsigned char *)NETSCAPE_CERT_HDR; + hdr.length = strlen(NETSCAPE_CERT_HDR); + nx.header = &hdr; + nx.cert = getCert(); - d->kossl->ASN1_i2d_fp(ktf.fstream(),(unsigned char *)&ah); + d->kossl->ASN1_i2d_fp(ktf.fstream(),(unsigned char *)&nx); +#else + os.data = (unsigned char *)NETSCAPE_CERT_HDR; + os.length = strlen(NETSCAPE_CERT_HDR); + ah.header = &os; + ah.data = (char *)getCert(); + ah.meth = d->kossl->X509_asn1_meth(); + + d->kossl->ASN1_i2d_fp(ktf.fstream(),(unsigned char *)&ah); +#endif ktf.close(); -- cgit v1.2.1