svn commit: samba r1951 - branches/SAMBA_4_0/source/utils/net
metze at samba.org
metze at samba.org
Fri Aug 20 09:55:21 GMT 2004
Author: metze
Date: 2004-08-20 09:55:21 +0000 (Fri, 20 Aug 2004)
New Revision: 1951
WebSVN: http://websvn.samba.org/websvn/changeset.php?rep=samba&path=/&rev=1951&nolog=1
Log:
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
Modified:
branches/SAMBA_4_0/source/utils/net/net_password.c
Changeset:
Modified: branches/SAMBA_4_0/source/utils/net/net_password.c
===================================================================
--- branches/SAMBA_4_0/source/utils/net/net_password.c 2004-08-20 09:52:37 UTC (rev 1950)
+++ branches/SAMBA_4_0/source/utils/net/net_password.c 2004-08-20 09:55:21 UTC (rev 1951)
@@ -81,8 +81,90 @@
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}
};
More information about the samba-cvs
mailing list