summaryrefslogtreecommitdiff
path: root/src/mod_auth.c
diff options
context:
space:
mode:
authorGlenn Strauss <gstrauss@gluelogic.com>2021-03-21 04:04:51 -0400
committerGlenn Strauss <gstrauss@gluelogic.com>2021-03-26 22:38:36 -0400
commit26f354cb371e09b2c05c2fa49d1ae94e123a95af (patch)
treed02d8ed06d3e0744b30d024daf272d2243d45b14 /src/mod_auth.c
parentf83ff671fcd348afde41ee50fea69149920004c0 (diff)
downloadlighttpd-git-26f354cb371e09b2c05c2fa49d1ae94e123a95af.tar.gz
[multiple] http_header APIs to reduce str copies
Diffstat (limited to 'src/mod_auth.c')
-rw-r--r--src/mod_auth.c48
1 files changed, 20 insertions, 28 deletions
diff --git a/src/mod_auth.c b/src/mod_auth.c
index a6de655d..38ce0bf6 100644
--- a/src/mod_auth.c
+++ b/src/mod_auth.c
@@ -718,19 +718,15 @@ static handler_t mod_auth_send_400_bad_request(request_st * const r) {
}
static handler_t mod_auth_send_401_unauthorized_basic(request_st * const r, const buffer * const realm) {
- r->http_status = 401;
- r->handler_module = NULL;
-
- buffer * const tb = r->tmp_buf;
- buffer_copy_string_len(tb, CONST_STR_LEN("Basic realm=\""));
- buffer_append_string_buffer(tb, realm);
- buffer_append_string_len(tb, CONST_STR_LEN("\", charset=\"UTF-8\""));
-
- http_header_response_set(r, HTTP_HEADER_WWW_AUTHENTICATE,
- CONST_STR_LEN("WWW-Authenticate"),
- CONST_BUF_LEN(tb));
-
- return HANDLER_FINISHED;
+ r->http_status = 401;
+ r->handler_module = NULL;
+ buffer * const vb =
+ http_header_response_set_ptr(r, HTTP_HEADER_WWW_AUTHENTICATE,
+ CONST_STR_LEN("WWW-Authenticate"));
+ buffer_copy_string_len(vb, CONST_STR_LEN("Basic realm=\""));
+ buffer_append_string_buffer(vb, realm);
+ buffer_append_string_len(vb, CONST_STR_LEN("\", charset=\"UTF-8\""));
+ return HANDLER_FINISHED;
}
static handler_t mod_auth_check_basic(request_st * const r, void *p_d, const struct http_auth_require_t * const require, const struct http_auth_backend_t * const backend) {
@@ -1381,7 +1377,7 @@ static handler_t mod_auth_check_digest(request_st * const r, void *p_d, const st
* data value (included for unique nonces) will be exposed in the nonce
* along with the timestamp, and the additional secret will be used to
* validate that the server generated the nonce using that secret. */
- int send_nextnonce;
+ time_t send_nextnonce;
{
time_t ts = 0;
const unsigned char * const nonce_uns = (unsigned char *)nonce;
@@ -1396,7 +1392,7 @@ static handler_t mod_auth_check_digest(request_st * const r, void *p_d, const st
return mod_auth_send_401_unauthorized_digest(r, require, ai.dalgo);
}
- send_nextnonce = (cur_ts - ts > 540); /*(9 mins)*/
+ send_nextnonce = (cur_ts - ts > 540) ? cur_ts : 0; /*(9 mins)*/
if (require->nonce_secret) {
unsigned int rnd = 0;
@@ -1495,13 +1491,11 @@ static handler_t mod_auth_check_digest(request_st * const r, void *p_d, const st
}
if (send_nextnonce) {
- /*(send nextnonce when expiration is approaching)*/
- buffer * const tb = r->tmp_buf;
- const time_t cur_ts = log_epoch_secs;
- mod_auth_digest_authentication_info(tb, cur_ts, require, ai.dalgo);
- http_header_response_set(r, HTTP_HEADER_OTHER,
- CONST_STR_LEN("Authentication-Info"),
- CONST_BUF_LEN(tb));
+ /*(send nextnonce when expiration is approaching)*/
+ mod_auth_digest_authentication_info(
+ http_header_response_set_ptr(r, HTTP_HEADER_OTHER,
+ CONST_STR_LEN("Authentication-Info")),
+ send_nextnonce /*(cur_ts)*/, require, ai.dalgo);
}
http_auth_setenv(r, ai.username, ai.ulen, CONST_STR_LEN("Digest"));
@@ -1512,14 +1506,12 @@ static handler_t mod_auth_check_digest(request_st * const r, void *p_d, const st
}
static handler_t mod_auth_send_401_unauthorized_digest(request_st * const r, const struct http_auth_require_t * const require, int nonce_stale) {
- buffer * const tb = r->tmp_buf;
- mod_auth_digest_www_authenticate(tb, log_epoch_secs, require, nonce_stale);
- http_header_response_set(r, HTTP_HEADER_WWW_AUTHENTICATE,
- CONST_STR_LEN("WWW-Authenticate"),
- CONST_BUF_LEN(tb));
-
r->http_status = 401;
r->handler_module = NULL;
+ mod_auth_digest_www_authenticate(
+ http_header_response_set_ptr(r, HTTP_HEADER_WWW_AUTHENTICATE,
+ CONST_STR_LEN("WWW-Authenticate")),
+ log_epoch_secs, require, nonce_stale);
return HANDLER_FINISHED;
}