libmicrohttpd

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

commit f708f54c0323f6698474e99bc5d0c5c1fbf65733
parent fff9fa78328f56f79bccf9417ae4401a0f19a853
Author: Evgeny Grin (Karlson2k) <k2k@narod.ru>
Date:   Thu, 28 Jul 2022 07:15:28 +0300

test_digestauth2: added testing of RFC2069 mode

Diffstat:
Msrc/testcurl/.gitignore | 2++
Msrc/testcurl/Makefile.am | 8++++++++
Msrc/testcurl/test_digestauth2.c | 46++++++++++++++++++++++++++++++++++++----------
3 files changed, 46 insertions(+), 10 deletions(-)

diff --git a/src/testcurl/.gitignore b/src/testcurl/.gitignore @@ -158,6 +158,8 @@ core /test_digestauth_emu_ext /test_digestauth_emu_ext_oldapi /test_digestauth2 +/test_digestauth2_rfc2069 +/test_digestauth2_rfc2069_userdigest /test_digestauth2_oldapi1 /test_digestauth2_oldapi2 /test_digestauth2_userhash diff --git a/src/testcurl/Makefile.am b/src/testcurl/Makefile.am @@ -171,6 +171,8 @@ check_PROGRAMS += \ test_digestauth_emu_ext \ test_digestauth_emu_ext_oldapi \ test_digestauth2 \ + test_digestauth2_rfc2069 \ + test_digestauth2_rfc2069_userdigest \ test_digestauth2_oldapi1 \ test_digestauth2_oldapi2 \ test_digestauth2_userhash \ @@ -296,6 +298,12 @@ test_digestauth_emu_ext_oldapi_SOURCES = \ test_digestauth2_SOURCES = \ test_digestauth2.c mhd_has_param.h mhd_has_in_name.h +test_digestauth2_rfc2069_SOURCES = \ + test_digestauth2.c mhd_has_param.h mhd_has_in_name.h + +test_digestauth2_rfc2069_userdigest_SOURCES = \ + test_digestauth2.c mhd_has_param.h mhd_has_in_name.h + test_digestauth2_oldapi1_SOURCES = \ test_digestauth2.c mhd_has_param.h mhd_has_in_name.h diff --git a/src/testcurl/test_digestauth2.c b/src/testcurl/test_digestauth2.c @@ -273,6 +273,7 @@ static int test_oldapi; static int test_userhash; static int test_userdigest; static int test_sha256; +static int test_rfc2069; static int curl_uses_usehash; /* Static helper variables */ @@ -437,6 +438,8 @@ ahc_echo (void *cls, struct MHD_DigestAuthInfo *dinfo; const enum MHD_DigestAuthAlgo3 algo3 = test_sha256 ? MHD_DIGEST_AUTH_ALGO3_SHA256 : MHD_DIGEST_AUTH_ALGO3_MD5; + const enum MHD_DigestAuthQOP qop = + test_rfc2069 ? MHD_DIGEST_AUTH_QOP_NONE : MHD_DIGEST_AUTH_QOP_AUTH; dinfo = MHD_digest_auth_get_request_info3 (connection); if (NULL != dinfo) @@ -520,13 +523,25 @@ ahc_echo (void *cls, (int) dinfo->algo); mhdErrorExitDesc ("Wrong 'algo'"); } - else if (10 >= dinfo->cnonce_len) + if (! test_rfc2069) { - fprintf (stderr, "Unexpected small 'cnonce_len': %ld. ", - (long) dinfo->cnonce_len); - mhdErrorExitDesc ("Wrong 'cnonce_len'"); + if (10 >= dinfo->cnonce_len) + { + fprintf (stderr, "Unexpected small 'cnonce_len': %ld. ", + (long) dinfo->cnonce_len); + mhdErrorExitDesc ("Wrong 'cnonce_len'"); + } + } + else + { + if (0 != dinfo->cnonce_len) + { + fprintf (stderr, "'cnonce_len' is not zero: %ld. ", + (long) dinfo->cnonce_len); + mhdErrorExitDesc ("Wrong 'cnonce_len'"); + } } - else if (NULL == dinfo->opaque) + if (NULL == dinfo->opaque) mhdErrorExitDesc ("'opaque' is NULL"); else if (dinfo->opaque_len != MHD_STATICSTR_LEN_ (OPAQUE_VALUE)) { @@ -545,11 +560,11 @@ ahc_echo (void *cls, dinfo->opaque); mhdErrorExitDesc ("Wrong 'opaque'"); } - else if (MHD_DIGEST_AUTH_QOP_AUTH != dinfo->qop) + else if (qop != dinfo->qop) { fprintf (stderr, "Unexpected 'qop'.\n" "Expected: %d\tRecieved: %d. ", - (int) MHD_DIGEST_AUTH_QOP_AUTH, + (int) qop, (int) dinfo->qop); mhdErrorExitDesc ("Wrong 'qop'"); } @@ -651,14 +666,16 @@ ahc_echo (void *cls, MHD_digest_auth_check3 (connection, REALM_VAL, username_ptr, PASSWORD_VALUE, 50 * TIMEOUTS_VAL, - 0, MHD_DIGEST_AUTH_MULT_QOP_AUTH, + 0, + (enum MHD_DigestAuthMultiQOP) qop, (enum MHD_DigestAuthMultiAlgo3) algo3); else check_res = MHD_digest_auth_check_digest3 (connection, REALM_VAL, username_ptr, userdigest_bin, userdigest_bin_size, 50 * TIMEOUTS_VAL, - 0, MHD_DIGEST_AUTH_MULT_QOP_AUTH, + 0, + (enum MHD_DigestAuthMultiQOP) qop, (enum MHD_DigestAuthMultiAlgo3) algo3); switch (check_res) @@ -690,6 +707,9 @@ ahc_echo (void *cls, "MHD_DAUTH_RESPONSE_WRONG"); break; case MHD_DAUTH_WRONG_HEADER: + mhdErrorExitDesc ("MHD_digest_auth_check[_digest]3()' returned " \ + "MHD_DAUTH_WRONG_HEADER"); + break; case MHD_DAUTH_WRONG_REALM: case MHD_DAUTH_WRONG_URI: case MHD_DAUTH_WRONG_QOP: @@ -728,7 +748,7 @@ ahc_echo (void *cls, res = MHD_queue_auth_required_response3 (connection, REALM_VAL, OPAQUE_VALUE, "/", response, 0, - MHD_DIGEST_AUTH_MULT_QOP_AUTH, + (enum MHD_DigestAuthMultiQOP) qop, (enum MHD_DigestAuthMultiAlgo3) algo3, test_userhash, 0); if (MHD_YES != res) @@ -1183,6 +1203,7 @@ main (int argc, char *const *argv) test_userhash = has_in_name (argv[0], "_userhash"); test_userdigest = has_in_name (argv[0], "_userdigest"); test_sha256 = has_in_name (argv[0], "_sha256"); + test_rfc2069 = has_in_name (argv[0], "_rfc2069"); /* Wrong test types combinations */ if (1 == test_oldapi) @@ -1192,6 +1213,11 @@ main (int argc, char *const *argv) } if (test_oldapi) { + if (test_userhash || test_rfc2069) + return 99; + } + if (test_rfc2069) + { if (test_userhash) return 99; }