データ構造 | |
struct | name_list |
列挙型 | |
enum | tree_level { LEV_WORKGROUP, LEV_SERVER, LEV_SHARE } |
関数 | |
static void | free_name_list (struct name_list *list) |
static void | add_name (const char *machine_name, uint32 server_type, const char *comment, void *state) |
static BOOL | get_workgroups (struct user_auth_info *user_info) |
static BOOL | get_servers (char *workgroup, struct user_auth_info *user_info) |
static BOOL | get_rpc_shares (struct cli_state *cli, void(*fn)(const char *, uint32, const char *, void *), void *state) |
static BOOL | get_shares (char *server_name, struct user_auth_info *user_info) |
static BOOL | print_tree (struct user_auth_info *user_info) |
int | main (int argc, char *argv[]) |
変数 | |
static BOOL | use_bcast |
static enum tree_level | level = LEV_SHARE |
static struct name_list * | workgroups |
static struct name_list * | servers |
static struct name_list * | shares |
enum tree_level |
static void free_name_list | ( | struct name_list * | list | ) | [static] |
static void add_name | ( | const char * | machine_name, | |
uint32 | server_type, | |||
const char * | comment, | |||
void * | state | |||
) | [static] |
参照先 name_list::comment・name_list::name・name_list::server_type.
参照元 fetch_database_to_ldif()・get_servers()・get_shares()・get_workgroups().
00050 { 00051 struct name_list **name_list = (struct name_list **)state; 00052 struct name_list *new_name; 00053 00054 new_name = SMB_MALLOC_P(struct name_list); 00055 00056 if (!new_name) 00057 return; 00058 00059 ZERO_STRUCTP(new_name); 00060 00061 pstrcpy(new_name->name, machine_name); 00062 pstrcpy(new_name->comment, comment); 00063 new_name->server_type = server_type; 00064 00065 DLIST_ADD(*name_list, new_name); 00066 }
static BOOL get_workgroups | ( | struct user_auth_info * | user_info | ) | [static] |
参照先 add_name()・cli・cli_NetServerEnum()・find_master_ip()・get_ipc_connect()・get_ipc_connect_master_ip_bcast()・lp_workgroup()・use_bcast・workgroups.
参照元 print_tree().
00072 { 00073 struct cli_state *cli; 00074 struct in_addr server_ip; 00075 pstring master_workgroup; 00076 00077 /* Try to connect to a #1d name of our current workgroup. If that 00078 doesn't work broadcast for a master browser and then jump off 00079 that workgroup. */ 00080 00081 pstrcpy(master_workgroup, lp_workgroup()); 00082 00083 if (!use_bcast && !find_master_ip(lp_workgroup(), &server_ip)) { 00084 DEBUG(4, ("Unable to find master browser for workgroup %s, falling back to broadcast\n", 00085 master_workgroup)); 00086 use_bcast = True; 00087 } else if(!use_bcast) { 00088 if (!(cli = get_ipc_connect(inet_ntoa(server_ip), &server_ip, user_info))) 00089 return False; 00090 } 00091 00092 if (!(cli = get_ipc_connect_master_ip_bcast(master_workgroup, user_info))) { 00093 DEBUG(4, ("Unable to find master browser by " 00094 "broadcast\n")); 00095 return False; 00096 } 00097 00098 if (!cli_NetServerEnum(cli, master_workgroup, 00099 SV_TYPE_DOMAIN_ENUM, add_name, &workgroups)) 00100 return False; 00101 00102 return True; 00103 }
static BOOL get_servers | ( | char * | workgroup, | |
struct user_auth_info * | user_info | |||
) | [static] |
参照先 add_name()・cli・cli_NetServerEnum()・find_master_ip()・get_ipc_connect()・servers.
参照元 print_tree().
00108 { 00109 struct cli_state *cli; 00110 struct in_addr server_ip; 00111 00112 /* Open an IPC$ connection to the master browser for the workgroup */ 00113 00114 if (!find_master_ip(workgroup, &server_ip)) { 00115 DEBUG(4, ("Cannot find master browser for workgroup %s\n", 00116 workgroup)); 00117 return False; 00118 } 00119 00120 if (!(cli = get_ipc_connect(inet_ntoa(server_ip), &server_ip, user_info))) 00121 return False; 00122 00123 if (!cli_NetServerEnum(cli, workgroup, SV_TYPE_ALL, add_name, 00124 &servers)) 00125 return False; 00126 00127 return True; 00128 }
static BOOL get_rpc_shares | ( | struct cli_state * | cli, | |
void(*)(const char *, uint32, const char *, void *) | fn, | |||
void * | state | |||
) | [static] |
参照先 cli・cli_rpc_pipe_close()・cli_rpc_pipe_open_noauth()・srv_share_info_ctr_info::info1・init_enum_hnd()・rpc_pipe_client::mem_ctx・name・nt_errstr()・srv_share_info_ctr_info::num_entries・rpccli_srvsvc_net_share_enum()・rpcstr_pull_unistr2_talloc()・srv_share_info_ctr_info::share・status.
参照元 get_shares().
00133 { 00134 NTSTATUS status; 00135 struct rpc_pipe_client *pipe_hnd; 00136 TALLOC_CTX *mem_ctx; 00137 ENUM_HND enum_hnd; 00138 WERROR werr; 00139 SRV_SHARE_INFO_CTR ctr; 00140 int i; 00141 00142 mem_ctx = talloc_new(NULL); 00143 if (mem_ctx == NULL) { 00144 DEBUG(0, ("talloc_new failed\n")); 00145 return False; 00146 } 00147 00148 init_enum_hnd(&enum_hnd, 0); 00149 00150 pipe_hnd = cli_rpc_pipe_open_noauth(cli, PI_SRVSVC, &status); 00151 00152 if (pipe_hnd == NULL) { 00153 DEBUG(10, ("Could not connect to srvsvc pipe: %s\n", 00154 nt_errstr(status))); 00155 TALLOC_FREE(mem_ctx); 00156 return False; 00157 } 00158 00159 werr = rpccli_srvsvc_net_share_enum(pipe_hnd, mem_ctx, 1, &ctr, 00160 0xffffffff, &enum_hnd); 00161 00162 if (!W_ERROR_IS_OK(werr)) { 00163 TALLOC_FREE(mem_ctx); 00164 cli_rpc_pipe_close(pipe_hnd); 00165 return False; 00166 } 00167 00168 for (i=0; i<ctr.num_entries; i++) { 00169 SRV_SHARE_INFO_1 *info = &ctr.share.info1[i]; 00170 char *name, *comment; 00171 name = rpcstr_pull_unistr2_talloc( 00172 mem_ctx, &info->info_1_str.uni_netname); 00173 comment = rpcstr_pull_unistr2_talloc( 00174 mem_ctx, &info->info_1_str.uni_remark); 00175 fn(name, info->info_1.type, comment, state); 00176 } 00177 00178 TALLOC_FREE(mem_ctx); 00179 cli_rpc_pipe_close(pipe_hnd); 00180 return True; 00181 }
static BOOL get_shares | ( | char * | server_name, | |
struct user_auth_info * | user_info | |||
) | [static] |
参照先 add_name()・cli・cli_RNetShareEnum()・get_ipc_connect()・get_rpc_shares()・shares.
参照元 print_tree().
00185 { 00186 struct cli_state *cli; 00187 00188 if (!(cli = get_ipc_connect(server_name, NULL, user_info))) 00189 return False; 00190 00191 if (get_rpc_shares(cli, add_name, &shares)) 00192 return True; 00193 00194 if (!cli_RNetShareEnum(cli, add_name, &shares)) 00195 return False; 00196 00197 return True; 00198 }
static BOOL print_tree | ( | struct user_auth_info * | user_info | ) | [static] |
参照先 name_list::comment・free_name_list()・get_servers()・get_shares()・get_workgroups()・LEV_SERVER・LEV_WORKGROUP・level・name_list::name・name_list::next・printf()・servers・shares・workgroups.
参照元 main().
00201 { 00202 struct name_list *wg, *sv, *sh; 00203 00204 /* List workgroups */ 00205 00206 if (!get_workgroups(user_info)) 00207 return False; 00208 00209 for (wg = workgroups; wg; wg = wg->next) { 00210 00211 printf("%s\n", wg->name); 00212 00213 /* List servers */ 00214 00215 free_name_list(servers); 00216 servers = NULL; 00217 00218 if (level == LEV_WORKGROUP || 00219 !get_servers(wg->name, user_info)) 00220 continue; 00221 00222 for (sv = servers; sv; sv = sv->next) { 00223 00224 printf("\t\\\\%-15s\t\t%s\n", 00225 sv->name, sv->comment); 00226 00227 /* List shares */ 00228 00229 free_name_list(shares); 00230 shares = NULL; 00231 00232 if (level == LEV_SERVER || 00233 !get_shares(sv->name, user_info)) 00234 continue; 00235 00236 for (sh = shares; sh; sh = sh->next) { 00237 printf("\t\t\\\\%s\\%-15s\t%s\n", 00238 sv->name, sh->name, sh->comment); 00239 } 00240 } 00241 } 00242 00243 return True; 00244 }
int main | ( | int | argc, | |
char * | argv[] | |||
) |
参照先 cmdline_auth_info・dbf・dyn_CONFIGFILE・user_auth_info::got_pass・LEV_SERVER・LEV_WORKGROUP・level・load_case_tables()・load_interfaces()・user_auth_info::password・poptFreeContext()・poptGetContext()・poptGetNextOpt()・print_tree()・setup_logging()・use_bcast・x_stderr.
00250 { 00251 struct poptOption long_options[] = { 00252 POPT_AUTOHELP 00253 { "broadcast", 'b', POPT_ARG_VAL, &use_bcast, True, "Use broadcast instead of using the master browser" }, 00254 { "domains", 'D', POPT_ARG_VAL, &level, LEV_WORKGROUP, "List only domains (workgroups) of tree" }, 00255 { "servers", 'S', POPT_ARG_VAL, &level, LEV_SERVER, "List domains(workgroups) and servers of tree" }, 00256 POPT_COMMON_SAMBA 00257 POPT_COMMON_CREDENTIALS 00258 POPT_TABLEEND 00259 }; 00260 poptContext pc; 00261 00262 /* Initialise samba stuff */ 00263 load_case_tables(); 00264 00265 setlinebuf(stdout); 00266 00267 dbf = x_stderr; 00268 00269 setup_logging(argv[0],True); 00270 00271 pc = poptGetContext("smbtree", argc, (const char **)argv, long_options, 00272 POPT_CONTEXT_KEEP_FIRST); 00273 while(poptGetNextOpt(pc) != -1); 00274 poptFreeContext(pc); 00275 00276 lp_load(dyn_CONFIGFILE,True,False,False,True); 00277 load_interfaces(); 00278 00279 /* Parse command line args */ 00280 00281 if (!cmdline_auth_info.got_pass) { 00282 char *pass = getpass("Password: "); 00283 if (pass) { 00284 pstrcpy(cmdline_auth_info.password, pass); 00285 } 00286 cmdline_auth_info.got_pass = True; 00287 } 00288 00289 /* Now do our stuff */ 00290 00291 if (!print_tree(&cmdline_auth_info)) 00292 return 1; 00293 00294 return 0; 00295 }
enum tree_level level = LEV_SHARE [static] |
参照元 _dfs_Enum()・_dfs_GetInfo()・_dsrole_get_primary_dominfo()・_spoolss_addprinterdriver()・_spoolss_addprinterex()・_spoolss_enumforms()・_spoolss_enumjobs()・_spoolss_enumports()・_spoolss_enumprinterdrivers()・_spoolss_enumprinters()・_spoolss_enumprintmonitors()・_spoolss_enumprintprocdatatypes()・_spoolss_enumprintprocessors()・_spoolss_getform()・_spoolss_getjob()・_spoolss_getprinter()・_spoolss_getprinterdriver2()・_spoolss_getprinterdriverdirectory()・_spoolss_getprintprocessordirectory()・_spoolss_setprinter()・api_NetWkstaGetInfo()・call_nt_transact_get_user_quota()・cb_itemsignal()・cli_receive_smb()・cmd_spoolss_addprinterdriver()・cmd_spoolss_addprinterex()・cmd_spoolss_enum_forms()・cmd_spoolss_enum_jobs()・cmd_spoolss_setdriver()・do_smb_load_module()・get_path()・main()・ndr_print_security_ace_object_ctr()・ndr_print_security_ace_object_inherited_type()・ndr_print_security_ace_object_type()・ndr_print_WKS_USER_ENUM_UNION()・ndr_print_wkssvc_NetWkstaInfo()・ndr_print_wkssvc_NetWkstaTransportCtr()・ndr_pull_security_ace_object_ctr()・ndr_pull_security_ace_object_inherited_type()・ndr_pull_security_ace_object_type()・ndr_pull_WKS_USER_ENUM_UNION()・ndr_pull_wkssvc_NetWkstaInfo()・ndr_pull_wkssvc_NetWkstaTransportCtr()・ndr_push_security_ace_object_ctr()・ndr_push_security_ace_object_inherited_type()・ndr_push_security_ace_object_type()・ndr_push_WKS_USER_ENUM_UNION()・ndr_push_wkssvc_NetWkstaInfo()・ndr_push_wkssvc_NetWkstaTransportCtr()・pass_check()・print_tree()・profile_message()・profilelevel_cb()・reqprofile_message()・rpc_printer_driver_list_internals()・rpc_printer_list_internals()・rpc_printer_migrate_drivers_internals()・rpc_printer_migrate_forms_internals()・rpc_printer_migrate_printers_internals()・rpc_printer_migrate_security_internals()・rpc_printer_migrate_settings_internals()・rpc_printer_publish_internals_args()・rpc_printer_publish_list_internals()・rpc_share_add_internals()・rpc_share_list_internals()・rpc_share_migrate_files_internals()・rpc_share_migrate_security_internals()・rpc_share_migrate_shares_internals()・rpccli_spoolss_getprintprocessordirectory()・rpccli_spoolss_startdocprinter()・run_w2ktest()・samr_set_user_info2()・set_socket_options()・spoolss_addprinterdriver()・spoolss_enumports()・spoolss_enumprinterdrivers()・spoolss_enumprinters()・spoolss_getprinterdriverdir()・spoolss_hnd_addform()・spoolss_hnd_enumforms()・spoolss_hnd_enumjobs()・spoolss_hnd_getform()・spoolss_hnd_getjob()・spoolss_hnd_getprinter()・spoolss_hnd_getprinterdriver()・spoolss_hnd_setform()・spoolss_hnd_setjob()・spoolss_hnd_setprinter()・spoolss_hnd_startdocprinter()・srvsvc_netservergetinfo()・torture_nttrans_scan()・torture_trans2_scan().
struct name_list* workgroups [static] |