Author: rjung Date: Tue Mar 3 00:33:05 2009 New Revision: 749491 URL: http://svn.apache.org/viewvc?rev=749491&view=rev Log: Make wildcards in sub worker names work for update commands of status worker. It couldn't work, because check_worker() was not wildcard aware. Also reset the error string "could not find sub worker" at the end of the wildcard loop.
Modified: tomcat/connectors/trunk/jk/native/common/jk_status.c Modified: tomcat/connectors/trunk/jk/native/common/jk_status.c URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/common/jk_status.c?rev=749491&r1=749490&r2=749491&view=diff ============================================================================== --- tomcat/connectors/trunk/jk/native/common/jk_status.c (original) +++ tomcat/connectors/trunk/jk/native/common/jk_status.c Tue Mar 3 00:33:05 2009 @@ -165,6 +165,7 @@ #define JK_STATUS_CMD_PROP_DUMP_LINK 0x00000100 #define JK_STATUS_CMD_PROP_LINK_HELP 0x00000200 #define JK_STATUS_CMD_PROP_LEGEND 0x00000400 +#define JK_STATUS_CMD_PROP_WILDCARD 0x00000800 #define JK_STATUS_MIME_UNKNOWN (0) #define JK_STATUS_MIME_HTML (1) @@ -973,6 +974,8 @@ cmd == JK_STATUS_CMD_VERSION || cmd == JK_STATUS_CMD_DUMP) props |= JK_STATUS_CMD_PROP_BACK_LINK; + if (cmd == JK_STATUS_CMD_UPDATE) + props |= JK_STATUS_CMD_PROP_WILDCARD; if (cmd != JK_STATUS_CMD_EDIT && cmd != JK_STATUS_CMD_UPDATE && cmd != JK_STATUS_CMD_RESET && @@ -3572,10 +3575,12 @@ static int check_worker(jk_ws_service_t *s, status_endpoint_t *p, + jk_uint32_t allow_wildchars, jk_logger_t *l) { const char *worker; const char *sub_worker; + status_worker_t *w = p->worker; jk_worker_t *jw = NULL; lb_sub_worker_t *wr = NULL; @@ -3587,8 +3592,24 @@ } if (sub_worker && sub_worker[0]) { + unsigned int idx = 0; + unsigned int *wi = NULL; + if (strchr(sub_worker, '*') || strchr(sub_worker, '?')) { + /* We have a wildchar matching rule */ + if (!allow_wildchars) { + jk_log(l, JK_LOG_ERROR, + "Status worker '%s' wildcards in sub worker '%s' of worker '%s' not allowed for this command", + w->name, sub_worker, worker ? worker : "(null)"); + p->msg = "wildcard not allowed in sub worker for this command"; + JK_TRACE_EXIT(l); + return JK_FALSE; + } + else { + wi = &idx; + } + } if (search_sub_worker(s, p, jw, worker, &wr, sub_worker, - NULL, l) == JK_FALSE) { + wi, l) == JK_FALSE) { JK_TRACE_EXIT(l); return JK_FALSE; } @@ -3955,10 +3976,12 @@ else { unsigned int idx = 0; unsigned int *wi = NULL; + int is_wildchar = JK_FALSE; if (strchr(sub_worker, '*') || strchr(sub_worker, '?')) { /* We have a wildchar matching rule */ wi = &idx; + is_wildchar = JK_TRUE; } for (;;) { if (search_sub_worker(s, p, jw, worker, &wr, sub_worker, @@ -3969,6 +3992,7 @@ } else { /* We have found at least one match previously */ + p->msg = "OK"; break; } } @@ -4417,7 +4441,7 @@ err = "Invalid mime type."; } else if (cmd_props & JK_STATUS_CMD_PROP_CHECK_WORKER && - (check_worker(s, p, l) != JK_TRUE)) { + (check_worker(s, p, cmd_props & JK_STATUS_CMD_PROP_WILDCARD, l) != JK_TRUE)) { err = p->msg; } } @@ -4444,7 +4468,10 @@ /* lock shared memory */ jk_shm_lock(); if (update_worker(s, p, l) == JK_FALSE) { - err = "Update failed"; + if (strncmp("OK", p->msg, 3)) + err = p->msg; + else + err = "Update failed"; } /* unlock the shared memory */ jk_shm_unlock(); --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org