/**************************************************************************** display tree of smb workgroups, servers and shares ****************************************************************************/ static bool get_workgroups(struct user_auth_info *user_info) { struct cli_state *cli; struct sockaddr_storage server_ss; TALLOC_CTX *ctx = talloc_tos(); char *master_workgroup = NULL; /* Try to connect to a #1d name of our current workgroup. If that doesn't work broadcast for a master browser and then jump off that workgroup. */ master_workgroup = talloc_strdup(ctx, lp_workgroup()); if (!master_workgroup) { return false; } if (!use_bcast && !find_master_ip(lp_workgroup(), &server_ss)) { DEBUG(4,("Unable to find master browser for workgroup %s, " "falling back to broadcast\n", master_workgroup)); use_bcast = true; } if (!use_bcast) { char addr[INET6_ADDRSTRLEN]; print_sockaddr(addr, sizeof(addr), &server_ss); cli = get_ipc_connect(addr, &server_ss, user_info); if (cli == NULL) { return false; } } else { cli = get_ipc_connect_master_ip_bcast(talloc_tos(), user_info, &master_workgroup); if (cli == NULL) { DEBUG(4, ("Unable to find master browser by " "broadcast\n")); return false; } } if (!cli_NetServerEnum(cli, master_workgroup, SV_TYPE_DOMAIN_ENUM, add_name, &workgroups)) return False; return True; }
/**************************************************************************** display tree of smb workgroups, servers and shares ****************************************************************************/ static BOOL get_workgroups(struct user_auth_info *user_info) { struct cli_state *cli, *cli2; struct in_addr server_ip; pstring master_workgroup; /* Try to connect to a #1d name of our current workgroup. If that doesn't work broadcast for a master browser and then jump off that workgroup. */ pstrcpy(master_workgroup, lp_workgroup()); if (!use_bcast && !find_master_ip(lp_workgroup(), &server_ip)) { DEBUG(4, ("Unable to find master browser for workgroup %s, falling back to broadcast\n", master_workgroup)); use_bcast = True; } else if(!use_bcast) { if (!(cli = get_ipc_connect(inet_ntoa(server_ip), &server_ip, user_info))) return False; } if (!(cli2 = get_ipc_connect_master_ip_bcast(master_workgroup, user_info))) { DEBUG(4, ("Unable to find master browser by " "broadcast\n")); if(cli) cli_shutdown(cli); return False; } if(cli2) { if(cli) cli_shutdown(cli); cli = cli2; } if (!cli_NetServerEnum(cli, master_workgroup, SV_TYPE_DOMAIN_ENUM, add_name, &workgroups)) { if(cli) cli_shutdown(cli); return False; } if(cli) cli_shutdown(cli); return True; }