diff options
| author | Volker Lendecke <vl@samba.org> | 2010-04-26 16:44:34 +0200 | 
|---|---|---|
| committer | Volker Lendecke <vl@samba.org> | 2010-04-26 17:10:31 +0200 | 
| commit | abdb96b8ff373b78ffbf24c66c4e6b69886e87c4 (patch) | |
| tree | e25f7dfb70b9fc03c1e8889c21fac09d088951d9 /source3/utils | |
| parent | 5ce1dbf2e328b8bf9987746bbd9ea10e6db58760 (diff) | |
| download | samba-abdb96b8ff373b78ffbf24c66c4e6b69886e87c4.tar.gz samba-abdb96b8ff373b78ffbf24c66c4e6b69886e87c4.tar.bz2 samba-abdb96b8ff373b78ffbf24c66c4e6b69886e87c4.zip  | |
s3: Implement "net rpc user setprimarygroup"
Diffstat (limited to 'source3/utils')
| -rw-r--r-- | source3/utils/net_rpc.c | 59 | 
1 files changed, 59 insertions, 0 deletions
diff --git a/source3/utils/net_rpc.c b/source3/utils/net_rpc.c index 8fe243da7c..0fd693e582 100644 --- a/source3/utils/net_rpc.c +++ b/source3/utils/net_rpc.c @@ -731,6 +731,57 @@ static int rpc_user_rename(struct net_context *c, int argc, const char **argv)  }  /** + * Set a user's primary group + * + * @param argc  Standard main() style argc. + * @param argv  Standard main() style argv. Initial components are already + *              stripped. + * + * @return A shell status integer (0 for success). + **/ + +static int rpc_user_setprimarygroup(struct net_context *c, int argc, +				    const char **argv) +{ +	NET_API_STATUS status; +	uint8_t *buffer; +	struct GROUP_INFO_2 *g2; +	struct USER_INFO_1051 u1051; +	uint32_t parm_err = 0; + +	if (argc != 2 || c->display_usage) { +		rpc_user_usage(c, argc, argv); +		return 0; +	} + +	status = NetGroupGetInfo(c->opt_host, argv[1], 2, &buffer); +	if (status) { +		d_fprintf(stderr, _("Failed to find group name %s -- %s\n"), +			  argv[1], +			  libnetapi_get_error_string(c->netapi_ctx, status)); +		return status; +	} +	g2 = (struct GROUP_INFO_2 *)buffer; + +	u1051.usri1051_primary_group_id = g2->grpi2_group_id; + +	NetApiBufferFree(buffer); + +	status = NetUserSetInfo(c->opt_host, argv[0], 1051, +				(uint8_t *)&u1051, &parm_err); +	if (status) { +		d_fprintf(stderr, +			  _("Failed to set user's primary group %s to %s - " +			    "%s\n"), argv[0], argv[1], +			  libnetapi_get_error_string(c->netapi_ctx, status)); +	} else { +		d_printf(_("Set primary group of user %s to %s\n"), argv[0], +			 argv[1]); +	} +	return status; +} + +/**   * Delete a user from a remote RPC server.   *   * @param argc  Standard main() style argc. @@ -978,6 +1029,14 @@ int net_rpc_user(struct net_context *c, int argc, const char **argv)  			N_("net rpc user rename\n"  			   "    Rename specified user")  		}, +		{ +			"setprimarygroup", +			rpc_user_setprimarygroup, +			NET_TRANSPORT_RPC, +			"Set a user's primary group", +			"net rpc user setprimarygroup\n" +			"    Set a user's primary group" +		},  		{NULL, NULL, 0, NULL, NULL}  	};  | 
