diff options
Diffstat (limited to 'source3/utils/editreg.c')
-rw-r--r-- | source3/utils/editreg.c | 58 |
1 files changed, 32 insertions, 26 deletions
diff --git a/source3/utils/editreg.c b/source3/utils/editreg.c index 9d155a9a11..e82991edc5 100644 --- a/source3/utils/editreg.c +++ b/source3/utils/editreg.c @@ -740,7 +740,7 @@ REG_KEY *nt_find_key_in_list_by_name(KEY_LIST *list, char *key) if (!list || !key || !*key) return NULL; - for (i = 0; i<= list->key_count; i++) + for (i = 0; i < list->key_count; i++) if ((res = nt_find_key_by_name(list->keys[i], key))) return res; @@ -970,7 +970,7 @@ REG_KEY *nt_add_reg_value(REG_KEY *key, char *name, int type, char *value) /* * Delete a value. Should perhaps return the value ... */ -REG_KEY *nt_delete_reg_valye(REG_KEY *key, char *name) +REG_KEY *nt_delete_reg_value(REG_KEY *key, char *name) { return NULL; @@ -1073,8 +1073,6 @@ KEY_SEC_DESC *nt_create_init_sec(REGF *regf) return tsec; } -REG_KEY *nt_add_reg_subkey(REGF *regf, REG_KEY *key, char *name, int create); - /* * Add a sub-key */ @@ -1096,16 +1094,6 @@ REG_KEY *nt_add_reg_key_list(REGF *regf, REG_KEY *key, char * name, int create) } - for (i = 0; i < list->key_count; i++) { - if ((ret = nt_add_reg_subkey(regf, key, name, create))) - return ret; - } - - /* - * If we reach here we could not find the the first component - * so create it ... - */ - lname = strdup(name); if (!lname) return NULL; @@ -1116,6 +1104,19 @@ REG_KEY *nt_add_reg_key_list(REGF *regf, REG_KEY *key, char * name, int create) c2++; } + for (i = 0; i < list->key_count; i++) { + if (strcmp(list->keys[i]->name, c1) == 0) { + ret = nt_add_reg_key_list(regf, list->keys[i], c2, create); + free(lname); + return ret; + } + } + + /* + * If we reach here we could not find the the first component + * so create it ... + */ + if (list->key_count < list->max_keys){ list->key_count++; } @@ -1147,7 +1148,7 @@ REG_KEY *nt_add_reg_key_list(REGF *regf, REG_KEY *key, char * name, int create) tmp->owner = key; tmp->type = REG_SUB_KEY; /* - * Next, pull security from the parent, but override by with + * Next, pull security from the parent, but override with * anything passed in on the command line */ tmp->security = nt_inherit_security(key); @@ -1155,7 +1156,7 @@ REG_KEY *nt_add_reg_key_list(REGF *regf, REG_KEY *key, char * name, int create) list->keys[list->key_count - 1] = tmp; if (c2) { - ret = nt_add_reg_subkey(regf, key, c2, True); + ret = nt_add_reg_key_list(regf, key, c2, True); } if (lname) free(lname); @@ -1168,12 +1169,6 @@ REG_KEY *nt_add_reg_key_list(REGF *regf, REG_KEY *key, char * name, int create) return NULL; } -REG_KEY *nt_add_reg_subkey(REGF *regf, REG_KEY *key, char *name, int create) -{ - - return NULL; -} - /* * This routine only adds a key from the root down. * It calls helper functions to handle sub-key lists and sub-keys @@ -1181,7 +1176,7 @@ REG_KEY *nt_add_reg_subkey(REGF *regf, REG_KEY *key, char *name, int create) REG_KEY *nt_add_reg_key(REGF *regf, char *name, int create) { char *lname = NULL, *c1, *c2; - REG_KEY * tmp = NULL, *key = NULL; + REG_KEY * tmp = NULL; /* * Look until we hit the first component that does not exist, and @@ -1225,11 +1220,11 @@ REG_KEY *nt_add_reg_key(REGF *regf, char *name, int create) * way down */ - if (strcmp(c1, key->name) != 0) + if (strcmp(c1, regf->root->name) != 0) goto error; } - tmp = nt_add_reg_key_list(regf, key, c2, True); + tmp = nt_add_reg_key_list(regf, regf->root, c2, True); free(lname); return tmp; @@ -2644,9 +2639,20 @@ CMD *regedit4_get_cmd(int fd) cmd->cmd = CMD_NONE; cmd->key = NULL; + cmd->val_count = 0; cmd->val_spec_list = cmd->val_spec_last = NULL; while ((cl = get_cmd_line(fd))) { + /* + * If it is an empty command line, and we already have a key + * then exit from here ... FIXME: Clean up the parser + */ + + if (cl->line_len == 0 && cmd->key) { + free_cmd_line(cl); + break; + } + strip_comment(cl); /* remove anything beyond a comment char */ trim_trailing_spaces(cl); trim_leading_spaces(cl); @@ -3123,7 +3129,7 @@ int main(int argc, char *argv[]) } while (cmd->val_count) { - + cmd->val_count--; } break; |