libcli/security Provide a common, top level libcli/security/security.h
[gd/samba-autobuild/.git] / libgpo / gpo_ini.c
index 79bf5fd8d83fc90aa44cd175b8463f7707ec24f7..7df56a81b0079dce1951f1605299f862552aedc2 100644 (file)
@@ -42,6 +42,7 @@ static bool store_keyval_pair(const char *key, const char *value, void *ctx_ptr)
 {
        struct gp_inifile_context *ctx = (struct gp_inifile_context *) ctx_ptr;
        ctx->data = talloc_realloc(ctx, ctx->data, struct keyval_pair *, ctx->keyval_count+1);
+       ctx->data[ctx->keyval_count] = talloc_zero(ctx, struct keyval_pair);
        ctx->data[ctx->keyval_count]->key = talloc_asprintf(ctx, "%s:%s", ctx->current_section, key);
        ctx->data[ctx->keyval_count]->val = talloc_strdup(ctx, value);
        ctx->keyval_count++;
@@ -87,7 +88,7 @@ static NTSTATUS convert_file_from_ucs2(TALLOC_CTX *mem_ctx,
        }
 
        if (!convert_string_talloc(mem_ctx, CH_UTF16LE, CH_UNIX, data_in, n,
-                                  (void **)&data_out, &converted_size, false))
+                                  (void *)&data_out, &converted_size, false))
        {
                status = NT_STATUS_INVALID_BUFFER_SIZE;
                goto out;
@@ -169,6 +170,7 @@ NTSTATUS gp_inifile_init_context(TALLOC_CTX *mem_ctx,
 {
        struct gp_inifile_context *ctx = NULL;
        NTSTATUS status;
+       int rv;
        char *tmp_filename = NULL;
        const char *ini_filename = NULL;
 
@@ -192,6 +194,12 @@ NTSTATUS gp_inifile_init_context(TALLOC_CTX *mem_ctx,
                goto failed;
        }
 
+       rv = pm_process(tmp_filename, change_section, store_keyval_pair, ctx);
+       if (!rv) {
+               return NT_STATUS_NO_SUCH_FILE;
+       }
+
+
        ctx->generated_filename = tmp_filename;
        ctx->mem_ctx = mem_ctx;
 
@@ -217,7 +225,7 @@ NTSTATUS gp_inifile_init_context(TALLOC_CTX *mem_ctx,
 #define GPT_INI_PARAMETER_VERSION "Version"
 #define GPT_INI_PARAMETER_DISPLAYNAME "displayName"
 
-NTSTATUS parse_gpt_ini(struct gp_inifile_context *ctx,
+NTSTATUS parse_gpt_ini(TALLOC_CTX *mem_ctx,
                       const char *filename,
                       uint32_t *version,
                       char **display_name)
@@ -226,12 +234,16 @@ NTSTATUS parse_gpt_ini(struct gp_inifile_context *ctx,
        int rv;
        int v = 0;
        char *name = NULL;
+       struct gp_inifile_context *ctx;
 
        if (!filename) {
                return NT_STATUS_INVALID_PARAMETER;
        }
 
-       rv = pm_process(filename, change_section, store_keyval_pair, NULL);
+       ctx = talloc_zero(mem_ctx, struct gp_inifile_context);
+       NT_STATUS_HAVE_NO_MEMORY(ctx);
+
+       rv = pm_process(filename, change_section, store_keyval_pair, ctx);
        if (!rv) {
                return NT_STATUS_NO_SUCH_FILE;
        }
@@ -263,7 +275,7 @@ NTSTATUS parse_gpt_ini(struct gp_inifile_context *ctx,
                *version = v;
        }
 
-       result = NT_STATUS_OK;
+       talloc_free(ctx);
 
-       return result;
+       return NT_STATUS_OK;
 }