summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source3/lib/smbconf/smbconf_reg.c96
1 files changed, 56 insertions, 40 deletions
diff --git a/source3/lib/smbconf/smbconf_reg.c b/source3/lib/smbconf/smbconf_reg.c
index e790e65175..23aad44892 100644
--- a/source3/lib/smbconf/smbconf_reg.c
+++ b/source3/lib/smbconf/smbconf_reg.c
@@ -379,6 +379,60 @@ static char *smbconf_format_registry_value(TALLOC_CTX *mem_ctx,
return result;
}
+static WERROR smbconf_reg_get_includes_internal(TALLOC_CTX *mem_ctx,
+ struct registry_key *key,
+ uint32_t *num_includes,
+ char ***includes)
+{
+ WERROR werr;
+ uint32_t count;
+ struct registry_value *value = NULL;
+ char **tmp_includes = NULL;
+ TALLOC_CTX *tmp_ctx = talloc_stackframe();
+
+ if (!smbconf_value_exists(key, INCLUDES_VALNAME)) {
+ /* no includes */
+ goto done;
+ }
+
+ werr = reg_queryvalue(tmp_ctx, key, INCLUDES_VALNAME, &value);
+ if (!W_ERROR_IS_OK(werr)) {
+ goto done;
+ }
+
+ if (value->type != REG_MULTI_SZ) {
+ /* wront type -- ignore */
+ goto done;
+ }
+
+ for (count = 0; count < value->v.multi_sz.num_strings; count++)
+ {
+ werr = smbconf_add_string_to_array(tmp_ctx,
+ &tmp_includes,
+ count,
+ value->v.multi_sz.strings[count]);
+ if (!W_ERROR_IS_OK(werr)) {
+ goto done;
+ }
+ }
+
+ if (count > 0) {
+ *includes = talloc_move(mem_ctx, &tmp_includes);
+ if (*includes == NULL) {
+ werr = WERR_NOMEM;
+ goto done;
+ }
+ *num_includes = count;
+ } else {
+ *num_includes = 0;
+ *includes = NULL;
+ }
+
+done:
+ TALLOC_FREE(tmp_ctx);
+ return werr;
+}
+
/**
* Get the values of a key as a list of value names
* and a list of value strings (ordered)
@@ -852,10 +906,7 @@ static WERROR smbconf_reg_get_includes(struct smbconf_ctx *ctx,
char ***includes)
{
WERROR werr;
- uint32_t count;
struct registry_key *key = NULL;
- struct registry_value *value = NULL;
- char **tmp_includes = NULL;
TALLOC_CTX *tmp_ctx = talloc_stackframe();
werr = smbconf_reg_open_service_key(tmp_ctx, ctx, service,
@@ -864,43 +915,8 @@ static WERROR smbconf_reg_get_includes(struct smbconf_ctx *ctx,
goto done;
}
- if (!smbconf_value_exists(key, INCLUDES_VALNAME)) {
- /* no includes */
- goto done;
- }
-
- werr = reg_queryvalue(tmp_ctx, key, INCLUDES_VALNAME, &value);
- if (!W_ERROR_IS_OK(werr)) {
- goto done;
- }
-
- if (value->type != REG_MULTI_SZ) {
- /* wront type -- ignore */
- goto done;
- }
-
- for (count = 0; count < value->v.multi_sz.num_strings; count++)
- {
- werr = smbconf_add_string_to_array(tmp_ctx,
- &tmp_includes,
- count,
- value->v.multi_sz.strings[count]);
- if (!W_ERROR_IS_OK(werr)) {
- goto done;
- }
- }
-
- if (count > 0) {
- *includes = talloc_move(mem_ctx, &tmp_includes);
- if (*includes == NULL) {
- werr = WERR_NOMEM;
- goto done;
- }
- *num_includes = count;
- } else {
- *num_includes = 0;
- *includes = NULL;
- }
+ werr = smbconf_reg_get_includes_internal(mem_ctx, key, num_includes,
+ includes);
done:
TALLOC_FREE(tmp_ctx);