cifs.upcall: bump SPNEGO msg version number and don't reject old versions
[ira/wip.git] / source3 / nsswitch / wins.c
index 9d6273ce7b2e0cd1d3d69c9c541600f53d9b2b9d..7d42381986df537ab9f22fd1ea14c642ea9d8087 100644 (file)
@@ -58,9 +58,15 @@ static int wins_lookup_open_socket_in(void)
        if (res == -1)
                return -1;
 
-       setsockopt(res,SOL_SOCKET,SO_REUSEADDR,(char *)&val,sizeof(val));
+       if (setsockopt(res,SOL_SOCKET,SO_REUSEADDR,(char *)&val,sizeof(val)) != 0) {
+               close(res);
+               return -1;
+       }
 #ifdef SO_REUSEPORT
-       setsockopt(res,SOL_SOCKET,SO_REUSEPORT,(char *)&val,sizeof(val));
+       if (setsockopt(res,SOL_SOCKET,SO_REUSEPORT,(char *)&val,sizeof(val)) != 0) {
+               close(res);
+               return -1;
+       }
 #endif /* SO_REUSEPORT */
 
        /* now we've got a socket - we need to bind it */
@@ -85,7 +91,7 @@ static void nss_wins_init(void)
        TimeInit();
        setup_logging("nss_wins",False);
        load_case_tables();
-       lp_load(dyn_CONFIGFILE,True,False,False,True);
+       lp_load(get_dyn_CONFIGFILE(),True,False,False,True);
        load_interfaces();
 }
 
@@ -110,6 +116,7 @@ static struct in_addr *lookup_byname_backend(const char *name, int *count)
                }
                if (address[0].ss.ss_family != AF_INET) {
                        free(address);
+                       free(ret);
                        return NULL;
                }
                *ret = ((struct sockaddr_in *)&address[0].ss)->sin_addr;
@@ -133,6 +140,9 @@ static struct in_addr *lookup_byname_backend(const char *name, int *count)
                in_addr_to_sockaddr_storage(&ss, *bcast);
                pss = name_query(fd,name,0x00,True,True,&ss,count, &flags, NULL);
                if (pss) {
+                       if ((ret = SMB_MALLOC_P(struct in_addr)) == NULL) {
+                               return NULL;
+                       }
                        *ret = ((struct sockaddr_in *)pss)->sin_addr;
                        break;
                }
@@ -147,7 +157,7 @@ static struct in_addr *lookup_byname_backend(const char *name, int *count)
 static NODE_STATUS_STRUCT *lookup_byaddr_backend(char *addr, int *count)
 {
        int fd;
-       struct in_addr  ip;
+       struct sockaddr_storage ss;
        struct nmb_name nname;
        NODE_STATUS_STRUCT *status;
 
@@ -160,8 +170,10 @@ static NODE_STATUS_STRUCT *lookup_byaddr_backend(char *addr, int *count)
                return NULL;
 
        make_nmb_name(&nname, "*", 0);
-       (void)interpret_addr2(&ip,addr);
-       status = node_status_query(fd,&nname,ip, count, NULL);
+       if (!interpret_string_addr(&ss, addr, AI_NUMERICHOST)) {
+               return NULL;
+       }
+       status = node_status_query(fd, &nname, &ss, count, NULL);
 
        close(fd);
        return status;