1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-24 21:34:56 +03:00

Merge Jelmer's popt updates from HEAD.

Also merged a bunch of other random changes as this file has
been drifting off due to lack of janitors.
This commit is contained in:
Tim Potter 0001-01-01 00:00:00 +00:00
parent 98e84b3e83
commit 38337ec5ef

View File

@ -97,70 +97,6 @@ static char **completion_fn(char *text, int start, int end)
return matches;
}
/***********************************************************************
* read in username/password credentials from a file
*/
static void read_authfile (
char *filename,
char* username,
char* password,
char* domain
)
{
FILE *auth;
fstring buf;
uint16 len = 0;
char *ptr, *val, *param;
if ((auth=sys_fopen(filename, "r")) == NULL)
{
printf ("ERROR: Unable to open credentials file!\n");
return;
}
while (!feof(auth))
{
/* get a line from the file */
if (!fgets (buf, sizeof(buf), auth))
continue;
len = strlen(buf);
/* skip empty lines */
if ((len) && (buf[len-1]=='\n'))
{
buf[len-1] = '\0';
len--;
}
if (len == 0)
continue;
/* break up the line into parameter & value.
will need to eat a little whitespace possibly */
param = buf;
if (!(ptr = strchr_m(buf, '=')))
continue;
val = ptr+1;
*ptr = '\0';
/* eat leading white space */
while ((*val!='\0') && ((*val==' ') || (*val=='\t')))
val++;
if (strwicmp("password", param) == 0)
fstrcpy (password, val);
else if (strwicmp("username", param) == 0)
fstrcpy (username, val);
else if (strwicmp("domain", param) == 0)
fstrcpy (domain, val);
memset(buf, 0, sizeof(buf));
}
fclose(auth);
return;
}
static char* next_command (char** cmdstr)
{
static pstring command;
@ -181,28 +117,6 @@ static char* next_command (char** cmdstr)
return command;
}
/**
* Find default username from environment variables.
*
* @param username fstring to receive username; not touched if none is
* known.
**/
static void get_username (char *username)
{
if (getenv("USER"))
fstrcpy(username,getenv("USER"));
if (*username == 0 && getenv("LOGNAME"))
fstrcpy(username,getenv("LOGNAME"));
if (*username == 0) {
fstrcpy(username,"GUEST");
}
return;
}
/* Fetch the SID for this computer */
static void fetch_machine_sid(struct cli_state *cli)
@ -595,21 +509,12 @@ out_free:
int main(int argc, char *argv[])
{
static int got_pass = 0;
BOOL interactive = True;
int opt;
static char *cmdstr = "";
static char *cmdstr = NULL;
const char *server;
struct cli_state *cli;
fstring password="",
username="",
domain="";
static char *opt_authfile=NULL,
*opt_username=NULL,
*opt_domain=NULL,
*opt_logfile=NULL,
*opt_ipaddr=NULL;
pstring logfile;
static char *opt_ipaddr=NULL;
struct cmd_set **cmd_set;
struct in_addr server_ip;
NTSTATUS nt_status;
@ -619,17 +524,12 @@ out_free:
poptContext pc;
struct poptOption long_options[] = {
POPT_AUTOHELP
{"authfile", 'A', POPT_ARG_STRING, &opt_authfile, 'A', "File containing user credentials", "AUTHFILE"},
{"nopass", 'N', POPT_ARG_NONE, &got_pass, 'N', "Don't ask for a password"},
{"user", 'U', POPT_ARG_STRING, &opt_username, 'U', "Set the network username", "USER"},
{"workgroup", 'W', POPT_ARG_STRING, &opt_domain, 'W', "Set the domain name for user account", "DOMAIN"},
{"command", 'c', POPT_ARG_STRING, &cmdstr, 'c', "Execute semicolon separated cmds", "COMMANDS"},
{"logfile", 'l', POPT_ARG_STRING, &opt_logfile, 'l', "Logfile to use instead of stdout", "LOGFILE" },
{"dest-ip", 'I', POPT_ARG_STRING, &opt_ipaddr, 'I', "Specify destination IP address", "IP"},
{ NULL, 0, POPT_ARG_INCLUDE_TABLE, popt_common_debug },
{ NULL, 0, POPT_ARG_INCLUDE_TABLE, popt_common_configfile },
{ NULL, 0, POPT_ARG_INCLUDE_TABLE, popt_common_version},
{ NULL }
POPT_COMMON_SAMBA
POPT_COMMON_CONNECTION
POPT_COMMON_CREDENTIALS
POPT_TABLEEND
};
ZERO_STRUCT(server_ip);
@ -648,43 +548,13 @@ out_free:
while((opt = poptGetNextOpt(pc)) != -1) {
switch (opt) {
case 'A':
/* only get the username, password, and domain from the file */
read_authfile (opt_authfile, username, password, domain);
if (strlen (password))
got_pass = 1;
break;
case 'l':
slprintf(logfile, sizeof(logfile) - 1, "%s.client",
opt_logfile);
lp_set_logfile(logfile);
interactive = False;
break;
case 'U': {
char *lp;
fstrcpy(username,opt_username);
if ((lp=strchr_m(username,'%'))) {
*lp = 0;
fstrcpy(password,lp+1);
got_pass = 1;
memset(strchr_m(opt_username,'%') + 1, 'X',
strlen(password));
}
break;
}
case 'I':
if ( (server_ip.s_addr=inet_addr(opt_ipaddr)) == INADDR_NONE ) {
fprintf(stderr, "%s not a valid IP address\n",
opt_ipaddr);
return 1;
}
case 'W':
fstrcpy(domain, opt_domain);
break;
}
}
@ -721,28 +591,25 @@ out_free:
* from stdin if necessary
*/
if (!got_pass) {
if (!cmdline_auth_info.got_pass) {
char *pass = getpass("Password:");
if (pass) {
fstrcpy(password, pass);
pstrcpy(cmdline_auth_info.password, pass);
}
}
if (!strlen(username) && !got_pass)
get_username(username);
nt_status = cli_full_connection(&cli, global_myname(), server,
opt_ipaddr ? &server_ip : NULL, 0,
"IPC$", "IPC",
username, domain,
password, 0, NULL);
cmdline_auth_info.username, lp_workgroup(),
cmdline_auth_info.password, 0, NULL);
if (!NT_STATUS_IS_OK(nt_status)) {
DEBUG(0,("Cannot connect to server. Error was %s\n", nt_errstr(nt_status)));
return 1;
}
memset(password,'X',sizeof(password));
memset(cmdline_auth_info.password,'X',sizeof(cmdline_auth_info.password));
/* Load command lists */
@ -757,7 +624,7 @@ out_free:
fetch_machine_sid(cli);
/* Do anything specified with -c */
if (cmdstr[0]) {
if (cmdstr && cmdstr[0]) {
char *cmd;
char *p = cmdstr;