mirror of
https://github.com/owntone/owntone-server.git
synced 2024-12-26 23:25:56 -05:00
Check all parameters before writing them to the config file, send meaningful information to web client on bad update
This commit is contained in:
parent
5486e8c76a
commit
f15d1d7d96
11
src/conf.c
11
src/conf.c
@ -128,6 +128,11 @@ static CONF_ELEMENTS conf_elements[] = {
|
|||||||
{ 0, 0, CONF_T_MULTICOMMA,"plugins","plugins" },
|
{ 0, 0, CONF_T_MULTICOMMA,"plugins","plugins" },
|
||||||
{ 0, 0, CONF_T_INT,"daap","empty_strings" },
|
{ 0, 0, CONF_T_INT,"daap","empty_strings" },
|
||||||
{ 0, 0, CONF_T_INT,"daap","supports_browse" },
|
{ 0, 0, CONF_T_INT,"daap","supports_browse" },
|
||||||
|
{ 0, 0, CONF_T_INT,"daap","supports_update" },
|
||||||
|
{ 0, 0, CONF_T_INT,"scanning","process_xml" },
|
||||||
|
{ 0, 0, CONF_T_INT,"scanning","ignore_appledouble" },
|
||||||
|
{ 0, 0, CONF_T_INT,"scanning","ignore_dotfiles" },
|
||||||
|
{ 0, 0, CONF_T_INT,"scanning","concat_compilations" },
|
||||||
{ 0, 0, CONF_T_INT, NULL, NULL }
|
{ 0, 0, CONF_T_INT, NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -541,6 +546,7 @@ int conf_read(char *file) {
|
|||||||
|
|
||||||
if(conf_main_file) {
|
if(conf_main_file) {
|
||||||
conf_close();
|
conf_close();
|
||||||
|
free(conf_main_file);
|
||||||
}
|
}
|
||||||
|
|
||||||
conf_main_file = strdup(file);
|
conf_main_file = strdup(file);
|
||||||
@ -1129,10 +1135,7 @@ int conf_iswritable(void) {
|
|||||||
if(!conf_main_file)
|
if(!conf_main_file)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
if((fp = fopen(conf_main_file,"r+")) != NULL) {
|
retval = !access(conf_main_file,W_OK);
|
||||||
fclose(fp);
|
|
||||||
retval = TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
_conf_unlock();
|
_conf_unlock();
|
||||||
return retval;
|
return retval;
|
||||||
|
@ -110,12 +110,15 @@ XMLSTRUCT *xml_init(WS_CONNINFO *pwsc, int emit_header) {
|
|||||||
void xml_update_config(WS_CONNINFO *pwsc) {
|
void xml_update_config(WS_CONNINFO *pwsc) {
|
||||||
char *arg, *value, *duparg;
|
char *arg, *value, *duparg;
|
||||||
char *ptmp;
|
char *ptmp;
|
||||||
|
char *badparms=NULL;
|
||||||
void *handle;
|
void *handle;
|
||||||
|
int has_error=0;
|
||||||
|
int badparms_len=0;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
handle = NULL;
|
handle = NULL;
|
||||||
|
|
||||||
|
|
||||||
while((handle=ws_enum_var(pwsc,&arg,&value,handle)) != NULL) {
|
while((handle=ws_enum_var(pwsc,&arg,&value,handle)) != NULL) {
|
||||||
/* arg will be section:value */
|
/* arg will be section:value */
|
||||||
duparg = strdup(arg);
|
duparg = strdup(arg);
|
||||||
@ -123,10 +126,51 @@ void xml_update_config(WS_CONNINFO *pwsc) {
|
|||||||
if(ptmp) {
|
if(ptmp) {
|
||||||
*ptmp++ = '\0';
|
*ptmp++ = '\0';
|
||||||
/* this is stupidly inefficient */
|
/* this is stupidly inefficient */
|
||||||
|
|
||||||
|
err = conf_set_string(duparg,ptmp,value,TRUE);
|
||||||
|
if(err != CONF_E_SUCCESS) {
|
||||||
|
has_error = TRUE;
|
||||||
|
if(!badparms) {
|
||||||
|
badparms_len = (int)strlen(arg) + 1;
|
||||||
|
badparms = (char*)malloc(badparms_len);
|
||||||
|
if(!badparms) {
|
||||||
|
DPRINTF(E_FATAL,L_MISC,"xml_update_config: malloc\n");
|
||||||
|
}
|
||||||
|
strcpy(badparms,arg);
|
||||||
|
} else {
|
||||||
|
badparms_len += strlen(arg) + 1;
|
||||||
|
badparms = (char*)realloc(badparms,badparms_len);
|
||||||
|
if(!badparms) {
|
||||||
|
DPRINTF(E_FATAL,L_MISC,"xml_update_config: malloc\n");
|
||||||
|
}
|
||||||
|
strcat(badparms,",");
|
||||||
|
strcat(badparms,arg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
free(duparg);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(has_error) {
|
||||||
|
DPRINTF(E_INF,L_MISC,"Bad parms; %s\n",badparms);
|
||||||
|
xml_return_error(pwsc,500,badparms);
|
||||||
|
free(badparms);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* now set! */
|
||||||
|
while((handle=ws_enum_var(pwsc,&arg,&value,handle)) != NULL) {
|
||||||
|
/* arg will be section:value */
|
||||||
|
duparg = strdup(arg);
|
||||||
|
ptmp = strchr(duparg,':');
|
||||||
|
if(ptmp) {
|
||||||
|
*ptmp++ = '\0';
|
||||||
|
/* this is stupidly inefficient */
|
||||||
|
|
||||||
err = conf_set_string(duparg,ptmp,value,FALSE);
|
err = conf_set_string(duparg,ptmp,value,FALSE);
|
||||||
if(err != CONF_E_SUCCESS) {
|
if(err != CONF_E_SUCCESS) {
|
||||||
free(duparg);
|
/* shouldn't happen */
|
||||||
xml_return_error(pwsc,500,"Bad values");
|
xml_return_error(pwsc,500,arg);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user