Changes in src/gnutls_io.c [fd82e59:73f6f12] in mod_gnutls


Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/gnutls_io.c

    rfd82e59 r73f6f12  
    3838                               alloc)
    3939
     40#define IS_PROXY_STR(c) \
     41    ((c->is_proxy == GNUTLS_ENABLED_TRUE) ? "proxy " : "")
     42
    4043static apr_status_t gnutls_io_filter_error(ap_filter_t * f,
    4144        apr_bucket_brigade * bb,
     
    4548
    4649    switch (status) {
    47         case HTTP_BAD_REQUEST:
    48             /* log the situation */
    49             ap_log_error(APLOG_MARK, APLOG_INFO, 0,
    50                     f->c->base_server,
    51                     "GnuTLS handshake failed: HTTP spoken on HTTPS port; "
    52                     "trying to send HTML error page");
    53 
    54                                     mgs_srvconf_rec *sc = (mgs_srvconf_rec *) ap_get_module_config(
    55                                                                                                                                                                                                                                 f->c->base_server->module_config,
    56                                                                                                                                                                                                                                 &gnutls_module
    57                                                                                                                                                                                                                         );
    58             ctxt->status = -1;
    59             sc->non_ssl_request = 1;
    60 
    61             /* fake the request line */
    62             bucket = HTTP_ON_HTTPS_PORT_BUCKET(f->c->bucket_alloc);
    63             break;
    64 
    65         default:
    66             return status;
     50    case HTTP_BAD_REQUEST:
     51        /* log the situation */
     52        ap_log_error(APLOG_MARK, APLOG_INFO, 0,
     53                     f->c->base_server,
     54                     "GnuTLS handshake failed: HTTP spoken on HTTPS port; "
     55                     "trying to send HTML error page");
     56        mgs_srvconf_rec *sc = (mgs_srvconf_rec *)
     57            ap_get_module_config(f->c->base_server->module_config,
     58                                 &gnutls_module);
     59        ctxt->status = -1;
     60        sc->non_ssl_request = 1;
     61
     62        /* fake the request line */
     63        bucket = HTTP_ON_HTTPS_PORT_BUCKET(f->c->bucket_alloc);
     64        break;
     65
     66    default:
     67        return status;
    6768    }
    6869
     
    186187
    187188static apr_status_t gnutls_io_input_read(mgs_handle_t * ctxt,
    188         char *buf, apr_size_t * len) {
     189        char *buf, apr_size_t * len)
     190{
    189191    apr_size_t wanted = *len;
    190192    apr_size_t bytes = 0;
     
    225227
    226228    if (ctxt->session == NULL) {
     229        ap_log_cerror(APLOG_MARK, APLOG_INFO, 0, ctxt->c,
     230                      "%s: GnuTLS session is NULL!", __func__);
    227231        return APR_EGENERAL;
    228232    }
     
    230234    while (1) {
    231235
    232         rc = gnutls_record_recv(ctxt->session, buf + bytes,
    233                 wanted - bytes);
     236        do
     237            rc = gnutls_record_recv(ctxt->session, buf + bytes,
     238                                    wanted - bytes);
     239        while (rc == GNUTLS_E_INTERRUPTED || rc == GNUTLS_E_AGAIN);
    234240
    235241        if (rc > 0) {
     
    270276            if (rc == GNUTLS_E_REHANDSHAKE) {
    271277                /* A client has asked for a new Hankshake. Currently, we don't do it */
    272                 ap_log_error(APLOG_MARK, APLOG_INFO,
     278                ap_log_cerror(APLOG_MARK, APLOG_INFO,
    273279                        ctxt->input_rc,
    274                         ctxt->c->base_server,
     280                        ctxt->c,
    275281                        "GnuTLS: Error reading data. Client Requested a New Handshake."
    276282                        " (%d) '%s'", rc,
     
    278284            } else if (rc == GNUTLS_E_WARNING_ALERT_RECEIVED) {
    279285                rc = gnutls_alert_get(ctxt->session);
    280                 ap_log_error(APLOG_MARK, APLOG_INFO,
     286                ap_log_cerror(APLOG_MARK, APLOG_INFO,
    281287                        ctxt->input_rc,
    282                         ctxt->c->base_server,
     288                        ctxt->c,
    283289                        "GnuTLS: Warning Alert From Client: "
    284290                        " (%d) '%s'", rc,
     
    286292            } else if (rc == GNUTLS_E_FATAL_ALERT_RECEIVED) {
    287293                rc = gnutls_alert_get(ctxt->session);
    288                 ap_log_error(APLOG_MARK, APLOG_INFO,
     294                ap_log_cerror(APLOG_MARK, APLOG_INFO,
    289295                        ctxt->input_rc,
    290                         ctxt->c->base_server,
     296                        ctxt->c,
    291297                        "GnuTLS: Fatal Alert From Client: "
    292298                        "(%d) '%s'", rc,
     
    297303                /* Some Other Error. Report it. Die. */
    298304                if (gnutls_error_is_fatal(rc)) {
    299                     ap_log_error(APLOG_MARK,
     305                    ap_log_cerror(APLOG_MARK,
    300306                            APLOG_INFO,
    301307                            ctxt->input_rc,
    302                             ctxt->c->base_server,
     308                            ctxt->c,
    303309                            "GnuTLS: Error reading data. (%d) '%s'",
    304310                            rc,
     
    311317
    312318            if (ctxt->input_rc == APR_SUCCESS) {
     319                ap_log_cerror(APLOG_MARK, APLOG_INFO, ctxt->input_rc, ctxt->c,
     320                              "%s: GnuTLS error: %s (%d)",
     321                              __func__, gnutls_strerror(rc), rc);
    313322                ctxt->input_rc = APR_EGENERAL;
    314323            }
     
    405414            ap_log_error(APLOG_MARK, APLOG_INFO, 0,
    406415                    ctxt->c->base_server,
    407                     "GnuTLS: Hanshake Alert (%d) '%s'.",
     416                    "GnuTLS: Handshake Alert (%d) '%s'.",
    408417                    errcode,
    409418                    gnutls_alert_get_name(errcode));
     
    449458            }
    450459        }
    451         return 0;
     460        return GNUTLS_E_SUCCESS;
    452461    }
    453462}
     
    479488        apr_bucket_brigade * bb,
    480489        ap_input_mode_t mode,
    481         apr_read_type_e block, apr_off_t readbytes) {
     490        apr_read_type_e block, apr_off_t readbytes)
     491{
    482492    apr_status_t status = APR_SUCCESS;
    483493    mgs_handle_t *ctxt = (mgs_handle_t *) f->ctx;
     
    488498                apr_bucket_eos_create(f->c->bucket_alloc);
    489499        APR_BRIGADE_INSERT_TAIL(bb, bucket);
     500        ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, ctxt->c,
     501                      "%s: %sconnection aborted",
     502                      __func__, IS_PROXY_STR(ctxt));
    490503        return APR_ECONNABORTED;
    491504    }
    492505
    493506    if (ctxt->status == 0) {
    494         gnutls_do_handshake(ctxt);
     507        int ret = gnutls_do_handshake(ctxt);
     508        if (ret == GNUTLS_E_SUCCESS)
     509            ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, ctxt->c,
     510                          "%s: TLS %sconnection opened.",
     511                          __func__, IS_PROXY_STR(ctxt));
    495512    }
    496513
    497514    if (ctxt->status < 0) {
     515        ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, ctxt->c,
     516                      "%s %s: ap_get_brigade", __func__, IS_PROXY_STR(ctxt));
    498517        return ap_get_brigade(f->next, bb, mode, block, readbytes);
    499518    }
     
    588607
    589608    if (ctxt->status == 0) {
    590         gnutls_do_handshake(ctxt);
     609        ret = gnutls_do_handshake(ctxt);
     610        if (ret == GNUTLS_E_SUCCESS)
     611            ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, ctxt->c,
     612                          "%s: TLS %sconnection opened.",
     613                          __func__, IS_PROXY_STR(ctxt));
    591614    }
    592615
     
    615638                    ret = gnutls_bye(ctxt->session, GNUTLS_SHUT_WR);
    616639                } while (ret == GNUTLS_E_INTERRUPTED || ret == GNUTLS_E_AGAIN);
     640                ap_log_cerror(APLOG_MARK, APLOG_DEBUG, ret, ctxt->c,
     641                              "%s: TLS %sconnection closed.",
     642                              __func__, IS_PROXY_STR(ctxt));
    617643                /* De-Initialize Session */
    618644                gnutls_deinit(ctxt->session);
Note: See TracChangeset for help on using the changeset viewer.