s4:registry/ldb.c - Always check the "name" attribute for != NULL
authorMatthias Dieter Wallnöfer <mwallnoefer@yahoo.de>
Mon, 29 Mar 2010 18:53:38 +0000 (20:53 +0200)
committerMatthias Dieter Wallnöfer <mwallnoefer@yahoo.de>
Mon, 29 Mar 2010 18:53:38 +0000 (20:53 +0200)
If it's NULL return invalid parameter as Windows does. The name is "" if it
refers to the default value.

source4/lib/registry/ldb.c

index 36761e5273b11470fb1f1150e56c2eaaf70b79ef..80fbb85ac730679cb79c9f68fd9e0b8c7abfd0d8 100644 (file)
@@ -508,6 +508,10 @@ static WERROR ldb_open_key(TALLOC_CTX *mem_ctx, const struct hive_key *h,
        struct ldb_key_data *kd = talloc_get_type(h, struct ldb_key_data);
        struct ldb_context *c = kd->ldb;
 
+       if (name == NULL) {
+               return WERR_INVALID_PARAM;
+       }
+
        ldap_path = reg_path_to_ldb(mem_ctx, h, name, NULL);
        W_ERROR_HAVE_NO_MEMORY(ldap_path);
 
@@ -588,6 +592,10 @@ static WERROR ldb_add_key(TALLOC_CTX *mem_ctx, const struct hive_key *parent,
        struct ldb_key_data *newkd;
        int ret;
 
+       if (name == NULL) {
+               return WERR_INVALID_PARAM;
+       }
+
        msg = ldb_msg_new(mem_ctx);
        W_ERROR_HAVE_NO_MEMORY(msg);
 
@@ -634,7 +642,11 @@ static WERROR ldb_del_value(TALLOC_CTX *mem_ctx, struct hive_key *key,
        struct ldb_message *msg;
        struct ldb_dn *childdn;
 
-       if ((child == NULL) || (child[0] == '\0')) {
+       if (child == NULL) {
+               return WERR_INVALID_PARAM;
+       }
+
+       if (child[0] == '\0') {
                /* default value */
                msg = talloc_zero(mem_ctx, struct ldb_message);
                W_ERROR_HAVE_NO_MEMORY(msg);
@@ -690,6 +702,10 @@ static WERROR ldb_del_key(TALLOC_CTX *mem_ctx, const struct hive_key *key,
        WERROR werr;
        struct hive_key *hk;
 
+       if (name == NULL) {
+               return WERR_INVALID_PARAM;
+       }
+
        /* Verify key exists by opening it */
        werr = ldb_open_key(mem_ctx, key, name, &hk);
        if (!W_ERROR_IS_OK(werr)) {
@@ -793,13 +809,17 @@ static WERROR ldb_set_value(struct hive_key *parent,
        int ret;
        TALLOC_CTX *mem_ctx = talloc_init("ldb_set_value");
 
+       if (name == NULL) {
+               return WERR_INVALID_PARAM;
+       }
+
        msg = reg_ldb_pack_value(kd->ldb, mem_ctx, name, type, data);
        W_ERROR_HAVE_NO_MEMORY(msg);
 
        msg->dn = ldb_dn_copy(msg, kd->dn);
        W_ERROR_HAVE_NO_MEMORY(msg->dn);
 
-       if ((name != NULL) && (name[0] != '\0')) {
+       if (name[0] != '\0') {
                /* For a default value, we add/overwrite the attributes to/of the hive.
                   For a normal value, we create a new child. */
                if (!ldb_dn_add_child_fmt(msg->dn, "value=%s",