static void WebRunBinCmd(FILE *f, const char *query, int priv) { Console c = &gConsole; struct console_session css; ConsoleSession cs = &css; char *buf; char *tmp; int argc, k; char *argv[MAX_CONSOLE_ARGS]; memset(cs, 0, sizeof(*cs)); cs->cookie = f; cs->console = c; cs->close = NULL; cs->write = WebConsoleSessionWrite; cs->writev = WebConsoleSessionWriteV; cs->prompt = WebConsoleSessionShowPrompt; cs->context.cs = cs; cs->context.priv = priv; tmp = buf = Mstrdup(MB_WEB, query); for (argc = 0; (argv[argc] = strsep(&tmp, "&")) != NULL;) if (argv[argc][0] != '\0') if (++argc >= MAX_CONSOLE_ARGS) break; for (k = 0; k < argc; k++) { int ac, rtn; char *av[MAX_CONSOLE_ARGS]; char *buf1; buf1 = Malloc(MB_WEB, strlen(argv[k]) + 1); http_request_url_decode(argv[k], buf1); Log2(LG_CONSOLE, ("[%s] WEB: %s", cs->context.lnk ? cs->context.lnk->name : (cs->context.bund? cs->context.bund->name : ""), buf1)); ac = ParseLine(buf1, av, sizeof(av) / sizeof(*av), 0); cs->context.errmsg[0] = 0; rtn = DoCommandTab(&cs->context, gCommands, ac, av); Freee(buf1); fprintf(f, "RESULT: %d %s\n", rtn, cs->context.errmsg); } Freee(buf); RESETREF(cs->context.lnk, NULL); RESETREF(cs->context.bund, NULL); RESETREF(cs->context.rep, NULL); }
char * http_servlet_tmpl_func_query_string(struct tmpl_ctx *ctx, char **errmsgp, int ac, char **av) { struct http_servlet_tmpl_arg *const arg = tmpl_ctx_get_arg(ctx); const char *const mtype = tmpl_ctx_get_mtype(ctx); const char *eqs = http_request_get_query_string(arg->req); char *dqs; if (ac != 1) { errno = EINVAL; return (NULL); } /* URL-decode query string */ if ((dqs = MALLOC(mtype, strlen(eqs) + 1)) == NULL) return (NULL); http_request_url_decode(eqs, dqs); /* Return it */ return (dqs); }
static void WebRunCmd(FILE *f, const char *query, int priv) { Console c = &gConsole; struct console_session css; ConsoleSession cs = &css; char *buf; char *tmp; int argc, k; char *argv[MAX_CONSOLE_ARGS]; memset(cs, 0, sizeof(*cs)); cs->cookie = f; cs->console = c; cs->close = NULL; cs->write = WebConsoleSessionWrite; cs->writev = WebConsoleSessionWriteV; cs->prompt = WebConsoleSessionShowPrompt; cs->context.cs = cs; cs->context.priv = priv; tmp = buf = Mstrdup(MB_WEB, query); for (argc = 0; (argv[argc] = strsep(&tmp, "&")) != NULL;) if (argv[argc][0] != '\0') if (++argc >= MAX_CONSOLE_ARGS) break; fprintf(f, "<P><A href=\"/\"><< Back</A></P>\n"); if (argc == 0) { fprintf(f, "<P>No command cpecified!</P>\n"); goto done; } fprintf(f, "<PRE>\n"); for (k = 0; k < argc; k++) { int ac; char *av[MAX_CONSOLE_ARGS]; char *buf1; buf1 = Malloc(MB_WEB, strlen(argv[k]) + 1); http_request_url_decode(argv[k], buf1); Log2(LG_CONSOLE, ("[%s] WEB: %s", cs->context.lnk ? cs->context.lnk->name : (cs->context.bund? cs->context.bund->name : ""), buf1)); cs->prompt(cs); cs->write(cs, "%s\n", buf1); ac = ParseLine(buf1, av, sizeof(av) / sizeof(*av), 0); DoCommand(&cs->context, ac, av, NULL, 0); Freee(buf1); } fprintf(f, "</PRE>\n"); done: Freee(buf); fprintf(f, "<P><A href=\"/\"><< Back</A></P>\n"); RESETREF(cs->context.lnk, NULL); RESETREF(cs->context.bund, NULL); RESETREF(cs->context.rep, NULL); }