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