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

📄 cmd_samr.c

📁 samba-3.0.22.tar.gz 编译smb服务器的源码
💻 C
📖 第 1 页 / 共 4 页
字号:
	if (got_connect_pol)		rpccli_samr_close(cli, mem_ctx, &connect_pol);	return result;}/* Enumerate alias groups */static NTSTATUS cmd_samr_enum_als_groups(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 start_idx, size, num_als_groups, i;	uint32 access_mask = MAXIMUM_ALLOWED_ACCESS;	struct acct_info *als_groups;	BOOL got_connect_pol = False, got_domain_pol = False;	if ((argc < 2) || (argc > 3)) {		printf("Usage: %s builtin|domain [access mask]\n", argv[0]);		return NT_STATUS_OK;	}		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;	got_connect_pol = True;	/* Get domain policy handle */	if (StrCaseCmp(argv[1], "domain")==0)		result = rpccli_samr_open_domain(cli, mem_ctx, &connect_pol,					      access_mask,					      &domain_sid, &domain_pol);	else if (StrCaseCmp(argv[1], "builtin")==0)		result = rpccli_samr_open_domain(cli, mem_ctx, &connect_pol,					      access_mask,					      &global_sid_Builtin, &domain_pol);	else		return NT_STATUS_OK;	if (!NT_STATUS_IS_OK(result))		goto done;	got_domain_pol = True;	/* Enumerate alias groups */	start_idx = 0;	size = 0xffff;		/* Number of groups to retrieve */	do {		result = rpccli_samr_enum_als_groups(			cli, mem_ctx, &domain_pol, &start_idx, size,			&als_groups, &num_als_groups);		if (NT_STATUS_IS_OK(result) ||		    NT_STATUS_V(result) == NT_STATUS_V(STATUS_MORE_ENTRIES)) {			for (i = 0; i < num_als_groups; i++)				printf("group:[%s] rid:[0x%x]\n", 				       als_groups[i].acct_name,				       als_groups[i].rid);		}	} while (NT_STATUS_V(result) == NT_STATUS_V(STATUS_MORE_ENTRIES)); done:	if (got_domain_pol)		rpccli_samr_close(cli, mem_ctx, &domain_pol);		if (got_connect_pol)		rpccli_samr_close(cli, mem_ctx, &connect_pol);		return result;}/* Query alias membership */static NTSTATUS cmd_samr_query_aliasmem(struct rpc_pipe_client *cli,                                         TALLOC_CTX *mem_ctx,                                        int argc, const char **argv) {	POLICY_HND connect_pol, domain_pol, alias_pol;	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;	uint32 alias_rid, num_members, i;	uint32 access_mask = MAXIMUM_ALLOWED_ACCESS;	DOM_SID *alias_sids;	if ((argc < 3) || (argc > 4)) {		printf("Usage: %s builtin|domain rid [access mask]\n", argv[0]);		return NT_STATUS_OK;	}	sscanf(argv[2], "%i", &alias_rid);		if (argc > 3)		sscanf(argv[3], "%x", &access_mask);	/* Open SAMR handle */	result = try_samr_connects(cli, mem_ctx, MAXIMUM_ALLOWED_ACCESS, 				   &connect_pol);	if (!NT_STATUS_IS_OK(result))		goto done;	/* Open handle on domain */		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;	/* Open handle on alias */	result = rpccli_samr_open_alias(cli, mem_ctx, &domain_pol,				     access_mask,				     alias_rid, &alias_pol);	if (!NT_STATUS_IS_OK(result))		goto done;	result = rpccli_samr_query_aliasmem(cli, mem_ctx, &alias_pol,					 &num_members, &alias_sids);	if (!NT_STATUS_IS_OK(result))		goto done;	for (i = 0; i < num_members; i++) {		fstring sid_str;		sid_to_string(sid_str, &alias_sids[i]);		printf("\tsid:[%s]\n", sid_str);	}	rpccli_samr_close(cli, mem_ctx, &alias_pol);	rpccli_samr_close(cli, mem_ctx, &domain_pol);	rpccli_samr_close(cli, mem_ctx, &connect_pol); done:	return result;}/* Query display info */static NTSTATUS cmd_samr_query_dispinfo(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 start_idx=0, max_entries=250, max_size = 0xffff, num_entries, i;	uint32 access_mask = MAXIMUM_ALLOWED_ACCESS;	uint32 info_level = 1;	SAM_DISPINFO_CTR ctr;	SAM_DISPINFO_1 info1;	SAM_DISPINFO_2 info2;	SAM_DISPINFO_3 info3;	SAM_DISPINFO_4 info4;	SAM_DISPINFO_5 info5;	int loop_count = 0;	BOOL got_params = False; /* Use get_query_dispinfo_params() or not? */	if (argc > 5) {		printf("Usage: %s [info level] [start index] [max entries] [max size] [access mask]\n", argv[0]);		return NT_STATUS_OK;	}	if (argc >= 2)                sscanf(argv[1], "%i", &info_level);        	if (argc >= 3)                sscanf(argv[2], "%i", &start_idx);        	if (argc >= 4) {                sscanf(argv[3], "%i", &max_entries);		got_params = True;	}		if (argc >= 5) {                sscanf(argv[4], "%i", &max_size);		got_params = True;	}		if (argc >= 6)                sscanf(argv[5], "%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;	/* Query display info */	ZERO_STRUCT(ctr);	ZERO_STRUCT(info1);		switch (info_level) {	case 1:		ZERO_STRUCT(info1);		ctr.sam.info1 = &info1;		break;	case 2:		ZERO_STRUCT(info2);		ctr.sam.info2 = &info2;		break;	case 3:		ZERO_STRUCT(info3);		ctr.sam.info3 = &info3;		break;	case 4:		ZERO_STRUCT(info4);		ctr.sam.info4 = &info4;		break;	case 5:		ZERO_STRUCT(info5);		ctr.sam.info5 = &info5;		break;	}	do {		if (!got_params)			get_query_dispinfo_params(				loop_count, &max_entries, &max_size);				result = rpccli_samr_query_dispinfo(cli, mem_ctx, &domain_pol,						 &start_idx, info_level,						 &num_entries, max_entries, 						 max_size, &ctr);		loop_count++;		if (NT_STATUS_IS_ERR(result))			break;		if (num_entries == 0) 			break;		for (i = 0; i < num_entries; i++) {			switch (info_level) {			case 1:				display_sam_info_1(&ctr.sam.info1->sam[i], &ctr.sam.info1->str[i]);				break;			case 2:				display_sam_info_2(&ctr.sam.info2->sam[i], &ctr.sam.info2->str[i]);				break;			case 3:				display_sam_info_3(&ctr.sam.info3->sam[i], &ctr.sam.info3->str[i]);				break;			case 4:				display_sam_info_4(&ctr.sam.info4->sam[i], &ctr.sam.info4->str[i]);				break;			case 5:				display_sam_info_5(&ctr.sam.info5->sam[i], &ctr.sam.info5->str[i]);				break;			}		}	} while ( NT_STATUS_EQUAL(result, STATUS_MORE_ENTRIES));	rpccli_samr_close(cli, mem_ctx, &domain_pol);	rpccli_samr_close(cli, mem_ctx, &connect_pol); done:	return result;}/* Query domain info */static NTSTATUS cmd_samr_query_dominfo(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 switch_level = 2;	uint32 access_mask = MAXIMUM_ALLOWED_ACCESS;	SAM_UNK_CTR ctr;	if (argc > 2) {		printf("Usage: %s [info level] [access mask]\n", argv[0]);		return NT_STATUS_OK;	}	if (argc > 1)                sscanf(argv[1], "%i", &switch_level);		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;	/* Query domain info */	result = rpccli_samr_query_dom_info(cli, mem_ctx, &domain_pol,					 switch_level, &ctr);	if (!NT_STATUS_IS_OK(result))		goto done;	/* Display domain info */	switch (switch_level) {	case 1:		display_sam_unk_info_1(&ctr.info.inf1);		break;	case 2:		display_sam_unk_info_2(&ctr.info.inf2);		break;	case 7:		display_sam_unk_info_7(&ctr.info.inf7);		break;	case 8:		display_sam_unk_info_8(&ctr.info.inf8);		break;	case 12:		display_sam_unk_info_12(&ctr.info.inf12);		break;	default:		printf("cannot display domain info for switch value %d\n",		       switch_level);		break;	} done:  	rpccli_samr_close(cli, mem_ctx, &domain_pol); 	rpccli_samr_close(cli, mem_ctx, &connect_pol);	return result;}/* Create domain user */static NTSTATUS cmd_samr_create_dom_user(struct rpc_pipe_client *cli,                                          TALLOC_CTX *mem_ctx,                                         int argc, const char **argv) {	POLICY_HND connect_pol, domain_pol, user_pol;	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;	const char *acct_name;	uint16 acb_info;	uint32 unknown, user_rid;	uint32 access_mask = MAXIMUM_ALLOWED_ACCESS;	if ((argc < 2) || (argc > 3)) {		printf("Usage: %s username [access mask]\n", argv[0]);		return NT_STATUS_OK;	}	acct_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 */	acb_info = ACB_NORMAL;	unknown = 0xe005000b; /* No idea what this is - a permission mask? */	result = rpccli_samr_create_dom_user(cli, mem_ctx, &domain_pol,					  acct_name, acb_info, unknown,					  &user_pol, &user_rid);	if (!NT_STATUS_IS_OK(result))		goto done;	result = rpccli_samr_close(cli, mem_ctx, &user_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;}/* Create domain group */static NTSTATUS cmd_samr_create_dom_group(struct rpc_pipe_client *cli,                                           TALLOC_CTX *mem_ctx,                                          int argc, const char **argv) {	POLICY_HND connect_pol, domain_pol, group_pol;	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;	const char *grp_name;	uint32 access_mask = MAXIMUM_ALLOWED_ACCESS;	if ((argc < 2) || (argc > 3)) {		printf("Usage: %s groupname [access mask]\n", argv[0]);		return NT_STATUS_OK;	}

⌨️ 快捷键说明

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