libmicrohttpd2

HTTP server C library (MHD 2.x, alpha)
Log | Files | Refs | README | LICENSE

commit 4facc093e133e66bc9aa49311e522badfb688164
parent 91d5286b59ce4ce912fb23fb786542c69960489e
Author: Evgeny Grin (Karlson2k) <k2k@drgrin.dev>
Date:   Sat, 22 Mar 2025 20:37:56 +0300

Refactored MHD_connection_get_info_fixed_sz() and relevant types

Resulting values now are individual for each query value.
Some names have been updated for clarity.
Removed MHD_REQUEST_INFO_DYNAMIC_AUTH_DIGEST_USERNAME and related types.

Diffstat:
Msrc/examples2/minimal_auth_digest.c | 2+-
Msrc/include/microhttpd2.h | 196++++++++++++++++++++++++++++++++++---------------------------------------------
Msrc/include/microhttpd2_main.h.in | 196++++++++++++++++++++++++++++++++++---------------------------------------------
Msrc/mhd2/auth_digest.c | 98++-----------------------------------------------------------------------------
Msrc/mhd2/auth_digest.h | 13-------------
Msrc/mhd2/mhd_request.h | 6------
Msrc/mhd2/request_get_info.c | 102++++++++++++++++++++++++++++++++++++-------------------------------------------
7 files changed, 219 insertions(+), 394 deletions(-)

