mirror of
https://github.com/owntone/owntone-server.git
synced 2025-02-25 04:19:15 -05:00
expose the single-key validation
This commit is contained in:
parent
c99e0c23dc
commit
1003812ee9
19
src/conf.c
19
src/conf.c
@ -87,6 +87,7 @@ static int _conf_existdir(char *path);
|
||||
static int _conf_split(char *s, char *delimiters, char ***argvp);
|
||||
static void _conf_dispose_split(char **argv);
|
||||
static int _conf_xml_dump(XMLSTRUCT *pxml,LL *pll,int sublevel,char *parent);
|
||||
static int _conf_verify_element(char *section, char *key, char *value);
|
||||
|
||||
static CONF_ELEMENTS conf_elements[] = {
|
||||
{ 1, 0, CONF_T_STRING,"general","runas" },
|
||||
@ -303,7 +304,7 @@ int _conf_verify_element(char *section, char *key, char *value) {
|
||||
return CONF_E_BADELEMENT;
|
||||
}
|
||||
|
||||
switch(pce->conf_elements) {
|
||||
switch(pce->type) {
|
||||
case CONF_T_MULTICOMMA: /* can't really check these */
|
||||
case CONF_T_STRING:
|
||||
return CONF_E_SUCCESS;
|
||||
@ -857,11 +858,11 @@ char *conf_alloc_string(char *section, char *key, char *dflt) {
|
||||
* @param value value to set it to
|
||||
* @returns E_CONF_SUCCESS on success, error code otherwise
|
||||
*/
|
||||
int conf_set_int(char *section, char *key, int value) {
|
||||
int conf_set_int(char *section, char *key, int value, int verify) {
|
||||
char buffer[40]; /* ?? */
|
||||
snprintf(buffer,sizeof(buffer),"%d",value);
|
||||
|
||||
return conf_set_string(section, key, buffer);
|
||||
return conf_set_string(section, key, buffer, verify);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -872,7 +873,7 @@ int conf_set_int(char *section, char *key, int value) {
|
||||
* @param value value to set it to
|
||||
* @returns E_CONF_SUCCESS on success, error code otherwise
|
||||
*/
|
||||
int conf_set_string(char *section, char *key, char *value) {
|
||||
int conf_set_string(char *section, char *key, char *value, int verify) {
|
||||
LL_ITEM *pitem;
|
||||
LL_ITEM *psection;
|
||||
LL *section_ll;
|
||||
@ -886,6 +887,16 @@ int conf_set_string(char *section, char *key, char *value) {
|
||||
_conf_lock();
|
||||
|
||||
/* verify the item */
|
||||
err=_conf_verify_element(section,key,value);
|
||||
if(err != CONF_E_SUCCESS) {
|
||||
_conf_unlock();
|
||||
return err;
|
||||
}
|
||||
|
||||
if(verify) {
|
||||
_conf_unlock();
|
||||
return CONF_E_SUCCESS;
|
||||
}
|
||||
|
||||
pce = _conf_get_keyinfo(section,key);
|
||||
if(pce)
|
||||
|
13
src/conf.h
13
src/conf.h
@ -1,4 +1,4 @@
|
||||
o/*
|
||||
/*
|
||||
* $Id$
|
||||
* Functions for reading and writing the config file
|
||||
*
|
||||
@ -19,8 +19,8 @@ o/*
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#ifndef _CONFIG_H_
|
||||
#define _CONFIG_H_
|
||||
#ifndef _CONF_H_
|
||||
#define _CONF_H_
|
||||
|
||||
#define CONF_E_SUCCESS 0
|
||||
#define CONF_E_FOPEN 1
|
||||
@ -42,8 +42,8 @@ extern int conf_get_int(char *section, char *key, int dflt);
|
||||
extern int conf_get_string(char *section, char *key, char *dflt,
|
||||
char *out, int *size);
|
||||
extern char *conf_alloc_string(char *section, char *key, char *dflt);
|
||||
extern int conf_set_int(char *section, char *key, int value);
|
||||
extern int conf_set_string(char *section, char *key, char *value);
|
||||
extern int conf_set_int(char *section, char *key, int value, int verify);
|
||||
extern int conf_set_string(char *section, char *key, char *value, int verify);
|
||||
|
||||
extern int conf_isset(char *section, char *key);
|
||||
extern int conf_iswritable(void);
|
||||
@ -58,6 +58,5 @@ extern char *conf_get_filename(void);
|
||||
/* FIXME: get enum functions and move to xml-rpc */
|
||||
#include "webserver.h"
|
||||
extern int conf_xml_dump(WS_CONNINFO *pwsc);
|
||||
extern int conf_verify_element(char *section, char *key, char *value);
|
||||
|
||||
#endif /* _CONFIG_H_ */
|
||||
#endif /* _CONF_H_ */
|
||||
|
@ -114,18 +114,25 @@ void xml_set_config(WS_CONNINFO *pwsc) {
|
||||
char *section;
|
||||
char *key;
|
||||
char *value;
|
||||
int verify_only;
|
||||
int err;
|
||||
|
||||
section = ws_getvar(pwsc,"section");
|
||||
key = ws_getvar(pwsc,"key");
|
||||
value = ws_getvar(pwsc,"value");
|
||||
|
||||
verify_only=0;
|
||||
if(ws_getvar(pwsc,"verify_only")) {
|
||||
verify_only = 1;
|
||||
}
|
||||
|
||||
|
||||
if((!section) || (!key) || (!value)) {
|
||||
xml_return_error(pwsc,500,"Missing section, key, or value");
|
||||
return;
|
||||
}
|
||||
|
||||
if((err=conf_set_string(section,key,value) != CONF_E_SUCCESS)) {
|
||||
if((err=conf_set_string(section,key,value,verify_only)!=CONF_E_SUCCESS)) {
|
||||
/* should return text error from conf_ */
|
||||
xml_return_error(pwsc,500,"conf_set_string: error");
|
||||
return;
|
||||
|
Loading…
x
Reference in New Issue
Block a user