diff options
Diffstat (limited to 'src/ctl.c')
-rw-r--r-- | src/ctl.c | 176 |
1 files changed, 92 insertions, 84 deletions
@@ -918,14 +918,17 @@ static void res_instance (struct ctlio *, enum http_method, char const *, struct json_value *); static void res_programs (struct ctlio *, enum http_method, char const *, struct json_value *); +static void res_conf (struct ctlio *, enum http_method, char const *, + struct json_value *); + +#if PIES_SYSVINIT_ENABLED static void res_runlevel (struct ctlio *, enum http_method, char const *, struct json_value *); static void res_environ (struct ctlio *, enum http_method, char const *, struct json_value *); -static void res_conf (struct ctlio *, enum http_method, char const *, - struct json_value *); - static int pred_sysvinit (void); +#endif + struct ctlio_resource { @@ -943,8 +946,10 @@ static struct ctlio_resource restab[] = { { S(/conf), CTL_ADMIN_STATE, NULL, res_conf }, { S(/programs), CTL_ADMIN_STATE|CTL_USER_STATE, NULL, res_programs }, +#if PIES_SYSVINIT_ENABLED { S(/runlevel), CTL_ADMIN_STATE, pred_sysvinit, res_runlevel }, { S(/environ), CTL_ADMIN_STATE, pred_sysvinit, res_environ }, +#endif { NULL } #undef S }; @@ -2117,6 +2122,7 @@ res_programs (struct ctlio *io, enum http_method meth, res_programs_select (io, meth, uri, json); } +#if PIES_SYSVINIT_ENABLED static int pred_sysvinit (void) { @@ -2163,6 +2169,89 @@ res_runlevel (struct ctlio *io, enum http_method meth, else ctlio_reply (io, 405, NULL); } + +/* GET /environ - List entire environment + * ["RUNLEVEL=3", "CONSOLE=/dev/tty", ...] + * GET /environ/NAME - Get value of variable NAME + * { "status":"OK", "value":"..." } + * { "status":"ER", "error_message":"..." } + * DELETE /environ/NAME - Unset variable + * { "status":"OK" } + * { "status":"ER", "error_message":"..." } + * PUT /environ/NAME=VALUE - Set variable + * { "status":"OK" } + * { "status":"ER", "error_message":"..." } + */ +static void +env_reply (struct ctlio *io, int ok, int rc) +{ + switch (rc) + { + case 0: + io->code = ok; + io->output.reply = json_reply_create (); + json_object_set_string (io->output.reply, "status", "OK"); + break; + + case 1: + ctlio_reply (io, 403, NULL); + break; + + case -1: + ctlio_reply (io, 404, NULL); + } +} + +static void +res_environ (struct ctlio *io, enum http_method meth, + char const *uri, struct json_value *json) +{ + if (meth == METH_GET) + { + if (uri && uri[1]) + { + char *value; + + if (sysvinit_envlocate (uri + 1, &value) == -1) + ctlio_reply (io, 404, NULL); + else + { + env_reply (io, 200, 0); + json_object_set_string (io->output.reply, "value", "%s", value); + } + } + else + { + size_t i; + + io->output.reply = json_new_array (); + io->code = 200; + for (i = 0; sysvinit_environ_hint[i]; i++) + { + json_array_append (io->output.reply, + json_new_string (sysvinit_environ_hint[i])); + } + } + } + else if (meth == METH_DELETE) + { + if (!(uri && uri[0])) + ctlio_reply (io, 400, NULL); + else + env_reply (io, 200, sysvinit_envupdate (uri + 1)); + } + else if (meth == METH_PUT) + { + if (!(uri && uri[0])) + ctlio_reply (io, 400, NULL); + else + env_reply (io, 201, sysvinit_envupdate (uri + 1)); + } + else + ctlio_reply (io, 405, NULL); + +} +#endif /* GET /conf/runtime - List configuration * PUT /conf/runtime - Reload configuration @@ -2407,85 +2496,4 @@ res_conf (struct ctlio *io, enum http_method meth, else ctlio_reply (io, 404, NULL); } - -/* GET /environ - List entire environment - * ["RUNLEVEL=3", "CONSOLE=/dev/tty", ...] - * GET /environ/NAME - Get value of variable NAME - * { "status":"OK", "value":"..." } - * { "status":"ER", "error_message":"..." } - * DELETE /environ/NAME - Unset variable - * { "status":"OK" } - * { "status":"ER", "error_message":"..." } - * PUT /environ/NAME=VALUE - Set variable - * { "status":"OK" } - * { "status":"ER", "error_message":"..." } - */ -static void -env_reply (struct ctlio *io, int ok, int rc) -{ - switch (rc) - { - case 0: - io->code = ok; - io->output.reply = json_reply_create (); - json_object_set_string (io->output.reply, "status", "OK"); - break; - case 1: - ctlio_reply (io, 403, NULL); - break; - - case -1: - ctlio_reply (io, 404, NULL); - } -} - -static void -res_environ (struct ctlio *io, enum http_method meth, - char const *uri, struct json_value *json) -{ - if (meth == METH_GET) - { - if (uri && uri[1]) - { - char *value; - - if (sysvinit_envlocate (uri + 1, &value) == -1) - ctlio_reply (io, 404, NULL); - else - { - env_reply (io, 200, 0); - json_object_set_string (io->output.reply, "value", "%s", value); - } - } - else - { - size_t i; - - io->output.reply = json_new_array (); - io->code = 200; - for (i = 0; sysvinit_environ_hint[i]; i++) - { - json_array_append (io->output.reply, - json_new_string (sysvinit_environ_hint[i])); - } - } - } - else if (meth == METH_DELETE) - { - if (!(uri && uri[0])) - ctlio_reply (io, 400, NULL); - else - env_reply (io, 200, sysvinit_envupdate (uri + 1)); - } - else if (meth == METH_PUT) - { - if (!(uri && uri[0])) - ctlio_reply (io, 400, NULL); - else - env_reply (io, 201, sysvinit_envupdate (uri + 1)); - } - else - ctlio_reply (io, 405, NULL); - -} |