⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cmd_samr.c

📁 samba-3.0.22.tar.gz 编译smb服务器的源码
💻 C
📖 第 1 页 / 共 4 页
字号:
	grp_name = argv[1];		if (argc > 2)                sscanf(argv[2], "%x", &access_mask);	/* Get sam policy handle */	result = try_samr_connects(cli, mem_ctx, MAXIMUM_ALLOWED_ACCESS, 				   &connect_pol);	if (!NT_STATUS_IS_OK(result))		goto done;	/* Get domain policy handle */	result = rpccli_samr_open_domain(cli, mem_ctx, &connect_pol,				      access_mask,				      &domain_sid, &domain_pol);	if (!NT_STATUS_IS_OK(result))		goto done;	/* Create domain user */	result = rpccli_samr_create_dom_group(cli, mem_ctx, &domain_pol,					   grp_name, MAXIMUM_ALLOWED_ACCESS,					   &group_pol);	if (!NT_STATUS_IS_OK(result))		goto done;	result = rpccli_samr_close(cli, mem_ctx, &group_pol);	if (!NT_STATUS_IS_OK(result)) goto done;	result = rpccli_samr_close(cli, mem_ctx, &domain_pol);	if (!NT_STATUS_IS_OK(result)) goto done;	result = rpccli_samr_close(cli, mem_ctx, &connect_pol);	if (!NT_STATUS_IS_OK(result)) goto done; done:	return result;}/* Lookup sam names */static NTSTATUS cmd_samr_lookup_names(struct rpc_pipe_client *cli,                                       TALLOC_CTX *mem_ctx,                                      int argc, const char **argv) {	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;	POLICY_HND connect_pol, domain_pol;	uint32 flags = 0x000003e8; /* Unknown */	uint32 num_rids, num_names, *name_types, *rids;	const char **names;	int i;	if (argc < 3) {		printf("Usage: %s  domain|builtin name1 [name2 [name3] [...]]\n", argv[0]);		printf("check on the domain SID: S-1-5-21-x-y-z\n");		printf("or check on the builtin SID: S-1-5-32\n");		return NT_STATUS_OK;	}	/* Get sam policy and domain handles */	result = try_samr_connects(cli, mem_ctx, MAXIMUM_ALLOWED_ACCESS, 				   &connect_pol);	if (!NT_STATUS_IS_OK(result))		goto done;	if (StrCaseCmp(argv[1], "domain")==0)		result = rpccli_samr_open_domain(cli, mem_ctx, &connect_pol,					      MAXIMUM_ALLOWED_ACCESS,					      &domain_sid, &domain_pol);	else if (StrCaseCmp(argv[1], "builtin")==0)		result = rpccli_samr_open_domain(cli, mem_ctx, &connect_pol,					      MAXIMUM_ALLOWED_ACCESS,					      &global_sid_Builtin, &domain_pol);	else		return NT_STATUS_OK;	if (!NT_STATUS_IS_OK(result))		goto done;	/* Look up names */	num_names = argc - 2;	names = TALLOC_ARRAY(mem_ctx, const char *, num_names);	for (i = 0; i < argc - 2; i++)		names[i] = argv[i + 2];	result = rpccli_samr_lookup_names(cli, mem_ctx, &domain_pol,				       flags, num_names, names,				       &num_rids, &rids, &name_types);	if (!NT_STATUS_IS_OK(result))		goto done;	/* Display results */	for (i = 0; i < num_names; i++)		printf("name %s: 0x%x (%d)\n", names[i], rids[i], 		       name_types[i]);	rpccli_samr_close(cli, mem_ctx, &domain_pol);	rpccli_samr_close(cli, mem_ctx, &connect_pol); done:	return result;}/* Lookup sam rids */static NTSTATUS cmd_samr_lookup_rids(struct rpc_pipe_client *cli,                                      TALLOC_CTX *mem_ctx,                                     int argc, const char **argv) {	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;	POLICY_HND connect_pol, domain_pol;	uint32 num_rids, num_names, *rids, *name_types;	char **names;	int i;	if (argc < 3) {		printf("Usage: %s domain|builtin rid1 [rid2 [rid3] [...]]\n", argv[0]);		return NT_STATUS_OK;	}	/* Get sam policy and domain handles */	result = try_samr_connects(cli, mem_ctx, MAXIMUM_ALLOWED_ACCESS, 				   &connect_pol);	if (!NT_STATUS_IS_OK(result))		goto done;	if (StrCaseCmp(argv[1], "domain")==0)		result = rpccli_samr_open_domain(cli, mem_ctx, &connect_pol,					      MAXIMUM_ALLOWED_ACCESS,					      &domain_sid, &domain_pol);	else if (StrCaseCmp(argv[1], "builtin")==0)		result = rpccli_samr_open_domain(cli, mem_ctx, &connect_pol,					      MAXIMUM_ALLOWED_ACCESS,					      &global_sid_Builtin, &domain_pol);	else		return NT_STATUS_OK;	if (!NT_STATUS_IS_OK(result))		goto done;	/* Look up rids */	num_rids = argc - 2;	rids = TALLOC_ARRAY(mem_ctx, uint32, num_rids);	for (i = 0; i < argc - 2; i++)                sscanf(argv[i + 2], "%i", &rids[i]);	result = rpccli_samr_lookup_rids(cli, mem_ctx, &domain_pol, num_rids, rids,				      &num_names, &names, &name_types);	if (!NT_STATUS_IS_OK(result) &&	    !NT_STATUS_EQUAL(result, STATUS_SOME_UNMAPPED))		goto done;	/* Display results */	for (i = 0; i < num_names; i++)		printf("rid 0x%x: %s (%d)\n", rids[i], names[i], name_types[i]);	rpccli_samr_close(cli, mem_ctx, &domain_pol);	rpccli_samr_close(cli, mem_ctx, &connect_pol); done:	return result;}/* Delete domain user */static NTSTATUS cmd_samr_delete_dom_user(struct rpc_pipe_client *cli,                                          TALLOC_CTX *mem_ctx,                                         int argc, const char **argv) {	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;	POLICY_HND connect_pol, domain_pol, user_pol;	uint32 access_mask = MAXIMUM_ALLOWED_ACCESS;	if ((argc < 2) || (argc > 3)) {		printf("Usage: %s username\n", argv[0]);		return NT_STATUS_OK;	}		if (argc > 2)                sscanf(argv[2], "%x", &access_mask);	/* Get sam policy and domain handles */	result = try_samr_connects(cli, mem_ctx, MAXIMUM_ALLOWED_ACCESS, 				   &connect_pol);	if (!NT_STATUS_IS_OK(result))		goto done;	result = rpccli_samr_open_domain(cli, mem_ctx, &connect_pol,				      MAXIMUM_ALLOWED_ACCESS,				      &domain_sid, &domain_pol);	if (!NT_STATUS_IS_OK(result))		goto done;	/* Get handle on user */	{		uint32 *user_rids, num_rids, *name_types;		uint32 flags = 0x000003e8; /* Unknown */		result = rpccli_samr_lookup_names(cli, mem_ctx, &domain_pol,					       flags, 1, (const char **)&argv[1],					       &num_rids, &user_rids,					       &name_types);		if (!NT_STATUS_IS_OK(result))			goto done;		result = rpccli_samr_open_user(cli, mem_ctx, &domain_pol,					    access_mask,					    user_rids[0], &user_pol);		if (!NT_STATUS_IS_OK(result))			goto done;	}	/* Delete user */	result = rpccli_samr_delete_dom_user(cli, mem_ctx, &user_pol);	if (!NT_STATUS_IS_OK(result))		goto done;	/* Display results */	rpccli_samr_close(cli, mem_ctx, &user_pol);	rpccli_samr_close(cli, mem_ctx, &domain_pol);	rpccli_samr_close(cli, mem_ctx, &connect_pol); done:	return result;}/********************************************************************** * Query user security object  */static NTSTATUS cmd_samr_query_sec_obj(struct rpc_pipe_client *cli,                                     TALLOC_CTX *mem_ctx,                                    int argc, const char **argv) {	POLICY_HND connect_pol, domain_pol, user_pol, *pol;	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;	uint32 info_level = 4;	fstring server;	uint32 user_rid = 0;	TALLOC_CTX *ctx = NULL;	SEC_DESC_BUF *sec_desc_buf=NULL;	BOOL domain = False;	ctx=talloc_init("cmd_samr_query_sec_obj");		if ((argc < 1) || (argc > 2)) {		printf("Usage: %s [rid|-d]\n", argv[0]);		printf("\tSpecify rid for security on user, -d for security on domain\n");		return NT_STATUS_OK;	}		if (argc > 1) {		if (strcmp(argv[1], "-d") == 0)			domain = True;		else			sscanf(argv[1], "%i", &user_rid);	}		slprintf(server, sizeof(fstring)-1, "\\\\%s", cli->cli->desthost);	strupper_m(server);	result = try_samr_connects(cli, mem_ctx, MAXIMUM_ALLOWED_ACCESS,				   &connect_pol);	if (!NT_STATUS_IS_OK(result))		goto done;	if (domain || user_rid)		result = rpccli_samr_open_domain(cli, mem_ctx, &connect_pol,					      MAXIMUM_ALLOWED_ACCESS,					      &domain_sid, &domain_pol);	if (!NT_STATUS_IS_OK(result))		goto done;	if (user_rid)		result = rpccli_samr_open_user(cli, mem_ctx, &domain_pol,					    MAXIMUM_ALLOWED_ACCESS,					    user_rid, &user_pol);	if (!NT_STATUS_IS_OK(result))		goto done;	/* Pick which query pol to use */	pol = &connect_pol;	if (domain)		pol = &domain_pol;	if (user_rid)		pol = &user_pol;	/* Query SAM security object */	result = rpccli_samr_query_sec_obj(cli, mem_ctx, pol, info_level, ctx, 					&sec_desc_buf);	if (!NT_STATUS_IS_OK(result))		goto done;	display_sec_desc(sec_desc_buf->sec);		rpccli_samr_close(cli, mem_ctx, &user_pol);	rpccli_samr_close(cli, mem_ctx, &domain_pol);	rpccli_samr_close(cli, mem_ctx, &connect_pol);done:	talloc_destroy(ctx);	return result;}static NTSTATUS cmd_samr_get_dom_pwinfo(struct rpc_pipe_client *cli, 					TALLOC_CTX *mem_ctx,					int argc, const char **argv) {	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;	uint16 min_pwd_length;	uint32 password_properties;	if (argc != 1) {		printf("Usage: %s\n", argv[0]);		return NT_STATUS_OK;	}	result = rpccli_samr_get_dom_pwinfo(cli, mem_ctx, &min_pwd_length, &password_properties) ;		if (NT_STATUS_IS_OK(result)) {		printf("min_pwd_length: %d\n", min_pwd_length);		printf("password_properties: 0x%08x\n", password_properties);				if (password_properties & DOMAIN_PASSWORD_COMPLEX)			printf("\tDOMAIN_PASSWORD_COMPLEX\n");					if (password_properties & DOMAIN_PASSWORD_NO_ANON_CHANGE)			printf("\tDOMAIN_PASSWORD_NO_ANON_CHANGE\n");					if (password_properties & DOMAIN_PASSWORD_NO_CLEAR_CHANGE)			printf("\tDOMAIN_PASSWORD_NO_CLEAR_CHANGE\n");					if (password_properties & DOMAIN_LOCKOUT_ADMINS)			printf("\tDOMAIN_LOCKOUT_ADMINS\n");					if (password_properties & DOMAIN_PASSWORD_STORE_CLEARTEXT)			printf("\tDOMAIN_PASSWORD_STORE_CLEARTEXT\n");					if (password_properties & DOMAIN_REFUSE_PASSWORD_CHANGE)			printf("\tDOMAIN_REFUSE_PASSWORD_CHANGE\n");	}	return result;}/* Look up domain name */static NTSTATUS cmd_samr_lookup_domain(struct rpc_pipe_client *cli, 				       TALLOC_CTX *mem_ctx,				       int argc, const char **argv) {	POLICY_HND connect_pol, domain_pol;	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;	uint32 access_mask = MAXIMUM_ALLOWED_ACCESS;	fstring domain_name,sid_string;	DOM_SID sid;		if (argc != 2) {		printf("Usage: %s domain_name\n", argv[0]);		return NT_STATUS_OK;	}		sscanf(argv[1], "%s", domain_name);		result = try_samr_connects(cli, mem_ctx, access_mask, &connect_pol);		if (!NT_STATUS_IS_OK(result))		goto done;	result = rpccli_samr_open_domain(cli, mem_ctx, &connect_pol,				      access_mask, &domain_sid, &domain_pol);	if (!NT_STATUS_IS_OK(result))		goto done;		result = rpccli_samr_lookup_domain(		cli, mem_ctx, &connect_pol, domain_name, &sid);	sid_to_string(sid_string,&sid); 	if (NT_STATUS_IS_OK(result)) 		printf("SAMR_LOOKUP_DOMAIN: Domain Name: %s Domain SID: %s\n",		       domain_name,sid_string);	rpccli_samr_close(cli, mem_ctx, &domain_pol);	rpccli_samr_close(cli, mem_ctx, &connect_pol);done:	return result;}/* List of commands exported by this module */struct cmd_set samr_commands[] = {	{ "SAMR" },	{ "queryuser", 	RPC_RTYPE_NTSTATUS, cmd_samr_query_user, 		NULL, PI_SAMR, NULL,	"Query user info",         "" },	{ "querygroup", 	RPC_RTYPE_NTSTATUS, cmd_samr_query_group, 		NULL, PI_SAMR, NULL,	"Query group info",        "" },	{ "queryusergroups", 	RPC_RTYPE_NTSTATUS, cmd_samr_query_usergroups, 	NULL, PI_SAMR, NULL,	"Query user groups",       "" },	{ "queryuseraliases", 	RPC_RTYPE_NTSTATUS, cmd_samr_query_useraliases, 	NULL, PI_SAMR, NULL,	"Query user aliases",      "" },	{ "querygroupmem", 	RPC_RTYPE_NTSTATUS, cmd_samr_query_groupmem, 	NULL, PI_SAMR, NULL,	"Query group membership",  "" },	{ "queryaliasmem", 	RPC_RTYPE_NTSTATUS, cmd_samr_query_aliasmem, 	NULL, PI_SAMR, NULL,	"Query alias membership",  "" },	{ "querydispinfo", 	RPC_RTYPE_NTSTATUS, cmd_samr_query_dispinfo, 	NULL, PI_SAMR, NULL,	"Query display info",      "" },	{ "querydominfo", 	RPC_RTYPE_NTSTATUS, cmd_samr_query_dominfo, 	NULL, PI_SAMR, NULL,	"Query domain info",       "" },	{ "enumdomusers",      RPC_RTYPE_NTSTATUS, cmd_samr_enum_dom_users,       NULL, PI_SAMR, NULL,	"Enumerate domain users", "" },	{ "enumdomgroups",      RPC_RTYPE_NTSTATUS, cmd_samr_enum_dom_groups,       NULL, PI_SAMR, NULL,	"Enumerate domain groups", "" },	{ "enumalsgroups",      RPC_RTYPE_NTSTATUS, cmd_samr_enum_als_groups,       NULL, PI_SAMR, NULL,	"Enumerate alias groups",  "" },	{ "createdomuser",      RPC_RTYPE_NTSTATUS, cmd_samr_create_dom_user,       NULL, PI_SAMR, NULL,	"Create domain user",      "" },	{ "createdomgroup",     RPC_RTYPE_NTSTATUS, cmd_samr_create_dom_group,      NULL, PI_SAMR, NULL,	"Create domain group",     "" },	{ "samlookupnames",     RPC_RTYPE_NTSTATUS, cmd_samr_lookup_names,          NULL, PI_SAMR, NULL,	"Look up names",           "" },	{ "samlookuprids",      RPC_RTYPE_NTSTATUS, cmd_samr_lookup_rids,           NULL, PI_SAMR, NULL,	"Look up names",           "" },	{ "deletedomuser",      RPC_RTYPE_NTSTATUS, cmd_samr_delete_dom_user,       NULL, PI_SAMR, NULL,	"Delete domain user",      "" },	{ "samquerysecobj",     RPC_RTYPE_NTSTATUS, cmd_samr_query_sec_obj,         NULL, PI_SAMR, NULL, "Query SAMR security object",   "" },	{ "getdompwinfo",       RPC_RTYPE_NTSTATUS, cmd_samr_get_dom_pwinfo,        NULL, PI_SAMR, NULL, "Retrieve domain password info", "" },	{ "lookupdomain",       RPC_RTYPE_NTSTATUS, cmd_samr_lookup_domain,         NULL, PI_SAMR, NULL, "Lookup Domain Name", "" },	{ NULL }};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -