diff options
author | Michael Adam <obnox@samba.org> | 2007-12-23 03:34:36 +0100 |
---|---|---|
committer | Michael Adam <obnox@samba.org> | 2007-12-23 04:10:31 +0100 |
commit | 31d436e54c2ec56ae59527feb9a31d13eca44f6d (patch) | |
tree | 243b2b700709f38a844849efb82b6ce3a741f9c5 /source3/libnet/libnet_conf.c | |
parent | 88a424a4d37b61af4e126869a16a2ca43d878056 (diff) | |
download | samba-31d436e54c2ec56ae59527feb9a31d13eca44f6d.tar.gz samba-31d436e54c2ec56ae59527feb9a31d13eca44f6d.tar.bz2 samba-31d436e54c2ec56ae59527feb9a31d13eca44f6d.zip |
Move reg_setvalue_internal() to libnet_conf.c
renaming it to libnet_smbconf_setvalue_internal()
Michael
(This used to be commit 7cb51a1d6d95704225d9ab22e88cc76fa910d38c)
Diffstat (limited to 'source3/libnet/libnet_conf.c')
-rw-r--r-- | source3/libnet/libnet_conf.c | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/source3/libnet/libnet_conf.c b/source3/libnet/libnet_conf.c index 960ee80dbc..d42e5ad227 100644 --- a/source3/libnet/libnet_conf.c +++ b/source3/libnet/libnet_conf.c @@ -148,6 +148,78 @@ done: return werr; } + +/* + * add a value to a key. + */ +WERROR libnet_smbconf_reg_setvalue_internal(struct registry_key *key, + const char *valname, + const char *valstr) +{ + struct registry_value val; + WERROR werr = WERR_OK; + char *subkeyname; + const char *canon_valname; + const char *canon_valstr; + + if (!lp_canonicalize_parameter_with_value(valname, valstr, + &canon_valname, + &canon_valstr)) + { + if (canon_valname == NULL) { + d_fprintf(stderr, "invalid parameter '%s' given\n", + valname); + } else { + d_fprintf(stderr, "invalid value '%s' given for " + "parameter '%s'\n", valstr, valname); + } + werr = WERR_INVALID_PARAM; + goto done; + } + + ZERO_STRUCT(val); + + val.type = REG_SZ; + val.v.sz.str = CONST_DISCARD(char *, canon_valstr); + val.v.sz.len = strlen(canon_valstr) + 1; + + if (registry_smbconf_valname_forbidden(canon_valname)) { + d_fprintf(stderr, "Parameter '%s' not allowed in registry.\n", + canon_valname); + werr = WERR_INVALID_PARAM; + goto done; + } + + subkeyname = strrchr_m(key->key->name, '\\'); + if ((subkeyname == NULL) || (*(subkeyname +1) == '\0')) { + d_fprintf(stderr, "Invalid registry key '%s' given as " + "smbconf section.\n", key->key->name); + werr = WERR_INVALID_PARAM; + goto done; + } + subkeyname++; + if (!strequal(subkeyname, GLOBAL_NAME) && + lp_parameter_is_global(valname)) + { + d_fprintf(stderr, "Global paramter '%s' not allowed in " + "service definition ('%s').\n", canon_valname, + subkeyname); + werr = WERR_INVALID_PARAM; + goto done; + } + + werr = reg_setvalue(key, canon_valname, &val); + if (!W_ERROR_IS_OK(werr)) { + d_fprintf(stderr, + "Error adding value '%s' to " + "key '%s': %s\n", + canon_valname, key->key->name, dos_errstr(werr)); + } + +done: + return werr; +} + static WERROR do_modify_val_config(struct registry_key *key, const char *val_name, const char *val_data) |