Foreword:
If the "general" config file support included in my last patch were
in, we could check to see if the user wanted --no-auth-cache all the
time. I guess I should have broken that portion of the patch out into
a separate patch. :-)
Body:
Fix issue #720:
* subversion/include/svn_client.h
(svn_client_auth_baton_t): Changed overwrite member from boolean to
enumerated type.
* subversion/libsvn_client/auth.c
(get_username): Respect "never" value for overwrite.
(get_password): Respect "never" value for overwrite.
* subversion/clients/cmdline/cl.h
(svn_cl__longopt_t): Added svn_cl__no_auth_cache_opt enum-value.
(svn_cl__opt_state_t): Added no_auth_cache boolean.
* subversion/clients/cmdline/prompt.c
(svn_cl__make_auth_baton): Respect "never" value for overwrite.
* subversion/clients/cmdline/main.c
(svn_cl__options): Added --no-auth-cache long option.
(svn_cl__cmd_table): Added --no-auth-cache option to every command that
previously took --username and --password.
(main): Handle --no-auth-cache option.
Index: subversion/include/svn_client.h
===================================================================
--- subversion/include/svn_client.h
+++ subversion/include/svn_client.h Thu Aug 15 12:47:04 2002
@@ -127,7 +127,11 @@
void *prompt_baton;
/* if it's ok to overwrite wc auth info */
- svn_boolean_t overwrite;
+ enum {
+ svn_client_auth_info_write_false,
+ svn_client_auth_info_write_true,
+ svn_client_auth_info_write_never
+ } overwrite;
} svn_client_auth_baton_t;
Index: subversion/libsvn_client/auth.c
===================================================================
--- subversion/libsvn_client/auth.c
+++ subversion/libsvn_client/auth.c Wed Aug 14 19:57:49 2002
@@ -61,7 +61,8 @@
/* Since we got new totally new info, it's okay to overwrite
any cached info in the working copy (later on). */
- ab->overwrite = TRUE;
+ if (ab->overwrite != svn_client_auth_info_write_never)
+ ab->overwrite = svn_client_auth_info_write_true;
/* Store a copy of the username in the auth_baton too. */
ab->username = apr_pstrdup (pool, *username);
@@ -78,7 +79,8 @@
/* Since we got new totally new info, it's okay to overwrite
any cached info in the working copy (later on). */
- ab->overwrite = TRUE;
+ if (ab->overwrite != svn_client_auth_info_write_never)
+ ab->overwrite = svn_client_auth_info_write_true;
}
/* Else, try to get it from file cached in working copy. */
@@ -151,7 +153,8 @@
/* Since we got new totally new info, it's okay to overwrite
any cached info in the working copy (later on). */
- ab->overwrite = TRUE;
+ if (ab->overwrite != svn_client_auth_info_write_never)
+ ab->overwrite = svn_client_auth_info_write_true;
/* Store a copy of the password in the auth_baton too. */
ab->password = apr_pstrdup (pool, *password);
@@ -168,7 +171,8 @@
/* Since we got new totally new info, it's okay to overwrite
any cached info in the working copy (later on). */
- ab->overwrite = TRUE;
+ if (ab->overwrite != svn_client_auth_info_write_never)
+ ab->overwrite = svn_client_auth_info_write_true;
}
/* Else, try to get it from file cached in working copy. */
@@ -192,7 +196,8 @@
/* Since we got new totally new info, it's okay to overwrite
any cached info in the working copy (later on). */
- ab->overwrite = TRUE;
+ if (ab->overwrite != svn_client_auth_info_write_never)
+ ab->overwrite = svn_client_auth_info_write_true;
}
/* Store a copy of the password in the auth_baton too. */
@@ -249,7 +254,7 @@
/* Sanity check: only store auth info if the `overwrite' flag is
set. This flag is set if the user was either prompted or
specified new info on the commandline. */
- if (cb->auth_baton->overwrite)
+ if (cb->auth_baton->overwrite == svn_client_auth_info_write_true)
return store_auth_info (SVN_CLIENT_AUTH_USERNAME, username,
cb->base_dir, cb->pool);
else
@@ -266,7 +271,7 @@
/* Sanity check: only store auth info if the `overwrite' flag is
set. This flag is set if the user was either prompted or
specified new info on the commandline. */
- if (cb->auth_baton->overwrite)
+ if (cb->auth_baton->overwrite == svn_client_auth_info_write_true)
return store_auth_info (SVN_CLIENT_AUTH_PASSWORD, password,
cb->base_dir, cb->pool);
else
Index: subversion/clients/cmdline/cl.h
===================================================================
--- subversion/clients/cmdline/cl.h
+++ subversion/clients/cmdline/cl.h Thu Aug 15 12:55:22 2002
@@ -52,7 +52,8 @@
svn_cl__targets_opt,
svn_cl__xml_opt,
svn_cl__strict_opt,
- svn_cl__no_ignore_opt
+ svn_cl__no_ignore_opt,
+ svn_cl__no_auth_cache_opt
} svn_cl__longopt_t;
@@ -91,7 +92,7 @@
apr_array_header_t *targets; /* target list from file */ /* UTF-8! */
svn_boolean_t xml; /* output in xml, e.g., "svn log --xml" */
svn_boolean_t no_ignore; /* disregard default ignores & svn:ignore's */
-
+ svn_boolean_t no_auth_cache; /* do not cache authentication information */
} svn_cl__opt_state_t;
Index: subversion/clients/cmdline/prompt.c
===================================================================
--- subversion/clients/cmdline/prompt.c
+++ subversion/clients/cmdline/prompt.c Wed Aug 14 19:55:06 2002
@@ -47,19 +47,23 @@
auth_obj->prompt_callback = svn_cl__prompt_user;
auth_obj->prompt_baton = NULL;
+ if (opt_state->no_auth_cache)
+ auth_obj->overwrite = svn_client_auth_info_write_never;
+
if (opt_state->auth_username)
{
auth_obj->username = opt_state->auth_username;
- auth_obj->overwrite = TRUE;
+ if (auth_obj->overwrite != svn_client_auth_info_write_never)
+ auth_obj->overwrite = svn_client_auth_info_write_true;
}
if (opt_state->auth_password)
{
auth_obj->password = opt_state->auth_password;
- auth_obj->overwrite = TRUE;
+ if (auth_obj->overwrite != svn_client_auth_info_write_never)
+ auth_obj->overwrite = svn_client_auth_info_write_true;
}
/* Add more authentication args here as necessary... */
-
return auth_obj;
}
Index: subversion/clients/cmdline/main.c
===================================================================
--- subversion/clients/cmdline/main.c
+++ subversion/clients/cmdline/main.c Thu Aug 15 13:01:11 2002
@@ -75,6 +75,8 @@
{"strict", svn_cl__strict_opt, 0, "use strict semantics"},
{"no-ignore", svn_cl__no_ignore_opt, 0,
"disregard default and svn:ignore property ignores"},
+ {"no-auth-cache", svn_cl__no_auth_cache_opt, 0,
+ "do not cache authentication tokens"},
{0, 0, 0}
};
@@ -136,7 +138,7 @@
" sub-directory being the basename of the URL.\n",
{'r', 'D', 'q', 'N',
svn_cl__auth_username_opt, svn_cl__auth_password_opt,
- svn_cl__xml_file_opt } },
+ svn_cl__no_auth_cache_opt, svn_cl__xml_file_opt } },
{ "cleanup", svn_cl__cleanup, {0},
"Recursively clean up the working copy, removing locks, resuming\n"
@@ -151,7 +153,8 @@
" the -r switch is only for use with --xml-file.\n",
{'m', 'F', 'q', 'N', svn_cl__targets_opt,
svn_cl__force_opt, svn_cl__auth_username_opt, svn_cl__auth_password_opt,
- svn_cl__xml_file_opt, 'r', svn_cl__msg_encoding_opt} },
+ svn_cl__no_auth_cache_opt, svn_cl__xml_file_opt, 'r',
+ svn_cl__msg_encoding_opt} },
{ "copy", svn_cl__copy, {"cp"},
"Duplicate something in working copy or repos, remembering history.\n"
@@ -163,7 +166,7 @@
" URL -> URL: complete server-side copy; used to branch & tag\n",
{'m', 'F', 'r', 'D', 'q',
svn_cl__auth_username_opt, svn_cl__auth_password_opt,
- svn_cl__msg_encoding_opt} },
+ svn_cl__no_auth_cache_opt, svn_cl__msg_encoding_opt} },
{ "delete", svn_cl__delete, {"del", "remove", "rm"},
"Remove files and directories from version control.\n"
@@ -178,7 +181,7 @@
" immediate commit.\n",
{svn_cl__force_opt, 'm', 'F', 'q', svn_cl__targets_opt,
svn_cl__auth_username_opt, svn_cl__auth_password_opt,
- svn_cl__msg_encoding_opt} },
+ svn_cl__no_auth_cache_opt, svn_cl__msg_encoding_opt} },
{ "diff", svn_cl__diff, {"di"},
"display the differences between two paths.\n"
@@ -195,7 +198,8 @@
" at revisions N and M respectively. If either N or M are\n"
" ommitted, value of HEAD is assumed.\n",
{'r', 'D', 'x', 'N',
- svn_cl__auth_username_opt, svn_cl__auth_password_opt} },
+ svn_cl__auth_username_opt, svn_cl__auth_password_opt,
+ svn_cl__no_auth_cache_opt} },
{ "export", svn_cl__export, {0},
"export stuff.\n"
@@ -209,7 +213,8 @@
" not under revision control will not be copied.\n\n"
" NOTE: If PATH is omitted, the last component of the URL is used\n"
" for the local directory name.\n",
- {'r', 'D', 'q', svn_cl__auth_username_opt, svn_cl__auth_password_opt} },
+ {'r', 'D', 'q', svn_cl__auth_username_opt, svn_cl__auth_password_opt,
+ svn_cl__no_auth_cache_opt} },
{ "help", svn_cl__help, {"?", "h"},
"Display this usage message.\n"
@@ -228,7 +233,8 @@
" directly. Otherwise, create NEW_ENTRY underneath REPOS_URL and\n"
" begin copy there. (-r is only needed if importing to --xml-file)\n",
{'F', 'm', 'q', 'N', svn_cl__auth_username_opt, svn_cl__auth_password_opt,
- svn_cl__xml_file_opt, 'r', svn_cl__msg_encoding_opt} },
+ svn_cl__no_auth_cache_opt, svn_cl__xml_file_opt, 'r',
+ svn_cl__msg_encoding_opt} },
{ "info", svn_cl__info, {0},
"Display info about a resource.\n"
@@ -240,7 +246,8 @@
"List directory entries of a URL.\n"
"usage: svn list URL1 [URL2 ...]\n\n"
" If URL is a file, just file entry will be displayed.\n",
- {'r', 'D', 'v', svn_cl__auth_username_opt, svn_cl__auth_password_opt} },
+ {'r', 'D', 'v', svn_cl__auth_username_opt, svn_cl__auth_password_opt,
+ svn_cl__no_auth_cache_opt} },
{ "log", svn_cl__log, {0},
"Show the log messages for a set of revision(s) and/or file(s).\n"
@@ -260,7 +267,8 @@
" svn log http://www.example.com/repo/project/foo.c\n"
" svn log http://www.example.com/repo/project foo.c bar.c\n",
{'r', 'D', 'v', svn_cl__targets_opt, svn_cl__auth_username_opt,
- svn_cl__auth_password_opt, svn_cl__strict_opt, svn_cl__xml_opt} },
+ svn_cl__auth_password_opt, svn_cl__no_auth_cache_opt,
+ svn_cl__strict_opt, svn_cl__xml_opt} },
{ "merge", svn_cl__merge, {0},
"apply the differences between two paths to a working copy path.\n"
@@ -272,7 +280,8 @@
" * WCPATH is the working-copy path that will receive the changes.\n"
" If omitted, a default value of '.' is assumed.\n\n",
{'r', 'D', 'N', 'q', svn_cl__force_opt,
- svn_cl__auth_username_opt, svn_cl__auth_password_opt} },
+ svn_cl__auth_username_opt, svn_cl__auth_password_opt,
+ svn_cl__no_auth_cache_opt} },
{ "mkdir", svn_cl__mkdir, {0},
"Create a new directory under revision control.\n"
@@ -280,7 +289,7 @@
" Either create NEW_DIR in working copy scheduled for addition,\n"
" or create REPOS_URL via immediate commit.\n",
{'m', 'F', 'q', svn_cl__auth_username_opt, svn_cl__auth_password_opt,
- svn_cl__msg_encoding_opt} },
+ svn_cl__no_auth_cache_opt, svn_cl__msg_encoding_opt} },
{ "move", svn_cl__move, {"mv", "rename", "ren"},
"Move/rename something in working copy or repository.\n"
@@ -290,7 +299,8 @@
" WC -> WC: move and schedule for addition (with history)\n"
" URL -> URL: complete server-side rename.\n",
{'m', 'F', 'r', 'D', 'q', svn_cl__auth_username_opt,
- svn_cl__auth_password_opt, svn_cl__force_opt, svn_cl__msg_encoding_opt} },
+ svn_cl__auth_password_opt, svn_cl__no_auth_cache_opt, svn_cl__force_opt,
+ svn_cl__msg_encoding_opt} },
{ "propdel", svn_cl__propdel, {"pdel"},
"Remove property PROPNAME on files and directories.\n"
@@ -381,14 +391,14 @@
" M 965 687 joe ./buildcheck.sh\n",
{ 'u', 'v', 'N', 'q',
svn_cl__auth_username_opt, svn_cl__auth_password_opt,
- svn_cl__no_ignore_opt } },
+ svn_cl__no_auth_cache_opt, svn_cl__no_ignore_opt } },
{ "switch", svn_cl__switch, {"sw"},
"Update working copy to mirror a new URL\n"
"usage: switch REPOS_URL [TARGET]\n\n"
" Note: this is the way to move a working copy to a new branch.\n",
{ 'r', 'D', 'N', 'q', svn_cl__auth_username_opt,
- svn_cl__auth_password_opt} },
+ svn_cl__auth_password_opt, svn_cl__no_auth_cache_opt} },
{ "update", svn_cl__update, {"up"},
"Bring changes from the repository into the working copy.\n"
@@ -405,7 +415,8 @@
" C Conflict\n"
" G Merged\n",
{'r', 'D', 'N', 'q', svn_cl__auth_username_opt,
- svn_cl__auth_password_opt, svn_cl__xml_file_opt} },
+ svn_cl__auth_password_opt, svn_cl__no_auth_cache_opt,
+ svn_cl__xml_file_opt} },
{ NULL, NULL, {0}, NULL, {0} }
};
@@ -1095,6 +1106,9 @@
case svn_cl__no_ignore_opt:
opt_state.no_ignore = TRUE;
break;
+ case svn_cl__no_auth_cache_opt:
+ opt_state.no_auth_cache = TRUE;
+ break;
case 'x':
err = svn_utf_cstring_to_utf8 (&opt_state.extensions, opt_arg,
NULL, pool);
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org
Received on Thu Aug 15 19:26:27 2002