You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by hw...@apache.org on 2010/08/12 19:51:06 UTC

svn commit: r984876 - in /subversion/trunk/subversion/bindings/javahl/native: Prompter.cpp Prompter.h SVNClient.cpp

Author: hwright
Date: Thu Aug 12 17:51:06 2010
New Revision: 984876

URL: http://svn.apache.org/viewvc?rev=984876&view=rev
Log:
JavaHL: Prompt the user before attempting to store a password in plaintext,
if the JavaHL consumer has provided a prompter to do so.

* subversion/bindings/javahl/native/SVNClient.cpp
  (getContext): Get the appropriate Prompter functions to use in the
    plaintext auth providers.

* subversion/bindings/javahl/native/Prompter.h
* subversion/bindings/javahl/native/Prompter.cpp
  (plaintext_prompt, plaintext_passphrase_prompt): New.

Modified:
    subversion/trunk/subversion/bindings/javahl/native/Prompter.cpp
    subversion/trunk/subversion/bindings/javahl/native/Prompter.h
    subversion/trunk/subversion/bindings/javahl/native/SVNClient.cpp

Modified: subversion/trunk/subversion/bindings/javahl/native/Prompter.cpp
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/Prompter.cpp?rev=984876&r1=984875&r2=984876&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/Prompter.cpp (original)
+++ subversion/trunk/subversion/bindings/javahl/native/Prompter.cpp Thu Aug 12 17:51:06 2010
@@ -588,3 +588,37 @@ Prompter::ssl_client_cert_pw_prompt(svn_
   *cred_p = ret;
   return SVN_NO_ERROR;
 }
+
+svn_error_t *
+Prompter::plaintext_prompt(svn_boolean_t *may_save_plaintext,
+                           const char *realmstring,
+                           void *baton,
+                           apr_pool_t *pool)
+{
+  Prompter *that = (Prompter *) baton;
+
+  bool result = that->askYesNo(realmstring,
+                               _("Store password unencrypted?"),
+                               false);
+
+  *may_save_plaintext = (result ? TRUE : FALSE);
+
+  return SVN_NO_ERROR;
+}
+
+svn_error_t *
+Prompter::plaintext_passphrase_prompt(svn_boolean_t *may_save_plaintext,
+                                      const char *realmstring,
+                                      void *baton,
+                                      apr_pool_t *pool)
+{
+  Prompter *that = (Prompter *) baton;
+
+  bool result = that->askYesNo(realmstring,
+                               _("Store passphrase unencrypted?"),
+                               false);
+
+  *may_save_plaintext = (result ? TRUE : FALSE);
+
+  return SVN_NO_ERROR;
+}

Modified: subversion/trunk/subversion/bindings/javahl/native/Prompter.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/Prompter.h?rev=984876&r1=984875&r2=984876&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/Prompter.h (original)
+++ subversion/trunk/subversion/bindings/javahl/native/Prompter.h Thu Aug 12 17:51:06 2010
@@ -103,6 +103,16 @@ class Prompter
   svn_auth_provider_object_t *getProviderServerSSLTrust();
   svn_auth_provider_object_t *getProviderClientSSL();
   svn_auth_provider_object_t *getProviderClientSSLPassword();
+
+  static svn_error_t *plaintext_prompt(svn_boolean_t *may_save_plaintext,
+                                       const char *realmstring,
+                                       void *baton,
+                                       apr_pool_t *pool);
+  static svn_error_t *plaintext_passphrase_prompt(
+                                      svn_boolean_t *may_save_plaintext,
+                                      const char *realmstring,
+                                      void *baton,
+                                      apr_pool_t *pool);
 };
 
 #endif // PROMPTER_H

Modified: subversion/trunk/subversion/bindings/javahl/native/SVNClient.cpp
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/SVNClient.cpp?rev=984876&r1=984875&r2=984876&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/SVNClient.cpp (original)
+++ subversion/trunk/subversion/bindings/javahl/native/SVNClient.cpp Thu Aug 12 17:51:06 2010
@@ -1202,12 +1202,29 @@ svn_client_ctx_t *SVNClient::getContext(
                                                                 pool),
                 NULL);
 
+    /* Use the prompter (if available) to prompt for password and cert
+     * caching. */
+    svn_auth_plaintext_prompt_func_t plaintext_prompt_func = NULL;
+    void *plaintext_prompt_baton = NULL;
+    svn_auth_plaintext_passphrase_prompt_func_t plaintext_passphrase_prompt_func;
+    void *plaintext_passphrase_prompt_baton = NULL;
+
+    if (m_prompter != NULL)
+    {
+        plaintext_prompt_func = Prompter::plaintext_prompt;
+        plaintext_prompt_baton = m_prompter;
+        plaintext_passphrase_prompt_func = Prompter::plaintext_passphrase_prompt;
+        plaintext_passphrase_prompt_baton = m_prompter;
+    }
+
     /* The main disk-caching auth providers, for both
      * 'username/password' creds and 'username' creds.  */
     svn_auth_provider_object_t *provider;
 
-    svn_auth_get_simple_provider(&provider, pool);
+    svn_auth_get_simple_provider2(&provider, plaintext_prompt_func,
+                                  plaintext_prompt_baton, pool);
     APR_ARRAY_PUSH(providers, svn_auth_provider_object_t *) = provider;
+
     svn_auth_get_username_provider(&provider, pool);
     APR_ARRAY_PUSH(providers, svn_auth_provider_object_t *) = provider;
 
@@ -1225,7 +1242,9 @@ svn_client_ctx_t *SVNClient::getContext(
     APR_ARRAY_PUSH(providers, svn_auth_provider_object_t *) = provider;
     svn_auth_get_ssl_client_cert_file_provider(&provider, pool);
     APR_ARRAY_PUSH(providers, svn_auth_provider_object_t *) = provider;
-    svn_auth_get_ssl_client_cert_pw_file_provider(&provider, pool);
+    svn_auth_get_ssl_client_cert_pw_file_provider2(&provider,
+                        plaintext_passphrase_prompt_func,
+                        plaintext_passphrase_prompt_baton, pool);
     APR_ARRAY_PUSH(providers, svn_auth_provider_object_t *) = provider;
 
     if (m_prompter != NULL)