Skip to content

Commit

Permalink
s3fs-popt: Add function to burn the commandline password.
Browse files Browse the repository at this point in the history
Signed-off-by: Andreas Schneider <[email protected]>
Reviewed by: Jeremy Allison <[email protected]>
  • Loading branch information
cryptomilk authored and jrasamba committed Nov 8, 2012
1 parent d236709 commit c51abb3
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 0 deletions.
1 change: 1 addition & 0 deletions source3/include/popt_common.h
Original file line number Diff line number Diff line change
Expand Up @@ -49,5 +49,6 @@ extern const struct poptOption popt_common_dynconfig[];
#define POPT_COMMON_OPTION { NULL, 0, POPT_ARG_INCLUDE_TABLE, popt_common_option, 0, "Common samba commandline config:", NULL },

void popt_common_set_auth_info(struct user_auth_info *auth_info);
void popt_burn_cmdline_password(int argc, char *argv[]);

#endif /* _POPT_COMMON_H */
47 changes: 47 additions & 0 deletions source3/lib/popt_common.c
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down

0 comments on commit c51abb3

Please sign in to comment.