utils/smbtree.c

ソースコードを見る。

データ構造

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_listworkgroups
static struct name_listservers
static struct name_listshares


列挙型

enum tree_level

列挙型の値:
LEV_WORKGROUP 
LEV_SERVER 
LEV_SHARE 

smbtree.c29 行で定義されています。


関数

static void free_name_list ( struct name_list list  )  [static]

smbtree.c42 行で定義されています。

参照先 list().

参照元 print_tree().

00043 {
00044         while(list)
00045                 DLIST_REMOVE(list, list);
00046 }

static void add_name ( const char *  machine_name,
uint32  server_type,
const char *  comment,
void *  state 
) [static]

smbtree.c48 行で定義されています。

参照先 name_list::commentname_list::namename_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]

smbtree.c71 行で定義されています。

参照先 add_name()clicli_NetServerEnum()find_master_ip()get_ipc_connect()get_ipc_connect_master_ip_bcast()lp_workgroup()use_bcastworkgroups.

参照元 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]

smbtree.c107 行で定義されています。

参照先 add_name()clicli_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]

smbtree.c130 行で定義されています。

参照先 clicli_rpc_pipe_close()cli_rpc_pipe_open_noauth()srv_share_info_ctr_info::info1init_enum_hnd()rpc_pipe_client::mem_ctxnament_errstr()srv_share_info_ctr_info::num_entriesrpccli_srvsvc_net_share_enum()rpcstr_pull_unistr2_talloc()srv_share_info_ctr_info::sharestatus.

参照元 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]

smbtree.c184 行で定義されています。

参照先 add_name()clicli_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]

smbtree.c200 行で定義されています。

参照先 name_list::commentfree_name_list()get_servers()get_shares()get_workgroups()LEV_SERVERLEV_WORKGROUPlevelname_list::namename_list::nextprintf()serverssharesworkgroups.

参照元 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[] 
)

smbtree.c249 行で定義されています。

参照先 cmdline_auth_infodbfdyn_CONFIGFILEuser_auth_info::got_passLEV_SERVERLEV_WORKGROUPlevelload_case_tables()load_interfaces()user_auth_info::passwordpoptFreeContext()poptGetContext()poptGetNextOpt()print_tree()setup_logging()use_bcastx_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 }


変数

BOOL use_bcast [static]

smbtree.c25 行で定義されています。

enum tree_level level = LEV_SHARE [static]

smbtree.c30 行で定義されています。

参照元 _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]

smbtree.c40 行で定義されています。

参照元 get_workgroups()print_tree().

struct name_list * servers [static]

smbtree.c40 行で定義されています。

参照元 api_RNetServerEnum()api_RNetServerGetInfo()get_server_info()get_servers()print_tree().

struct name_list * shares [static]

smbtree.c40 行で定義されています。

参照元 get_shares()print_share_mode_table()print_tree()smb_change_share_mode_entry()smb_create_share_mode_entry_ex()smb_delete_share_mode_entry()smb_get_share_mode_entries()traverse_fn().


Sambaに対してSat Aug 29 21:24:37 2009に生成されました。  doxygen 1.4.7