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;
   }
  
  
  

Reply via email to