diff options
Diffstat (limited to 'src/microhttpd/basicauth.c')
-rw-r--r-- | src/microhttpd/basicauth.c | 27 |
1 files changed, 19 insertions, 8 deletions
diff --git a/src/microhttpd/basicauth.c b/src/microhttpd/basicauth.c index 51f9cf93..bb9e1ea4 100644 --- a/src/microhttpd/basicauth.c +++ b/src/microhttpd/basicauth.c @@ -117,7 +117,7 @@ MHD_queue_basic_auth_fail_response (struct MHD_Connection *connection, const char *realm, struct MHD_Response *response) { - int ret; + int ret, res; size_t hlen = strlen(realm) + strlen("Basic realm=\"\"") + 1; char *header; @@ -130,18 +130,29 @@ MHD_queue_basic_auth_fail_response (struct MHD_Connection *connection, #endif /* HAVE_MESSAGES */ return MHD_NO; } - MHD_snprintf_ (header, - hlen, - "Basic realm=\"%s\"", - realm); - ret = MHD_add_response_header (response, - MHD_HTTP_HEADER_WWW_AUTHENTICATE, - header); + res = MHD_snprintf_ (header, + hlen, + "Basic realm=\"%s\"", + realm); + if (res > 0 && res < hlen) + ret = MHD_add_response_header (response, + MHD_HTTP_HEADER_WWW_AUTHENTICATE, + header); + else + ret = MHD_NO; + free(header); if (MHD_YES == ret) ret = MHD_queue_response (connection, MHD_HTTP_UNAUTHORIZED, response); + else + { +#ifdef HAVE_MESSAGES + MHD_DLOG (connection->daemon, + "Failed to add Basic auth header\n"); +#endif /* HAVE_MESSAGES */ + } return ret; } |