diff --git a/src/examples2/minimal_auth_digest.c b/src/examples2/minimal_auth_digest.c @@ -65,7 +65,7 @@ req_cb (void *cls, res = MHD_request_get_info_dynamic (request, - MHD_REQUEST_INFO_DYNAMIC_AUTH_DIGEST_USERNAME, + MHD_REQUEST_INFO_DYNAMIC_AUTH_DIGEST_INFO, &req_data); if (MHD_SC_AUTH_ABSENT == res) return MHD_action_digest_auth_challenge_a ( diff --git a/src/include/microhttpd2.h b/src/include/microhttpd2.h @@ -7428,7 +7428,7 @@ MHD_FN_PAR_CSTR_ (3) MHD_FN_PAR_OUT_SIZE_ (5,4); enum MHD_FIXED_ENUM_MHD_SET_ MHD_DigestAuthUsernameType { /** - * No username parameter in in Digest Authorization header. + * No username parameter is in Digest Authorization header. * Not used currently. Value #MHD_SC_REQ_AUTH_DATA_BROKEN is returned * by #MHD_request_get_info_dynamic_sz() if the request has no username. */ @@ -7695,72 +7695,6 @@ struct MHD_AuthDigestInfo uint_fast32_t nc; }; - -/** - * Information from Digest Authorization client's header. - * - * @see #MHD_REQUEST_INFO_DYNAMIC_AUTH_DIGEST_USERNAME - */ -struct MHD_AuthDigestUsernameInfo -{ - /** - * The algorithm as defined by client. - * Set automatically to MD5 if not specified by client. - */ - enum MHD_DigestAuthAlgo algo; - - /** - * The type of username used by client. - * The 'invalid' and 'missing' types are not used in this structure, - * instead #MHD_SC_REQ_AUTH_DATA_BROKEN is returned when - * #MHD_request_get_info_dynamic_sz() called with - * #MHD_REQUEST_INFO_DYNAMIC_AUTH_DIGEST_USERNAME and the request has - * a broken username data. - */ - enum MHD_DigestAuthUsernameType uname_type; - - /** - * The username string. - * Used only if username type is standard or extended, always NULL otherwise. - * If extended notation is used, this string is pct-decoded string - * with charset and language tag removed (i.e. it is original username - * extracted from the extended notation). - * When userhash is used by the client, this member is NULL and - * @a userhash_hex and @a userhash_bin are set. - * The buffer pointed by the @a username becomes invalid when a response - * for the requested is provided (or request is aborted). - */ - struct MHD_StringNullable username; - - /** - * The userhash string. - * Valid only if username type is userhash. - * This is unqoted string without decoding of the hexadecimal - * digits (as provided by the client). - * The buffer pointed by the @a userhash_hex becomes invalid when a response - * for the requested is provided (or request is aborted). - * @sa #MHD_digest_auth_calc_userhash_hex() - */ - struct MHD_StringNullable userhash_hex; - - /** - * The userhash decoded to binary form. - * Used only if username type is userhash, always NULL otherwise. - * When not NULL, this points to binary sequence @a userhash_hex_len /2 bytes - * long. - * The valid size should be #MHD_digest_get_hash_size() bytes. - * The buffer pointed by the @a userhash_bin becomes invalid when a response - * for the requested is provided (or request is aborted). - * @warning This is a binary data, no zero termination. - * @warning To avoid buffer overruns, always check the size of the data before - * use, because @a userhash_bin can point even to zero-sized - * data. - * @sa #MHD_digest_auth_calc_userhash() - */ - const uint8_t *userhash_bin; -}; - - /** * The result of digest authentication of the client. * @@ -10320,33 +10254,37 @@ enum MHD_FIXED_ENUM_APP_SET_ MHD_RequestInfoDynamicType { /** * Get the HTTP method used for the request (as a MHD_String). - * The result is placed in @a v_str member. * The resulting string pointer in valid only until a response is provided. + * The result is placed in @a v_http_method_string member. * @sa #MHD_REQUEST_INFO_FIXED_HTTP_METHOD * @ingroup request */ - MHD_REQUEST_INFO_DYNAMIC_HTTP_METHOD_STR = 1 + MHD_REQUEST_INFO_DYNAMIC_HTTP_METHOD_STRING = 1 , /** * Get the URI used for the request (as a MHD_String), excluding * the parameter part (anything after '?'). - * The result is placed in @a v_str member. * The resulting string pointer in valid only until a response is provided. + * The result is placed in @a v_uri_string member. * @ingroup request */ MHD_REQUEST_INFO_DYNAMIC_URI = 2 , /** - * Get the number of GET parameters (the decoded part of the original - * URI string after '?') - * The result is placed in @a v_sizet member. + * Get the number of URI parameters (the decoded part of the original + * URI string after '?'). Sometimes it is called "GET parameters". + * The result is placed in @a v_number_uri_params_sizet member. * @ingroup request */ - MHD_REQUEST_INFO_DYNAMIC_NUMBER_GET_PARAMS = 3 + MHD_REQUEST_INFO_DYNAMIC_NUMBER_URI_PARAMS = 3 , /** * Get the number of cookies in the request. - * The result is placed in @a v_sizet member. + * The result is placed in @a v_number_cookies_sizet member. + * If cookies parsing is disabled in MHD build then the function returns + * error code #MHD_SC_FEATURE_DISABLED. + * If cookies parsing is disabled this daemon then the function returns + * error code #MHD_SC_INFO_GET_TYPE_NOT_APPLICABLE. * @ingroup request */ MHD_REQUEST_INFO_DYNAMIC_NUMBER_COOKIES = 4 @@ -10354,14 +10292,14 @@ enum MHD_FIXED_ENUM_APP_SET_ MHD_RequestInfoDynamicType /** * Return length of the client's HTTP request header. * This is a total raw size of the header (after TLS decipher if any) - * The result is placed in @a v_sizet member. + * The result is placed in @a v_header_size_sizet member. * @ingroup request */ MHD_REQUEST_INFO_DYNAMIC_HEADER_SIZE = 5 , /** * Get the number of decoded POST entries in the request. - * The result is placed in @a v_sizet member. + * The result is placed in @a v_number_post_params_sizet member. * @ingroup request */ MHD_REQUEST_INFO_DYNAMIC_NUMBER_POST_PARAMS = 6 @@ -10370,7 +10308,7 @@ enum MHD_FIXED_ENUM_APP_SET_ MHD_RequestInfoDynamicType * Get whether the upload content is present in the request. * The result is #MHD_YES if any upload content is present, even * if the upload content size is zero. - * The result is placed in @a v_bool member. + * The result is placed in @a v_upload_present_bool member. * @ingroup request */ MHD_REQUEST_INFO_DYNAMIC_UPLOAD_PRESENT = 10 @@ -10378,7 +10316,7 @@ enum MHD_FIXED_ENUM_APP_SET_ MHD_RequestInfoDynamicType /** * Get whether the chunked upload content is present in the request. * The result is #MHD_YES if chunked upload content is present. - * The result is placed in @a v_bool member. + * The result is placed in @a v_upload_chunked_bool member. * @ingroup request */ MHD_REQUEST_INFO_DYNAMIC_UPLOAD_CHUNKED = 11 @@ -10387,7 +10325,7 @@ enum MHD_FIXED_ENUM_APP_SET_ MHD_RequestInfoDynamicType * Get the total content upload size. * Resulted in zero if no content upload or upload content size is zero, * #MHD_SIZE_UNKNOWN if size is not known (chunked upload). - * The result is placed in @a v_uint64 member. + * The result is placed in @a v_upload_size_total_uint64 member. * @ingroup request */ MHD_REQUEST_INFO_DYNAMIC_UPLOAD_SIZE_TOTAL = 12 @@ -10396,7 +10334,7 @@ enum MHD_FIXED_ENUM_APP_SET_ MHD_RequestInfoDynamicType * Get the total size of the content upload already received from the client. * This is the total size received, could be not yet fully processed by the * application. - * The result is placed in @a v_uint64 member. + * The result is placed in @a v_upload_size_recieved_uint64 member. * @ingroup request */ MHD_REQUEST_INFO_DYNAMIC_UPLOAD_SIZE_RECIEVED = 13 @@ -10405,7 +10343,7 @@ enum MHD_FIXED_ENUM_APP_SET_ MHD_RequestInfoDynamicType * Get the total size of the content upload left to be received from * the client. * Resulted in #MHD_SIZE_UNKNOWN if total size is not known (chunked upload). - * The result is placed in @a v_uint64 member. + * The result is placed in @a v_upload_size_to_recieve_uint64 member. * @ingroup request */ MHD_REQUEST_INFO_DYNAMIC_UPLOAD_SIZE_TO_RECIEVE = 14 @@ -10415,7 +10353,7 @@ enum MHD_FIXED_ENUM_APP_SET_ MHD_RequestInfoDynamicType * called and completed (if any)). * If the value is requested from #MHD_UploadCallback, then result does NOT * include the current data being processed by the callback. - * The result is placed in @a v_uint64 member. + * The result is placed in @a v_upload_size_processed_uint64 member. * @ingroup request */ MHD_REQUEST_INFO_DYNAMIC_UPLOAD_SIZE_PROCESSED = 15 @@ -10427,24 +10365,12 @@ enum MHD_FIXED_ENUM_APP_SET_ MHD_RequestInfoDynamicType * If the value is requested from #MHD_UploadCallback, then result includes * the current data being processed by the callback. * Resulted in #MHD_SIZE_UNKNOWN if total size is not known (chunked upload). - * The result is placed in @a v_uint64 member. + * The result is placed in @a v_upload_size_to_process_uint64 member. * @ingroup request */ MHD_REQUEST_INFO_DYNAMIC_UPLOAD_SIZE_TO_PROCESS = 16 , /** - * Returns pointer to information about username in client's digest auth - * request. - * The resulting pointer is NULL if no digest auth header is set by - * the client, the format of the digest auth header is broken, no - * username is provided or the format of the username parameter is broken. - * Pointers in the returned structure (if any) are valid until response - * is provided for the request. - * The result is placed in @a v_auth_digest_uname member. - */ - MHD_REQUEST_INFO_DYNAMIC_AUTH_DIGEST_USERNAME = 41 - , - /** * Returns pointer to information about digest auth in client request. * The resulting pointer is NULL if no digest auth header is set by * the client or the format of the digest auth header is broken. @@ -10483,36 +10409,77 @@ union MHD_RequestInfoDynamicData { /** - * The MHD String type + * The data for the #MHD_REQUEST_INFO_DYNAMIC_HTTP_METHOD_STRING query */ - struct MHD_String v_str; + struct MHD_String v_http_method_string; + /** - * The size_t type + * The data for the #MHD_REQUEST_INFO_DYNAMIC_URI query */ - size_t v_sizet; + struct MHD_String v_uri_string; + /** - * The boolean type + * The data for the #MHD_REQUEST_INFO_DYNAMIC_NUMBER_URI_PARAMS query */ - enum MHD_Bool v_bool; + size_t v_number_uri_params_sizet; + /** - * The unsigned 64 bits integer + * The data for the #MHD_REQUEST_INFO_DYNAMIC_NUMBER_COOKIES query */ - uint_fast64_t v_uint64; + size_t v_number_cookies_sizet; /** - * The information about client provided username for digest auth + * The data for the #MHD_REQUEST_INFO_DYNAMIC_HEADER_SIZE query */ - const struct MHD_AuthDigestUsernameInfo *v_auth_digest_uname; + size_t v_header_size_sizet; /** - * The information about client's digest auth + * The data for the #MHD_REQUEST_INFO_DYNAMIC_NUMBER_POST_PARAMS query + */ + size_t v_number_post_params_sizet; + + /** + * The data for the #MHD_REQUEST_INFO_DYNAMIC_UPLOAD_PRESENT query + */ + enum MHD_Bool v_upload_present_bool; + + /** + * The data for the #MHD_REQUEST_INFO_DYNAMIC_UPLOAD_CHUNKED query + */ + enum MHD_Bool v_upload_chunked_bool; + + /** + * The data for the #MHD_REQUEST_INFO_DYNAMIC_UPLOAD_SIZE_TOTAL query + */ + uint_fast64_t v_upload_size_total_uint64; + + /** + * The data for the #MHD_REQUEST_INFO_DYNAMIC_UPLOAD_SIZE_RECIEVED query + */ + uint_fast64_t v_upload_size_recieved_uint64; + + /** + * The data for the #MHD_REQUEST_INFO_DYNAMIC_UPLOAD_SIZE_TO_RECIEVE query + */ + uint_fast64_t v_upload_size_to_recieve_uint64; + + /** + * The data for the #MHD_REQUEST_INFO_DYNAMIC_UPLOAD_SIZE_PROCESSED query + */ + uint_fast64_t v_upload_size_processed_uint64; + + /** + * The data for the #MHD_REQUEST_INFO_DYNAMIC_UPLOAD_SIZE_TO_PROCESS query + */ + uint_fast64_t v_upload_size_to_process_uint64; + + /** + * The data for the #MHD_REQUEST_INFO_DYNAMIC_AUTH_DIGEST_INFO query */ const struct MHD_AuthDigestInfo *v_auth_digest_info; /** - * The username and password provided by the client's basic auth header. - * If #MHD_request_get_info_dynamic_sz() returns #MHD_SC_OK then this pointer - * is NOT NULL and at least the username data is provided. + * The data for the #MHD_REQUEST_INFO_DYNAMIC_AUTH_BASIC_CREDS query */ const struct MHD_AuthBasicCreds *v_auth_basic_creds; }; @@ -10524,7 +10491,8 @@ union MHD_RequestInfoDynamicData * Most of the data provided is available only when the request line or complete * request headers are processed and not available if responding has been * started. - * The wrapper macro #MHD_request_get_info_dynamic() could be more convenient. + * + * The wrapper macro #MHD_request_get_info_dynamic() may be more convenient. * * Any pointers in the returned data are valid until any MHD_Action or * MHD_UploadAction is provided. If the data is needed beyond this point, @@ -10544,6 +10512,9 @@ union MHD_RequestInfoDynamicData * is being sent * #MHD_SC_TOO_EARLY if requested data is not yet ready (for example, * headers are not yet received), + * #MHD_SC_INFO_GET_TYPE_NOT_APPLICABLE if the requested information is + * not available for this request + * due to used configuration/mode, * #MHD_SC_FEATURE_DISABLED if requested functionality is not supported * by this MHD build, * #MHD_SC_INFO_GET_BUFF_TOO_SMALL if @a output_buf_size is too small, @@ -10588,6 +10559,9 @@ MHD_FN_PAR_NONNULL_ (3) MHD_FN_PAR_OUT_ (3); * is being sent * #MHD_SC_TOO_EARLY if requested data is not yet ready (for example, * headers are not yet received), + * #MHD_SC_INFO_GET_TYPE_NOT_APPLICABLE if the requested information is + * not available for this request + * due to used configuration/mode, * #MHD_SC_FEATURE_DISABLED if requested functionality is not supported * by this MHD build, * #MHD_SC_AUTH_ABSENT if request does not have particular Auth data, diff --git a/src/include/microhttpd2_main.h.in b/src/include/microhttpd2_main.h.in @@ -2806,7 +2806,7 @@ MHD_FN_PAR_CSTR_ (3) MHD_FN_PAR_OUT_SIZE_ (5,4); enum MHD_FIXED_ENUM_MHD_SET_ MHD_DigestAuthUsernameType { /** - * No username parameter in in Digest Authorization header. + * No username parameter is in Digest Authorization header. * Not used currently. Value #MHD_SC_REQ_AUTH_DATA_BROKEN is returned * by #MHD_request_get_info_dynamic_sz() if the request has no username. */ @@ -3073,72 +3073,6 @@ struct MHD_AuthDigestInfo uint_fast32_t nc; }; - -/** - * Information from Digest Authorization client's header. - * - * @see #MHD_REQUEST_INFO_DYNAMIC_AUTH_DIGEST_USERNAME - */ -struct MHD_AuthDigestUsernameInfo -{ - /** - * The algorithm as defined by client. - * Set automatically to MD5 if not specified by client. - */ - enum MHD_DigestAuthAlgo algo; - - /** - * The type of username used by client. - * The 'invalid' and 'missing' types are not used in this structure, - * instead #MHD_SC_REQ_AUTH_DATA_BROKEN is returned when - * #MHD_request_get_info_dynamic_sz() called with - * #MHD_REQUEST_INFO_DYNAMIC_AUTH_DIGEST_USERNAME and the request has - * a broken username data. - */ - enum MHD_DigestAuthUsernameType uname_type; - - /** - * The username string. - * Used only if username type is standard or extended, always NULL otherwise. - * If extended notation is used, this string is pct-decoded string - * with charset and language tag removed (i.e. it is original username - * extracted from the extended notation). - * When userhash is used by the client, this member is NULL and - * @a userhash_hex and @a userhash_bin are set. - * The buffer pointed by the @a username becomes invalid when a response - * for the requested is provided (or request is aborted). - */ - struct MHD_StringNullable username; - - /** - * The userhash string. - * Valid only if username type is userhash. - * This is unqoted string without decoding of the hexadecimal - * digits (as provided by the client). - * The buffer pointed by the @a userhash_hex becomes invalid when a response - * for the requested is provided (or request is aborted). - * @sa #MHD_digest_auth_calc_userhash_hex() - */ - struct MHD_StringNullable userhash_hex; - - /** - * The userhash decoded to binary form. - * Used only if username type is userhash, always NULL otherwise. - * When not NULL, this points to binary sequence @a userhash_hex_len /2 bytes - * long. - * The valid size should be #MHD_digest_get_hash_size() bytes. - * The buffer pointed by the @a userhash_bin becomes invalid when a response - * for the requested is provided (or request is aborted). - * @warning This is a binary data, no zero termination. - * @warning To avoid buffer overruns, always check the size of the data before - * use, because @a userhash_bin can point even to zero-sized - * data. - * @sa #MHD_digest_auth_calc_userhash() - */ - const uint8_t *userhash_bin; -}; - - /** * The result of digest authentication of the client. * @@ -5698,33 +5632,37 @@ enum MHD_FIXED_ENUM_APP_SET_ MHD_RequestInfoDynamicType { /** * Get the HTTP method used for the request (as a MHD_String). - * The result is placed in @a v_str member. * The resulting string pointer in valid only until a response is provided. + * The result is placed in @a v_http_method_string member. * @sa #MHD_REQUEST_INFO_FIXED_HTTP_METHOD * @ingroup request */ - MHD_REQUEST_INFO_DYNAMIC_HTTP_METHOD_STR = 1 + MHD_REQUEST_INFO_DYNAMIC_HTTP_METHOD_STRING = 1 , /** * Get the URI used for the request (as a MHD_String), excluding * the parameter part (anything after '?'). - * The result is placed in @a v_str member. * The resulting string pointer in valid only until a response is provided. + * The result is placed in @a v_uri_string member. * @ingroup request */ MHD_REQUEST_INFO_DYNAMIC_URI = 2 , /** - * Get the number of GET parameters (the decoded part of the original - * URI string after '?') - * The result is placed in @a v_sizet member. + * Get the number of URI parameters (the decoded part of the original + * URI string after '?'). Sometimes it is called "GET parameters". + * The result is placed in @a v_number_uri_params_sizet member. * @ingroup request */ - MHD_REQUEST_INFO_DYNAMIC_NUMBER_GET_PARAMS = 3 + MHD_REQUEST_INFO_DYNAMIC_NUMBER_URI_PARAMS = 3 , /** * Get the number of cookies in the request. - * The result is placed in @a v_sizet member. + * The result is placed in @a v_number_cookies_sizet member. + * If cookies parsing is disabled in MHD build then the function returns + * error code #MHD_SC_FEATURE_DISABLED. + * If cookies parsing is disabled this daemon then the function returns + * error code #MHD_SC_INFO_GET_TYPE_NOT_APPLICABLE. * @ingroup request */ MHD_REQUEST_INFO_DYNAMIC_NUMBER_COOKIES = 4 @@ -5732,14 +5670,14 @@ enum MHD_FIXED_ENUM_APP_SET_ MHD_RequestInfoDynamicType /** * Return length of the client's HTTP request header. * This is a total raw size of the header (after TLS decipher if any) - * The result is placed in @a v_sizet member. + * The result is placed in @a v_header_size_sizet member. * @ingroup request */ MHD_REQUEST_INFO_DYNAMIC_HEADER_SIZE = 5 , /** * Get the number of decoded POST entries in the request. - * The result is placed in @a v_sizet member. + * The result is placed in @a v_number_post_params_sizet member. * @ingroup request */ MHD_REQUEST_INFO_DYNAMIC_NUMBER_POST_PARAMS = 6 @@ -5748,7 +5686,7 @@ enum MHD_FIXED_ENUM_APP_SET_ MHD_RequestInfoDynamicType * Get whether the upload content is present in the request. * The result is #MHD_YES if any upload content is present, even * if the upload content size is zero. - * The result is placed in @a v_bool member. + * The result is placed in @a v_upload_present_bool member. * @ingroup request */ MHD_REQUEST_INFO_DYNAMIC_UPLOAD_PRESENT = 10 @@ -5756,7 +5694,7 @@ enum MHD_FIXED_ENUM_APP_SET_ MHD_RequestInfoDynamicType /** * Get whether the chunked upload content is present in the request. * The result is #MHD_YES if chunked upload content is present. - * The result is placed in @a v_bool member. + * The result is placed in @a v_upload_chunked_bool member. * @ingroup request */ MHD_REQUEST_INFO_DYNAMIC_UPLOAD_CHUNKED = 11 @@ -5765,7 +5703,7 @@ enum MHD_FIXED_ENUM_APP_SET_ MHD_RequestInfoDynamicType * Get the total content upload size. * Resulted in zero if no content upload or upload content size is zero, * #MHD_SIZE_UNKNOWN if size is not known (chunked upload). - * The result is placed in @a v_uint64 member. + * The result is placed in @a v_upload_size_total_uint64 member. * @ingroup request */ MHD_REQUEST_INFO_DYNAMIC_UPLOAD_SIZE_TOTAL = 12 @@ -5774,7 +5712,7 @@ enum MHD_FIXED_ENUM_APP_SET_ MHD_RequestInfoDynamicType * Get the total size of the content upload already received from the client. * This is the total size received, could be not yet fully processed by the * application. - * The result is placed in @a v_uint64 member. + * The result is placed in @a v_upload_size_recieved_uint64 member. * @ingroup request */ MHD_REQUEST_INFO_DYNAMIC_UPLOAD_SIZE_RECIEVED = 13 @@ -5783,7 +5721,7 @@ enum MHD_FIXED_ENUM_APP_SET_ MHD_RequestInfoDynamicType * Get the total size of the content upload left to be received from * the client. * Resulted in #MHD_SIZE_UNKNOWN if total size is not known (chunked upload). - * The result is placed in @a v_uint64 member. + * The result is placed in @a v_upload_size_to_recieve_uint64 member. * @ingroup request */ MHD_REQUEST_INFO_DYNAMIC_UPLOAD_SIZE_TO_RECIEVE = 14 @@ -5793,7 +5731,7 @@ enum MHD_FIXED_ENUM_APP_SET_ MHD_RequestInfoDynamicType * called and completed (if any)). * If the value is requested from #MHD_UploadCallback, then result does NOT * include the current data being processed by the callback. - * The result is placed in @a v_uint64 member. + * The result is placed in @a v_upload_size_processed_uint64 member. * @ingroup request */ MHD_REQUEST_INFO_DYNAMIC_UPLOAD_SIZE_PROCESSED = 15 @@ -5805,24 +5743,12 @@ enum MHD_FIXED_ENUM_APP_SET_ MHD_RequestInfoDynamicType * If the value is requested from #MHD_UploadCallback, then result includes * the current data being processed by the callback. * Resulted in #MHD_SIZE_UNKNOWN if total size is not known (chunked upload). - * The result is placed in @a v_uint64 member. + * The result is placed in @a v_upload_size_to_process_uint64 member. * @ingroup request */ MHD_REQUEST_INFO_DYNAMIC_UPLOAD_SIZE_TO_PROCESS = 16 , /** - * Returns pointer to information about username in client's digest auth - * request. - * The resulting pointer is NULL if no digest auth header is set by - * the client, the format of the digest auth header is broken, no - * username is provided or the format of the username parameter is broken. - * Pointers in the returned structure (if any) are valid until response - * is provided for the request. - * The result is placed in @a v_auth_digest_uname member. - */ - MHD_REQUEST_INFO_DYNAMIC_AUTH_DIGEST_USERNAME = 41 - , - /** * Returns pointer to information about digest auth in client request. * The resulting pointer is NULL if no digest auth header is set by * the client or the format of the digest auth header is broken. @@ -5861,36 +5787,77 @@ union MHD_RequestInfoDynamicData { /** - * The MHD String type + * The data for the #MHD_REQUEST_INFO_DYNAMIC_HTTP_METHOD_STRING query */ - struct MHD_String v_str; + struct MHD_String v_http_method_string; + /** - * The size_t type + * The data for the #MHD_REQUEST_INFO_DYNAMIC_URI query */ - size_t v_sizet; + struct MHD_String v_uri_string; + /** - * The boolean type + * The data for the #MHD_REQUEST_INFO_DYNAMIC_NUMBER_URI_PARAMS query */ - enum MHD_Bool v_bool; + size_t v_number_uri_params_sizet; + /** - * The unsigned 64 bits integer + * The data for the #MHD_REQUEST_INFO_DYNAMIC_NUMBER_COOKIES query */ - uint_fast64_t v_uint64; + size_t v_number_cookies_sizet; /** - * The information about client provided username for digest auth + * The data for the #MHD_REQUEST_INFO_DYNAMIC_HEADER_SIZE query */ - const struct MHD_AuthDigestUsernameInfo *v_auth_digest_uname; + size_t v_header_size_sizet; /** - * The information about client's digest auth + * The data for the #MHD_REQUEST_INFO_DYNAMIC_NUMBER_POST_PARAMS query + */ + size_t v_number_post_params_sizet; + + /** + * The data for the #MHD_REQUEST_INFO_DYNAMIC_UPLOAD_PRESENT query + */ + enum MHD_Bool v_upload_present_bool; + + /** + * The data for the #MHD_REQUEST_INFO_DYNAMIC_UPLOAD_CHUNKED query + */ + enum MHD_Bool v_upload_chunked_bool; + + /** + * The data for the #MHD_REQUEST_INFO_DYNAMIC_UPLOAD_SIZE_TOTAL query + */ + uint_fast64_t v_upload_size_total_uint64; + + /** + * The data for the #MHD_REQUEST_INFO_DYNAMIC_UPLOAD_SIZE_RECIEVED query + */ + uint_fast64_t v_upload_size_recieved_uint64; + + /** + * The data for the #MHD_REQUEST_INFO_DYNAMIC_UPLOAD_SIZE_TO_RECIEVE query + */ + uint_fast64_t v_upload_size_to_recieve_uint64; + + /** + * The data for the #MHD_REQUEST_INFO_DYNAMIC_UPLOAD_SIZE_PROCESSED query + */ + uint_fast64_t v_upload_size_processed_uint64; + + /** + * The data for the #MHD_REQUEST_INFO_DYNAMIC_UPLOAD_SIZE_TO_PROCESS query + */ + uint_fast64_t v_upload_size_to_process_uint64; + + /** + * The data for the #MHD_REQUEST_INFO_DYNAMIC_AUTH_DIGEST_INFO query */ const struct MHD_AuthDigestInfo *v_auth_digest_info; /** - * The username and password provided by the client's basic auth header. - * If #MHD_request_get_info_dynamic_sz() returns #MHD_SC_OK then this pointer - * is NOT NULL and at least the username data is provided. + * The data for the #MHD_REQUEST_INFO_DYNAMIC_AUTH_BASIC_CREDS query */ const struct MHD_AuthBasicCreds *v_auth_basic_creds; }; @@ -5902,7 +5869,8 @@ union MHD_RequestInfoDynamicData * Most of the data provided is available only when the request line or complete * request headers are processed and not available if responding has been * started. - * The wrapper macro #MHD_request_get_info_dynamic() could be more convenient. + * + * The wrapper macro #MHD_request_get_info_dynamic() may be more convenient. * * Any pointers in the returned data are valid until any MHD_Action or * MHD_UploadAction is provided. If the data is needed beyond this point, @@ -5922,6 +5890,9 @@ union MHD_RequestInfoDynamicData * is being sent * #MHD_SC_TOO_EARLY if requested data is not yet ready (for example, * headers are not yet received), + * #MHD_SC_INFO_GET_TYPE_NOT_APPLICABLE if the requested information is + * not available for this request + * due to used configuration/mode, * #MHD_SC_FEATURE_DISABLED if requested functionality is not supported * by this MHD build, * #MHD_SC_INFO_GET_BUFF_TOO_SMALL if @a output_buf_size is too small, @@ -5966,6 +5937,9 @@ MHD_FN_PAR_NONNULL_ (3) MHD_FN_PAR_OUT_ (3); * is being sent * #MHD_SC_TOO_EARLY if requested data is not yet ready (for example, * headers are not yet received), + * #MHD_SC_INFO_GET_TYPE_NOT_APPLICABLE if the requested information is + * not available for this request + * due to used configuration/mode, * #MHD_SC_FEATURE_DISABLED if requested functionality is not supported * by this MHD build, * #MHD_SC_AUTH_ABSENT if request does not have particular Auth data, diff --git a/src/mhd2/auth_digest.c b/src/mhd2/auth_digest.c @@ -1011,7 +1011,7 @@ get_rq_extended_uname_copy_z (const char *restrict uname_ext, static size_t get_rq_uname (const struct mhd_AuthDigesReqParams *restrict params, enum MHD_DigestAuthUsernameType uname_type, - struct MHD_AuthDigestUsernameInfo *restrict uname_info, + struct MHD_AuthDigestInfo *restrict uname_info, uint8_t *restrict buf, size_t buf_size) { @@ -1169,95 +1169,6 @@ get_rq_nc (const struct mhd_AuthDigesReqParams *params, static MHD_FN_MUST_CHECK_RESULT_ MHD_FN_PAR_NONNULL_ALL_ enum MHD_StatusCode -find_and_parse_auth_digest_uname (struct MHD_Request *restrict req) -{ - enum MHD_StatusCode res; - struct MHD_AuthDigestUsernameInfo *uname_info; - enum MHD_DigestAuthUsernameType uname_type; - size_t unif_buf_size; - uint8_t *unif_buf_ptr; - size_t unif_buf_used; - - mhd_assert (NULL == req->auth.digest.info); - mhd_assert (NULL == req->auth.digest.uname); - - res = get_rq_auth_digest_params (req); - if (MHD_SC_OK != res) - return res; - - mhd_assert (NULL != req->auth.digest.rqp); - - uname_type = get_rq_uname_type (req->auth.digest.rqp); - if ( (MHD_DIGEST_AUTH_UNAME_TYPE_MISSING == uname_type) || - (MHD_DIGEST_AUTH_UNAME_TYPE_INVALID == uname_type) ) - return MHD_SC_REQ_AUTH_DATA_BROKEN; - - unif_buf_size = get_rq_unames_size (req->auth.digest.rqp, uname_type); - - uname_info = - (struct MHD_AuthDigestUsernameInfo *) - mhd_stream_alloc_memory (mhd_CNTNR_PTR (req, struct MHD_Connection, rq), - (sizeof(struct MHD_AuthDigestUsernameInfo)) - + unif_buf_size); - if (NULL == uname_info) - return MHD_SC_CONNECTION_POOL_NO_MEM_AUTH_DATA; - memset (uname_info, - 0, - (sizeof(struct MHD_AuthDigestUsernameInfo)) + unif_buf_size); -#ifndef HAVE_NULL_PTR_ALL_ZEROS - uname_info->username.cstr = NULL; - uname_info->userhash_hex.cstr = NULL; - uname_info->userhash_bin = NULL; -#endif - - uname_info->algo = req->auth.digest.rqp->algo; - unif_buf_ptr = (uint8_t *) (uname_info + 1); - unif_buf_used = get_rq_uname (req->auth.digest.rqp, - uname_type, uname_info, - unif_buf_ptr, - unif_buf_size); - mhd_assert (unif_buf_size >= unif_buf_used); - (void) unif_buf_used; /* Mute compiler warning on non-debug builds */ - mhd_assert (MHD_DIGEST_AUTH_UNAME_TYPE_MISSING != uname_info->uname_type); - - req->auth.digest.uname = uname_info; - if (MHD_DIGEST_AUTH_UNAME_TYPE_INVALID == uname_info->uname_type) - return MHD_SC_REQ_AUTH_DATA_BROKEN; - mhd_assert (uname_type == uname_info->uname_type); - - return MHD_SC_OK; -} - - -MHD_INTERNAL MHD_FN_MUST_CHECK_RESULT_ MHD_FN_PAR_NONNULL_ALL_ -MHD_FN_PAR_OUT_ (2) enum MHD_StatusCode -mhd_request_get_auth_digest_username ( - struct MHD_Request *restrict req, - const struct MHD_AuthDigestUsernameInfo **restrict v_auth_digest_uname) -{ - mhd_assert (mhd_HTTP_STAGE_HEADERS_PROCESSED <= \ - mhd_CNTNR_CPTR (req, struct MHD_Connection, rq)->stage); - mhd_assert (mhd_HTTP_STAGE_REQ_RECV_FINISHED >= \ - mhd_CNTNR_CPTR (req, struct MHD_Connection, rq)->stage); - - if (MHD_SC_OK != req->auth.digest.parse_result) - return req->auth.digest.parse_result; - - if (NULL == req->auth.digest.uname) - req->auth.digest.parse_result = find_and_parse_auth_digest_uname (req); - - if (MHD_SC_OK != req->auth.digest.parse_result) - return req->auth.digest.parse_result; /* Failure exit point */ - - mhd_assert (NULL != req->auth.digest.uname); - *v_auth_digest_uname = req->auth.digest.uname; - - return MHD_SC_OK; /* Success exit point */ -} - - -static MHD_FN_MUST_CHECK_RESULT_ MHD_FN_PAR_NONNULL_ALL_ -enum MHD_StatusCode find_and_parse_auth_digest_info (struct MHD_Request *restrict req) { enum MHD_StatusCode res; @@ -1312,8 +1223,7 @@ find_and_parse_auth_digest_info (struct MHD_Request *restrict req) if ( (MHD_DIGEST_AUTH_UNAME_TYPE_MISSING != uname_type) && (MHD_DIGEST_AUTH_UNAME_TYPE_INVALID != uname_type) ) unif_buf_used += - get_rq_uname (req->auth.digest.rqp, uname_type, - (struct MHD_AuthDigestUsernameInfo *) info, + get_rq_uname (req->auth.digest.rqp, uname_type, info, unif_buf_ptr + unif_buf_used, unif_buf_size - unif_buf_used); else @@ -1363,11 +1273,8 @@ find_and_parse_auth_digest_info (struct MHD_Request *restrict req) } req->auth.digest.info = info; - if (NULL == req->auth.digest.uname) - req->auth.digest.uname = (struct MHD_AuthDigestUsernameInfo *) info; mhd_assert (uname_type == info->uname_type); - mhd_assert (uname_type == req->auth.digest.uname->uname_type); if ((MHD_DIGEST_AUTH_UNAME_TYPE_MISSING == uname_type) || (MHD_DIGEST_AUTH_UNAME_TYPE_INVALID == uname_type) || @@ -1399,7 +1306,6 @@ mhd_request_get_auth_digest_info ( return req->auth.digest.parse_result; /* Failure exit point */ mhd_assert (NULL != req->auth.digest.info); - mhd_assert (NULL != req->auth.digest.uname); *v_auth_digest_info = req->auth.digest.info; return MHD_SC_OK; /* Success exit point */ diff --git a/src/mhd2/auth_digest.h b/src/mhd2/auth_digest.h @@ -57,19 +57,6 @@ mhd_auth_digest_get_new_nonce (struct MHD_Connection *restrict c, MHD_FN_PAR_NONNULL_ALL_ MHD_FN_PAR_OUT_ (2); /** - * Find in request and parse Digest Authentication username information - * @param req the request to use - * @param[out] v_auth_digest_username the pointer to set to the found data - * @return #MHD_SC_OK on success, - * error code otherwise - */ -MHD_INTERNAL enum MHD_StatusCode -mhd_request_get_auth_digest_username ( - struct MHD_Request *restrict req, - const struct MHD_AuthDigestUsernameInfo **restrict v_auth_digest_uname) -MHD_FN_MUST_CHECK_RESULT_ MHD_FN_PAR_NONNULL_ALL_ MHD_FN_PAR_OUT_ (2); - -/** * Find in request and parse Digest Authentication information * @param req the request to use * @param[out] v_auth_basic_creds the pointer to set to the found data diff --git a/src/mhd2/mhd_request.h b/src/mhd2/mhd_request.h @@ -348,12 +348,6 @@ struct mhd_ReqAuthDigestData * NULL if not yet parsed or not found. */ struct MHD_AuthDigestInfo *info; - /** - * The information about client's provided username. - * May point to the same address as @a info. - * NULL if not yet parsed or not found. - */ - struct MHD_AuthDigestUsernameInfo *uname; }; #endif /* MHD_SUPPORT_AUTH_DIGEST */ diff --git a/src/mhd2/request_get_info.c b/src/mhd2/request_get_info.c @@ -43,6 +43,10 @@ # include "auth_digest.h" #endif +#ifdef MHD_SUPPORT_COOKIES +# include "mhd_daemon.h" +#endif + #include "mhd_public_api.h" MHD_EXTERN_ MHD_FN_MUST_CHECK_RESULT_ @@ -123,7 +127,7 @@ MHD_request_get_info_dynamic_sz ( { switch (info_type) { - case MHD_REQUEST_INFO_DYNAMIC_HTTP_METHOD_STR: + case MHD_REQUEST_INFO_DYNAMIC_HTTP_METHOD_STRING: if (mhd_HTTP_STAGE_REQ_RECV_FINISHED > mhd_CNTNR_PTR (request, \ struct MHD_Connection, \ @@ -131,9 +135,9 @@ MHD_request_get_info_dynamic_sz ( return MHD_SC_TOO_LATE; if (0 == request->method.len) return MHD_SC_TOO_EARLY; - if (sizeof(output_buf->v_str) > output_buf_size) + if (sizeof(output_buf->v_http_method_string) > output_buf_size) return MHD_SC_INFO_GET_BUFF_TOO_SMALL; - output_buf->v_str = request->method; + output_buf->v_http_method_string = request->method; return MHD_SC_OK; case MHD_REQUEST_INFO_DYNAMIC_URI: if (mhd_HTTP_STAGE_REQ_LINE_RECEIVED > @@ -146,12 +150,12 @@ MHD_request_get_info_dynamic_sz ( struct MHD_Connection, \ rq)->stage) return MHD_SC_TOO_LATE; - if (sizeof(output_buf->v_str) > output_buf_size) + if (sizeof(output_buf->v_uri_string) > output_buf_size) return MHD_SC_INFO_GET_BUFF_TOO_SMALL; - output_buf->v_str.cstr = request->url; - output_buf->v_str.len = request->url_len; + output_buf->v_uri_string.cstr = request->url; + output_buf->v_uri_string.len = request->url_len; return MHD_SC_OK; - case MHD_REQUEST_INFO_DYNAMIC_NUMBER_GET_PARAMS: + case MHD_REQUEST_INFO_DYNAMIC_NUMBER_URI_PARAMS: if (mhd_HTTP_STAGE_REQ_LINE_RECEIVED > mhd_CNTNR_PTR (request, \ struct MHD_Connection, \ @@ -162,15 +166,20 @@ MHD_request_get_info_dynamic_sz ( struct MHD_Connection, \ rq)->stage) return MHD_SC_TOO_LATE; - if (sizeof(output_buf->v_sizet) > output_buf_size) + if (sizeof(output_buf->v_number_uri_params_sizet) > output_buf_size) return MHD_SC_INFO_GET_BUFF_TOO_SMALL; - output_buf->v_sizet = + output_buf->v_number_uri_params_sizet = MHD_request_get_values_cb (request, MHD_VK_GET_ARGUMENT, NULL, NULL); return MHD_SC_OK; case MHD_REQUEST_INFO_DYNAMIC_NUMBER_COOKIES: +#ifdef MHD_SUPPORT_COOKIES + if (mhd_CNTNR_PTR (request, \ + struct MHD_Connection, \ + rq)->daemon->req_cfg.disable_cookies) + return MHD_SC_INFO_GET_TYPE_NOT_APPLICABLE; if (mhd_HTTP_STAGE_HEADERS_PROCESSED > mhd_CNTNR_PTR (request, \ struct MHD_Connection, \ @@ -181,18 +190,18 @@ MHD_request_get_info_dynamic_sz ( struct MHD_Connection, \ rq)->stage) return MHD_SC_TOO_LATE; - if (sizeof(output_buf->v_sizet) > output_buf_size) + if (sizeof(output_buf->v_number_cookies_sizet) > output_buf_size) return MHD_SC_INFO_GET_BUFF_TOO_SMALL; -#ifdef MHD_SUPPORT_COOKIES - output_buf->v_sizet = + output_buf->v_number_cookies_sizet = MHD_request_get_values_cb (request, MHD_VK_COOKIE, NULL, NULL); + return MHD_SC_OK; #else - output_buf->v_sizet = 0; + return MHD_SC_FEATURE_DISABLED; #endif - return MHD_SC_OK; + break; case MHD_REQUEST_INFO_DYNAMIC_HEADER_SIZE: if (mhd_HTTP_STAGE_HEADERS_PROCESSED > mhd_CNTNR_PTR (request, \ @@ -204,11 +213,12 @@ MHD_request_get_info_dynamic_sz ( struct MHD_Connection, \ rq)->stage) return MHD_SC_TOO_LATE; - if (sizeof(output_buf->v_sizet) > output_buf_size) + if (sizeof(output_buf->v_header_size_sizet) > output_buf_size) return MHD_SC_INFO_GET_BUFF_TOO_SMALL; - output_buf->v_sizet = request->header_size; + output_buf->v_header_size_sizet = request->header_size; return MHD_SC_OK; case MHD_REQUEST_INFO_DYNAMIC_NUMBER_POST_PARAMS: +#ifdef MHD_SUPPORT_POST_PARSER if (mhd_HTTP_STAGE_HEADERS_PROCESSED > mhd_CNTNR_PTR (request, \ struct MHD_Connection, \ @@ -219,27 +229,28 @@ MHD_request_get_info_dynamic_sz ( struct MHD_Connection, \ rq)->stage) return MHD_SC_TOO_LATE; - if (sizeof(output_buf->v_sizet) > output_buf_size) + if (sizeof(output_buf->v_number_post_params_sizet) > output_buf_size) return MHD_SC_INFO_GET_BUFF_TOO_SMALL; -#ifdef MHD_SUPPORT_POST_PARSER - output_buf->v_sizet = + output_buf->v_number_post_params_sizet = MHD_request_get_values_cb (request, MHD_VK_POSTDATA, NULL, NULL); + return MHD_SC_OK; #else - output_buf->v_sizet = 0; + return MHD_SC_FEATURE_DISABLED; #endif - return MHD_SC_OK; + break; case MHD_REQUEST_INFO_DYNAMIC_UPLOAD_PRESENT: if (mhd_HTTP_STAGE_HEADERS_PROCESSED > mhd_CNTNR_PTR (request, \ struct MHD_Connection, \ rq)->stage) return MHD_SC_TOO_EARLY; - if (sizeof(output_buf->v_bool) > output_buf_size) + if (sizeof(output_buf->v_upload_present_bool) > output_buf_size) return MHD_SC_INFO_GET_BUFF_TOO_SMALL; - output_buf->v_bool = request->cntn.cntn_present ? MHD_YES : MHD_NO; + output_buf->v_upload_present_bool = + request->cntn.cntn_present ? MHD_YES : MHD_NO; return MHD_SC_OK; case MHD_REQUEST_INFO_DYNAMIC_UPLOAD_CHUNKED: if (mhd_HTTP_STAGE_HEADERS_PROCESSED > @@ -247,9 +258,9 @@ MHD_request_get_info_dynamic_sz ( struct MHD_Connection, \ rq)->stage) return MHD_SC_TOO_EARLY; - if (sizeof(output_buf->v_bool) > output_buf_size) + if (sizeof(output_buf->v_upload_chunked_bool) > output_buf_size) return MHD_SC_INFO_GET_BUFF_TOO_SMALL; - output_buf->v_bool = + output_buf->v_upload_chunked_bool = (MHD_SIZE_UNKNOWN == request->cntn.cntn_size) ? MHD_YES : MHD_NO; return MHD_SC_OK; case MHD_REQUEST_INFO_DYNAMIC_UPLOAD_SIZE_TOTAL: @@ -258,9 +269,9 @@ MHD_request_get_info_dynamic_sz ( struct MHD_Connection, \ rq)->stage) return MHD_SC_TOO_EARLY; - if (sizeof(output_buf->v_uint64) > output_buf_size) + if (sizeof(output_buf->v_upload_size_total_uint64) > output_buf_size) return MHD_SC_INFO_GET_BUFF_TOO_SMALL; - output_buf->v_uint64 = request->cntn.cntn_size; + output_buf->v_upload_size_total_uint64 = request->cntn.cntn_size; return MHD_SC_OK; case MHD_REQUEST_INFO_DYNAMIC_UPLOAD_SIZE_RECIEVED: if (mhd_HTTP_STAGE_HEADERS_PROCESSED > @@ -268,9 +279,9 @@ MHD_request_get_info_dynamic_sz ( struct MHD_Connection, \ rq)->stage) return MHD_SC_TOO_EARLY; - if (sizeof(output_buf->v_uint64) > output_buf_size) + if (sizeof(output_buf->v_upload_size_recieved_uint64) > output_buf_size) return MHD_SC_INFO_GET_BUFF_TOO_SMALL; - output_buf->v_uint64 = request->cntn.recv_size; + output_buf->v_upload_size_recieved_uint64 = request->cntn.recv_size; return MHD_SC_OK; case MHD_REQUEST_INFO_DYNAMIC_UPLOAD_SIZE_TO_RECIEVE: if (mhd_HTTP_STAGE_HEADERS_PROCESSED > @@ -278,9 +289,9 @@ MHD_request_get_info_dynamic_sz ( struct MHD_Connection, \ rq)->stage) return MHD_SC_TOO_EARLY; - if (sizeof(output_buf->v_uint64) > output_buf_size) + if (sizeof(output_buf->v_upload_size_to_recieve_uint64) > output_buf_size) return MHD_SC_INFO_GET_BUFF_TOO_SMALL; - output_buf->v_uint64 = + output_buf->v_upload_size_to_recieve_uint64 = (MHD_SIZE_UNKNOWN == request->cntn.cntn_size) ? MHD_SIZE_UNKNOWN : (request->cntn.cntn_size - request->cntn.recv_size); return MHD_SC_OK; @@ -290,9 +301,9 @@ MHD_request_get_info_dynamic_sz ( struct MHD_Connection, \ rq)->stage) return MHD_SC_TOO_EARLY; - if (sizeof(output_buf->v_uint64) > output_buf_size) + if (sizeof(output_buf->v_upload_size_processed_uint64) > output_buf_size) return MHD_SC_INFO_GET_BUFF_TOO_SMALL; - output_buf->v_uint64 = request->cntn.proc_size; + output_buf->v_upload_size_processed_uint64 = request->cntn.proc_size; return MHD_SC_OK; case MHD_REQUEST_INFO_DYNAMIC_UPLOAD_SIZE_TO_PROCESS: if (mhd_HTTP_STAGE_HEADERS_PROCESSED > @@ -300,33 +311,12 @@ MHD_request_get_info_dynamic_sz ( struct MHD_Connection, \ rq)->stage) return MHD_SC_TOO_EARLY; - if (sizeof(output_buf->v_uint64) > output_buf_size) + if (sizeof(output_buf->v_upload_size_to_process_uint64) > output_buf_size) return MHD_SC_INFO_GET_BUFF_TOO_SMALL; - output_buf->v_uint64 = + output_buf->v_upload_size_to_process_uint64 = (MHD_SIZE_UNKNOWN == request->cntn.cntn_size) ? MHD_SIZE_UNKNOWN : (request->cntn.cntn_size - request->cntn.proc_size); return MHD_SC_OK; - case MHD_REQUEST_INFO_DYNAMIC_AUTH_DIGEST_USERNAME: - if (mhd_HTTP_STAGE_HEADERS_PROCESSED > - mhd_CNTNR_PTR (request, \ - struct MHD_Connection, \ - rq)->stage) - return MHD_SC_TOO_EARLY; - if (mhd_HTTP_STAGE_REQ_RECV_FINISHED < - mhd_CNTNR_PTR (request, \ - struct MHD_Connection, \ - rq)->stage) - return MHD_SC_TOO_LATE; -#ifdef MHD_SUPPORT_AUTH_DIGEST - if (sizeof(output_buf->v_auth_basic_creds) > output_buf_size) - return MHD_SC_INFO_GET_BUFF_TOO_SMALL; - return mhd_request_get_auth_digest_username (request, - &(output_buf-> - v_auth_digest_uname)); -#else /* ! MHD_SUPPORT_AUTH_DIGEST */ - return MHD_SC_FEATURE_DISABLED; -#endif /* ! MHD_SUPPORT_AUTH_DIGEST */ - break; case MHD_REQUEST_INFO_DYNAMIC_AUTH_DIGEST_INFO: if (mhd_HTTP_STAGE_HEADERS_PROCESSED > mhd_CNTNR_PTR (request, \