You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by da...@apache.org on 2015/05/13 11:43:28 UTC

svn commit: r1679166 - /subversion/trunk/subversion/svnsync/svnsync.c

Author: danielsh
Date: Wed May 13 09:43:28 2015
New Revision: 1679166

URL: http://svn.apache.org/r1679166
Log:
svnsync: Split --trust-server-cert-failures into separate options for the source
and destination repositories.

Suggested by: philip

* subversion/svnsync/svnsync.c
  (svnsync_opt_trust_server_cert_failures,
   svnsync_options."trust-server-cert-failures): Removed option.
  (svnsync_opt_trust_server_cert_failures_src,
   svnsync_opt_trust_server_cert_failures_dst,
   svnsync_options."source-trust-server-cert-failures",
   svnsync_options."sync-trust-server-cert-failures"): New options.
     Reflow the help text (due to the longer option name).
  (SVNSYNC_OPTS_DEFAULT, svnsync_options."trust-server-cert-failures"):
    Track option split.
  (opt_baton_t.src_trust, opt_baton_t.dst_trust): New struct members.
  (sub_main): Parse new options, use them when creating the two auth batons.

Modified:
    subversion/trunk/subversion/svnsync/svnsync.c

Modified: subversion/trunk/subversion/svnsync/svnsync.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/svnsync/svnsync.c?rev=1679166&r1=1679165&r2=1679166&view=diff
==============================================================================
--- subversion/trunk/subversion/svnsync/svnsync.c (original)
+++ subversion/trunk/subversion/svnsync/svnsync.c Wed May 13 09:43:28 2015
@@ -68,7 +68,8 @@ enum svnsync__opt {
   svnsync_opt_disable_locking,
   svnsync_opt_version,
   svnsync_opt_trust_server_cert,
-  svnsync_opt_trust_server_cert_failures,
+  svnsync_opt_trust_server_cert_failures_src,
+  svnsync_opt_trust_server_cert_failures_dst,
   svnsync_opt_allow_non_empty,
   svnsync_opt_steal_lock
 };
@@ -79,7 +80,8 @@ enum svnsync__opt {
                              svnsync_opt_auth_username, \
                              svnsync_opt_auth_password, \
                              svnsync_opt_trust_server_cert, \
-                             svnsync_opt_trust_server_cert_failures, \
+                             svnsync_opt_trust_server_cert_failures_src, \
+                             svnsync_opt_trust_server_cert_failures_dst, \
                              svnsync_opt_source_username, \
                              svnsync_opt_source_password, \
                              svnsync_opt_sync_username, \
@@ -198,21 +200,35 @@ static const apr_getopt_option_t svnsync
     {"trust-server-cert", svnsync_opt_trust_server_cert, 0,
                       N_("deprecated; same as\n"
                          "                             "
-                         "--trust-server-cert-failures=unknown-ca")},
-    {"trust-server-cert-failures", svnsync_opt_trust_server_cert_failures, 1,
-                      N_("with --non-interactive, accept SSL server\n"
+                         "--source-trust-server-cert-failures=unknown-ca\n"
                          "                             "
-                         "certificates with failures; ARG is comma-separated\n"
+                         "--sync-trust-server-cert-failures=unknown-ca")},
+    {"source-trust-server-cert-failures", svnsync_opt_trust_server_cert_failures_src, 1,
+                      N_("with --non-interactive, accept SSL\n"
                          "                             "
-                         "list of 'unknown-ca' (Unknown Authority),\n"
+                         "server certificates with failures.\n"
                          "                             "
-                         "'cn-mismatch' (Hostname mismatch), 'expired'\n"
+                         "ARG is a comma-separated list of:\n"
                          "                             "
-                         "(Expired certificate), 'not-yet-valid' (Not yet\n"
+                         "- 'unknown-ca' (Unknown Authority)\n"
                          "                             "
-                         "valid certificate) and 'other' (all other not\n"
+                         "- 'cn-mismatch' (Hostname mismatch)\n"
                          "                             "
-                         "separately classified certificate errors).")},
+                         "- 'expired' (Expired certificate)\n"
+                         "                             "
+                         "- 'not-yet-valid' (Not yet valid certificate)\n"
+                         "                             "
+                         "- 'other' (all other not separately classified\n"
+                         "                             "
+                         "  certificate errors).\n"
+                         "                             "
+                         "Applied to the source URL.")},
+    {"sync-trust-server-cert-failures", svnsync_opt_trust_server_cert_failures_dst, 1,
+                       N_("Like\n"
+                          "                             "
+                          "--source-trust-server-cert-failures,\n"
+                          "                             "
+                          "but applied to the destination URL.")},
     {"source-username", svnsync_opt_source_username, 1,
                        N_("connect to source repository with username ARG") },
     {"source-password", svnsync_opt_source_password, 1,
@@ -266,11 +282,13 @@ static const apr_getopt_option_t svnsync
 
 typedef struct opt_baton_t {
   svn_boolean_t non_interactive;
-  svn_boolean_t trust_server_cert_unknown_ca;
-  svn_boolean_t trust_server_cert_cn_mismatch;
-  svn_boolean_t trust_server_cert_expired;
-  svn_boolean_t trust_server_cert_not_yet_valid;
-  svn_boolean_t trust_server_cert_other_failure;
+  struct { 
+    svn_boolean_t trust_server_cert_unknown_ca;
+    svn_boolean_t trust_server_cert_cn_mismatch;
+    svn_boolean_t trust_server_cert_expired;
+    svn_boolean_t trust_server_cert_not_yet_valid;
+    svn_boolean_t trust_server_cert_other_failure;
+  } src_trust, dst_trust;
   svn_boolean_t no_auth_cache;
   svn_auth_baton_t *source_auth_baton;
   svn_auth_baton_t *sync_auth_baton;
@@ -1994,17 +2012,29 @@ sub_main(int *exit_code, int argc, const
             break;
 
           case svnsync_opt_trust_server_cert: /* backwards compat */
-            opt_baton.trust_server_cert_unknown_ca = TRUE;
+            opt_baton.src_trust.trust_server_cert_unknown_ca = TRUE;
+            opt_baton.dst_trust.trust_server_cert_unknown_ca = TRUE;
+            break;
+
+          case svnsync_opt_trust_server_cert_failures_src:
+            SVN_ERR(svn_utf_cstring_to_utf8(&opt_arg, opt_arg, pool));
+            SVN_ERR(svn_cmdline__parse_trust_options(
+                      &opt_baton.src_trust.trust_server_cert_unknown_ca,
+                      &opt_baton.src_trust.trust_server_cert_cn_mismatch,
+                      &opt_baton.src_trust.trust_server_cert_expired,
+                      &opt_baton.src_trust.trust_server_cert_not_yet_valid,
+                      &opt_baton.src_trust.trust_server_cert_other_failure,
+                      opt_arg, pool));
             break;
 
-          case svnsync_opt_trust_server_cert_failures:
+          case svnsync_opt_trust_server_cert_failures_dst:
             SVN_ERR(svn_utf_cstring_to_utf8(&opt_arg, opt_arg, pool));
             SVN_ERR(svn_cmdline__parse_trust_options(
-                      &opt_baton.trust_server_cert_unknown_ca,
-                      &opt_baton.trust_server_cert_cn_mismatch,
-                      &opt_baton.trust_server_cert_expired,
-                      &opt_baton.trust_server_cert_not_yet_valid,
-                      &opt_baton.trust_server_cert_other_failure,
+                      &opt_baton.dst_trust.trust_server_cert_unknown_ca,
+                      &opt_baton.dst_trust.trust_server_cert_cn_mismatch,
+                      &opt_baton.dst_trust.trust_server_cert_expired,
+                      &opt_baton.dst_trust.trust_server_cert_not_yet_valid,
+                      &opt_baton.dst_trust.trust_server_cert_other_failure,
                       opt_arg, pool));
             break;
 
@@ -2196,13 +2226,20 @@ sub_main(int *exit_code, int argc, const
   /* --trust-* can only be used with --non-interactive */
   if (!opt_baton.non_interactive)
     {
-      if (opt_baton.trust_server_cert_unknown_ca
-          || opt_baton.trust_server_cert_cn_mismatch
-          || opt_baton.trust_server_cert_expired
-          || opt_baton.trust_server_cert_not_yet_valid
-          || opt_baton.trust_server_cert_other_failure)
+      if (opt_baton.src_trust.trust_server_cert_unknown_ca
+          || opt_baton.src_trust.trust_server_cert_cn_mismatch
+          || opt_baton.src_trust.trust_server_cert_expired
+          || opt_baton.src_trust.trust_server_cert_not_yet_valid
+          || opt_baton.src_trust.trust_server_cert_other_failure
+          || opt_baton.dst_trust.trust_server_cert_unknown_ca
+          || opt_baton.dst_trust.trust_server_cert_cn_mismatch
+          || opt_baton.dst_trust.trust_server_cert_expired
+          || opt_baton.dst_trust.trust_server_cert_not_yet_valid
+          || opt_baton.dst_trust.trust_server_cert_other_failure)
         return svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
-                                _("--trust-server-cert-failures requires "
+                                _("--source-trust-server-cert-failures "
+                                  "and "
+                                  "--sync-trust-server-cert-failures require "
                                   "--non-interactive"));
     }
 
@@ -2322,11 +2359,11 @@ sub_main(int *exit_code, int argc, const
           opt_baton.source_password,
           opt_baton.config_dir,
           opt_baton.no_auth_cache,
-          opt_baton.trust_server_cert_unknown_ca,
-          opt_baton.trust_server_cert_cn_mismatch,
-          opt_baton.trust_server_cert_expired,
-          opt_baton.trust_server_cert_not_yet_valid,
-          opt_baton.trust_server_cert_other_failure,
+          opt_baton.src_trust.trust_server_cert_unknown_ca,
+          opt_baton.src_trust.trust_server_cert_cn_mismatch,
+          opt_baton.src_trust.trust_server_cert_expired,
+          opt_baton.src_trust.trust_server_cert_not_yet_valid,
+          opt_baton.src_trust.trust_server_cert_other_failure,
           config,
           check_cancel, NULL,
           pool);
@@ -2338,11 +2375,11 @@ sub_main(int *exit_code, int argc, const
             opt_baton.sync_password,
             opt_baton.config_dir,
             opt_baton.no_auth_cache,
-            opt_baton.trust_server_cert_unknown_ca,
-            opt_baton.trust_server_cert_cn_mismatch,
-            opt_baton.trust_server_cert_expired,
-            opt_baton.trust_server_cert_not_yet_valid,
-            opt_baton.trust_server_cert_other_failure,
+            opt_baton.dst_trust.trust_server_cert_unknown_ca,
+            opt_baton.dst_trust.trust_server_cert_cn_mismatch,
+            opt_baton.dst_trust.trust_server_cert_expired,
+            opt_baton.dst_trust.trust_server_cert_not_yet_valid,
+            opt_baton.dst_trust.trust_server_cert_other_failure,
             config,
             check_cancel, NULL,
             pool);