hgomez 01/06/11 23:28:52 Modified: jk/native/common jk_ajp14.c jk_ajp14.h jk_ajp14_worker.c Log: Continuation on AJP14. The works is now on the Logon Phase Revision Changes Path 1.5 +1 -2 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.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- jk_ajp14.c 2001/06/07 14:35:44 1.4 +++ jk_ajp14.c 2001/06/12 06:28:51 1.5 @@ -56,7 +56,7 @@ /*************************************************************************** * Description: Next generation bi-directional protocol handler. * * Author: Henri Gomez <[EMAIL PROTECTED]> * - * Version: $Revision: 1.4 $ * + * Version: $Revision: 1.5 $ * ***************************************************************************/ @@ -131,7 +131,6 @@ int ajp14_unmarshal_login_seed(jk_msg_buf_t *msg, jk_login_service_t *s, - jk_pool_t *p, jk_logger_t *l) { if (jk_b_get_bytes(msg, s->entropy, AJP14_ENTROPY_SEED_LEN) < 0) { 1.4 +2 -3 jakarta-tomcat-connectors/jk/native/common/jk_ajp14.h Index: jk_ajp14.h =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native/common/jk_ajp14.h,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- jk_ajp14.h 2001/06/07 14:35:46 1.3 +++ jk_ajp14.h 2001/06/12 06:28:51 1.4 @@ -56,7 +56,7 @@ /*************************************************************************** * Description: Next generation bi-directional protocol handler. * * Author: Henri Gomez <[EMAIL PROTECTED]> * - * Version: $Revision: 1.3 $ * + * Version: $Revision: 1.4 $ * ***************************************************************************/ #ifndef JK_AJP14_H #define JK_AJP14_H @@ -71,7 +71,7 @@ #define AJP14_PROTO 14 #define AJP14_WS_HEADER 0x1235 -#define AJP14_SW_HEADER 0x4143 /* 'AC' */ +#define AJP14_SW_HEADER 0x1235 /* AJP14 use now the same header in both directions */ #define AJP14_DEF_HOST ("localhost") #define AJP14_DEF_PORT (8011) @@ -299,7 +299,6 @@ int ajp14_unmarshal_login_seed(jk_msg_buf_t *msg, jk_login_service_t *s, - jk_pool_t *p, jk_logger_t *l); int ajp14_marshal_login_comp_into_msgb(jk_msg_buf_t *msg, 1.3 +122 -14 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.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- jk_ajp14_worker.c 2001/06/07 14:36:46 1.2 +++ jk_ajp14_worker.c 2001/06/12 06:28:51 1.3 @@ -56,7 +56,7 @@ /*************************************************************************** * Description: AJP14 next generation Bi-directional protocol. * * Author: Henri Gomez <[EMAIL PROTECTED]> * - * Version: $Revision: 1.2 $ * + * Version: $Revision: 1.3 $ * ***************************************************************************/ #include "jk_context.h" @@ -65,12 +65,13 @@ /* -------------------- Method -------------------- */ static int JK_METHOD validate(jk_worker_t *pThis, jk_map_t *props, + jk_worker_env_t *we, jk_logger_t *l) { ajp_worker_t *aw; char * secret_key; - if (ajp_validate(pThis, props, l, AJP14_PROTO) == JK_FALSE) + if (ajp_validate(pThis, props, we, l, AJP14_PROTO) == JK_FALSE) return JK_FALSE; aw = pThis->worker_private; @@ -85,20 +86,49 @@ return JK_TRUE; } +static int JK_METHOD get_endpoint(jk_worker_t *pThis, + jk_endpoint_t **pend, + jk_logger_t *l) +{ + return (ajp_get_endpoint(pThis, pend, l, AJP14_PROTO)); +} + static int JK_METHOD init(jk_worker_t *pThis, jk_map_t *props, + jk_worker_env_t *we, jk_logger_t *l) { - ajp_worker_t *aw; - char *secret_key; + ajp_worker_t *aw; + ajp_endpoint_t *ae; + jk_endpoint_t *je; + char *secret_key; - if (ajp_init(pThis, props, l, AJP14_PROTO) == JK_FALSE) + if (ajp_init(pThis, props, we, l, AJP14_PROTO) == JK_FALSE) return JK_FALSE; - aw = pThis->worker_private; + aw = pThis->worker_private; + + /* Set Secret Key (used at logon time) */ + aw->login->secret_key = jk_get_worker_secret_key(props, aw->name); + + /* Set WebServerName (used at logon time) */ + aw->login->web_server_name = we->server_name; + + if (get_endpoint(pThis, &je, l) == JK_FALSE) + return JK_FALSE; + + ae = je->endpoint_private; + + if (ajp_connect_to_endpoint(ae, l) == JK_TRUE) { + + /* connection stage passed - try to get context info + * this is the long awaited autoconf feature :) + */ - aw->login->secret_key = jk_get_worker_secret_key(props, aw->name); - return JK_TRUE; + ajp_close_endpoint(ae, l); + } + + return JK_TRUE; } @@ -107,19 +137,96 @@ { ajp_worker_t *aw = (*pThis)->worker_private; - if (aw->login) + if (aw->login) { free(aw->login); + aw->login = NULL; + } return (ajp_destroy(pThis, l, AJP14_PROTO)); } -static int JK_METHOD get_endpoint(jk_worker_t *pThis, - jk_endpoint_t **pend, - jk_logger_t *l) +/* + * AJP14 Logon Phase + * + * INIT + REPLY / NEGO + REPLY + */ + +static int handle_logon(ajp_endpoint_t *ae, + jk_msg_buf_t *msg, + jk_logger_t *l) { - return (ajp_get_endpoint(pThis, pend, l, AJP14_PROTO)); + jk_login_service_t *jl = ae->worker->login; + + ajp14_marshal_login_init_into_msgb(msg, jl, l); + + jk_log(l, JK_LOG_DEBUG, "Into ajp14:logon - send init\n"); + + if (ajp_connection_tcp_send_message(ae, msg, l) != JK_TRUE) + return JK_FALSE; + + jk_log(l, JK_LOG_DEBUG, "Into ajp14:logon - wait init reply\n"); + + jk_b_reset(msg); + + if (ajp_connection_tcp_get_message(ae, msg, l) != JK_TRUE) + return JK_FALSE; + + if (ajp14_unmarshal_login_seed(msg, jl, l) != JK_TRUE) + return JK_FALSE; + + jk_log(l, JK_LOG_DEBUG, "Into ajp14:logon - received entropy %s\n", jl->entropy); + + ajp14_compute_md5(jl, l); + + if (ajp14_marshal_login_comp_into_msgb(msg, jl, l) != JK_TRUE) + return JK_FALSE; + + if (ajp_connection_tcp_send_message(ae, msg, l) != JK_TRUE) + return JK_FALSE; + + jk_b_reset(msg); + + if (ajp_connection_tcp_get_message(ae, msg, l) != JK_TRUE) + return JK_FALSE; + + switch (jk_b_get_byte(msg)) { + + case AJP14_LOGOK_CMD : + ajp14_unmarshal_log_ok(msg, jl, l); + break; + + case AJP14_LOGNOK_CMD : + ajp14_unmarshal_log_nok(msg, l); + return JK_FALSE; + } + + return JK_TRUE; +} + +/* + * AJP14 - Login Handler - we'll have a more secure + * login support in AJP14 + */ + +static int logon(ajp_endpoint_t *ae, + jk_logger_t *l) +{ + jk_pool_t *p = &ae->pool; + jk_msg_buf_t *msg; + int rc; + + jk_log(l, JK_LOG_DEBUG, "Into ajp14:logon\n"); + + msg = jk_b_new(p); + jk_b_set_buffer_size(msg, DEF_BUFFER_SZ); + + rc = handle_logon(ae, msg, l); + jk_reset_pool(p); + + return (rc); } + int JK_METHOD ajp14_worker_factory(jk_worker_t **w, const char *name, jk_logger_t *l) @@ -169,7 +276,8 @@ aw->worker.init = init; aw->worker.get_endpoint = get_endpoint; aw->worker.destroy = destroy; - + + aw->logon = logon; /* LogOn Handler for AJP14 */ *w = &aw->worker; return JK_TRUE; }