mirror of
https://github.com/darkk/redsocks.git
synced 2025-08-26 11:45:30 +00:00
fix: 403 found but not header provided
This commit is contained in:
parent
1b07ca821c
commit
d95c791e8b
@ -92,37 +92,43 @@ static void httpc_read_cb(struct bufferevent *buffev, void *_arg)
|
|||||||
|
|
||||||
dropped = 1;
|
dropped = 1;
|
||||||
} else {
|
} else {
|
||||||
free_null(auth->last_auth_query);
|
|
||||||
|
|
||||||
char *auth_request = get_auth_request_header(buffev->input);
|
char *auth_request = get_auth_request_header(buffev->input);
|
||||||
char *ptr = auth_request;
|
|
||||||
|
|
||||||
ptr += strlen(auth_request_header);
|
if (!auth_request) {
|
||||||
while (isspace(*ptr))
|
redsocks_log_error(client, LOG_NOTICE, "403 found, but no proxy auth challenge");
|
||||||
ptr++;
|
redsocks_drop_client(client);
|
||||||
|
dropped = 1;
|
||||||
|
} else {
|
||||||
|
free_null(auth->last_auth_query);
|
||||||
|
char *ptr = auth_request;
|
||||||
|
|
||||||
auth->last_auth_query = calloc(strlen(ptr) + 1, 1);
|
ptr += strlen(auth_request_header);
|
||||||
strcpy(auth->last_auth_query, ptr);
|
while (isspace(*ptr))
|
||||||
auth->last_auth_count = 0;
|
ptr++;
|
||||||
|
|
||||||
free(auth_request);
|
auth->last_auth_query = calloc(strlen(ptr) + 1, 1);
|
||||||
redsocks_log_error(client, LOG_NOTICE, "got challenge %s, restarting now", auth->last_auth_query);
|
strcpy(auth->last_auth_query, ptr);
|
||||||
|
auth->last_auth_count = 0;
|
||||||
|
|
||||||
if (bufferevent_disable(client->relay, EV_WRITE)) {
|
free(auth_request);
|
||||||
redsocks_log_errno(client, LOG_ERR, "bufferevent_disable");
|
redsocks_log_error(client, LOG_NOTICE, "got challenge %s, restarting now", auth->last_auth_query);
|
||||||
|
|
||||||
|
if (bufferevent_disable(client->relay, EV_WRITE)) {
|
||||||
|
redsocks_log_errno(client, LOG_ERR, "bufferevent_disable");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* close relay tunnel */
|
||||||
|
close(EVENT_FD(&client->relay->ev_write));
|
||||||
|
bufferevent_free(client->relay);
|
||||||
|
|
||||||
|
/* set to initial state*/
|
||||||
|
client->state = httpc_new;
|
||||||
|
|
||||||
|
/* and reconnect */
|
||||||
|
redsocks_connect_relay(client);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* close relay tunnel */
|
|
||||||
close(EVENT_FD(&client->relay->ev_write));
|
|
||||||
bufferevent_free(client->relay);
|
|
||||||
|
|
||||||
/* set to initial state*/
|
|
||||||
client->state = httpc_new;
|
|
||||||
|
|
||||||
/* and reconnect */
|
|
||||||
redsocks_connect_relay(client);
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
} else if (200 <= code && code <= 299) {
|
} else if (200 <= code && code <= 299) {
|
||||||
client->state = httpc_reply_came;
|
client->state = httpc_reply_came;
|
||||||
|
56
http-relay.c
56
http-relay.c
@ -160,39 +160,45 @@ static void httpr_relay_read_cb(struct bufferevent *buffev, void *_arg)
|
|||||||
|
|
||||||
dropped = 1;
|
dropped = 1;
|
||||||
} else {
|
} else {
|
||||||
free_null(auth->last_auth_query);
|
|
||||||
|
|
||||||
char *auth_request = get_auth_request_header(buffev->input);
|
char *auth_request = get_auth_request_header(buffev->input);
|
||||||
char *ptr = auth_request;
|
|
||||||
|
|
||||||
ptr += strlen(auth_request_header);
|
if (!auth_request) {
|
||||||
while (isspace(*ptr))
|
redsocks_log_error(client, LOG_NOTICE, "403 found, but no proxy auth challenge");
|
||||||
ptr++;
|
redsocks_drop_client(client);
|
||||||
|
dropped = 1;
|
||||||
|
} else {
|
||||||
|
free_null(auth->last_auth_query);
|
||||||
|
char *ptr = auth_request;
|
||||||
|
|
||||||
auth->last_auth_query = calloc(strlen(ptr) + 1, 1);
|
ptr += strlen(auth_request_header);
|
||||||
strcpy(auth->last_auth_query, ptr);
|
while (isspace(*ptr))
|
||||||
auth->last_auth_count = 0;
|
ptr++;
|
||||||
|
|
||||||
free(auth_request);
|
auth->last_auth_query = calloc(strlen(ptr) + 1, 1);
|
||||||
redsocks_log_error(client, LOG_NOTICE, "got challenge %s, restarting now", auth->last_auth_query);
|
strcpy(auth->last_auth_query, ptr);
|
||||||
|
auth->last_auth_count = 0;
|
||||||
|
|
||||||
httpr_buffer_fini(&httpr->relay_buffer);
|
free(auth_request);
|
||||||
|
redsocks_log_error(client, LOG_NOTICE, "got challenge %s, restarting now", auth->last_auth_query);
|
||||||
|
|
||||||
if (bufferevent_disable(client->relay, EV_WRITE)) {
|
httpr_buffer_fini(&httpr->relay_buffer);
|
||||||
redsocks_log_errno(client, LOG_ERR, "bufferevent_disable");
|
|
||||||
|
if (bufferevent_disable(client->relay, EV_WRITE)) {
|
||||||
|
redsocks_log_errno(client, LOG_ERR, "bufferevent_disable");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* close relay tunnel */
|
||||||
|
close(EVENT_FD(&client->relay->ev_write));
|
||||||
|
bufferevent_free(client->relay);
|
||||||
|
|
||||||
|
/* set to initial state*/
|
||||||
|
client->state = httpr_recv_request;
|
||||||
|
|
||||||
|
/* and reconnect */
|
||||||
|
redsocks_connect_relay(client);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* close relay tunnel */
|
|
||||||
close(EVENT_FD(&client->relay->ev_write));
|
|
||||||
bufferevent_free(client->relay);
|
|
||||||
|
|
||||||
/* set to initial state*/
|
|
||||||
client->state = httpr_recv_request;
|
|
||||||
|
|
||||||
/* and reconnect */
|
|
||||||
redsocks_connect_relay(client);
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
} else if (100 <= code && code <= 999) {
|
} else if (100 <= code && code <= 999) {
|
||||||
client->state = httpr_reply_came;
|
client->state = httpr_reply_came;
|
||||||
|
Loading…
Reference in New Issue
Block a user