95/95git add http.c socket.c!
This commit is contained in:
parent
00151f2e18
commit
152cd33d83
27
src/http.c
27
src/http.c
@ -123,12 +123,19 @@ http_process_headers(struct http_transaction *ta)
|
||||
* are zero-terminated strings.
|
||||
*/
|
||||
if (!strcasecmp(field_name, "Cookie")) {
|
||||
if ((field_value == NULL) || (strlen(field_value) <= 11))
|
||||
|
||||
char* cookie2;
|
||||
char* cookie1 = strtok_r(field_value, ";", &cookie2);
|
||||
cookie2++;
|
||||
|
||||
ta->extra_cookie = cookie2;
|
||||
|
||||
if ((cookie1 == NULL) || (strlen(cookie1) <= 11))
|
||||
{
|
||||
ta->resp_status = HTTP_PERMISSION_DENIED;
|
||||
return false;
|
||||
}
|
||||
ta->token = field_value + 11; // + 11 gets rid of "auth_token=" heading.
|
||||
ta->token = cookie1 + 11; // + 11 gets rid of "auth_token=" heading.
|
||||
|
||||
ta->valid_token = validate_token_exp(ta, ta->token);
|
||||
}
|
||||
@ -664,7 +671,21 @@ handle_private(struct http_transaction *ta)
|
||||
ta->resp_status = HTTP_OK;
|
||||
return handle_static_asset(ta, server_root);
|
||||
}
|
||||
return send_error(ta, HTTP_PERMISSION_DENIED, "invalid token");
|
||||
|
||||
|
||||
if ((ta->extra_cookie == NULL) || (strlen(ta->extra_cookie) <= 11)) {
|
||||
return send_error(ta, HTTP_PERMISSION_DENIED, "???");
|
||||
}
|
||||
|
||||
ta->token = ta->extra_cookie + 11; // + 11 gets rid of "auth_token=" heading.
|
||||
ta->valid_token = validate_token_exp(ta, ta->token);
|
||||
|
||||
if (ta->valid_token) {
|
||||
ta->resp_status = HTTP_OK;
|
||||
return handle_static_asset(ta, server_root);
|
||||
}
|
||||
|
||||
return send_error(ta, HTTP_PERMISSION_DENIED, "???");
|
||||
}
|
||||
|
||||
/* Handle a single HTTP transaction. Returns true on success. */
|
||||
|
55
src/socket.c
55
src/socket.c
@ -54,6 +54,7 @@ socket_open_bind_listen(char * port_number_string, int backlog)
|
||||
}
|
||||
|
||||
char printed_addr[1024];
|
||||
|
||||
for (pinfo = info; pinfo; pinfo = pinfo->ai_next) {
|
||||
assert (pinfo->ai_protocol == IPPROTO_TCP);
|
||||
int rc = getnameinfo(pinfo->ai_addr, pinfo->ai_addrlen,
|
||||
@ -73,8 +74,58 @@ socket_open_bind_listen(char * port_number_string, int backlog)
|
||||
/* Skip any non-IPv4 addresses.
|
||||
* Adding support for protocol independence/IPv6 is part of the project.
|
||||
*/
|
||||
//if (pinfo->ai_family != AF_INET)
|
||||
//continue;
|
||||
if (pinfo->ai_family != AF_INET6)
|
||||
continue;
|
||||
|
||||
int s = socket(pinfo->ai_family, pinfo->ai_socktype, pinfo->ai_protocol);
|
||||
if (s == -1) {
|
||||
perror("socket");
|
||||
return -1;
|
||||
}
|
||||
|
||||
// See https://stackoverflow.com/a/3233022 for a good explanation of what this does
|
||||
int opt = 1;
|
||||
setsockopt (s, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof (opt));
|
||||
|
||||
rc = bind(s, pinfo->ai_addr, pinfo->ai_addrlen);
|
||||
if (rc == -1) {
|
||||
perror("bind");
|
||||
close(s);
|
||||
return -1;
|
||||
}
|
||||
|
||||
rc = listen(s, backlog);
|
||||
if (rc == -1) {
|
||||
perror("listen");
|
||||
close(s);
|
||||
return -1;
|
||||
}
|
||||
|
||||
freeaddrinfo(info);
|
||||
return s;
|
||||
}
|
||||
|
||||
for (pinfo = info; pinfo; pinfo = pinfo->ai_next) {
|
||||
assert (pinfo->ai_protocol == IPPROTO_TCP);
|
||||
int rc = getnameinfo(pinfo->ai_addr, pinfo->ai_addrlen,
|
||||
printed_addr, sizeof printed_addr, NULL, 0,
|
||||
NI_NUMERICHOST);
|
||||
if (rc != 0) {
|
||||
fprintf(stderr, "getnameinfo error: %s\n", gai_strerror(rc));
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* Uncomment this to see the address returned
|
||||
printf("%s: %s\n", pinfo->ai_family == AF_INET ? "AF_INET" :
|
||||
pinfo->ai_family == AF_INET6 ? "AF_INET6" : "?",
|
||||
printed_addr);
|
||||
*/
|
||||
|
||||
/* Skip any non-IPv4 addresses.
|
||||
* Adding support for protocol independence/IPv6 is part of the project.
|
||||
*/
|
||||
if (pinfo->ai_family != AF_INET)
|
||||
continue;
|
||||
|
||||
int s = socket(pinfo->ai_family, pinfo->ai_socktype, pinfo->ai_protocol);
|
||||
if (s == -1) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user