diff options
| author | Dennis Kaarsemaker <dennis@kaarsemaker.net> | 2016-02-22 22:26:15 +0100 | 
|---|---|---|
| committer | Dennis Kaarsemaker <dennis@kaarsemaker.net> | 2016-03-23 07:44:13 +0100 | 
| commit | e41ba05c0a9002b30e9e2475f56fd207e856a9f8 (patch) | |
| tree | 29392d95d252822f506d61ea9dfcf4c19f9f74f5 /storage_xml.c | |
| parent | 3ac6d9fe93279d74d36a6bf2b6e2ba182ed3bf34 (diff) | |
Allow individual settings to be locked down
This allows a site admin who pregenerates configs to mark certain
settings as untouchable, ensuring that users cannot mess up their
settings too badly.
Diffstat (limited to 'storage_xml.c')
| -rw-r--r-- | storage_xml.c | 11 | 
1 files changed, 11 insertions, 0 deletions
| diff --git a/storage_xml.c b/storage_xml.c index 107983cf..dbdd151d 100644 --- a/storage_xml.c +++ b/storage_xml.c @@ -64,9 +64,11 @@ static void xml_init(void)  static void handle_settings(struct xt_node *node, set_t **head)  {  	struct xt_node *c; +	struct set *s;  	for (c = node->children; (c = xt_find_node(c, "setting")); c = c->next) {  		char *name = xt_find_attr(c, "name"); +		char *locked = xt_find_attr(c, "locked");  		if (!name) {  			continue; @@ -79,6 +81,12 @@ static void handle_settings(struct xt_node *node, set_t **head)  			}  		}  		set_setstr(head, name, c->text); +		if (locked && !g_strcasecmp(locked, "true")) { +			s = set_find(head, name); +			if (s) { +				s->flags |= SET_LOCKED; +			} +		}  	}  } @@ -370,6 +378,9 @@ static void xml_generate_settings(struct xt_node *cur, set_t **head)  			struct xt_node *xset;  			xt_add_child(cur, xset = xt_new_node("setting", set->value, NULL));  			xt_add_attr(xset, "name", set->key); +			if (set->flags & SET_LOCKED) { +				xt_add_attr(xset, "locked", "true"); +			}  		}  	}  } | 
