summaryrefslogtreecommitdiff
path: root/source3/libsmb
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>1998-10-04 11:25:06 +0000
committerAndrew Tridgell <tridge@samba.org>1998-10-04 11:25:06 +0000
commit1970c92c0a56672308314d39718f994302c95c95 (patch)
treec86bf6108aac78b6d8d6c7581d2809f1a7063668 /source3/libsmb
parentf2c43ee03933b10cd815af233910d3a0c756f219 (diff)
downloadsamba-1970c92c0a56672308314d39718f994302c95c95.tar.gz
samba-1970c92c0a56672308314d39718f994302c95c95.tar.bz2
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.c2
-rw-r--r--source3/libsmb/namequery.c41
2 files changed, 41 insertions, 2 deletions
diff --git a/source3/libsmb/clientgen.c b/source3/libsmb/clientgen.c
index 20c0c36166..6b07eb65b3 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 f988504bba..a9da735f36 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;
+}