mirror of
https://github.com/samba-team/samba.git
synced 2025-08-03 04:22:09 +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 */
|
/* maintenance */
|
||||||
|
|
||||||
{
|
{
|
||||||
"rpcclient",
|
"set",
|
||||||
cmd_set,
|
cmd_set,
|
||||||
"run rpcclient inside rpcclient (change options etc.)",
|
"run rpcclient inside rpcclient (change options etc.)",
|
||||||
{COMPL_NONE, COMPL_NONE}
|
{COMPL_NONE, COMPL_NONE}
|
||||||
@ -1306,12 +1306,52 @@ static char *complete_cmd_null(char *text, int state)
|
|||||||
|
|
||||||
#endif /* HAVE_LIBREADLINE */
|
#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[])
|
static void cmd_net(struct client_info *info, int argc, char *argv[])
|
||||||
{
|
{
|
||||||
int opt;
|
int opt;
|
||||||
BOOL net_use = False;
|
BOOL net_use = False;
|
||||||
BOOL net_use_del = False;
|
BOOL net_use_add = True;
|
||||||
BOOL net_use_add = False;
|
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)
|
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;
|
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:
|
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");
|
report(out_hnd, "net -u\n");
|
||||||
break;
|
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)
|
if (net_use)
|
||||||
{
|
{
|
||||||
int i;
|
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,
|
/* paranoia: destroy the local copy of the password */
|
||||||
BOOL got_pass, char *password)
|
bzero(password, sizeof(password));
|
||||||
{
|
|
||||||
/* set the password cache info */
|
report(out_hnd, "Server:\t%s:\tUser:\t%s\tDomain:\t%s\n",
|
||||||
if (got_pass)
|
srv_name, u.user_name, u.domain);
|
||||||
|
report(out_hnd, "Connection:\t");
|
||||||
|
|
||||||
|
if (cli_net_use_add(srv_name, &u) != NULL)
|
||||||
{
|
{
|
||||||
if (password == NULL)
|
report(out_hnd, "OK\n");
|
||||||
{
|
|
||||||
pwd_set_nullpwd(&(u->pwd));
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* generate 16 byte hashes */
|
report(out_hnd, "FAILED\n");
|
||||||
pwd_make_lm_nt_16(&(u->pwd), password);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
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
|
#define CMD_STR 0x1
|
||||||
|
Reference in New Issue
Block a user