libmicrohttpd

HTTP/1.x server C library (MHD 1.x, stable)
Log | Files | Refs | Submodules | README | LICENSE

commit 34059c30943f89bbab061bd299fbff5784a06b30
parent 51bea81bf7c5da8ceeb8b70252c583671bc7bb87
Author: Evgeny Grin (Karlson2k) <k2k@narod.ru>
Date:   Thu, 28 Jul 2022 08:16:13 +0300

MHD_digest_auth_check3(): return failed parameter if it is known

Diffstat:
Msrc/include/microhttpd.h | 2++
Msrc/microhttpd/digestauth.c | 20++++++++++----------
2 files changed, 12 insertions(+), 10 deletions(-)

diff --git a/src/include/microhttpd.h b/src/include/microhttpd.h @@ -4922,6 +4922,8 @@ enum MHD_DigestAuthResult /** * No "Authorization" header or wrong format of the header. + * Also may be returned if required parameters in client Authorisation header + * are missing or broken (in invalid format). */ MHD_DAUTH_WRONG_HEADER = -1, diff --git a/src/microhttpd/digestauth.c b/src/microhttpd/digestauth.c @@ -2101,22 +2101,22 @@ digest_auth_check_all_inner (struct MHD_Connection *connection, if ((NULL == params->username.value.str) && (NULL == params->username_ext.value.str)) - return MHD_DAUTH_WRONG_HEADER; + return MHD_DAUTH_WRONG_USERNAME; else if ((NULL != params->username.value.str) && (NULL != params->username_ext.value.str)) - return MHD_DAUTH_WRONG_HEADER; /* Parameters cannot be used together */ + return MHD_DAUTH_WRONG_USERNAME; /* Parameters cannot be used together */ else if ((NULL != params->username_ext.value.str) && (MHD_DAUTH_EXT_PARAM_MIN_LEN > params->username_ext.value.len)) - return MHD_DAUTH_WRONG_HEADER; /* Broken extended notation */ + return MHD_DAUTH_WRONG_USERNAME; /* Broken extended notation */ else if (params->userhash && (NULL == params->username.value.str)) - return MHD_DAUTH_WRONG_HEADER; /* Userhash cannot be used with extended notation */ + return MHD_DAUTH_WRONG_USERNAME; /* Userhash cannot be used with extended notation */ else if (params->userhash && (digest_size * 2 > params->username.value.len)) - return MHD_DAUTH_WRONG_HEADER; /* Too few chars for correct userhash */ + return MHD_DAUTH_WRONG_USERNAME; /* Too few chars for correct userhash */ else if (params->userhash && (digest_size * 4 < params->username.value.len)) - return MHD_DAUTH_WRONG_HEADER; /* Too many chars for correct userhash */ + return MHD_DAUTH_WRONG_USERNAME; /* Too many chars for correct userhash */ if (NULL == params->realm.value.str) - return MHD_DAUTH_WRONG_HEADER; + return MHD_DAUTH_WRONG_REALM; else if (((NULL == userdigest) || params->userhash) && (_MHD_AUTH_DIGEST_MAX_PARAM_SIZE < params->realm.value.len)) return MHD_DAUTH_TOO_LARGE; /* Realm is too large and it will be used in hash calculations */ @@ -2141,21 +2141,21 @@ digest_auth_check_all_inner (struct MHD_Connection *connection, /* The QOP parameter was checked already */ if (NULL == params->uri.value.str) - return MHD_DAUTH_WRONG_HEADER; + return MHD_DAUTH_WRONG_URI; else if (0 == params->uri.value.len) return MHD_DAUTH_WRONG_URI; else if (_MHD_AUTH_DIGEST_MAX_PARAM_SIZE < params->uri.value.len) return MHD_DAUTH_TOO_LARGE; if (NULL == params->nonce.value.str) - return MHD_DAUTH_WRONG_HEADER; + return MHD_DAUTH_NONCE_WRONG; else if (0 == params->nonce.value.len) return MHD_DAUTH_NONCE_WRONG; else if (NONCE_STD_LEN (digest_size) * 2 < params->nonce.value.len) return MHD_DAUTH_NONCE_WRONG; if (NULL == params->response.value.str) - return MHD_DAUTH_WRONG_HEADER; + return MHD_DAUTH_RESPONSE_WRONG; else if (0 == params->response.value.len) return MHD_DAUTH_RESPONSE_WRONG; else if (digest_size * 4 < params->response.value.len)