registry: reg_deletevalue should return error, when the value does not exist.
authorMichael Adam <obnox@samba.org>
Mon, 31 Mar 2008 15:20:07 +0000 (17:20 +0200)
committerMichael Adam <obnox@samba.org>
Mon, 31 Mar 2008 15:22:02 +0000 (17:22 +0200)
Michael
(This used to be commit 04b48984bbf84c55bb41a74a11cbcc7358377fed)

source3/registry/reg_api.c

index e52aaacb4d50eccac738dc9aada83c7ac43d0fbb..1a0bf2b16aae0b5fbaa83d7f41975c88f2716d29 100644 (file)
@@ -653,6 +653,19 @@ WERROR reg_setvalue(struct registry_key *key, const char *name,
        return WERR_OK;
 }
 
+static WERROR reg_value_exists(struct registry_key *key, const char *name)
+{
+       int i;
+
+       for (i=0; i<key->values->num_values; i++) {
+               if (strequal(key->values->values[i]->valuename, name)) {
+                       return WERR_OK;
+               }
+       }
+
+       return WERR_BADFILE;
+}
+
 WERROR reg_deletevalue(struct registry_key *key, const char *name)
 {
        WERROR err;
@@ -665,6 +678,11 @@ WERROR reg_deletevalue(struct registry_key *key, const char *name)
                return err;
        }
 
+       err = reg_value_exists(key, name);
+       if (!W_ERROR_IS_OK(err)) {
+               return err;
+       }
+
        regval_ctr_delvalue(key->values, name);
 
        if (!store_reg_values(key->key, key->values)) {