svn commit: samba r16531 - in branches/SAMBA_4_0/source/libnet: .

mimir at samba.org mimir at samba.org
Mon Jun 26 21:18:45 GMT 2006


Author: mimir
Date: 2006-06-26 21:18:45 +0000 (Mon, 26 Jun 2006)
New Revision: 16531

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=16531

Log:
Add a function preparing argument for modify user routine.


rafal


Modified:
   branches/SAMBA_4_0/source/libnet/libnet_user.c


Changeset:
Modified: branches/SAMBA_4_0/source/libnet/libnet_user.c
===================================================================
--- branches/SAMBA_4_0/source/libnet/libnet_user.c	2006-06-26 21:17:31 UTC (rev 16530)
+++ branches/SAMBA_4_0/source/libnet/libnet_user.c	2006-06-26 21:18:45 UTC (rev 16531)
@@ -24,6 +24,7 @@
 #include "libcli/composite/composite.h"
 #include "auth/credentials/credentials.h"
 #include "librpc/ndr/libndr.h"
+#include "librpc/gen_ndr/samr.h"
 #include "librpc/gen_ndr/ndr_samr.h"
 
 
@@ -348,6 +349,8 @@
 
 static void continue_rpc_usermod(struct composite_context *ctx);
 static void continue_domain_open_modify(struct composite_context *ctx);
+static NTSTATUS set_user_changes(TALLOC_CTX *mem_ctx, struct usermod_change *mod,
+				 struct libnet_rpc_userinfo *info, struct libnet_ModifyUser *r);
 static void continue_rpc_userinfo(struct composite_context *ctx);
 
 
@@ -428,9 +431,11 @@
 	c->status = libnet_rpc_userinfo_recv(ctx, c, &s->user_info);
 	if (!composite_is_ok(c)) return;
 
-	/* TODO: prepare arguments based on requested changes
-	   and received current user info */
+	s->user_mod.in.domain_handle = s->ctx->domain.handle;
+	s->user_mod.in.username      = s->r.in.user_name;
 
+	c->status = set_user_changes(c, &s->user_mod.in.change, &s->user_info, &s->r);
+
 	usermod_req = libnet_rpc_usermod_send(s->ctx->samr_pipe, &s->user_mod, s->monitor_fn);
 	if (composite_nomem(usermod_req, c)) return;
 
@@ -438,6 +443,40 @@
 }
 
 
+static NTSTATUS set_user_changes(TALLOC_CTX *mem_ctx, struct usermod_change *mod,
+				 struct libnet_rpc_userinfo *info, struct libnet_ModifyUser *r)
+{
+	struct samr_UserInfo21 *user;
+
+	if (mod == NULL || info == NULL || r == NULL || info->in.level != 21) {
+		return NT_STATUS_INVALID_PARAMETER;
+	}
+
+	user = &info->out.info.info21;
+	mod->fields = 0;        /* reset flag field before setting individual flags */
+
+	if (r->in.account_name != NULL &&
+	    !strequal_w(user->account_name.string, r->in.account_name)) {
+
+		mod->account_name = talloc_strdup(mem_ctx, r->in.account_name);
+		if (mod->account_name == NULL) return NT_STATUS_NO_MEMORY;
+
+		mod->fields |= USERMOD_FIELD_ACCOUNT_NAME;
+	}
+
+	if (r->in.full_name != NULL &&
+	    !strequal_w(user->full_name.string, r->in.full_name)) {
+		
+		mod->full_name = talloc_strdup(mem_ctx, r->in.full_name);
+		if (mod->full_name == NULL) return NT_STATUS_NO_MEMORY;
+
+		mod->fields |= USERMOD_FIELD_FULL_NAME;
+	}
+
+	return NT_STATUS_OK;
+}
+
+
 static void continue_rpc_usermod(struct composite_context *ctx)
 {
 	struct composite_context *c;



More information about the samba-cvs mailing list