What might this be useful for? Non-GUI apps? I assume this will not break the current functionality, which finally works as of 1.8.11.
Mark > On Feb 7, 2015, at 8:32 PM, rhuij...@apache.org wrote: > > Author: rhuijben > Date: Sun Feb 8 01:32:07 2015 > New Revision: 1658123 > > URL: http://svn.apache.org/r1658123 > Log: > Expose the Gnome keyring unlock prompt to the JavaHL C++ code. > (Exposing it to JavaHL itself is a different step where brane might > have better ideas) > > * subversion/bindings/javahl/native/OperationContext.cpp > (OperationContext::getAuthBaton): > Hook gnome prompt if we have a prompter implementation. > > * subversion/bindings/javahl/native/Prompter.cpp > (Prompter::get_gnome_keyring_unlock, > Prompter::gnome_keyring_unlock_prompt): New function. > > * subversion/bindings/javahl/native/Prompter.h > (Prompter::get_gnome_keyring_unlock, > Prompter::gnome_keyring_unlock_prompt): New function. > > * subversion/libsvn_auth_gnome_keyring/gnome_keyring.c > (ensure_gnome_keyring_is_unlocked): Allow prompt func to not provide a > password, similar to our other credential callbacks. This makes it easier > for bindings to conditionally handle the prompt. > > Modified: > subversion/trunk/subversion/bindings/javahl/native/OperationContext.cpp > subversion/trunk/subversion/bindings/javahl/native/Prompter.cpp > subversion/trunk/subversion/bindings/javahl/native/Prompter.h > subversion/trunk/subversion/libsvn_auth_gnome_keyring/gnome_keyring.c > > Modified: > subversion/trunk/subversion/bindings/javahl/native/OperationContext.cpp > URL: > http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/OperationContext.cpp?rev=1658123&r1=1658122&r2=1658123&view=diff > ============================================================================== > --- subversion/trunk/subversion/bindings/javahl/native/OperationContext.cpp > (original) > +++ subversion/trunk/subversion/bindings/javahl/native/OperationContext.cpp > Sun Feb 8 01:32:07 2015 > @@ -218,6 +218,27 @@ OperationContext::getAuthBaton(SVN::Pool > /* Build an authentication baton to give to libsvn_client. */ > svn_auth_open(&ab, providers, pool); > > + if (m_prompter.get()) > + { > + svn_auth_gnome_keyring_unlock_prompt_func_t unlock_cb; > + void *unlock_baton; > + > + m_prompter->get_gnome_keyring_unlock(&unlock_cb, &unlock_baton, > + in_pool); > + > + if (unlock_cb) > + { > + svn_auth_set_parameter( > + ab, > + SVN_AUTH_PARAM_GNOME_KEYRING_UNLOCK_PROMPT_FUNC, > + unlock_cb); > + svn_auth_set_parameter( > + ab, > + SVN_AUTH_PARAM_GNOME_KEYRING_UNLOCK_PROMPT_FUNC, > + unlock_baton); > + } > + } > + > /* Place any default --username or --password credentials into the > * auth_baton's run-time parameter hash. ### Same with --no-auth-cache? */ > if (!m_userName.empty()) > > Modified: subversion/trunk/subversion/bindings/javahl/native/Prompter.cpp > URL: > http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/Prompter.cpp?rev=1658123&r1=1658122&r2=1658123&view=diff > ============================================================================== > --- subversion/trunk/subversion/bindings/javahl/native/Prompter.cpp (original) > +++ subversion/trunk/subversion/bindings/javahl/native/Prompter.cpp Sun Feb > 8 01:32:07 2015 > @@ -138,6 +138,16 @@ Prompter::get_provider_client_ssl_passwo > return provider; > } > > +void > +Prompter::get_gnome_keyring_unlock( > + svn_auth_gnome_keyring_unlock_prompt_func_t *cb, > + void **baton, > + SVN::Pool &in_pool) > +{ > + *cb = gnome_keyring_unlock_prompt; > + *baton = this; > +} > + > svn_error_t *Prompter::simple_prompt( > svn_auth_cred_simple_t **cred_p, > void *baton, > @@ -221,6 +231,18 @@ svn_error_t *Prompter::ssl_client_cert_p > return err; > } > > +svn_error_t *Prompter::gnome_keyring_unlock_prompt( > + char **keyring_password, > + const char *keyring_name, > + void *baton, > + apr_pool_t *pool) > +{ > + /* ### TODO: Forward to Java */ > + > + *keyring_password = NULL; /* Don't attempt an unlock */ > + return SVN_NO_ERROR; > +} > + > svn_error_t *Prompter::plaintext_prompt( > svn_boolean_t *may_save_plaintext, > const char *realmstring, > > Modified: subversion/trunk/subversion/bindings/javahl/native/Prompter.h > URL: > http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/Prompter.h?rev=1658123&r1=1658122&r2=1658123&view=diff > ============================================================================== > --- subversion/trunk/subversion/bindings/javahl/native/Prompter.h (original) > +++ subversion/trunk/subversion/bindings/javahl/native/Prompter.h Sun Feb 8 > 01:32:07 2015 > @@ -60,6 +60,11 @@ public: > svn_auth_provider_object_t *get_provider_client_ssl(SVN::Pool &in_pool); > svn_auth_provider_object_t *get_provider_client_ssl_password(SVN::Pool > &in_pool); > > + void get_gnome_keyring_unlock( > + svn_auth_gnome_keyring_unlock_prompt_func_t *cb, > + void **baton, > + SVN::Pool &in_pool); > + > protected: > explicit Prompter(::Java::Env env, jobject jprompter); > > @@ -144,6 +149,12 @@ protected: > svn_boolean_t may_save, > apr_pool_t *pool); > > + static svn_error_t *gnome_keyring_unlock_prompt( > + char **keyring_password, > + const char *keyring_name, > + void *baton, > + apr_pool_t *pool); > + > protected: > virtual svn_error_t *dispatch_plaintext_prompt( > ::Java::Env env, > > Modified: > subversion/trunk/subversion/libsvn_auth_gnome_keyring/gnome_keyring.c > URL: > http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_auth_gnome_keyring/gnome_keyring.c?rev=1658123&r1=1658122&r2=1658123&view=diff > ============================================================================== > --- subversion/trunk/subversion/libsvn_auth_gnome_keyring/gnome_keyring.c > (original) > +++ subversion/trunk/subversion/libsvn_auth_gnome_keyring/gnome_keyring.c Sun > Feb 8 01:32:07 2015 > @@ -129,19 +129,22 @@ ensure_gnome_keyring_is_unlocked(svn_boo > svn_hash_gets(parameters, > SVN_AUTH_PARAM_GNOME_KEYRING_UNLOCK_PROMPT_BATON); > > - char *keyring_password; > - > if (unlock_prompt_func && check_keyring_is_locked(default_keyring)) > { > + char *keyring_password; > + > SVN_ERR((*unlock_prompt_func)(&keyring_password, > default_keyring, > unlock_prompt_baton, > scratch_pool)); > > /* If keyring is locked give up and try the next provider. */ > - if (! unlock_gnome_keyring(default_keyring, keyring_password, > - scratch_pool)) > - return SVN_NO_ERROR; > + if (keyring_password) > + { > + if (! unlock_gnome_keyring(default_keyring, keyring_password, > + scratch_pool)) > + return SVN_NO_ERROR; > + } > } > } > else > >