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

📄 srv_srvsvc_nt.c

📁 samba-3.0.22.tar.gz 编译smb服务器的源码
💻 C
📖 第 1 页 / 共 5 页
字号:
 Fill in a share info level 1007 structure. ***************************************************************************/static void init_srv_share_info_1007(pipes_struct *p, SRV_SHARE_INFO_1007* sh1007, int snum){        pstring alternate_directory_name = "";	uint32 flags = 0;	ZERO_STRUCTP(sh1007);  	init_srv_share_info1007(&sh1007->info_1007, flags, alternate_directory_name);	init_srv_share_info1007_str(&sh1007->info_1007_str, alternate_directory_name);}/******************************************************************* Fill in a share info level 1501 structure. ********************************************************************/static void init_srv_share_info_1501(pipes_struct *p, SRV_SHARE_INFO_1501 *sh1501, int snum){	SEC_DESC *sd;	size_t sd_size;	TALLOC_CTX *ctx = p->mem_ctx;	ZERO_STRUCTP(sh1501);	sd = get_share_security(ctx, snum, &sd_size);	sh1501->sdb = make_sec_desc_buf(p->mem_ctx, sd_size, sd);}/******************************************************************* True if it ends in '$'. ********************************************************************/static BOOL is_hidden_share(int snum){	const char *net_name = lp_servicename(snum);	return (net_name[strlen(net_name) - 1] == '$') ? True : False;}/******************************************************************* Fill in a share info structure. ********************************************************************/static BOOL init_srv_share_info_ctr(pipes_struct *p, SRV_SHARE_INFO_CTR *ctr,	       uint32 info_level, uint32 *resume_hnd, uint32 *total_entries, BOOL all_shares){	int num_entries = 0;	int num_services = lp_numservices();	int snum;	TALLOC_CTX *ctx = p->mem_ctx;	DEBUG(5,("init_srv_share_info_ctr\n"));	ZERO_STRUCTPN(ctr);	ctr->info_level = ctr->switch_value = info_level;	*resume_hnd = 0;	/* Count the number of entries. */	for (snum = 0; snum < num_services; snum++) {		if (lp_browseable(snum) && lp_snum_ok(snum) && (all_shares || !is_hidden_share(snum)) )			num_entries++;	}	*total_entries = num_entries;	ctr->num_entries2 = ctr->num_entries = num_entries;	ctr->ptr_share_info = ctr->ptr_entries = 1;	if (!num_entries)		return True;	switch (info_level) {	case 0:	{		SRV_SHARE_INFO_0 *info0 = TALLOC_ARRAY(ctx, SRV_SHARE_INFO_0, num_entries);		int i = 0;		if (!info0) {			return False;		}		for (snum = *resume_hnd; snum < num_services; snum++) {			if (lp_browseable(snum) && lp_snum_ok(snum) && (all_shares || !is_hidden_share(snum)) ) {				init_srv_share_info_0(p, &info0[i++], snum);			}		}		ctr->share.info0 = info0;		break;	}	case 1:	{		SRV_SHARE_INFO_1 *info1 = TALLOC_ARRAY(ctx, SRV_SHARE_INFO_1, num_entries);		int i = 0;		if (!info1) {			return False;		}		for (snum = *resume_hnd; snum < num_services; snum++) {			if (lp_browseable(snum) && lp_snum_ok(snum) && (all_shares || !is_hidden_share(snum)) ) {				init_srv_share_info_1(p, &info1[i++], snum);			}		}		ctr->share.info1 = info1;		break;	}	case 2:	{		SRV_SHARE_INFO_2 *info2 = TALLOC_ARRAY(ctx, SRV_SHARE_INFO_2, num_entries);		int i = 0;		if (!info2) {			return False;		}		for (snum = *resume_hnd; snum < num_services; snum++) {			if (lp_browseable(snum) && lp_snum_ok(snum) && (all_shares || !is_hidden_share(snum)) ) {				init_srv_share_info_2(p, &info2[i++], snum);			}		}		ctr->share.info2 = info2;		break;	}	case 501:	{		SRV_SHARE_INFO_501 *info501 = TALLOC_ARRAY(ctx, SRV_SHARE_INFO_501, num_entries);		int i = 0;			if (!info501) {			return False;		}		for (snum = *resume_hnd; snum < num_services; snum++) {			if (lp_browseable(snum) && lp_snum_ok(snum) && (all_shares || !is_hidden_share(snum)) ) {				init_srv_share_info_501(p, &info501[i++], snum);			}		}			ctr->share.info501 = info501;		break;	}	case 502:	{		SRV_SHARE_INFO_502 *info502 = TALLOC_ARRAY(ctx, SRV_SHARE_INFO_502, num_entries);		int i = 0;		if (!info502) {			return False;		}		for (snum = *resume_hnd; snum < num_services; snum++) {			if (lp_browseable(snum) && lp_snum_ok(snum) && (all_shares || !is_hidden_share(snum)) ) {				init_srv_share_info_502(p, &info502[i++], snum);			}		}		ctr->share.info502 = info502;		break;	}	/* here for completeness but not currently used with enum (1004 - 1501)*/		case 1004:	{		SRV_SHARE_INFO_1004 *info1004 = TALLOC_ARRAY(ctx, SRV_SHARE_INFO_1004, num_entries);		int i = 0;		if (!info1004) {			return False;		}		for (snum = *resume_hnd; snum < num_services; snum++) {			if (lp_browseable(snum) && lp_snum_ok(snum) && (all_shares || !is_hidden_share(snum)) ) {				init_srv_share_info_1004(p, &info1004[i++], snum);			}		}		ctr->share.info1004 = info1004;		break;	}	case 1005:	{		SRV_SHARE_INFO_1005 *info1005 = TALLOC_ARRAY(ctx, SRV_SHARE_INFO_1005, num_entries);		int i = 0;		if (!info1005) {			return False;		}		for (snum = *resume_hnd; snum < num_services; snum++) {			if (lp_browseable(snum) && lp_snum_ok(snum) && (all_shares || !is_hidden_share(snum)) ) {				init_srv_share_info_1005(p, &info1005[i++], snum);			}		}		ctr->share.info1005 = info1005;		break;	}	case 1006:	{		SRV_SHARE_INFO_1006 *info1006 = TALLOC_ARRAY(ctx, SRV_SHARE_INFO_1006, num_entries);		int i = 0;		if (!info1006) {			return False;		}		for (snum = *resume_hnd; snum < num_services; snum++) {			if (lp_browseable(snum) && lp_snum_ok(snum) && (all_shares || !is_hidden_share(snum)) ) {				init_srv_share_info_1006(p, &info1006[i++], snum);			}		}		ctr->share.info1006 = info1006;		break;	}	case 1007:	{		SRV_SHARE_INFO_1007 *info1007 = TALLOC_ARRAY(ctx, SRV_SHARE_INFO_1007, num_entries);		int i = 0;		if (!info1007) {			return False;		}		for (snum = *resume_hnd; snum < num_services; snum++) {			if (lp_browseable(snum) && lp_snum_ok(snum) && (all_shares || !is_hidden_share(snum)) ) {				init_srv_share_info_1007(p, &info1007[i++], snum);			}		}		ctr->share.info1007 = info1007;		break;	}	case 1501:	{		SRV_SHARE_INFO_1501 *info1501 = TALLOC_ARRAY(ctx, SRV_SHARE_INFO_1501, num_entries);		int i = 0;		if (!info1501) {			return False;		}		for (snum = *resume_hnd; snum < num_services; snum++) {			if (lp_browseable(snum) && lp_snum_ok(snum) && (all_shares || !is_hidden_share(snum)) ) {				init_srv_share_info_1501(p, &info1501[i++], snum);			}		}		ctr->share.info1501 = info1501;		break;	}	default:		DEBUG(5,("init_srv_share_info_ctr: unsupported switch value %d\n", info_level));		return False;	}	return True;}/******************************************************************* Inits a SRV_R_NET_SHARE_ENUM structure.********************************************************************/static void init_srv_r_net_share_enum(pipes_struct *p, SRV_R_NET_SHARE_ENUM *r_n,				      uint32 info_level, uint32 resume_hnd, BOOL all)  {	DEBUG(5,("init_srv_r_net_share_enum: %d\n", __LINE__));	if (init_srv_share_info_ctr(p, &r_n->ctr, info_level,				    &resume_hnd, &r_n->total_entries, all)) {		r_n->status = WERR_OK;	} else {		r_n->status = WERR_UNKNOWN_LEVEL;	}	init_enum_hnd(&r_n->enum_hnd, resume_hnd);}/******************************************************************* Inits a SRV_R_NET_SHARE_GET_INFO structure.********************************************************************/static void init_srv_r_net_share_get_info(pipes_struct *p, SRV_R_NET_SHARE_GET_INFO *r_n,				  char *share_name, uint32 info_level){	WERROR status = WERR_OK;	int snum;	DEBUG(5,("init_srv_r_net_share_get_info: %d\n", __LINE__));	r_n->info.switch_value = info_level;	snum = find_service(share_name);	if (snum >= 0) {		switch (info_level) {		case 0:			init_srv_share_info_0(p, &r_n->info.share.info0, snum);			break;		case 1:			init_srv_share_info_1(p, &r_n->info.share.info1, snum);			break;		case 2:			init_srv_share_info_2(p, &r_n->info.share.info2, snum);			break;		case 501:			init_srv_share_info_501(p, &r_n->info.share.info501, snum);			break;		case 502:			init_srv_share_info_502(p, &r_n->info.share.info502, snum);			break;			/* here for completeness */		case 1004:			init_srv_share_info_1004(p, &r_n->info.share.info1004, snum);			break;		case 1005:			init_srv_share_info_1005(p, &r_n->info.share.info1005, snum);			break;			/* here for completeness 1006 - 1501 */		case 1006:			init_srv_share_info_1006(p, &r_n->info.share.info1006, snum);			break;		case 1007:			init_srv_share_info_1007(p, &r_n->info.share.info1007, snum);			break;		case 1501:			init_srv_share_info_1501(p, &r_n->info.share.info1501, snum);			break;		default:			DEBUG(5,("init_srv_net_share_get_info: unsupported switch value %d\n", info_level));			status = WERR_UNKNOWN_LEVEL;			break;		}	} else {		status = WERR_INVALID_NAME;	}	r_n->info.ptr_share_ctr = W_ERROR_IS_OK(status) ? 1 : 0;	r_n->status = status;}/******************************************************************* fill in a sess info level 1 structure. ********************************************************************/static void init_srv_sess_0_info(SESS_INFO_0 *se0, SESS_INFO_0_STR *str0, char *name){	init_srv_sess_info0(se0, name);	init_srv_sess_info0_str(str0, name);}/******************************************************************* fill in a sess info level 0 structure. ********************************************************************/static void init_srv_sess_info_0(SRV_SESS_INFO_0 *ss0, uint32 *snum, uint32 *stot){	struct sessionid *session_list;	uint32 num_entries = 0;	(*stot) = list_sessions(&session_list);	if (ss0 == NULL) {		(*snum) = 0;		SAFE_FREE(session_list);		return;	}	DEBUG(5,("init_srv_sess_0_ss0\n"));	if (snum) {		for (; (*snum) < (*stot) && num_entries < MAX_SESS_ENTRIES; (*snum)++) {			init_srv_sess_0_info(&ss0->info_0[num_entries],								 &ss0->info_0_str[num_entries], session_list[(*snum)].remote_machine);			/* move on to creating next session */			/* move on to creating next sess */			num_entries++;		}		ss0->num_entries_read  = num_entries;		ss0->ptr_sess_info     = num_entries > 0 ? 1 : 0;		ss0->num_entries_read2 = num_entries;				if ((*snum) >= (*stot)) {			(*snum) = 0;		}	} else {		ss0->num_entries_read = 0;		ss0->ptr_sess_info = 0;		ss0->num_entries_read2 = 0;	}	SAFE_FREE(session_list);}/******************************************************************* fill in a sess info level 1 structure. ********************************************************************/static void init_srv_sess_1_info(SESS_INFO_1 *se1, SESS_INFO_1_STR *str1,				char *name, char *user,				uint32 num_opens,				uint32 open_time, uint32 idle_time,				uint32 usr_flgs){	init_srv_sess_info1(se1 , name, user, num_opens, open_time, idle_time, usr_flgs);	init_srv_sess_info1_str(str1, name, user);}/******************************************************************* fill in a sess info level 1 structure. ********************************************************************/static void init_srv_sess_info_1(SRV_SESS_INFO_1 *ss1, uint32 *snum, uint32 *stot){	struct sessionid *session_list;	uint32 num_entries = 0;	(*stot) = list_sessions(&session_list);	if (ss1 == NULL) {		(*snum) = 0;		SAFE_FREE(session_list);		return;	}	DEBUG(5,("init_srv_sess_1_ss1\n"));	if (snum) {		for (; (*snum) < (*stot) && num_entries < MAX_SESS_ENTRIES; (*snum)++) {			init_srv_sess_1_info(&ss1->info_1[num_entries],					     &ss1->info_1_str[num_entries],					    session_list[*snum].remote_machine,					     session_list[*snum].username,			                     1, 10, 5, 0);			/* move on to creating next session */			/* move on to creating next sess */			num_entries++;		}		ss1->num_entries_read  = num_entries;		ss1->ptr_sess_info     = num_entries > 0 ? 1 : 0;		ss1->num_entries_read2 = num_entries;				if ((*snum) >= (*stot)) {			(*snum) = 0;		}	} else {		ss1->num_entries_read = 0;		ss1->ptr_sess_info = 0;

⌨️ 快捷键说明

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