summaryrefslogtreecommitdiff
path: root/source3/nsswitch/wins.c
diff options
context:
space:
mode:
Diffstat (limited to 'source3/nsswitch/wins.c')
-rw-r--r--source3/nsswitch/wins.c51
1 files changed, 25 insertions, 26 deletions
diff --git a/source3/nsswitch/wins.c b/source3/nsswitch/wins.c
index 9bb2d6755c..2133f817d1 100644
--- a/source3/nsswitch/wins.c
+++ b/source3/nsswitch/wins.c
@@ -80,10 +80,14 @@ static void nss_wins_init(void)
DEBUGLEVEL = 0;
AllowDebugChange = False;
+ /* needed for lp_xx() functions */
+ charset_initialise();
+
TimeInit();
setup_logging("nss_wins",False);
lp_load(dyn_CONFIGFILE,True,False,False);
load_interfaces();
+ codepage_initialise(lp_client_code_page());
}
static struct node_status *lookup_byaddr_backend(char *addr, int *count)
@@ -111,10 +115,10 @@ static struct node_status *lookup_byaddr_backend(char *addr, int *count)
static struct in_addr *lookup_byname_backend(const char *name, int *count)
{
- int fd = -1;
+ int fd;
struct in_addr *ret = NULL;
struct in_addr p;
- int j, flags = 0;
+ int j;
if (!initialised) {
nss_wins_init();
@@ -122,24 +126,33 @@ static struct in_addr *lookup_byname_backend(const char *name, int *count)
*count = 0;
- /* always try with wins first */
- if (resolve_wins(name,0x20,&ret,count)) {
- return ret;
- }
-
fd = wins_lookup_open_socket_in();
- if (fd == -1) {
+ if (fd == -1)
return NULL;
+
+ p = wins_srv_ip();
+ if( !is_zero_ip(p) ) {
+ ret = name_query(fd,name,0x20,False,True, p, count);
+ goto out;
+ }
+
+ if (lp_wins_support()) {
+ /* we are our own WINS server */
+ ret = name_query(fd,name,0x20,False,True, *interpret_addr2("127.0.0.1"), count);
+ goto out;
}
/* uggh, we have to broadcast to each interface in turn */
- for (j=iface_count() - 1;j >= 0;j--) {
+ for (j=iface_count() - 1;
+ j >= 0;
+ j--) {
struct in_addr *bcast = iface_n_bcast(j);
- ret = name_query(fd,name,0x20,True,True,*bcast,count, &flags, NULL);
+ ret = name_query(fd,name,0x20,True,True,*bcast,count);
if (ret) break;
}
-out:
+ out:
+
close(fd);
return ret;
}
@@ -306,19 +319,5 @@ _nss_wins_gethostbyname_r(const char *name, struct hostent *he,
return NSS_STATUS_SUCCESS;
}
-
-
-NSS_STATUS
-_nss_wins_gethostbyname2_r(const char *name, int af, struct hostent *he,
- char *buffer, size_t buflen, int *errnop,
- int *h_errnop)
-{
- if(af!=AF_INET) {
- *h_errnop = NO_DATA;
- *errnop = EAFNOSUPPORT;
- return NSS_STATUS_UNAVAIL;
- }
-
- return _nss_wins_gethostbyname_r(name,he,buffer,buflen,errnop,h_errnop);
-}
#endif
+