This is an automated email from the ASF dual-hosted git repository. ChristopherSchultz pushed a commit to branch use-posts-for-writes in repository https://gitbox.apache.org/repos/asf/tomcat-connectors.git
commit fc04098323e60c790df0aa455187ebe708c0ebe0 Author: ChristopherSchultz <[email protected]> AuthorDate: Tue Oct 20 21:41:14 2026 +0000 Use <form> for all modification actions --- native/common/jk_status.c | 127 ++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 116 insertions(+), 11 deletions(-) diff --git a/native/common/jk_status.c b/native/common/jk_status.c index 36238847a..9d26d4d6b 100644 --- a/native/common/jk_status.c +++ b/native/common/jk_status.c @@ -1291,6 +1291,111 @@ static void status_write_uri(jk_ws_service_t *s, jk_putv(s, "\">", text, "</a>", NULL); } +static void status_write_form(jk_ws_service_t *s, + status_endpoint_t *p, + const char *text, + int cmd, int mime, + const char *worker, const char *sub_worker, + unsigned int add_options, unsigned int rm_options, + const char *attribute, + jk_log_context_t *l) +{ + int i; + int sz; + int from; + int restore_sub_worker = JK_FALSE; + int save_sub_worker = JK_FALSE; + int prev; + unsigned int opt = 0; + const char *arg; + jk_map_t *m = p->req_params; + + status_get_string(p, JK_STATUS_ARG_FROM, NULL, &arg, l); + from = status_cmd_int(arg); + status_get_string(p, JK_STATUS_ARG_CMD, NULL, &arg, l); + prev = status_cmd_int(arg); + + jk_printf(s, l, "<form style=\"display:inline\" method=\"post\" action=\"%s\">", p->req_uri); + jk_printf(s, l, "<input type=\"hidden\" name=\"%s\" value=\"%s\" />", JK_STATUS_ARG_WORKER, worker); + + if (cmd != JK_STATUS_CMD_UNKNOWN) { + jk_printf(s, l, "<input type=\"hidden\" name=\"%s\" value=\"%s\" />", JK_STATUS_ARG_CMD, status_cmd_text(cmd)); + if (cmd == JK_STATUS_CMD_EDIT || + cmd == JK_STATUS_CMD_RESET || + cmd == JK_STATUS_CMD_RECOVER) { + jk_printf(s, l, "<input type=\"hidden\" name=\"%s\" value=\"%s\" />", JK_STATUS_ARG_FROM, status_cmd_text(prev)); + + save_sub_worker = JK_TRUE; + } + } + if (mime != JK_STATUS_MIME_UNKNOWN) { + jk_printf(s, l, "<input type=\"hidden\" name=\"%s\" value=\"%s\" />", JK_STATUS_ARG_MIME, status_mime_text(mime)); + } + + if (sub_worker && sub_worker[0] && cmd != JK_STATUS_CMD_LIST) { + jk_printf(s, l, "<input type=\"hidden\" name=\"%s\" value=\"%s\" />", JK_STATUS_ARG_SUB_WORKER, sub_worker); + } + if (attribute && attribute[0]) { + jk_printf(s, l, "<input type=\"hidden\" name=\"%s\" value=\"%s\" />", JK_STATUS_ARG_ATTRIBUTE, attribute); + } + + /* propagate additional parameters from the request */ + sz = jk_map_size(m); + for (i = 0; i < sz; i++) { + const char *k = jk_map_name_at(m, i); + const char *v = jk_map_value_at(m, i); + if (!strcmp(k, JK_STATUS_ARG_CMD) && cmd != JK_STATUS_CMD_UNKNOWN) { + continue; + } + if (!strcmp(k, JK_STATUS_ARG_MIME) && mime != JK_STATUS_MIME_UNKNOWN) { + continue; + } + if (!strcmp(k, JK_STATUS_ARG_FROM)) { + continue; + } + if (!strcmp(k, JK_STATUS_ARG_WORKER) && worker) { + continue; + } + if (!strcmp(k, JK_STATUS_ARG_ATTRIBUTE) && attribute) { + continue; + } + if (!strcmp(k, JK_STATUS_ARG_ATTRIBUTE) && cmd != JK_STATUS_CMD_UPDATE && cmd != JK_STATUS_CMD_EDIT) { + continue; + } + if (!strncmp(k, JK_STATUS_ARG_MULT_VALUE_BASE, 3) && cmd != JK_STATUS_CMD_UPDATE) { + continue; + } + if (k[0] == 'v' && cmd != JK_STATUS_CMD_UPDATE) { + continue; + } + if (!strcmp(k, JK_STATUS_ARG_OPTIONS)) { + opt = atoi(v); + continue; + } + if (!strcmp(k, JK_STATUS_ARG_SUB_WORKER)) { + if (save_sub_worker == JK_TRUE) { + jk_printf(s, l, "<input type=\"hidden\" name=\"%s\" value=\"%s\" />", JK_STATUS_ARG_PREV_SUB_WORKER, v); + continue; + } + else if (sub_worker || cmd == JK_STATUS_CMD_LIST) { + continue; + } + else if (restore_sub_worker == JK_TRUE) { + continue; + } + } + if (!strcmp(k, JK_STATUS_ARG_PREV_SUB_WORKER) && restore_sub_worker == JK_TRUE && cmd != JK_STATUS_CMD_LIST) { + jk_printf(s, l, "<input type=\"hidden\" name=\"%s\" value=\"%s\" />", JK_STATUS_ARG_SUB_WORKER, v); + continue; + } + jk_printf(s, l, "<input type=\"hidden\" name=\"%s\" value=\"%s\" />", k, v); + } + if (opt | add_options | rm_options) + jk_printf(s, l, "<input type=\"hidden\" name=\"%s\" value=\"%u\" />", JK_STATUS_ARG_OPTIONS, (opt | add_options) & ~rm_options); + jk_printf(s, l, "<button style=\"border:0; padding:0; background:none; color:blue; text-decoration:underline; cursor:pointer; font:inherit\">%s</button>", text); + jk_printf(s, l, "</form>"); +} + static int status_unescape_uri(jk_ws_service_t *s, status_endpoint_t *p, jk_log_context_t *l) @@ -2466,8 +2571,8 @@ static void display_worker_lb(jk_ws_service_t *s, status_write_uri(s, p, "E", JK_STATUS_CMD_EDIT, JK_STATUS_MIME_UNKNOWN, name, "", 0, 0, "", l); jk_puts(s, "|"); - status_write_uri(s, p, "R", JK_STATUS_CMD_RESET, JK_STATUS_MIME_UNKNOWN, - name, "", 0, 0, "", l); + status_write_form(s, p, "R", JK_STATUS_CMD_RESET, JK_STATUS_MIME_UNKNOWN, + name, "", 0, 0, "", l); } jk_puts(s, "] "); jk_putv(s, "Worker Status for ", name, "</h3>\n", NULL); @@ -2701,12 +2806,12 @@ static void display_worker_lb(jk_ws_service_t *s, status_write_uri(s, p, "E", JK_STATUS_CMD_EDIT, JK_STATUS_MIME_UNKNOWN, name, sub_name, 0, 0, "", l); jk_puts(s, "|"); - status_write_uri(s, p, "R", JK_STATUS_CMD_RESET, JK_STATUS_MIME_UNKNOWN, - name, sub_name, 0, 0, "", l); + status_write_form(s, p, "R", JK_STATUS_CMD_RESET, JK_STATUS_MIME_UNKNOWN, + name, "", 0, 0, "", l); if (swr->s->state == JK_LB_STATE_ERROR) { jk_puts(s, "|"); - status_write_uri(s, p, "T", JK_STATUS_CMD_RECOVER, JK_STATUS_MIME_UNKNOWN, - name, sub_name, 0, 0, "", l); + status_write_form(s, p, "T", JK_STATUS_CMD_RECOVER, JK_STATUS_MIME_UNKNOWN, + name, sub_name, 0, 0, "", l); } } jk_puts(s, "]"); @@ -2728,11 +2833,11 @@ static void display_worker_lb(jk_ws_service_t *s, status_write_uri(s, p, "E", JK_STATUS_CMD_EDIT, JK_STATUS_MIME_UNKNOWN, name, sub_name, 0, 0, "", l); jk_puts(s, "|"); - status_write_uri(s, p, "R", JK_STATUS_CMD_RESET, JK_STATUS_MIME_UNKNOWN, - name, sub_name, 0, 0, "", l); + status_write_form(s, p, "R", JK_STATUS_CMD_RESET, JK_STATUS_MIME_UNKNOWN, + name, sub_name, 0, 0, "", l); if (wr->s->state == JK_LB_STATE_ERROR) { jk_puts(s, "|"); - status_write_uri(s, p, "T", JK_STATUS_CMD_RECOVER, JK_STATUS_MIME_UNKNOWN, + status_write_form(s, p, "T", JK_STATUS_CMD_RECOVER, JK_STATUS_MIME_UNKNOWN, name, sub_name, 0, 0, "", l); } } @@ -2841,8 +2946,8 @@ static void display_worker_ajp(jk_ws_service_t *s, status_write_uri(s, p, "E", JK_STATUS_CMD_EDIT, JK_STATUS_MIME_UNKNOWN, name, "", 0, 0, "", l); jk_puts(s, "|"); - status_write_uri(s, p, "R", JK_STATUS_CMD_RESET, JK_STATUS_MIME_UNKNOWN, - name, "", 0, 0, "", l); + status_write_form(s, p, "R", JK_STATUS_CMD_RESET, JK_STATUS_MIME_UNKNOWN, + name, "", 0, 0, "", l); } jk_puts(s, "] "); jk_putv(s, "Worker Status for ", name, "</h3>\n", NULL); --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
