X-Git-Url: http://git.samba.org/?a=blobdiff_plain;f=source3%2Flib%2Fpopt_common.c;h=c07283925b82559dbf15a9e5e37416fa47fa115b;hb=c51abb35dfff86cb503d36a844184f7a95f29cdb;hp=94e551d53b8a2fd41c6979fd1871c51ab64702e3;hpb=d236709d15ba577def07f049c975069eb39ba1e3;p=metze%2Fsamba%2Fwip.git diff --git a/source3/lib/popt_common.c b/source3/lib/popt_common.c index 94e551d53b8a..c07283925b82 100644 --- a/source3/lib/popt_common.c +++ b/source3/lib/popt_common.c @@ -605,6 +605,53 @@ void popt_common_set_auth_info(struct user_auth_info *auth_info) global_auth_info = auth_info; } +/** + * @brief Burn the commandline password. + * + * This function removes the password from the command line so we + * don't leak the password e.g. in 'ps aux'. + * + * It should be called after processing the options and you should pass down + * argv from main(). + * + * @param[in] argc The number of arguments. + * + * @param[in] argv[] The argument array we will find the array. + */ +void popt_burn_cmdline_password(int argc, char *argv[]) +{ + bool found = false; + char *p = NULL; + int i, ulen = 0; + + for (i = 0; i < argc; i++) { + p = argv[i]; + if (strncmp(p, "-U", 2) == 0) { + ulen = 2; + found = true; + } else if (strncmp(p, "--user", 6) == 0) { + ulen = 6; + found = true; + } + + if (found) { + if (p == NULL) { + return; + } + + if (strlen(p) == ulen) { + continue; + } + + p = strchr_m(p, '%'); + if (p != NULL) { + memset(p, '\0', strlen(p)); + } + found = false; + } + } +} + struct poptOption popt_common_credentials[] = { { NULL, 0, POPT_ARG_CALLBACK|POPT_CBFLAG_PRE, (void *)popt_common_credentials_callback, 0,