diff options
author | Andrew Tridgell <tridge@samba.org> | 1998-10-04 11:25:06 +0000 |
---|---|---|
committer | Andrew Tridgell <tridge@samba.org> | 1998-10-04 11:25:06 +0000 |
commit | 1970c92c0a56672308314d39718f994302c95c95 (patch) | |
tree | c86bf6108aac78b6d8d6c7581d2809f1a7063668 /source3/libsmb | |
parent | f2c43ee03933b10cd815af233910d3a0c756f219 (diff) | |
download | samba-1970c92c0a56672308314d39718f994302c95c95.tar.gz samba-1970c92c0a56672308314d39718f994302c95c95.tar.xz samba-1970c92c0a56672308314d39718f994302c95c95.zip |
support NetServerEnum in smbwrapper. You can now do a ls in /smb/ and
it will list all servers in your workgroup. You can set your workgroup
with the SMBW_WORKGROUP environment variable.
(This used to be commit 64699810e2d94e8648a0a3341b1cc826d4e8bfd9)
Diffstat (limited to 'source3/libsmb')
-rw-r--r-- | source3/libsmb/clientgen.c | 2 | ||||
-rw-r--r-- | source3/libsmb/namequery.c | 41 |
2 files changed, 41 insertions, 2 deletions
diff --git a/source3/libsmb/clientgen.c b/source3/libsmb/clientgen.c index 20c0c361664..6b07eb65b33 100644 --- a/source3/libsmb/clientgen.c +++ b/source3/libsmb/clientgen.c @@ -535,7 +535,7 @@ The callback function takes 3 arguments: the machine name, the server type and the comment. ****************************************************************************/ BOOL cli_NetServerEnum(struct cli_state *cli, char *workgroup, uint32 stype, - void (*fn)(char *, uint32, char *)) + void (*fn)(const char *, uint32, const char *)) { char *rparam = NULL; char *rdata = NULL; diff --git a/source3/libsmb/namequery.c b/source3/libsmb/namequery.c index f988504bba5..a9da735f362 100644 --- a/source3/libsmb/namequery.c +++ b/source3/libsmb/namequery.c @@ -420,7 +420,6 @@ void endlmhosts(FILE *fp) or NetBIOS name. This uses the name switch in the smb.conf to determine the order of name resolution. *********************************************************/ - BOOL resolve_name(char *name, struct in_addr *return_ip) { int i; @@ -573,3 +572,43 @@ BOOL resolve_name(char *name, struct in_addr *return_ip) return False; } + + + +/******************************************************** +find the IP address of the master browser for a workgroup +*********************************************************/ +BOOL find_master(char *group, struct in_addr *master_ip) +{ + int sock; + struct in_addr *iplist = NULL; + int count, i; + int num_interfaces = iface_count(); + + sock = open_socket_in( SOCK_DGRAM, 0, 3, + interpret_addr(lp_socket_address()) ); + + if (sock == -1) return False; + + set_socket_options(sock,"SO_BROADCAST"); + + /* + * Lookup the name on all the interfaces, return on + * the first successful match. + */ + for( i = 0; i < num_interfaces; i++) { + struct in_addr sendto_ip; + /* Done this way to fix compiler error on IRIX 5.x */ + sendto_ip = *iface_bcast(*iface_n_ip(i)); + iplist = name_query(sock, group, 0x1D, True, False, + sendto_ip, &count, NULL); + if(iplist != NULL) { + *master_ip = iplist[0]; + free((char *)iplist); + close(sock); + return True; + } + } + close(sock); + return False; +} |