libmicrohttpd
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [libmicrohttpd] Question regarding HTTP basic auth example


From: Martin Velek
Subject: Re: [libmicrohttpd] Question regarding HTTP basic auth example
Date: Mon, 17 Feb 2014 15:31:27 +0100

I am sorry, the previous email was sent incomplete by accident:

To cut a long story short: I am doing the authentication in the  "if
(NULL == *con_cls)" part. If the user passed valid credentials the
connection is serviced later on by returning MHD_YES (without queueing
any response) otherwise the unauthorized response is generated.

Best
Martin

On Mon, Feb 17, 2014 at 3:23 PM, Martin Velek <address@hidden> wrote:
> Hi,
>
> because this email is not an answer to Your question, please consider
> it like a hint, not advice.
>
> You are not obligated to return only MHD_YES in "if (NULL ==
> *con_cls)". You may also return MHD_NO or even process the connection.
> According to my stack trace,
> Thread [12] 4230 [core: 1] (Suspended : Breakpoint)
>     AccessHandlerCallback() at http_server.c:303 0x43a281
>     call_connection_handler() at connection.c:1,303 0x43042a
>     MHD_connection_handle_idle() at connection.c:2,207 0x431baa
>     MHD_run_from_select() at daemon.c:1,814 0x43498c
>     MHD_select() at daemon.c:1,909 0x434e15
>     MHD_select_thread() at daemon.c:2,417 0x434e7e
>     rtos_mhd_thread_wrapper() at platform.h:168 0x4327a6
>     ITaskStartup() at rtos_pthread.c:228 0x40895c
>     start_thread() at pthread_create.c:308 0x7ffff76c0e9a
>     clone() at clone.S:112 0x7ffff70f83fd
>     <...more frames...>
> the connection_handler is called after
> MHD_CONNECTION_HEADERS_PROCESSED (the first call). At this time, the
> *upload_data_size is equal to zero even if the TCP packet contains
> data following (behind) the end mark of HTTP headers.
>
> I am using this checking in my url handler:
> // New connection?
>  if (NULL == *con_cls)
>   {
>         // Data should never be greater than zero because of first call.
>         assert((*upload_data_size) == 0);
>
>         // Default behavior for authentication is OK.
>         ret = MHD_YES;
>
>         // get username and password
>         user = MHD_basic_auth_get_username_password(connection, &pass);
>
>         // check if it is valid
>         if (false == credentials_check)
>         {
>             ret = generate_unauthorized_response(connection,
> authentification_failed_size_,
>                     (void *)authentification_failed_page_,
> MHD_RESPMEM_PERSISTENT);
>             // Return value.
>             return ret;
>         }
>        else
>        {
>           *con_cls = Something;
>
>         }
>
>
> }
> // already authenticated ....
>
>
>
> On Mon, Feb 17, 2014 at 2:13 PM, Sebastian Hammerl
> <address@hidden> wrote:
>> Hi,
>>
>> Am 17.02.2014 13:58, schrieb Christian Grothoff:
>>
>>> if (*upload_data_size > 0)
>>> {
>>>    *upload_data_size = 0; // consume
>>>    return MHD_YES;
>>> }
>>
>>
>> that did it!
>>
>>
>> Thank you very much,
>>     Sebastian
>>



reply via email to

[Prev in Thread] Current Thread [Next in Thread]