s4:bind_dlz: Only copy the dn once
authorAndreas Schneider <asn@samba.org>
Fri, 16 Nov 2018 15:07:42 +0000 (16:07 +0100)
committerGary Lockyer <gary@samba.org>
Thu, 22 Nov 2018 21:13:26 +0000 (22:13 +0100)
../source4/dns_server/dlz_bind9.c:1132:4: error: 'dn' may be used uninitialized in this function [-Werror=maybe-uninitialized]
    state->log(ISC_LOG_INFO, "failed to find dnsRecord for %s",
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        ldb_dn_get_linearized(dn));
        ~~~~~~~~~~~~~~~~~~~~~~~~~~

Found by Undefined Sanitizer.

Signed-off-by: Andreas Schneider <asn@samba.org>
Reviewed-by: Gary Lockyer <gary@catalyst.net.nz>
source4/dns_server/dlz_bind9.c

index 43f3e57c789a1c43ad4f801e437830a2645f6e30..82c72111a007b59f9ad8e2855fca72ec07fd0d22 100644 (file)
@@ -1059,8 +1059,9 @@ _PUBLIC_ isc_result_t dlz_allnodes(const char *zone, void *dbdata,
 {
        struct dlz_bind9_data *state = talloc_get_type_abort(dbdata, struct dlz_bind9_data);
        const char *attrs[] = { "dnsRecord", NULL };
-       int ret = LDB_SUCCESS, i, j;
-       struct ldb_dn *dn;
+       int ret = LDB_ERR_NO_SUCH_OBJECT;
+       size_t i, j;
+       struct ldb_dn *dn = NULL;
        struct ldb_result *res;
        TALLOC_CTX *tmp_ctx = talloc_new(state);
        struct ldb_val zone_name_val = data_blob_string_const(zone);
@@ -1113,7 +1114,7 @@ _PUBLIC_ isc_result_t dlz_allnodes(const char *zone, void *dbdata,
                        break;
                }
        }
-       if (ret != LDB_SUCCESS) {
+       if (ret != LDB_SUCCESS || dn == NULL) {
                talloc_free(tmp_ctx);
                return ISC_R_NOTFOUND;
        }