diff options
Diffstat (limited to 'source3/lib/util_reg.c')
-rw-r--r-- | source3/lib/util_reg.c | 117 |
1 files changed, 2 insertions, 115 deletions
diff --git a/source3/lib/util_reg.c b/source3/lib/util_reg.c index 9f9cd40331..e75d72ac24 100644 --- a/source3/lib/util_reg.c +++ b/source3/lib/util_reg.c @@ -20,6 +20,8 @@ #include "includes.h" +extern REGISTRY_OPS smbconf_reg_ops; + const char *reg_type_lookup(enum winreg_Type type) { const char *result; @@ -108,118 +110,3 @@ WERROR reg_pull_multi_sz(TALLOC_CTX *mem_ctx, const void *buf, size_t len, return WERR_OK; } - -WERROR registry_pull_value(TALLOC_CTX *mem_ctx, - struct registry_value **pvalue, - enum winreg_Type type, uint8 *data, - uint32 size, uint32 length) -{ - struct registry_value *value; - WERROR err; - - if (!(value = TALLOC_ZERO_P(mem_ctx, struct registry_value))) { - return WERR_NOMEM; - } - - value->type = type; - - switch (type) { - case REG_DWORD: - if ((size != 4) || (length != 4)) { - err = WERR_INVALID_PARAM; - goto error; - } - value->v.dword = IVAL(data, 0); - break; - case REG_SZ: - case REG_EXPAND_SZ: - { - /* - * Make sure we get a NULL terminated string for - * convert_string_talloc(). - */ - - smb_ucs2_t *tmp; - uint32 num_ucs2 = length / 2; - - if ((length % 2) != 0) { - err = WERR_INVALID_PARAM; - goto error; - } - - if (!(tmp = SMB_MALLOC_ARRAY(smb_ucs2_t, num_ucs2+1))) { - err = WERR_NOMEM; - goto error; - } - - memcpy((void *)tmp, (const void *)data, length); - tmp[num_ucs2] = 0; - - value->v.sz.len = convert_string_talloc( - value, CH_UTF16LE, CH_UNIX, tmp, length+2, - &value->v.sz.str, False); - - SAFE_FREE(tmp); - - if (value->v.sz.len == (size_t)-1) { - err = WERR_INVALID_PARAM; - goto error; - } - break; - } - case REG_MULTI_SZ: - err = reg_pull_multi_sz(value, (void *)data, length, - &value->v.multi_sz.num_strings, - &value->v.multi_sz.strings); - if (!(W_ERROR_IS_OK(err))) { - goto error; - } - break; - case REG_BINARY: - value->v.binary.data = talloc_move(value, &data); - value->v.binary.length = length; - break; - default: - err = WERR_INVALID_PARAM; - goto error; - } - - *pvalue = value; - return WERR_OK; - - error: - TALLOC_FREE(value); - return err; -} - -WERROR registry_push_value(TALLOC_CTX *mem_ctx, - const struct registry_value *value, - DATA_BLOB *presult) -{ - switch (value->type) { - case REG_DWORD: { - char buf[4]; - SIVAL(buf, 0, value->v.dword); - *presult = data_blob_talloc(mem_ctx, (void *)buf, 4); - if (presult->data == NULL) { - return WERR_NOMEM; - } - break; - } - case REG_SZ: - case REG_EXPAND_SZ: { - presult->length = convert_string_talloc( - mem_ctx, CH_UNIX, CH_UTF16LE, value->v.sz.str, - MIN(value->v.sz.len, strlen(value->v.sz.str)+1), - (void *)&(presult->data), False); - if (presult->length == (size_t)-1) { - return WERR_NOMEM; - } - break; - } - default: - return WERR_INVALID_PARAM; - } - - return WERR_OK; -} |