hgomez 01/06/22 01:33:57 Modified: jk/native/common jk_ajp14.c jk_ajp14_worker.c jk_ajp_common.c jk_worker.c Log: This bunch of code fixes the AJP14 login problem. Rigth now ajp14 advanced login features works with the experimental ajp14 I'll commit later today Revision Changes Path 1.9 +19 -20 jakarta-tomcat-connectors/jk/native/common/jk_ajp14.c Index: jk_ajp14.c =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native/common/jk_ajp14.c,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- jk_ajp14.c 2001/06/18 14:15:23 1.8 +++ jk_ajp14.c 2001/06/22 08:33:56 1.9 @@ -58,7 +58,7 @@ /*************************************************************************** * Description: Next generation bi-directional protocol handler. * * Author: Henri Gomez <[EMAIL PROTECTED]> * - * Version: $Revision: 1.8 $ * + * Version: $Revision: 1.9 $ * ***************************************************************************/ @@ -73,11 +73,12 @@ * Compute the MD5 with ENTROPY / SECRET KEY */ -void ajp14_compute_md5(jk_login_service_t *s, jk_logger_t *l) +void ajp14_compute_md5(jk_login_service_t *s, + jk_logger_t *l) { jk_md5((const unsigned char *)s->entropy, (const unsigned char *)s->secret_key, s->computed_key); - jk_log(l, JK_LOG_DEBUG, "Into ajp14_compute_md5 (%s)\n", s->computed_key); + jk_log(l, JK_LOG_DEBUG, "Into ajp14_compute_md5 (%s/%s) -> (%s)\n", s->entropy, s->secret_key, s->computed_key); } @@ -132,9 +133,9 @@ * */ -int ajp14_unmarshal_login_seed(jk_msg_buf_t *msg, +int ajp14_unmarshal_login_seed(jk_msg_buf_t *msg, jk_login_service_t *s, - jk_logger_t *l) + jk_logger_t *l) { if (jk_b_get_bytes(msg, (unsigned char *)s->entropy, AJP14_ENTROPY_SEED_LEN) < 0) { jk_log(l, JK_LOG_ERROR, "Error ajp14_unmarshal_login_seed - can't get seed\n"); @@ -169,8 +170,6 @@ if (jk_b_append_byte(msg, AJP14_LOGCOMP_CMD)) return JK_FALSE; - ajp14_compute_md5(s, l); - /* * COMPUTED-SEED */ @@ -192,9 +191,9 @@ * */ -int ajp14_unmarshal_log_ok(jk_msg_buf_t *msg, +int ajp14_unmarshal_log_ok(jk_msg_buf_t *msg, jk_login_service_t *s, - jk_logger_t *l) + jk_logger_t *l) { unsigned long nego; char * sname; @@ -237,7 +236,7 @@ */ int ajp14_unmarshal_log_nok(jk_msg_buf_t *msg, - jk_logger_t *l) + jk_logger_t *l) { unsigned long status; @@ -299,7 +298,7 @@ * */ int ajp14_unmarshal_shutdown_nok(jk_msg_buf_t *msg, - jk_logger_t *l) + jk_logger_t *l) { unsigned long status; @@ -367,9 +366,9 @@ * */ -int ajp14_marshal_context_query_into_msgb(jk_msg_buf_t *msg, - char *virtual, - jk_logger_t *l) +int ajp14_marshal_context_query_into_msgb(jk_msg_buf_t *msg, + char *virtual, + jk_logger_t *l) { jk_log(l, JK_LOG_DEBUG, "Into ajp14_marshal_context_query_into_msgb\n"); @@ -408,7 +407,7 @@ int ajp14_unmarshal_context_info(jk_msg_buf_t *msg, jk_context_t *context, - jk_logger_t *l) + jk_logger_t *l) { char *sname; /* char *old; unused */ @@ -479,9 +478,9 @@ * */ -int ajp14_marshal_context_state_into_msgb(jk_msg_buf_t *msg, - jk_context_t *context, - jk_logger_t *l) +int ajp14_marshal_context_state_into_msgb(jk_msg_buf_t *msg, + jk_context_t *context, + jk_logger_t *l) { jk_log(l, JK_LOG_DEBUG, "Into ajp14_marshal_context_state_into_msgb\n"); @@ -525,7 +524,7 @@ int ajp14_unmarshal_context_state_reply(jk_msg_buf_t *msg, jk_context_t *context, - jk_logger_t *l) + jk_logger_t *l) { char *sname; @@ -579,7 +578,7 @@ int ajp14_unmarshal_context_update_cmd(jk_msg_buf_t *msg, jk_context_t *context, - jk_logger_t *l) + jk_logger_t *l) { return (ajp14_unmarshal_context_state_reply(msg, context, l)); } 1.7 +16 -12 jakarta-tomcat-connectors/jk/native/common/jk_ajp14_worker.c Index: jk_ajp14_worker.c =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native/common/jk_ajp14_worker.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- jk_ajp14_worker.c 2001/06/19 16:35:20 1.6 +++ jk_ajp14_worker.c 2001/06/22 08:33:56 1.7 @@ -58,7 +58,7 @@ /*************************************************************************** * Description: AJP14 next generation Bi-directional protocol. * * Author: Henri Gomez <[EMAIL PROTECTED]> * - * Version: $Revision: 1.6 $ * + * Version: $Revision: 1.7 $ * ***************************************************************************/ #include "jk_context.h" @@ -85,6 +85,7 @@ return JK_FALSE; } + /* jk_log(l, JK_LOG_DEBUG, "Into ajp14:validate - secret_key=%s\n", secret_key); */ return JK_TRUE; } @@ -117,12 +118,12 @@ jk_log(l, JK_LOG_ERROR, "can't malloc secret_key\n"); return JK_FALSE; } - + /* Set WebServerName (used at logon time) */ aw->login->web_server_name = strdup(we->server_name); if (aw->login->web_server_name == NULL) { - jk_log(l, JK_LOG_ERROR, "can't malloc web_server\n"); + jk_log(l, JK_LOG_ERROR, "can't malloc web_server_name\n"); return JK_FALSE; } @@ -193,13 +194,13 @@ jk_b_reset(msg); - if ((cmd = jk_b_get_byte(msg)) != AJP14_LOGSEED_CMD) { - jk_log(l, JK_LOG_ERROR, "Into ajp14:logon - awaited command %d, received command %d\n", AJP14_LOGSEED_CMD, cmd); + if (ajp_connection_tcp_get_message(ae, msg, l) != JK_TRUE) return JK_FALSE; - } - if (ajp_connection_tcp_get_message(ae, msg, l) != JK_TRUE) + if ((cmd = jk_b_get_byte(msg)) != AJP14_LOGSEED_CMD) { + jk_log(l, JK_LOG_ERROR, "Error ajp14:logon: awaited command %d, received %d\n", AJP14_LOGSEED_CMD, cmd); return JK_FALSE; + } if (ajp14_unmarshal_login_seed(msg, jl, l) != JK_TRUE) return JK_FALSE; @@ -222,15 +223,18 @@ switch (jk_b_get_byte(msg)) { case AJP14_LOGOK_CMD : - ajp14_unmarshal_log_ok(msg, jl, l); + if (ajp14_unmarshal_log_ok(msg, jl, l) == JK_TRUE) { + jk_log(l, JK_LOG_DEBUG, "Successfully connected to servlet-engine %s\n", jl->servlet_engine_name); + return JK_TRUE; + } break; case AJP14_LOGNOK_CMD : ajp14_unmarshal_log_nok(msg, l); - return JK_FALSE; + break; } - return JK_TRUE; + return JK_FALSE; } /* @@ -250,10 +254,10 @@ msg = jk_b_new(p); jk_b_set_buffer_size(msg, DEF_BUFFER_SZ); - rc = handle_logon(ae, msg, l); - jk_reset_pool(p); + if ((rc = handle_logon(ae, msg, l)) == JK_FALSE) + ajp_close_endpoint(ae, l); - return (rc); + return rc; } 1.5 +10 -7 jakarta-tomcat-connectors/jk/native/common/jk_ajp_common.c Index: jk_ajp_common.c =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native/common/jk_ajp_common.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- jk_ajp_common.c 2001/06/18 14:15:30 1.4 +++ jk_ajp_common.c 2001/06/22 08:33:56 1.5 @@ -59,7 +59,7 @@ * Description: common stuff for bi-directional protocols ajp13/ajp14. * * Author: Gal Shachor <[EMAIL PROTECTED]> * * Author: Henri Gomez <[EMAIL PROTECTED]> * - * Version: $Revision: 1.4 $ * + * Version: $Revision: 1.5 $ * ***************************************************************************/ @@ -770,8 +770,7 @@ * If we failed to reuse a connection, try to reconnect. */ if (ae->sd < 0) { - ajp_connect_to_endpoint(ae, l); - if (ae->sd >= 0) { + if (ajp_connect_to_endpoint(ae, l) == JK_TRUE) { /* * After we are connected, each error that we are going to * have is probably unrecoverable @@ -1107,8 +1106,8 @@ if (pThis && pThis->worker_private) { ajp_worker_t *p = pThis->worker_private; - int port = jk_get_worker_port(props, p->name, port); - char *host = jk_get_worker_host(props, p->name, host); + port = jk_get_worker_port(props, p->name, port); + host = jk_get_worker_host(props, p->name, host); jk_log(l, JK_LOG_DEBUG, "In jk_worker_t::validate for worker %s contact is %s:%d\n", p->name, host, port); @@ -1184,8 +1183,10 @@ if (pThis && *pThis && (*pThis)->worker_private) { ajp_worker_t *aw = (*pThis)->worker_private; - free(aw->name); + free(aw->name); + jk_log(l, JK_LOG_DEBUG, "Into jk_worker_t::destroy up to %d endpoint to close\n", aw->ep_cache_sz); + if(aw->ep_cache_sz) { unsigned i; for(i = 0 ; i < aw->ep_cache_sz ; i++) { @@ -1197,8 +1198,10 @@ JK_DELETE_CS(&(aw->cs), i); } - if (aw->login) + if (aw->login) { free(aw->login); + aw->login = NULL; + } free(aw); return JK_TRUE; 1.6 +10 -6 jakarta-tomcat-connectors/jk/native/common/jk_worker.c Index: jk_worker.c =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native/common/jk_worker.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- jk_worker.c 2001/06/18 14:16:15 1.5 +++ jk_worker.c 2001/06/22 08:33:56 1.6 @@ -59,7 +59,7 @@ * Description: Workers controller * * Author: Gal Shachor <[EMAIL PROTECTED]> * * Author: Henri Gomez <[EMAIL PROTECTED]> * - * Version: $Revision: 1.5 $ * + * Version: $Revision: 1.6 $ * ***************************************************************************/ #define _PLACE_WORKER_LIST_HERE @@ -67,7 +67,7 @@ #include "jk_worker.h" #include "jk_util.h" -static void close_workers(void); +static void close_workers(jk_logger_t *l); static worker_factory get_factory_for(char *type); @@ -101,7 +101,7 @@ num_of_workers, we, l)) { - close_workers(); + close_workers(l); return JK_FALSE; } @@ -113,7 +113,7 @@ void wc_close(jk_logger_t *l) { jk_log(l, JK_LOG_DEBUG, "Into wc_close\n"); - close_workers(); + close_workers(l); jk_log(l, JK_LOG_DEBUG, "wc_close, done\n"); } @@ -189,15 +189,19 @@ return JK_FALSE; } -static void close_workers(void) +static void close_workers(jk_logger_t *l) { int sz = map_size(worker_map); + + jk_log(l, JK_LOG_DEBUG, "close_workers got %d workers to destroy\n", sz); + if(sz > 0) { int i; for(i = 0 ; i < sz ; i++) { jk_worker_t *w = map_value_at(worker_map, i); if(w) { - w->destroy(&w, NULL); + jk_log(l, JK_LOG_DEBUG, "close_workers will destroy worker %s\n", map_name_at(worker_map, i)); + w->destroy(&w, l); } } }