1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-25 23:21:54 +03:00

r1951: add 'net password set' call

use it like:
net password set user
net password set DOM\\user
net password set user pass
net password set DOM\\user pass
net password set -U DOM\\Administrator%admpass DOM\\user pass

metze
(This used to be commit b660e5b9e6)
This commit is contained in:
Stefan Metzmacher 2004-08-20 09:55:21 +00:00 committed by Gerald (Jerry) Carter
parent a5ca84508c
commit 32ec317c90

View File

@ -81,8 +81,90 @@ static int net_password_change_help(struct net_context *ctx, int argc, const cha
return 0;
}
static int net_password_set(struct net_context *ctx, int argc, const char **argv)
{
NTSTATUS status;
struct libnet_context *libnetctx;
union libnet_SetPassword r;
char *password_prompt = NULL;
char *p;
char *tmp;
const char *account_name;
const char *domain_name;
const char *new_password = NULL;
switch (argc) {
case 0: /* no args -> fail */
DEBUG(0,("net_password_set: no args\n"));
return -1;
case 1: /* only DOM\\user; prompt for password */
tmp = talloc_strdup(ctx->mem_ctx, argv[0]);
break;
case 2: /* DOM\\USER and password */
tmp = talloc_strdup(ctx->mem_ctx, argv[0]);
new_password = argv[1];
break;
default: /* too mayn args -> fail */
DEBUG(0,("net_password_set: too many args [%d]\n",argc));
return -1;
}
if ((p = strchr_m(tmp,'\\'))) {
*p = 0;
domain_name = tmp;
account_name = talloc_strdup(ctx->mem_ctx, p+1);
} else {
account_name = tmp;
domain_name = ctx->user.domain_name;
}
if (!new_password) {
password_prompt = talloc_asprintf(ctx->mem_ctx, "Enter new password for account [%s\\%s]:",
domain_name, account_name);
new_password = getpass(password_prompt);
}
libnetctx = libnet_context_init();
if (!libnetctx) {
return -1;
}
libnetctx->user.account_name = ctx->user.account_name;
libnetctx->user.domain_name = ctx->user.domain_name;
libnetctx->user.password = ctx->user.password;
/* prepare password change */
r.generic.level = LIBNET_SET_PASSWORD_GENERIC;
r.generic.in.account_name = account_name;
r.generic.in.domain_name = domain_name;
r.generic.in.newpassword = new_password;
/* do password change */
status = libnet_SetPassword(libnetctx, ctx->mem_ctx, &r);
if (!NT_STATUS_IS_OK(status)) {
DEBUG(0,("net_password_set: %s\n",r.generic.out.error_string));
return -1;
}
libnet_context_destroy(&libnetctx);
return 0;
}
static int net_password_set_usage(struct net_context *ctx, int argc, const char **argv)
{
d_printf("net_password_set_usage: TODO\n");
return 0;
}
static int net_password_set_help(struct net_context *ctx, int argc, const char **argv)
{
d_printf("net_password_set_help: TODO\n");
return 0;
}
static const struct net_functable const net_password_functable[] = {
{"change", net_password_change, net_password_change_usage, net_password_change_help},
{"set", net_password_set, net_password_set_usage, net_password_set_help},
{NULL, NULL}
};