aboutsummaryrefslogtreecommitdiff
path: root/src/microhttpd/digestauth.c
diff options
context:
space:
mode:
authorEvgeny Grin (Karlson2k) <k2k@narod.ru>2022-08-14 18:11:16 +0300
committerEvgeny Grin (Karlson2k) <k2k@narod.ru>2022-08-15 16:21:44 +0300
commit477f6149478083cb37bf6a4ce8ac0d14f518b4de (patch)
tree1c9bfdda530cde8c9bb3c1fa9e0535ad4dd6be81 /src/microhttpd/digestauth.c
parent39b9f6cf6d67667aebb4d113a50796e680e83684 (diff)
downloadlibmicrohttpd-477f6149478083cb37bf6a4ce8ac0d14f518b4de.tar.gz
libmicrohttpd-477f6149478083cb37bf6a4ce8ac0d14f518b4de.zip
digestauth: do not use "algorithm" in response header in RFC2069 mode
Diffstat (limited to 'src/microhttpd/digestauth.c')
-rw-r--r--src/microhttpd/digestauth.c52
1 files changed, 30 insertions, 22 deletions
diff --git a/src/microhttpd/digestauth.c b/src/microhttpd/digestauth.c
index 3efc0288..2ff3cd7f 100644
--- a/src/microhttpd/digestauth.c
+++ b/src/microhttpd/digestauth.c
@@ -2966,13 +2966,17 @@ MHD_queue_auth_required_response3 (struct MHD_Connection *connection,
2966 buf_size += MHD_STATICSTR_LEN_ (MHD_TOKEN_AUTH_); 2966 buf_size += MHD_STATICSTR_LEN_ (MHD_TOKEN_AUTH_);
2967 } 2967 }
2968 /* 'algorithm="xxxx", ' */ 2968 /* 'algorithm="xxxx", ' */
2969 buf_size += MHD_STATICSTR_LEN_ (prefix_algo) + 2; /* 2 for ', ' */ 2969 if (((MHD_DIGEST_AUTH_MULT_QOP_NONE) != mqop) ||
2970 if (MHD_DIGEST_AUTH_ALGO3_MD5 == s_algo) 2970 (0 == (((unsigned int) s_algo) & MHD_DIGEST_BASE_ALGO_MD5)))
2971 buf_size += MHD_STATICSTR_LEN_ (_MHD_MD5_TOKEN); 2971 {
2972 else if (MHD_DIGEST_AUTH_ALGO3_SHA256 == s_algo) 2972 buf_size += MHD_STATICSTR_LEN_ (prefix_algo) + 2; /* 2 for ', ' */
2973 buf_size += MHD_STATICSTR_LEN_ (_MHD_SHA256_TOKEN); 2973 if (MHD_DIGEST_AUTH_ALGO3_MD5 == s_algo)
2974 else 2974 buf_size += MHD_STATICSTR_LEN_ (_MHD_MD5_TOKEN);
2975 mhd_assert (0); 2975 else if (MHD_DIGEST_AUTH_ALGO3_SHA256 == s_algo)
2976 buf_size += MHD_STATICSTR_LEN_ (_MHD_SHA256_TOKEN);
2977 else
2978 mhd_assert (0);
2979 }
2976 /* 'nonce="xxxx", ' */ 2980 /* 'nonce="xxxx", ' */
2977 buf_size += MHD_STATICSTR_LEN_ (prefix_nonce) + 3; /* 3 for '", ' */ 2981 buf_size += MHD_STATICSTR_LEN_ (prefix_nonce) + 3; /* 3 for '", ' */
2978 buf_size += NONCE_STD_LEN (digest_get_size (&da)); /* Escaping not needed */ 2982 buf_size += NONCE_STD_LEN (digest_get_size (&da)); /* Escaping not needed */
@@ -3048,23 +3052,27 @@ MHD_queue_auth_required_response3 (struct MHD_Connection *connection,
3048 buf[p++] = ' '; 3052 buf[p++] = ' ';
3049 } 3053 }
3050 /* 'algorithm="xxxx", ' */ 3054 /* 'algorithm="xxxx", ' */
3051 memcpy (buf + p, prefix_algo, 3055 if (((MHD_DIGEST_AUTH_MULT_QOP_NONE) != mqop) ||
3052 MHD_STATICSTR_LEN_ (prefix_algo)); 3056 (0 == (((unsigned int) s_algo) & MHD_DIGEST_BASE_ALGO_MD5)))
3053 p += MHD_STATICSTR_LEN_ (prefix_algo);
3054 if (MHD_DIGEST_AUTH_ALGO3_MD5 == s_algo)
3055 { 3057 {
3056 memcpy (buf + p, _MHD_MD5_TOKEN, 3058 memcpy (buf + p, prefix_algo,
3057 MHD_STATICSTR_LEN_ (_MHD_MD5_TOKEN)); 3059 MHD_STATICSTR_LEN_ (prefix_algo));
3058 p += MHD_STATICSTR_LEN_ (_MHD_MD5_TOKEN); 3060 p += MHD_STATICSTR_LEN_ (prefix_algo);
3059 } 3061 if (MHD_DIGEST_AUTH_ALGO3_MD5 == s_algo)
3060 else if (MHD_DIGEST_AUTH_ALGO3_SHA256 == s_algo) 3062 {
3061 { 3063 memcpy (buf + p, _MHD_MD5_TOKEN,
3062 memcpy (buf + p, _MHD_SHA256_TOKEN, 3064 MHD_STATICSTR_LEN_ (_MHD_MD5_TOKEN));
3063 MHD_STATICSTR_LEN_ (_MHD_SHA256_TOKEN)); 3065 p += MHD_STATICSTR_LEN_ (_MHD_MD5_TOKEN);
3064 p += MHD_STATICSTR_LEN_ (_MHD_SHA256_TOKEN); 3066 }
3067 else if (MHD_DIGEST_AUTH_ALGO3_SHA256 == s_algo)
3068 {
3069 memcpy (buf + p, _MHD_SHA256_TOKEN,
3070 MHD_STATICSTR_LEN_ (_MHD_SHA256_TOKEN));
3071 p += MHD_STATICSTR_LEN_ (_MHD_SHA256_TOKEN);
3072 }
3073 buf[p++] = ',';
3074 buf[p++] = ' ';
3065 } 3075 }
3066 buf[p++] = ',';
3067 buf[p++] = ' ';
3068 /* 'nonce="xxxx", ' */ 3076 /* 'nonce="xxxx", ' */
3069 memcpy (buf + p, prefix_nonce, 3077 memcpy (buf + p, prefix_nonce,
3070 MHD_STATICSTR_LEN_ (prefix_nonce)); 3078 MHD_STATICSTR_LEN_ (prefix_nonce));