diff options
Diffstat (limited to 'src/microhttpd/digestauth.c')
-rw-r--r-- | src/microhttpd/digestauth.c | 52 |
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)); |