mirror of
https://github.com/samba-team/samba.git
synced 2025-08-02 00:22:11 +03:00
added net use (actually net -S srv -U user -W dom) and net del (actually
same as net use but with -d and -f) command options
(This used to be commit 586db87ea3
)
This commit is contained in:
@ -493,7 +493,7 @@ struct command_set commands[] =
|
||||
/* maintenance */
|
||||
|
||||
{
|
||||
"rpcclient",
|
||||
"set",
|
||||
cmd_set,
|
||||
"run rpcclient inside rpcclient (change options etc.)",
|
||||
{COMPL_NONE, COMPL_NONE}
|
||||
@ -1306,12 +1306,52 @@ static char *complete_cmd_null(char *text, int state)
|
||||
|
||||
#endif /* HAVE_LIBREADLINE */
|
||||
|
||||
static void set_user_password(struct user_credentials *u,
|
||||
BOOL got_pass, char *password)
|
||||
{
|
||||
/* set the password cache info */
|
||||
if (got_pass)
|
||||
{
|
||||
if (password == NULL)
|
||||
{
|
||||
pwd_set_nullpwd(&(u->pwd));
|
||||
}
|
||||
else
|
||||
{
|
||||
/* generate 16 byte hashes */
|
||||
pwd_make_lm_nt_16(&(u->pwd), password);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
pwd_read(&(u->pwd), "Enter Password:", True);
|
||||
}
|
||||
}
|
||||
|
||||
static void cmd_net(struct client_info *info, int argc, char *argv[])
|
||||
{
|
||||
int opt;
|
||||
BOOL net_use = False;
|
||||
BOOL net_use_del = False;
|
||||
BOOL net_use_add = False;
|
||||
BOOL net_use_add = True;
|
||||
BOOL force_close = False;
|
||||
struct user_credentials u;
|
||||
fstring dest_host;
|
||||
fstring srv_name;
|
||||
BOOL null_pwd = False;
|
||||
BOOL got_pwd = False;
|
||||
pstring password;
|
||||
extern struct user_credentials *usr_creds;
|
||||
|
||||
copy_user_creds(&u, usr_creds);
|
||||
|
||||
pstrcpy(dest_host, cli_info.dest_host);
|
||||
pstrcpy(u.user_name,optarg);
|
||||
|
||||
if (argc <= 1)
|
||||
{
|
||||
report(out_hnd, "net -S \\server [-U user%%pass] [-W domain] [-d] [-f]\n");
|
||||
report(out_hnd, "net -u\n");
|
||||
}
|
||||
|
||||
while ((opt = getopt(argc, argv, "udS:U:W:")) != EOF)
|
||||
{
|
||||
@ -1323,15 +1363,73 @@ static void cmd_net(struct client_info *info, int argc, char *argv[])
|
||||
break;
|
||||
}
|
||||
|
||||
case 'S':
|
||||
{
|
||||
pstrcpy(dest_host, optarg);
|
||||
break;
|
||||
}
|
||||
|
||||
case 'U':
|
||||
{
|
||||
char *lp;
|
||||
pstrcpy(u.user_name,optarg);
|
||||
if ((lp=strchr(u.user_name,'%')))
|
||||
{
|
||||
*lp = 0;
|
||||
pstrcpy(password,lp+1);
|
||||
memset(strchr(optarg,'%')+1,'X',
|
||||
strlen(password));
|
||||
got_pwd = True;
|
||||
}
|
||||
if (u.user_name[0] == 0 && password[0] == 0)
|
||||
{
|
||||
null_pwd = True;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case 'N':
|
||||
{
|
||||
null_pwd = True;
|
||||
}
|
||||
case 'W':
|
||||
{
|
||||
pstrcpy(u.domain,optarg);
|
||||
break;
|
||||
}
|
||||
|
||||
case 'd':
|
||||
{
|
||||
net_use_add = False;
|
||||
break;
|
||||
}
|
||||
|
||||
case 'f':
|
||||
{
|
||||
force_close = True;
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
{
|
||||
report(out_hnd, "net -S \\server [-U user%%pass] [-W domain] [-d]\n");
|
||||
report(out_hnd, "net -S \\server [-U user%%pass] [-W domain] [-d] [-f]\n");
|
||||
report(out_hnd, "net -u\n");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (strnequal("\\\\", dest_host, 2))
|
||||
{
|
||||
fstrcpy(srv_name, dest_host);
|
||||
}
|
||||
else
|
||||
{
|
||||
fstrcpy(srv_name, "\\\\");
|
||||
fstrcat(srv_name, dest_host);
|
||||
}
|
||||
strupper(srv_name);
|
||||
|
||||
if (net_use)
|
||||
{
|
||||
int i;
|
||||
@ -1361,28 +1459,60 @@ static void cmd_net(struct client_info *info, int argc, char *argv[])
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (net_use_add)
|
||||
{
|
||||
if (null_pwd)
|
||||
{
|
||||
set_user_password(&u, True, NULL);
|
||||
}
|
||||
else
|
||||
{
|
||||
set_user_password(&u, got_pwd, password);
|
||||
}
|
||||
|
||||
static void set_user_password(struct user_credentials *u,
|
||||
BOOL got_pass, char *password)
|
||||
{
|
||||
/* set the password cache info */
|
||||
if (got_pass)
|
||||
/* paranoia: destroy the local copy of the password */
|
||||
bzero(password, sizeof(password));
|
||||
|
||||
report(out_hnd, "Server:\t%s:\tUser:\t%s\tDomain:\t%s\n",
|
||||
srv_name, u.user_name, u.domain);
|
||||
report(out_hnd, "Connection:\t");
|
||||
|
||||
if (cli_net_use_add(srv_name, &u) != NULL)
|
||||
{
|
||||
if (password == NULL)
|
||||
{
|
||||
pwd_set_nullpwd(&(u->pwd));
|
||||
report(out_hnd, "OK\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
/* generate 16 byte hashes */
|
||||
pwd_make_lm_nt_16(&(u->pwd), password);
|
||||
report(out_hnd, "FAILED\n");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
pwd_read(&(u->pwd), "Enter Password:", True);
|
||||
BOOL closed;
|
||||
report(out_hnd, "Server:\t%s:\tUser:\t%s\tDomain:\t%s\n",
|
||||
srv_name, u.user_name, u.domain);
|
||||
report(out_hnd, "Connection:\t");
|
||||
|
||||
if (!cli_net_use_del(srv_name, &u, force_close, &closed))
|
||||
{
|
||||
report(out_hnd, ": Does not exist\n");
|
||||
}
|
||||
else if (force_close && closed)
|
||||
{
|
||||
report(out_hnd, ": Forcibly terminated\n");
|
||||
}
|
||||
else if (closed)
|
||||
{
|
||||
report(out_hnd, ": Terminated\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
report(out_hnd, ": Unlinked\n");
|
||||
}
|
||||
}
|
||||
|
||||
/* paranoia: destroy the local copy of the password */
|
||||
bzero(password, sizeof(password));
|
||||
}
|
||||
|
||||
#define CMD_STR 0x1
|
||||
|
Reference in New Issue
Block a user