Author: cmpilato Date: Fri Apr 5 18:37:24 2013 New Revision: 1465089 URL: http://svn.apache.org/r1465089 Log: Fix svn_auth_cleanup_walk()'s SWIG-Python manifestation.
* subversion/bindings/swig/core.i Add typemap for svn_auth_cleanup_func_t/baton pair. * subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h, * subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c (svn_swig_py_auth_cleanup_func): New function. Modified: subversion/trunk/subversion/bindings/swig/core.i subversion/trunk/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c subversion/trunk/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h Modified: subversion/trunk/subversion/bindings/swig/core.i URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/swig/core.i?rev=1465089&r1=1465088&r2=1465089&view=diff ============================================================================== --- subversion/trunk/subversion/bindings/swig/core.i (original) +++ subversion/trunk/subversion/bindings/swig/core.i Fri Apr 5 18:37:24 2013 @@ -705,6 +705,15 @@ svn_swig_pl_set_current_pool (apr_pool_t %authprompt_callback_typemap(ssl_client_cert_pw) %authprompt_callback_typemap(gnome_keyring_unlock) +#ifdef SWIGPYTHON +/* pl and rb aren't yet implemented */ +%callback_typemap_maybenull(svn_auth_cleanup_func_t cleanup_func, + void *cleanup_baton, + svn_swig_py_auth_cleanup_func, + svn_swig_pl_auth_cleanup_func, + svn_swig_rb_auth_cleanup_func) +#endif + /* ----------------------------------------------------------------------- * For all the various functions that set a callback baton create a reference * for the baton (which in this case is an SV pointing to the callback) Modified: subversion/trunk/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c?rev=1465089&r1=1465088&r2=1465089&view=diff ============================================================================== --- subversion/trunk/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c (original) +++ subversion/trunk/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c Fri Apr 5 18:37:24 2013 @@ -3284,6 +3284,57 @@ svn_swig_py_auth_ssl_client_cert_pw_prom return err; } +svn_error_t * +svn_swig_py_auth_cleanup_func(svn_boolean_t *delete_cred, + void *cleanup_baton, + const char *cred_kind, + const char *realmstring, + const char *provider, + apr_pool_t *scratch_pool) +{ + PyObject *function = cleanup_baton; + PyObject *result; + PyObject *py_scratch_pool; + svn_error_t *err = SVN_NO_ERROR; + + *delete_cred = FALSE; + + if (function == NULL || function == Py_None) + return SVN_NO_ERROR; + + svn_swig_py_acquire_py_lock(); + + py_scratch_pool = make_ob_pool(scratch_pool); + if (py_scratch_pool == NULL) + { + err = callback_exception_error(); + goto finished; + } + + if ((result = PyObject_CallFunction(function, + (char *)"sssO", + cred_kind, realmstring, + provider, py_scratch_pool)) == NULL) + { + err = callback_exception_error(); + } + else + { + if (PyInt_Check(result)) + *delete_cred = PyInt_AsLong(result) ? TRUE : FALSE; + else if (PyLong_Check(result)) + *delete_cred = PyLong_AsLong(result) ? TRUE : FALSE; + else + err = callback_bad_return_error("Not an integer"); + Py_DECREF(result); + } + Py_DECREF(py_scratch_pool); + +finished: + svn_swig_py_release_py_lock(); + return err; +} + /* svn_ra_callbacks_t */ static svn_error_t * ra_callbacks_open_tmp_file(apr_file_t **fp, Modified: subversion/trunk/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h?rev=1465089&r1=1465088&r2=1465089&view=diff ============================================================================== --- subversion/trunk/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h (original) +++ subversion/trunk/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h Fri Apr 5 18:37:24 2013 @@ -501,6 +501,15 @@ svn_error_t *svn_swig_py_auth_ssl_client svn_boolean_t may_save, apr_pool_t *pool); +/* auth cleanup callback */ +SVN_SWIG_SWIGUTIL_EXPORT +svn_error_t *svn_swig_py_auth_cleanup_func(svn_boolean_t *delete_cred, + void *cleanup_baton, + const char *cred_kind, + const char *realmstring, + const char *provider, + apr_pool_t *scratch_pool); + SVN_SWIG_SWIGUTIL_EXPORT void svn_swig_py_setup_ra_callbacks(svn_ra_callbacks2_t **callbacks,