📄 srv_srvsvc_nt.c
字号:
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 + -