diff --git a/deps/libb64-1.2/include/b64/cdecode.h b/deps/libb64-1.2/include/b64/cdecode.h index d0d7f48..2f65f8c 100755 --- a/deps/libb64-1.2/include/b64/cdecode.h +++ b/deps/libb64-1.2/include/b64/cdecode.h @@ -21,7 +21,7 @@ typedef struct void base64_init_decodestate(base64_decodestate* state_in); -int base64_decode_value(char value_in); +int base64_decode_value(signed char value_in); int base64_decode_block(const char* code_in, const int length_in, char* plaintext_out, base64_decodestate* state_in); diff --git a/deps/libb64-1.2/src/cdecode.c b/deps/libb64-1.2/src/cdecode.c index 34509c9..bcb8e62 100755 --- a/deps/libb64-1.2/src/cdecode.c +++ b/deps/libb64-1.2/src/cdecode.c @@ -7,7 +7,7 @@ For details, see http://sourceforge.net/projects/libb64 #include -int base64_decode_value(char value_in) +int base64_decode_value(signed char value_in) { static const char decoding[] = {62,-1,-1,-1,63,52,53,54,55,56,57,58,59,60,61,-1,-1,-1,-2,-1,-1,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,-1,-1,-1,-1,-1,-1,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51}; static const char decoding_size = sizeof(decoding); @@ -26,7 +26,7 @@ int base64_decode_block(const char* code_in, const int length_in, char* plaintex { const char* codechar = code_in; char* plainchar = plaintext_out; - char fragment; + signed char fragment; *plainchar = state_in->plainchar; diff --git a/src/www.c b/src/www.c index 2592485..d9c9072 100644 --- a/src/www.c +++ b/src/www.c @@ -332,18 +332,22 @@ int www_403(char *header, char *footer, struct MHD_Connection * connection) { } struct user_record *www_auth_ok(struct MHD_Connection *connection, const char *url) { - char *user_password = MHD_lookup_connection_value(connection, MHD_HEADER_KIND, "Authorization"); + char *ptr = MHD_lookup_connection_value(connection, MHD_HEADER_KIND, "Authorization"); + char *user_password; base64_decodestate state; char decoded_pass[34]; int len; char *username; char *password; int i; + struct user_record *u; - if (user_password == NULL) { + if (ptr == NULL) { return NULL; } + user_password = strdup(ptr); + if (strncasecmp(user_password, "basic ", 6) == 0) { if (strlen(&user_password[6]) <= 48) { base64_init_decodestate(&state); @@ -358,10 +362,13 @@ struct user_record *www_auth_ok(struct MHD_Connection *connection, const char *u break; } } - return check_user_pass(username, password); + u = check_user_pass(username, password); + free(user_password); + + return u; } } - + free(user_password); return NULL; }