Rev 1001: Complete wrappers for auth. in file:///data/jelmer/bzr-svn/pyrex/
Jelmer Vernooij
jelmer at samba.org
Mon Mar 17 22:28:18 GMT 2008
At file:///data/jelmer/bzr-svn/pyrex/
------------------------------------------------------------
revno: 1001
revision-id:jelmer at samba.org-20080317222817-ugp37qdqqff3bxx4
parent: jelmer at samba.org-20080317205903-a4xf0yc3x6ar87sy
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: pyrex
timestamp: Mon 2008-03-17 23:28:17 +0100
message:
Complete wrappers for auth.
modified:
apr.pxd apr.pxd-20080313192457-r08q1i1681oz4fqp-1
core.pyx core.pyx-20080313210413-17k59slolpfe5kdq-1
ra.pyx ra.pyx-20080313140933-qybkqaxe3m4mcll7-1
types.pxd types.pxi-20080313202425-vtt1ry64o98kgpg8-1
=== modified file 'apr.pxd'
--- a/apr.pxd 2008-03-16 02:16:20 +0000
+++ b/apr.pxd 2008-03-17 22:28:17 +0000
@@ -21,6 +21,7 @@
ctypedef int apr_status_t
cdef extern from "apr_general.h":
+ ctypedef unsigned long apr_uint32_t
apr_status_t apr_initialize()
cdef extern from "apr_file_io.h":
@@ -34,6 +35,9 @@
apr_status_t apr_pool_create(apr_pool_t **newpool, apr_pool_t *parent)
void *apr_palloc(apr_pool_t *, apr_size_t)
+cdef extern from "apr_strings.h":
+ char *apr_pstrdup(apr_pool_t *p, char *s)
+
cdef extern from "apr_tables.h":
ctypedef struct apr_array_header_t:
apr_pool_t *pool
=== modified file 'core.pyx'
--- a/core.pyx 2008-03-17 20:25:54 +0000
+++ b/core.pyx 2008-03-17 22:28:17 +0000
@@ -60,6 +60,8 @@
cdef check_error(svn_error_t *error):
if error:
+ if error.apr_err == 424242:
+ return
if error.message != NULL:
raise SubversionException(error.message, error.apr_err)
else:
=== modified file 'ra.pyx'
--- a/ra.pyx 2008-03-16 17:57:35 +0000
+++ b/ra.pyx 2008-03-17 22:28:17 +0000
@@ -16,15 +16,15 @@
from apr cimport apr_pool_t, apr_pool_destroy, apr_palloc
from apr cimport apr_hash_t, apr_hash_make, apr_hash_index_t, apr_hash_first, apr_hash_next, apr_hash_this, apr_hash_set
-from apr cimport apr_array_header_t, apr_array_make
-from apr cimport apr_file_t, apr_off_t, apr_size_t
-from apr cimport apr_initialize
+from apr cimport apr_array_header_t, apr_array_make, apr_array_push
+from apr cimport apr_file_t, apr_off_t, apr_size_t, apr_uint32_t
+from apr cimport apr_initialize, apr_pstrdup
from core cimport check_error, Pool, wrap_lock, string_list_to_apr_array, py_svn_log_wrapper, new_py_stream, prop_hash_to_dict
from core import SubversionException
from constants import PROP_REVISION_LOG, PROP_REVISION_AUTHOR, PROP_REVISION_DATE
from types cimport svn_error_t, svn_revnum_t, svn_string_t, svn_version_t
from types cimport svn_string_ncreate, svn_lock_t, svn_auth_baton_t, svn_auth_open, svn_auth_set_parameter, svn_auth_get_parameter, svn_node_kind_t, svn_commit_info_t, svn_filesize_t, svn_dirent_t, svn_log_message_receiver_t
-from types cimport svn_stream_t
+from types cimport svn_stream_t, svn_auth_get_simple_provider, svn_auth_provider_object_t, svn_auth_get_ssl_server_trust_file_provider, svn_auth_get_ssl_client_cert_file_provider, svn_auth_get_ssl_client_cert_pw_file_provider, svn_auth_get_username_provider, svn_auth_get_username_prompt_provider, svn_auth_cred_username_t, svn_auth_get_simple_prompt_provider, svn_auth_cred_simple_t, svn_auth_get_ssl_server_trust_prompt_provider, svn_auth_ssl_server_cert_info_t, svn_auth_cred_ssl_server_trust_t, svn_boolean_t, svn_auth_get_ssl_client_cert_pw_prompt_provider, svn_auth_cred_ssl_client_cert_pw_t
apr_initialize()
@@ -932,14 +932,26 @@
def __repr__(self):
return "%s(%r)" % (self.__class__.__name__, self.url)
+cdef class AuthProvider:
+ cdef apr_pool_t *pool
+ cdef svn_auth_provider_object_t *provider
+
+ def __dealloc__(self):
+ apr_pool_destroy(self.pool)
cdef class Auth:
cdef svn_auth_baton_t *auth_baton
cdef apr_pool_t *pool
def __init__(self, providers):
cdef apr_array_header_t *c_providers
+ cdef AuthProvider provider
+ cdef svn_auth_provider_object_t **el
self.pool = Pool(NULL)
c_providers = apr_array_make(self.pool, len(providers), 4)
+ for p in providers:
+ el = <svn_auth_provider_object_t **>apr_array_push(c_providers)
+ provider = p
+ el[0] = provider.provider
svn_auth_open(&self.auth_baton, c_providers, self.pool)
def set_parameter(self, name, value):
@@ -951,32 +963,92 @@
def __dealloc__(self):
apr_pool_destroy(self.pool)
+cdef svn_error_t *py_username_prompt(svn_auth_cred_username_t **cred, void *baton, char *realm, int may_save, apr_pool_t *pool):
+ fn = <object>baton
+ (username, cred[0].may_save) = fn(realm, may_save)
+ cred[0].username = apr_pstrdup(pool, username)
+ return NULL
+
def get_username_prompt_provider(prompt_func, retry_limit):
- pass # FIXME
+ cdef AuthProvider auth
+ auth = AuthProvider()
+ auth.pool = Pool(NULL)
+ svn_auth_get_username_prompt_provider (&auth.provider, py_username_prompt, <void *>prompt_func, retry_limit, auth.pool)
+ return auth
+
+cdef svn_error_t *py_simple_prompt(svn_auth_cred_simple_t **cred, void *baton, char *realm, char *username, int may_save, apr_pool_t *pool):
+ fn = <object>baton
+ (py_username, password, cred[0].may_save) = fn(realm, may_save)
+ cred[0].username = apr_pstrdup(pool, py_username)
+ cred[0].password = apr_pstrdup(pool, password)
+ return NULL
def get_simple_prompt_provider(prompt_func, retry_limit):
- pass # FIXME
+ cdef AuthProvider auth
+ auth = AuthProvider()
+ auth.pool = Pool(NULL)
+ svn_auth_get_simple_prompt_provider (&auth.provider, py_simple_prompt, <void *>prompt_func, retry_limit, auth.pool)
+ return auth
+
+cdef svn_error_t *py_ssl_server_trust_prompt(svn_auth_cred_ssl_server_trust_t **cred, void *baton, char *realm, apr_uint32_t failures, svn_auth_ssl_server_cert_info_t *cert_info, svn_boolean_t may_save, apr_pool_t *pool):
+ fn = <object>baton
+ (cred[0].may_save, cred[0].accepted_failures) = fn(realm, failures, (cert_info.hostname, cert_info.fingerprint, cert_info.valid_from, cert_info.valid_until, cert_info.issuer_dname, cert_info.ascii_cert), may_save)
+ return NULL
def get_ssl_server_trust_prompt_provider(prompt_func):
- pass # FIXME
+ cdef AuthProvider auth
+ auth = AuthProvider()
+ auth.pool = Pool(NULL)
+ svn_auth_get_ssl_server_trust_prompt_provider (&auth.provider, py_ssl_server_trust_prompt, <void *>prompt_func, auth.pool)
+ return auth
+
+cdef svn_error_t *py_ssl_client_cert_pw_prompt(svn_auth_cred_ssl_client_cert_pw_t **cred, void *baton, char *realm, svn_boolean_t may_save, apr_pool_t *pool):
+ fn = <object>baton
+ (password, cred[0].may_save) = fn(realm, may_save)
+ cred[0].password = apr_pstrdup(pool, password)
+ return NULL
def get_ssl_client_cert_pw_prompt_provider(prompt_func, retry_limit):
- pass # FIXME
+ cdef AuthProvider auth
+ auth = AuthProvider()
+ auth.pool = Pool(NULL)
+ svn_auth_get_ssl_client_cert_pw_prompt_provider (&auth.provider, py_ssl_client_cert_pw_prompt, <void *>prompt_func, retry_limit, auth.pool)
+ return auth
def get_username_provider():
- pass # FIXME
+ cdef AuthProvider auth
+ auth = AuthProvider()
+ auth.pool = Pool(NULL)
+ svn_auth_get_username_provider(&auth.provider, auth.pool)
+ return auth
def get_simple_provider():
- pass # FIXME
+ cdef AuthProvider auth
+ auth = AuthProvider()
+ auth.pool = Pool(NULL)
+ svn_auth_get_simple_provider(&auth.provider, auth.pool)
+ return auth
def get_ssl_server_trust_file_provider():
- pass # FIXME
+ cdef AuthProvider auth
+ auth = AuthProvider()
+ auth.pool = Pool(NULL)
+ svn_auth_get_ssl_server_trust_file_provider(&auth.provider, auth.pool)
+ return auth
def get_ssl_client_cert_file_provider():
- pass # FIXME
+ cdef AuthProvider auth
+ auth = AuthProvider()
+ auth.pool = Pool(NULL)
+ svn_auth_get_ssl_client_cert_file_provider(&auth.provider, auth.pool)
+ return auth
def get_ssl_client_cert_pw_file_provider():
- pass # FIXME
+ cdef AuthProvider auth
+ auth = AuthProvider()
+ auth.pool = Pool(NULL)
+ svn_auth_get_ssl_client_cert_pw_file_provider(&auth.provider, auth.pool)
+ return auth
def txdelta_send_stream(stream, TxDeltaWindowHandler handler):
cdef unsigned char digest[16]
=== modified file 'types.pxd'
--- a/types.pxd 2008-03-16 17:57:35 +0000
+++ b/types.pxd 2008-03-17 22:28:17 +0000
@@ -15,7 +15,7 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-from apr cimport apr_status_t, apr_pool_t, apr_time_t, apr_array_header_t, apr_hash_t, apr_size_t
+from apr cimport apr_status_t, apr_pool_t, apr_time_t, apr_array_header_t, apr_hash_t, apr_size_t, apr_uint32_t
cdef extern from "svn_version.h":
ctypedef struct svn_version_t:
@@ -153,6 +153,30 @@
void svn_auth_get_username_prompt_provider (svn_auth_provider_object_t **provider, svn_auth_username_prompt_func_t prompt_func, void *prompt_baton, int retry_limit, apr_pool_t *pool)
+ ctypedef struct svn_auth_ssl_server_cert_info_t:
+ char *hostname
+ char *fingerprint
+ char *valid_from
+ char *valid_until
+ char *issuer_dname
+ char *ascii_cert
+
+ ctypedef struct svn_auth_cred_ssl_server_trust_t:
+ svn_boolean_t may_save
+ apr_uint32_t accepted_failures
+
+ ctypedef svn_error_t *(*svn_auth_ssl_server_trust_prompt_func_t) (svn_auth_cred_ssl_server_trust_t **cred, void *baton, char *realm, apr_uint32_t failures, svn_auth_ssl_server_cert_info_t *cert_info, svn_boolean_t may_save, apr_pool_t *pool)
+
+ void svn_auth_get_ssl_server_trust_prompt_provider(svn_auth_provider_object_t **provider, svn_auth_ssl_server_trust_prompt_func_t prompt_func, void *prompt_baton, apr_pool_t *pool)
+
+ ctypedef struct svn_auth_cred_ssl_client_cert_pw_t:
+ char *password
+ svn_boolean_t may_save
+
+ ctypedef svn_error_t *(*svn_auth_ssl_client_cert_pw_prompt_func_t) (svn_auth_cred_ssl_client_cert_pw_t **cred, void *baton, char *realm, svn_boolean_t may_save, apr_pool_t *pool)
+
+ void svn_auth_get_ssl_client_cert_pw_prompt_provider(svn_auth_provider_object_t **provider, svn_auth_ssl_client_cert_pw_prompt_func_t prompt_func, void *prompt_baton, int retry_limit, apr_pool_t *pool)
+
void svn_auth_get_simple_provider(svn_auth_provider_object_t **provider, apr_pool_t *pool)
void svn_auth_get_username_provider(svn_auth_provider_object_t **provider, apr_pool_t *pool)
void svn_auth_get_ssl_server_trust_file_provider(svn_auth_provider_object_t **provider, apr_pool_t *pool)
More information about the bazaar-commits
mailing list