tdb: don't free old recovery area when expanding if already at EOF.
[mat/samba.git] / nsswitch / wins.c
index 5c9ad2fb05256b0a3282cdf89f9bc0e3f1d25062..d63968b2bc5a3a055de016ad666a1800544f7576 100644 (file)
@@ -60,8 +60,9 @@ static void nss_wins_init(void)
 static struct in_addr *lookup_byname_backend(const char *name, int *count)
 {
        TALLOC_CTX *frame = talloc_stackframe();
-       struct ip_service *address = NULL;
+       struct sockaddr_storage *address = NULL;
        struct in_addr *ret = NULL;
+       NTSTATUS status;
        int j;
 
        if (!initialised) {
@@ -71,21 +72,20 @@ static struct in_addr *lookup_byname_backend(const char *name, int *count)
        *count = 0;
 
        /* always try with wins first */
-       if (NT_STATUS_IS_OK(resolve_wins(name,0x00,&address,count))) {
+       status = resolve_wins(name, 0x00, talloc_tos(),
+                             &address, count);
+       if (NT_STATUS_IS_OK(status)) {
                if ( (ret = SMB_MALLOC_P(struct in_addr)) == NULL ) {
-                       free( address );
                        TALLOC_FREE(frame);
                        return NULL;
                }
-               if (address[0].ss.ss_family != AF_INET) {
-                       free(address);
+               if (address[0].ss_family != AF_INET) {
                        free(ret);
                        TALLOC_FREE(frame);
                        return NULL;
                }
-               *ret = ((struct sockaddr_in *)(void *)&address[0].ss)
+               *ret = ((struct sockaddr_in *)(void *)address)
                        ->sin_addr;
-               free( address );
                TALLOC_FREE(frame);
                return ret;
        }
@@ -95,7 +95,6 @@ static struct in_addr *lookup_byname_backend(const char *name, int *count)
                const struct in_addr *bcast = iface_n_bcast_v4(j);
                struct sockaddr_storage ss;
                struct sockaddr_storage *pss;
-               NTSTATUS status;
 
                if (!bcast) {
                        continue;