diff options
author | Evgeny Grin (Karlson2k) <k2k@narod.ru> | 2016-04-12 14:36:14 +0000 |
---|---|---|
committer | Evgeny Grin (Karlson2k) <k2k@narod.ru> | 2016-04-12 14:36:14 +0000 |
commit | 8632cd8c4bb87b5f120d2a518f9ad4807b83c93c (patch) | |
tree | d1d30cc9d6d7d253cb11176a811ee609b6693bb9 | |
parent | 095d09c986c895f197d32a8aef67f9f42efcdebe (diff) |
MHD_digest_auth_check(): decode timestamp value by internal function, added error checking,
added buffer overrun checking.
digest auth now should be more secure
-rw-r--r-- | src/microhttpd/digestauth.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/microhttpd/digestauth.c b/src/microhttpd/digestauth.c index f461abd4..ea7bc1c7 100644 --- a/src/microhttpd/digestauth.c +++ b/src/microhttpd/digestauth.c @@ -619,7 +619,15 @@ MHD_digest_auth_check (struct MHD_Connection *connection, header value. */ return MHD_NO; } - nonce_time = strtoul (nonce + len - TIMESTAMP_HEX_LEN, (char **)NULL, 16); + if (TIMESTAMP_HEX_LEN != MHD_strx_to_uint32_n_ (nonce + len - TIMESTAMP_HEX_LEN, + TIMESTAMP_HEX_LEN, &nonce_time)) + { +#ifdef HAVE_MESSAGES + MHD_DLOG (connection->daemon, + "Authentication failed, invalid timestamp format.\n"); +#endif + return MHD_NO; + } t = (uint32_t) MHD_monotonic_sec_counter(); /* * First level vetting for the nonce validity: if the timestamp |