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


Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/gnutls_io.c

    rfd82e59 re391197  
    33 *  Copyright 2008 Nikos Mavrogiannopoulos
    44 *  Copyright 2011 Dash Shendy
     5 *  Copyright 2015 Thomas Klute
    56 *
    67 *  Licensed under the Apache License, Version 2.0 (the "License");
     
    3839                               alloc)
    3940
     41#define IS_PROXY_STR(c) \
     42    ((c->is_proxy == GNUTLS_ENABLED_TRUE) ? "proxy " : "")
     43
    4044static apr_status_t gnutls_io_filter_error(ap_filter_t * f,
    4145        apr_bucket_brigade * bb,
     
    4549
    4650    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;
     51    case HTTP_BAD_REQUEST:
     52        /* log the situation */
     53        ap_log_error(APLOG_MARK, APLOG_INFO, 0,
     54                     f->c->base_server,
     55                     "GnuTLS handshake failed: HTTP spoken on HTTPS port; "
     56                     "trying to send HTML error page");
     57        mgs_srvconf_rec *sc = (mgs_srvconf_rec *)
     58            ap_get_module_config(f->c->base_server->module_config,
     59                                 &gnutls_module);
     60        ctxt->status = -1;
     61        sc->non_ssl_request = 1;
     62
     63        /* fake the request line */
     64        bucket = HTTP_ON_HTTPS_PORT_BUCKET(f->c->bucket_alloc);
     65        break;
     66
     67    default:
     68        return status;
    6769    }
    6870
     
    186188
    187189static apr_status_t gnutls_io_input_read(mgs_handle_t * ctxt,
    188         char *buf, apr_size_t * len) {
     190        char *buf, apr_size_t * len)
     191{
    189192    apr_size_t wanted = *len;
    190193    apr_size_t bytes = 0;
     
    225228
    226229    if (ctxt->session == NULL) {
     230        ap_log_cerror(APLOG_MARK, APLOG_INFO, 0, ctxt->c,
     231                      "%s: GnuTLS session is NULL!", __func__);
    227232        return APR_EGENERAL;
    228233    }
     
    230235    while (1) {
    231236
    232         rc = gnutls_record_recv(ctxt->session, buf + bytes,
    233                 wanted - bytes);
     237        do
     238            rc = gnutls_record_recv(ctxt->session, buf + bytes,
     239                                    wanted - bytes);
     240        while (rc == GNUTLS_E_INTERRUPTED || rc == GNUTLS_E_AGAIN);
    234241
    235242        if (rc > 0) {
     
    270277            if (rc == GNUTLS_E_REHANDSHAKE) {
    271278                /* A client has asked for a new Hankshake. Currently, we don't do it */
    272                 ap_log_error(APLOG_MARK, APLOG_INFO,
     279                ap_log_cerror(APLOG_MARK, APLOG_INFO,
    273280                        ctxt->input_rc,
    274                         ctxt->c->base_server,
     281                        ctxt->c,
    275282                        "GnuTLS: Error reading data. Client Requested a New Handshake."
    276283                        " (%d) '%s'", rc,
     
    278285            } else if (rc == GNUTLS_E_WARNING_ALERT_RECEIVED) {
    279286                rc = gnutls_alert_get(ctxt->session);
    280                 ap_log_error(APLOG_MARK, APLOG_INFO,
     287                ap_log_cerror(APLOG_MARK, APLOG_INFO,
    281288                        ctxt->input_rc,
    282                         ctxt->c->base_server,
     289                        ctxt->c,
    283290                        "GnuTLS: Warning Alert From Client: "
    284291                        " (%d) '%s'", rc,
     
    286293            } else if (rc == GNUTLS_E_FATAL_ALERT_RECEIVED) {
    287294                rc = gnutls_alert_get(ctxt->session);
    288                 ap_log_error(APLOG_MARK, APLOG_INFO,
     295                ap_log_cerror(APLOG_MARK, APLOG_INFO,
    289296                        ctxt->input_rc,
    290                         ctxt->c->base_server,
     297                        ctxt->c,
    291298                        "GnuTLS: Fatal Alert From Client: "
    292299                        "(%d) '%s'", rc,
     
    297304                /* Some Other Error. Report it. Die. */
    298305                if (gnutls_error_is_fatal(rc)) {
    299                     ap_log_error(APLOG_MARK,
     306                    ap_log_cerror(APLOG_MARK,
    300307                            APLOG_INFO,
    301308                            ctxt->input_rc,
    302                             ctxt->c->base_server,
     309                            ctxt->c,
    303310                            "GnuTLS: Error reading data. (%d) '%s'",
    304311                            rc,
     
    311318
    312319            if (ctxt->input_rc == APR_SUCCESS) {
     320                ap_log_cerror(APLOG_MARK, APLOG_INFO, ctxt->input_rc, ctxt->c,
     321                              "%s: GnuTLS error: %s (%d)",
     322                              __func__, gnutls_strerror(rc), rc);
    313323                ctxt->input_rc = APR_EGENERAL;
    314324            }
     
    405415            ap_log_error(APLOG_MARK, APLOG_INFO, 0,
    406416                    ctxt->c->base_server,
    407                     "GnuTLS: Hanshake Alert (%d) '%s'.",
     417                    "GnuTLS: Handshake Alert (%d) '%s'.",
    408418                    errcode,
    409419                    gnutls_alert_get_name(errcode));
     
    449459            }
    450460        }
    451         return 0;
     461        return GNUTLS_E_SUCCESS;
    452462    }
    453463}
     
    479489        apr_bucket_brigade * bb,
    480490        ap_input_mode_t mode,
    481         apr_read_type_e block, apr_off_t readbytes) {
     491        apr_read_type_e block, apr_off_t readbytes)
     492{
    482493    apr_status_t status = APR_SUCCESS;
    483494    mgs_handle_t *ctxt = (mgs_handle_t *) f->ctx;
     
    488499                apr_bucket_eos_create(f->c->bucket_alloc);
    489500        APR_BRIGADE_INSERT_TAIL(bb, bucket);
     501        ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, ctxt->c,
     502                      "%s: %sconnection aborted",
     503                      __func__, IS_PROXY_STR(ctxt));
    490504        return APR_ECONNABORTED;
    491505    }
    492506
    493507    if (ctxt->status == 0) {
    494         gnutls_do_handshake(ctxt);
     508        int ret = gnutls_do_handshake(ctxt);
     509        if (ret == GNUTLS_E_SUCCESS)
     510            ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, ctxt->c,
     511                          "%s: TLS %sconnection opened.",
     512                          __func__, IS_PROXY_STR(ctxt));
    495513    }
    496514
    497515    if (ctxt->status < 0) {
     516        ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, ctxt->c,
     517                      "%s %s: ap_get_brigade", __func__, IS_PROXY_STR(ctxt));
    498518        return ap_get_brigade(f->next, bb, mode, block, readbytes);
    499519    }
     
    588608
    589609    if (ctxt->status == 0) {
    590         gnutls_do_handshake(ctxt);
     610        ret = gnutls_do_handshake(ctxt);
     611        if (ret == GNUTLS_E_SUCCESS)
     612            ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, ctxt->c,
     613                          "%s: TLS %sconnection opened.",
     614                          __func__, IS_PROXY_STR(ctxt));
    591615    }
    592616
     
    615639                    ret = gnutls_bye(ctxt->session, GNUTLS_SHUT_WR);
    616640                } while (ret == GNUTLS_E_INTERRUPTED || ret == GNUTLS_E_AGAIN);
     641                ap_log_cerror(APLOG_MARK, APLOG_DEBUG, ret, ctxt->c,
     642                              "%s: TLS %sconnection closed.",
     643                              __func__, IS_PROXY_STR(ctxt));
    617644                /* De-Initialize Session */
    618645                gnutls_deinit(ctxt->session);
Note: See TracChangeset for help on using the changeset viewer.