r15243: Sorry for the breakage:
authorGünther Deschner <gd@samba.org>
Tue, 25 Apr 2006 12:53:38 +0000 (12:53 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 16:16:30 +0000 (11:16 -0500)
* Fix the build without kerberos headers
* Fix memleak in the krb5_address handling

Guenther
(This used to be commit 10e42117559d4bc6a34e41a94914bf6c65c3477f)

source3/include/ads.h
source3/libsmb/clikrb5.c

index 711dd2aa70b3ca97b7009893998c53d0b515891b..f29c94bb9019a8eebb35d30c77fdb2795efcb065 100644 (file)
@@ -271,10 +271,14 @@ typedef void **ADS_MODLIST;
 #define KRB5_ADDR_NETBIOS 0x14
 #endif
 
+#ifdef HAVE_KRB5
 typedef struct {
 #if defined(HAVE_MAGIC_IN_KRB5_ADDRESS) && defined(HAVE_ADDRTYPE_IN_KRB5_ADDRESS) /* MIT */
        krb5_address **addrs;
-#else /* Heimdal has the krb5_addresses type */
+#elif defined(HAVE_KRB5_ADDRESSES) /* Heimdal */
        krb5_addresses *addrs;
+#else
+#error UNKNOWN_KRB5_ADDRESS_TYPE
 #endif
 } smb_krb5_addresses;
+#endif
index 40ffec6f5328e49e2e52d9e759f466c4cb3a64da..e0d6b09d977db1b4d1db43808ba932e8f3c4a649 100644 (file)
@@ -1208,6 +1208,9 @@ done:
  krb5_error_code smb_krb5_free_addresses(krb5_context context, smb_krb5_addresses *addr)
 {
        krb5_error_code ret = 0;
+       if (addr == NULL) {
+               return ret;
+       }
 #if defined(HAVE_MAGIC_IN_KRB5_ADDRESS) && defined(HAVE_ADDRTYPE_IN_KRB5_ADDRESS) /* MIT */
        krb5_free_addresses(context, addr->addrs);
 #elif defined(HAVE_ADDR_TYPE_IN_KRB5_ADDRESS) /* Heimdal */
@@ -1242,6 +1245,7 @@ done:
 
                addrs = (krb5_address **)SMB_MALLOC(sizeof(krb5_address *) * num_addr);
                if (addrs == NULL) {
+                       SAFE_FREE(kerb_addr);
                        return ENOMEM;
                }
 
@@ -1250,6 +1254,7 @@ done:
                addrs[0] = (krb5_address *)SMB_MALLOC(sizeof(krb5_address));
                if (addrs[0] == NULL) {
                        SAFE_FREE(addrs);
+                       SAFE_FREE(kerb_addr);
                        return ENOMEM;
                }
 
@@ -1260,6 +1265,7 @@ done:
                if (addrs[0]->contents == NULL) {
                        SAFE_FREE(addrs[0]);
                        SAFE_FREE(addrs);
+                       SAFE_FREE(kerb_addr);
                        return ENOMEM;
                }
 
@@ -1271,6 +1277,7 @@ done:
        {
                addrs = (krb5_addresses *)SMB_MALLOC(sizeof(krb5_addresses));
                if (addrs == NULL) {
+                       SAFE_FREE(kerb_addr);
                        return ENOMEM;
                }
 
@@ -1280,6 +1287,7 @@ done:
                addrs->val = (krb5_address *)SMB_MALLOC(sizeof(krb5_address));
                if (addrs->val == NULL) {
                        SAFE_FREE(addrs);
+                       SAFE_FREE(kerb_addr);
                        return ENOMEM;
                }
 
@@ -1289,6 +1297,7 @@ done:
                if (addrs->val[0].address.data == NULL) {
                        SAFE_FREE(addrs->val);
                        SAFE_FREE(addrs);
+                       SAFE_FREE(kerb_addr);
                        return ENOMEM;
                }