diff options
Diffstat (limited to 'service_validate.c')
-rw-r--r-- | service_validate.c | 161 |
1 files changed, 0 insertions, 161 deletions
diff --git a/service_validate.c b/service_validate.c deleted file mode 100644 index 3522cde..0000000 --- a/service_validate.c +++ /dev/null @@ -1,161 +0,0 @@ -/* - * Copyright (C) 2013 John Crispin <blogic@openwrt.org> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 2.1 - * as published by the Free Software Foundation - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - */ - -#include <libubox/blobmsg_json.h> -#include <libubox/avl-cmp.h> - -#include "procd.h" -#include "service.h" - -enum { - SERVICE_VAL_PACKAGE, - SERVICE_VAL_TYPE, - SERVICE_VAL_DATA, - __SERVICE_VAL_MAX -}; - -static const struct blobmsg_policy service_validate_attrs[__SERVICE_VAL_MAX] = { - [SERVICE_VAL_PACKAGE] = { "package", BLOBMSG_TYPE_STRING }, - [SERVICE_VAL_TYPE] = { "type", BLOBMSG_TYPE_STRING }, - [SERVICE_VAL_DATA] = { "data", BLOBMSG_TYPE_TABLE }, -}; - -static struct avl_tree validators; - -void -service_validate_dump_all(struct blob_buf *b, char *p, char *s) -{ - struct json_object *r = json_object_new_object(); - struct validate *v; - - if (!r) - return; - - avl_for_each_element(&validators, v, avl) { - struct json_object *o, *t; - struct vrule *vr; - - if (p && strcmp(p, v->package)) - continue; - - if (s && strcmp(s, v->type)) - continue; - - o = json_object_object_get(r, v->package); - if (!o) { - o = json_object_new_object(); - json_object_object_add(r, v->package, o); - } - t = json_object_object_get(o, v->type); - if (!t) { - t = json_object_new_object(); - json_object_object_add(o, v->type, t); - } - avl_for_each_element(&v->rules, vr, avl) - json_object_object_add(t, vr->option, json_object_new_string(vr->rule)); - } - blobmsg_add_object(b, r); -} - -void -service_validate_dump(struct blob_buf *b, struct service *s) -{ - struct validate *v; - void *i = blobmsg_open_array(b, "validate"); - - list_for_each_entry(v, &s->validators, list) { - struct vrule *vr; - void *k, *j = blobmsg_open_table(b, "validate"); - - blobmsg_add_string(b, "package", v->package); - blobmsg_add_string(b, "type", v->type); - k = blobmsg_open_table(b, "rules"); - avl_for_each_element(&v->rules, vr, avl) - blobmsg_add_string(b, vr->option, vr->rule); - blobmsg_close_table(b, k); - blobmsg_close_table(b, j); - } - blobmsg_close_array(b, i); -} - -void -service_validate_del(struct service *s) -{ - struct validate *v, *n; - - if (list_empty(&s->validators)) - return; - - list_for_each_entry_safe(v, n, &s->validators, list) { - struct vrule *vr, *a; - - avl_for_each_element_safe(&v->rules, vr, avl, a) { - avl_delete(&v->rules, &vr->avl); - free(vr); - } - avl_delete(&validators, &v->avl); - list_del(&v->list); - free(v); - } -} - -void -service_validate_add(struct service *s, struct blob_attr *msg) -{ - struct blob_attr *tb[__SERVICE_VAL_MAX]; - struct validate *v; - char *type, *package; - struct blob_attr *cur; - int rem; - - blobmsg_parse(service_validate_attrs, __SERVICE_VAL_MAX, tb, blobmsg_data(msg), blobmsg_data_len(msg)); - if (!tb[SERVICE_VAL_PACKAGE] || !tb[SERVICE_VAL_TYPE] || !tb[SERVICE_VAL_DATA]) - return; - - v = calloc_a(sizeof(*v), &package, blobmsg_data_len(tb[SERVICE_VAL_PACKAGE]) + 1, - &type, blobmsg_data_len(tb[SERVICE_VAL_TYPE]) + 1); - if (!v) - return; - - v->type = type; - v->avl.key = v->package = package; - strcpy(v->package, blobmsg_get_string(tb[SERVICE_VAL_PACKAGE])); - strcpy(v->type, blobmsg_get_string(tb[SERVICE_VAL_TYPE])); - - list_add(&v->list, &s->validators); - if (avl_insert(&validators, &v->avl)) { - free(v); - return; - } - avl_init(&v->rules, avl_strcmp, false, NULL); - - blobmsg_for_each_attr(cur, tb[SERVICE_VAL_DATA], rem) { - char *option; - char *rule; - struct vrule *vr = calloc_a(sizeof(*vr), &option, strlen(blobmsg_name(cur)) + 1, - &rule, strlen(blobmsg_get_string(cur)) + 1); - - vr->avl.key = vr->option = option; - vr->rule = rule; - strcpy(vr->option, blobmsg_name(cur)); - strcpy(vr->rule, blobmsg_get_string(cur)); - if (avl_insert(&v->rules, &vr->avl)) - free(vr); - } -} - -void -service_validate_init(void) -{ - avl_init(&validators, avl_strcmp, true, NULL); -} |