summaryrefslogtreecommitdiffabout
path: root/src/ctl.c
Side-by-side diff
Diffstat (limited to 'src/ctl.c') (more/less context) (ignore whitespace changes)
-rw-r--r--src/ctl.c176
1 files changed, 92 insertions, 84 deletions
diff --git a/src/ctl.c b/src/ctl.c
index d9a8998..5609f19 100644
--- a/src/ctl.c
+++ b/src/ctl.c
@@ -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);
-
-}

Return to:

Send suggestions and report system problems to the System administrator.