Changeset 4cdd4fd in mod_gnutls for src/mod_gnutls.c
- Timestamp:
- Apr 10, 2018, 2:30:52 AM (5 years ago)
- Branches:
- asyncio, debian/master, debian/stretch-backports, main, master, proxy-ticket, upstream
- Children:
- e7cf823
- Parents:
- 23e98b3
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/mod_gnutls.c
r23e98b3 r4cdd4fd 74 74 /* mod_rewrite calls this function to detect HTTPS */ 75 75 APR_REGISTER_OPTIONAL_FN(ssl_is_https); 76 /* some modules look up TLS-related variables */ 77 APR_REGISTER_OPTIONAL_FN(ssl_var_lookup); 78 } 79 80 81 82 /** 83 * Get the connection context, resolving to a master connection if 84 * any. 85 * 86 * @param c the connection handle 87 * 88 * @return mod_gnutls session context, might be `NULL` 89 */ 90 mgs_handle_t* get_effective_gnutls_ctxt(conn_rec *c) 91 { 92 mgs_handle_t *ctxt = (mgs_handle_t *) 93 ap_get_module_config(c->conn_config, &gnutls_module); 94 if (!(ctxt != NULL && ctxt->enabled) && (c->master != NULL)) 95 { 96 ctxt = (mgs_handle_t *) 97 ap_get_module_config(c->master->conn_config, &gnutls_module); 98 } 99 return ctxt; 76 100 } 77 101 … … 86 110 int ssl_is_https(conn_rec *c) 87 111 { 112 mgs_handle_t *ctxt = get_effective_gnutls_ctxt(c); 88 113 mgs_srvconf_rec *sc = (mgs_srvconf_rec *) 89 114 ap_get_module_config(c->base_server->module_config, &gnutls_module); 90 mgs_handle_t *ctxt = (mgs_handle_t *)91 ap_get_module_config(c->conn_config, &gnutls_module);92 115 93 116 if(sc->enabled == GNUTLS_ENABLED_FALSE … … 100 123 /* Connection is Using SSL/TLS */ 101 124 return 1; 125 } 126 127 128 129 /** 130 * Return variables describing the current TLS session (if any). 131 * 132 * mod_ssl doc for this function: "This function must remain safe to 133 * use for a non-SSL connection." mod_http2 uses it to check if an 134 * acceptable TLS session is used. 135 */ 136 char* ssl_var_lookup(apr_pool_t *p, server_rec *s __attribute__((unused)), 137 conn_rec *c, request_rec *r, char *var) 138 { 139 /* 140 * When no pool is given try to find one 141 */ 142 if (p == NULL) { 143 if (r != NULL) 144 p = r->pool; 145 else if (c != NULL) 146 p = c->pool; 147 else 148 return NULL; 149 } 150 151 if (strcmp(var, "HTTPS") == 0) 152 { 153 if (c != NULL && ssl_is_https(c)) 154 return "on"; 155 else 156 return "off"; 157 } 158 159 mgs_handle_t *ctxt = get_effective_gnutls_ctxt(c); 160 161 /* TLS parameters are empty if there is no session */ 162 if (ctxt == NULL || ctxt->c == NULL) 163 return NULL; 164 165 if (strcmp(var, "SSL_PROTOCOL") == 0) 166 return apr_pstrdup(p, gnutls_protocol_get_name(gnutls_protocol_get_version(ctxt->session))); 167 168 if (strcmp(var, "SSL_CIPHER") == 0) 169 return apr_pstrdup(p, gnutls_cipher_suite_get_name(gnutls_kx_get(ctxt->session), 170 gnutls_cipher_get(ctxt->session), 171 gnutls_mac_get(ctxt->session))); 172 173 /* mod_ssl supports a LOT more variables */ 174 ap_log_cerror(APLOG_MARK, APLOG_DEBUG, APR_SUCCESS, c, 175 "unsupported variable requested: '%s'", 176 var); 177 178 return NULL; 102 179 } 103 180
Note: See TracChangeset
for help on using the changeset viewer.