diff options
Diffstat (limited to 'source3/rpcclient/rpcclient.c')
-rw-r--r-- | source3/rpcclient/rpcclient.c | 122 |
1 files changed, 36 insertions, 86 deletions
diff --git a/source3/rpcclient/rpcclient.c b/source3/rpcclient/rpcclient.c index c7d1604a0b..5a8d6f62b4 100644 --- a/source3/rpcclient/rpcclient.c +++ b/source3/rpcclient/rpcclient.c @@ -243,27 +243,6 @@ void fetch_machine_sid(struct cli_state *cli) exit(1); } -/* Initialise client credentials for authenticated pipe access */ - -void init_rpcclient_creds(struct ntuser_creds *creds, char* username, - char* domain, char* password) -{ - ZERO_STRUCTP(creds); - - if (lp_encrypted_passwords()) { - pwd_make_lm_nt_16(&creds->pwd, password); - } else { - pwd_set_cleartext(&creds->pwd, password); - } - - fstrcpy(creds->user_name, username); - fstrcpy(creds->domain, domain); - - if (! *username) { - creds->pwd.null_pwd = True; - } -} - /* Display help on commands */ @@ -550,47 +529,6 @@ static NTSTATUS process_cmd(struct cli_state *cli, char *cmd) return result; } -/************************************************************************/ -struct cli_state *setup_connection(struct cli_state *cli, char *system_name, - struct ntuser_creds *creds) -{ - struct in_addr dest_ip; - struct nmb_name calling, called; - fstring dest_host; - extern pstring global_myname; - struct ntuser_creds anon; - - /* Initialise cli_state information */ - if (!cli_initialise(cli)) { - return NULL; - } - - if (!creds) { - ZERO_STRUCT(anon); - anon.pwd.null_pwd = 1; - creds = &anon; - } - - cli_init_creds(cli, creds); - - /* Establish a SMB connection */ - if (!resolve_srv_name(system_name, dest_host, &dest_ip)) { - fprintf(stderr, "Could not resolve %s\n", dest_host); - return NULL; - } - - make_nmb_name(&called, dns_to_netbios_name(dest_host), 0x20); - make_nmb_name(&calling, dns_to_netbios_name(global_myname), 0); - - if (!cli_establish_connection(cli, dest_host, &dest_ip, &calling, - &called, "IPC$", "IPC", False, True)) { - fprintf(stderr, "Error establishing IPC$ connection\n"); - return NULL; - } - - return cli; -} - /* Print usage information */ static void usage(void) @@ -621,13 +559,14 @@ static void usage(void) int opt; int olddebug; pstring cmdstr = ""; - struct ntuser_creds creds; - struct cli_state cli; + struct cli_state *cli; fstring password, username, domain, server; struct cmd_set **cmd_set; + struct in_addr server_ip; + NTSTATUS nt_status; setlinebuf(stdout); @@ -718,33 +657,42 @@ static void usage(void) get_myname((*global_myname)?NULL:global_myname); strupper(global_myname); + + + /* resolve the IP address */ + if (!resolve_name(server, &server_ip, 0x20)) { + DEBUG(1,("Unable to resolve server name\n")); + return 1; + } /* - * initialize the credentials struct. Get password + * Get password * from stdin if necessary */ + + if (!got_pass) { + char *pass = getpass("Password:"); + if (pass) { + fstrcpy(password, pass); + } + } + if (!strlen(username) && !got_pass) get_username(username); - if (!got_pass) { - init_rpcclient_creds (&creds, username, domain, ""); - pwd_read(&creds.pwd, "Enter Password: ", lp_encrypted_passwords()); - } - else { - init_rpcclient_creds (&creds, username, domain, password); - } - memset(password,'X',sizeof(password)); - - /* open a connection to the specified server */ - ZERO_STRUCTP (&cli); - if (!setup_connection (&cli, server, &creds)) { + nt_status = cli_full_connection(&cli, global_myname, server, + &server_ip, 0, + "IPC$", "IPC", + username, domain, + password, strlen(password)); + + if (!NT_STATUS_IS_OK(nt_status)) { + DEBUG(1,("Cannot connect to server. Error was %s\n", get_nt_error_msg(nt_status))); return 1; } - - /* There are no pointers in ntuser_creds struct so zero it out */ - ZERO_STRUCTP (&creds); - + memset(password,'X',sizeof(password)); + /* Load command lists */ cmd_set = rpcclient_command_list; @@ -755,7 +703,7 @@ static void usage(void) cmd_set++; } - fetch_machine_sid(&cli); + fetch_machine_sid(cli); /* Do anything specified with -c */ if (cmdstr[0]) { @@ -763,9 +711,10 @@ static void usage(void) char *p = cmdstr; while((cmd=next_command(&p)) != NULL) { - process_cmd(&cli, cmd); + process_cmd(cli, cmd); } - + + cli_shutdown(cli); return 0; } @@ -783,8 +732,9 @@ static void usage(void) break; if (line[0] != '\n') - process_cmd(&cli, line); + process_cmd(cli, line); } - + + cli_shutdown(cli); return 0; } |