rpms/pyOpenSSL/devel pyOpenSSL-threadsafe.patch, 1.3, 1.4 pyOpenSSL.spec, 1.28, 1.29 pyOpenSSL-0.7-threadsafe.patch, 1.1, NONE
Dennis Gilmore
ausil at fedoraproject.org
Fri Sep 19 23:48:25 UTC 2008
Author: ausil
Update of /cvs/pkgs/rpms/pyOpenSSL/devel
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv8411
Modified Files:
pyOpenSSL-threadsafe.patch pyOpenSSL.spec
Removed Files:
pyOpenSSL-0.7-threadsafe.patch
Log Message:
update threadsafe patch
pyOpenSSL-threadsafe.patch:
Index: pyOpenSSL-threadsafe.patch
===================================================================
RCS file: /cvs/pkgs/rpms/pyOpenSSL/devel/pyOpenSSL-threadsafe.patch,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- pyOpenSSL-threadsafe.patch 17 Sep 2008 21:05:44 -0000 1.3
+++ pyOpenSSL-threadsafe.patch 19 Sep 2008 23:48:25 -0000 1.4
@@ -1,88 +1,197 @@
---- pyOpenSSL-0.6/src/crypto/crypto.c.threadsafe 2004-08-09 10:56:05.000000000 -0400
-+++ pyOpenSSL-0.6/src/crypto/crypto.c 2005-07-12 22:29:32.000000000 -0400
-@@ -668,6 +668,74 @@
- { NULL, NULL }
- };
-
-+
-+#ifdef WITH_THREAD
-+
-+#include <pthread.h>
-+
-+#define MUTEX_TYPE pthread_mutex_t
-+#define MUTEX_SETUP(x) pthread_mutex_init(&(x), NULL)
-+#define MUTEX_CLEANUP(x) pthread_mutex_destroy(&(x))
-+#define MUTEX_LOCK(x) pthread_mutex_lock(&(x))
-+#define MUTEX_UNLOCK(x) pthread_mutex_unlock(&(x))
-+#define THREAD_ID pthread_self()
-+
-+void handle_error(const char *file, int lineno, const char *msg)
-+{
-+ fprintf(stderr, "** %s:%i %s\n", file, lineno, msg);
-+ ERR_print_errors_fp(stderr);
-+}
-+
-+
-+/* This array will store all of the mutexes available to OpenSSL. */
-+static MUTEX_TYPE *mutex_buf = NULL;
-+
-+
-+static void locking_function(int mode, int n, const char * file, int line)
-+{
-+ if (mode & CRYPTO_LOCK)
-+ MUTEX_LOCK(mutex_buf[n]);
-+ else
-+ MUTEX_UNLOCK(mutex_buf[n]);
-+}
-+
-+static unsigned long id_function(void)
-+{
-+ return ((unsigned long)THREAD_ID);
-+}
-+
-+int init_openssl_threads(void)
-+{
-+ int i;
-+
-+ mutex_buf = (MUTEX_TYPE *)malloc(CRYPTO_num_locks() * sizeof(MUTEX_TYPE));
-+ if (!mutex_buf)
-+ return 0;
-+ for (i = 0; i < CRYPTO_num_locks(); i++)
-+ MUTEX_SETUP(mutex_buf[i]);
-+ CRYPTO_set_id_callback(id_function);
-+ CRYPTO_set_locking_callback(locking_function);
-+ return 1;
-+}
-+
-+int deinit_openssl_threads(void)
-+{
-+ int i;
-+
-+ if (!mutex_buf)
-+ return 0;
-+ CRYPTO_set_id_callback(NULL);
-+ CRYPTO_set_locking_callback(NULL);
-+ for (i = 0; i < CRYPTO_num_locks(); i++)
-+ MUTEX_CLEANUP(mutex_buf[i]);
-+ free(mutex_buf);
-+ mutex_buf = NULL;
-+ return 1;
-+}
-+
-+#endif
-+
-+
- /*
- * Initialize crypto sub module
- *
-@@ -713,6 +779,10 @@
- PyModule_AddIntConstant(module, "TYPE_DSA", crypto_TYPE_DSA);
-
- dict = PyModule_GetDict(module);
-+#ifdef WITH_THREAD
-+ if (!init_openssl_threads())
-+ goto error;
-+#endif
- if (!init_crypto_x509(dict))
- goto error;
- if (!init_crypto_x509name(dict))
+diff -Nur pyOpenSSL-0.7-bad/src/crypto/crypto.c pyOpenSSL-0.7/src/crypto/crypto.c
+--- pyOpenSSL-0.7-bad/src/crypto/crypto.c 2008-03-21 17:34:42.000000000 -0500
++++ pyOpenSSL-0.7/src/crypto/crypto.c 2008-09-19 17:22:12.000000000 -0500
+ -694,6 +694,74 @@
+ { NULL, NULL }
+ };
+
++
++#ifdef WITH_THREAD
++
++#include <pthread.h>
++
++#define MUTEX_TYPE pthread_mutex_t
++#define MUTEX_SETUP(x) pthread_mutex_init(&(x), NULL)
++#define MUTEX_CLEANUP(x) pthread_mutex_destroy(&(x))
++#define MUTEX_LOCK(x) pthread_mutex_lock(&(x))
++#define MUTEX_UNLOCK(x) pthread_mutex_unlock(&(x))
++#define THREAD_ID pthread_self()
++
++void handle_error(const char *file, int lineno, const char *msg)
++{
++ fprintf(stderr, "** %s:%i %s\n", file, lineno, msg);
++ ERR_print_errors_fp(stderr);
++}
++
++
++/* This array will store all of the mutexes available to OpenSSL. */
++static MUTEX_TYPE *mutex_buf = NULL;
++
++
++static void locking_function(int mode, int n, const char * file, int line)
++{
++ if (mode & CRYPTO_LOCK)
++ MUTEX_LOCK(mutex_buf[n]);
++ else
++ MUTEX_UNLOCK(mutex_buf[n]);
++}
++
++static unsigned long id_function(void)
++{
++ return ((unsigned long)THREAD_ID);
++}
++
++int init_openssl_threads(void)
++{
++ int i;
++
++ mutex_buf = (MUTEX_TYPE *)malloc(CRYPTO_num_locks() * sizeof(MUTEX_TYPE));
++ if (!mutex_buf)
++ return 0;
++ for (i = 0; i < CRYPTO_num_locks(); i++)
++ MUTEX_SETUP(mutex_buf[i]);
++ CRYPTO_set_id_callback(id_function);
++ CRYPTO_set_locking_callback(locking_function);
++ return 1;
++}
++
++int deinit_openssl_threads(void)
++{
++ int i;
++
++ if (!mutex_buf)
++ return 0;
++ CRYPTO_set_id_callback(NULL);
++ CRYPTO_set_locking_callback(NULL);
++ for (i = 0; i < CRYPTO_num_locks(); i++)
++ MUTEX_CLEANUP(mutex_buf[i]);
++ free(mutex_buf);
++ mutex_buf = NULL;
++ return 1;
++}
++
++#endif
++
++
+ /*
+ * Initialize crypto sub module
+ *
+ -739,6 +807,10 @@
+ PyModule_AddIntConstant(module, "TYPE_DSA", crypto_TYPE_DSA);
+
+ dict = PyModule_GetDict(module);
++#ifdef WITH_THREAD
++ if (!init_openssl_threads())
++ goto error;
++#endif
+ if (!init_crypto_x509(dict))
+ goto error;
+ if (!init_crypto_x509name(dict))
+diff -Nur pyOpenSSL-0.7-bad/src/ssl/context.c pyOpenSSL-0.7/src/ssl/context.c
+--- pyOpenSSL-0.7-bad/src/ssl/context.c 2008-03-21 17:34:42.000000000 -0500
++++ pyOpenSSL-0.7/src/ssl/context.c 2008-09-19 17:22:12.000000000 -0500
+ -64,39 +64,33 @@
+ static int
+ global_passphrase_callback(char *buf, int maxlen, int verify, void *arg)
+ {
+- int len;
++ int len = 0;
+ char *str;
+ PyObject *argv, *ret = NULL;
+ ssl_ContextObj *ctx = (ssl_ContextObj *)arg;
+
++ if (!ctx->tstate)
++ fprintf (stderr, "ERROR: ctx->tstate == NULL!\n");
++ MY_END_ALLOW_THREADS(ctx->tstate);
++
+ /* The Python callback is called with a (maxlen,verify,userdata) tuple */
+ argv = Py_BuildValue("(iiO)", maxlen, verify, ctx->passphrase_userdata);
+- if (ctx->tstate != NULL)
+- {
+- /* We need to get back our thread state before calling the callback */
+- MY_END_ALLOW_THREADS(ctx->tstate);
+- ret = PyEval_CallObject(ctx->passphrase_callback, argv);
+- MY_BEGIN_ALLOW_THREADS(ctx->tstate);
+- }
+- else
+- {
+- ret = PyEval_CallObject(ctx->passphrase_callback, argv);
+- }
++ ret = PyEval_CallObject(ctx->passphrase_callback, argv);
+ Py_DECREF(argv);
+
+ if (ret == NULL)
+- return 0;
++ goto out;
+
+ if (!PyObject_IsTrue(ret))
+ {
+ Py_DECREF(ret);
+- return 0;
++ goto out;
+ }
+
+ if (!PyString_Check(ret))
+ {
+ Py_DECREF(ret);
+- return 0;
++ goto out;
+ }
+
+ len = PyString_Size(ret);
+ -107,6 +101,8 @@
+ strncpy(buf, str, len);
+ Py_XDECREF(ret);
+
++out:
++ MY_BEGIN_ALLOW_THREADS(ctx->tstate);
+ return len;
+ }
+
+ -173,28 +169,19 @@
+ ssl_ConnectionObj *conn = (ssl_ConnectionObj *)SSL_get_app_data(ssl);
+ PyObject *argv, *ret;
+
++ if (!conn->tstate)
++ fprintf (stderr, "ERROR: ctx->tstate == NULL!\n");
++ MY_END_ALLOW_THREADS(conn->tstate);
++
+ argv = Py_BuildValue("(Oii)", (PyObject *)conn, where, _ret);
+- if (conn->tstate != NULL)
+- {
+- /* We need to get back our thread state before calling the callback */
+- MY_END_ALLOW_THREADS(conn->tstate);
+- ret = PyEval_CallObject(conn->context->info_callback, argv);
+- if (ret == NULL)
+- PyErr_Clear();
+- else
+- Py_DECREF(ret);
+- MY_BEGIN_ALLOW_THREADS(conn->tstate);
+- }
++ ret = PyEval_CallObject(conn->context->info_callback, argv);
++ if (ret == NULL)
++ PyErr_Clear();
+ else
+- {
+- ret = PyEval_CallObject(conn->context->info_callback, argv);
+- if (ret == NULL)
+- PyErr_Clear();
+- else
+- Py_DECREF(ret);
+- }
++ Py_DECREF(ret);
+ Py_DECREF(argv);
+
++ MY_BEGIN_ALLOW_THREADS(conn->tstate);
+ return;
+ }
+
+ -447,6 +434,8 @@
+ if (!PyArg_ParseTuple(args, "s|i:use_privatekey_file", &keyfile, &filetype))
+ return NULL;
+
++ if (self->tstate)
++ fprintf (stderr, "ERROR: ctx->tstate != NULL!\n");
+ MY_BEGIN_ALLOW_THREADS(self->tstate);
+ ret = SSL_CTX_use_PrivateKey_file(self->ctx, keyfile, filetype);
+ MY_END_ALLOW_THREADS(self->tstate);
Index: pyOpenSSL.spec
===================================================================
RCS file: /cvs/pkgs/rpms/pyOpenSSL/devel/pyOpenSSL.spec,v
retrieving revision 1.28
retrieving revision 1.29
diff -u -r1.28 -r1.29
--- pyOpenSSL.spec 17 Sep 2008 21:05:44 -0000 1.28
+++ pyOpenSSL.spec 19 Sep 2008 23:48:25 -0000 1.29
@@ -3,13 +3,12 @@
Summary: Python wrapper module around the OpenSSL library
Name: pyOpenSSL
Version: 0.7
-Release: 1%{?dist}
+Release: 2%{?dist}
Source0: http://pyopenssl.sf.net/%{name}-%{version}.tar.gz
Patch0: pyOpenSSL-0.7-openssl.patch
Patch2: pyOpenSSL-elinks.patch
Patch3: pyOpenSSL-nopdfout.patch
Patch4: pyOpenSSL-threadsafe.patch
-Patch5: pyOpenSSL-0.7-threadsafe.patch
License: LGPLv2+
Group: Development/Libraries
BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
@@ -31,7 +30,6 @@
%patch2 -p1 -b .elinks
%patch3 -p1 -b .nopdfout
%patch4 -p1 -b .threadsafe
-%patch5 -p1 -b .threadsafe
# Fix permissions for debuginfo package
%{__chmod} -x src/ssl/connection.c
@@ -55,6 +53,10 @@
%{python_sitearch}/%{name}*.egg-info
%changelog
+* Fri Sep 19 2008 Dennis Gilmore <dennis at ausil.us> - 0.7-2
+- update threadsafe patch
+- bug#462807
+
* Mon Sep 15 2008 Paul F. Johnson <paul at all-the-johnsons.co.uk> 0.7-1
- bump to new release
- the inevitable patch fixes
--- pyOpenSSL-0.7-threadsafe.patch DELETED ---
More information about the fedora-extras-commits
mailing list