mirror of
https://github.com/emikulic/darkhttpd.git
synced 2023-08-10 21:13:08 +03:00
. Add USE_ACCEPTFILTER knob.
. debugf() sweep - turn non-verbose ones into printf()s
This commit is contained in:
parent
3f6c57ca70
commit
a0dddaf19a
@ -32,6 +32,8 @@ static const char rcsid[] =
|
|||||||
|
|
||||||
/* Note: Solaris users: link with -lxnet */
|
/* Note: Solaris users: link with -lxnet */
|
||||||
|
|
||||||
|
#define USE_ACCEPTFILTER
|
||||||
|
|
||||||
#ifdef __linux
|
#ifdef __linux
|
||||||
#define _GNU_SOURCE /* for strsignal() and vasprintf() */
|
#define _GNU_SOURCE /* for strsignal() and vasprintf() */
|
||||||
#include <sys/sendfile.h>
|
#include <sys/sendfile.h>
|
||||||
@ -57,13 +59,12 @@ static const char rcsid[] =
|
|||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
/* for easy defusal */
|
|
||||||
#define debugf printf
|
|
||||||
|
|
||||||
#ifdef NDEBUG
|
#ifdef NDEBUG
|
||||||
#define safefree free
|
#define safefree free
|
||||||
|
static void debugf(const char *format, ...) { }
|
||||||
#else
|
#else
|
||||||
#define safefree(x) do { free(x); x = NULL; } while(0)
|
#define safefree(x) do { free(x); x = NULL; } while(0)
|
||||||
|
#define debugf printf
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef min
|
#ifndef min
|
||||||
@ -458,12 +459,14 @@ static void nonblock_socket(const int sock)
|
|||||||
*/
|
*/
|
||||||
static void acceptfilter_socket(const int sock)
|
static void acceptfilter_socket(const int sock)
|
||||||
{
|
{
|
||||||
#ifdef __FreeBSD__
|
#if defined(__FreeBSD__) && defined(USE_ACCEPTFILTER)
|
||||||
struct accept_filter_arg filt = {"httpready", ""};
|
struct accept_filter_arg filt = {"httpready", ""};
|
||||||
if (setsockopt(sock, SOL_SOCKET, SO_ACCEPTFILTER,
|
if (setsockopt(sock, SOL_SOCKET, SO_ACCEPTFILTER,
|
||||||
&filt, sizeof(filt)) == -1)
|
&filt, sizeof(filt)) == -1)
|
||||||
fprintf(stderr, "Cannot enable acceptfilter: %s\n",
|
fprintf(stderr, "cannot enable acceptfilter: %s\n",
|
||||||
strerror(errno));
|
strerror(errno));
|
||||||
|
else
|
||||||
|
printf("enabled acceptfilter\n");
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -877,7 +880,7 @@ static void init_sockin(void)
|
|||||||
sizeof(struct sockaddr)) == -1)
|
sizeof(struct sockaddr)) == -1)
|
||||||
err(1, "bind(port %u)", bindport);
|
err(1, "bind(port %u)", bindport);
|
||||||
|
|
||||||
debugf("listening on %s:%u\n", inet_ntoa(addrin.sin_addr), bindport);
|
printf("listening on %s:%u\n", inet_ntoa(addrin.sin_addr), bindport);
|
||||||
|
|
||||||
/* listen on socket */
|
/* listen on socket */
|
||||||
if (listen(sockin, max_connections) == -1)
|
if (listen(sockin, max_connections) == -1)
|
||||||
@ -1925,7 +1928,8 @@ static void poll_recv_request(struct connection *conn)
|
|||||||
debugf("poll_recv_request(%d) got %d bytes\n", conn->socket, (int)recvd);
|
debugf("poll_recv_request(%d) got %d bytes\n", conn->socket, (int)recvd);
|
||||||
if (recvd <= 0)
|
if (recvd <= 0)
|
||||||
{
|
{
|
||||||
if (recvd == -1) debugf("recv() error: %s\n", strerror(errno));
|
if (recvd == -1)
|
||||||
|
debugf("recv(%d) error: %s\n", conn->socket, strerror(errno));
|
||||||
conn->conn_close = 1;
|
conn->conn_close = 1;
|
||||||
conn->state = DONE;
|
conn->state = DONE;
|
||||||
return;
|
return;
|
||||||
@ -1972,7 +1976,8 @@ static void poll_send_header(struct connection *conn)
|
|||||||
/* handle any errors (-1) or closure (0) in send() */
|
/* handle any errors (-1) or closure (0) in send() */
|
||||||
if (sent < 1)
|
if (sent < 1)
|
||||||
{
|
{
|
||||||
if (sent == -1) debugf("send() error: %s\n", strerror(errno));
|
if (sent == -1)
|
||||||
|
debugf("send(%d) error: %s\n", conn->socket, strerror(errno));
|
||||||
conn->conn_close = 1;
|
conn->conn_close = 1;
|
||||||
conn->state = DONE;
|
conn->state = DONE;
|
||||||
return;
|
return;
|
||||||
@ -2179,7 +2184,7 @@ static void httpd_poll(void)
|
|||||||
}
|
}
|
||||||
#undef MAX_FD_SET
|
#undef MAX_FD_SET
|
||||||
|
|
||||||
debugf("select("), fflush(stdout);
|
/* -select- */
|
||||||
select_ret = select(max_fd + 1, &recv_set, &send_set, NULL,
|
select_ret = select(max_fd + 1, &recv_set, &send_set, NULL,
|
||||||
(bother_with_timeout) ? &timeout : NULL);
|
(bother_with_timeout) ? &timeout : NULL);
|
||||||
if (select_ret == 0)
|
if (select_ret == 0)
|
||||||
@ -2190,7 +2195,6 @@ static void httpd_poll(void)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (select_ret == -1) err(1, "select()");
|
if (select_ret == -1) err(1, "select()");
|
||||||
debugf(")\n");
|
|
||||||
|
|
||||||
/* poll connections that select() says need attention */
|
/* poll connections that select() says need attention */
|
||||||
if (FD_ISSET(sockin, &recv_set)) accept_connection();
|
if (FD_ISSET(sockin, &recv_set)) accept_connection();
|
||||||
@ -2283,18 +2287,18 @@ int main(int argc, char *argv[])
|
|||||||
if (want_chroot)
|
if (want_chroot)
|
||||||
{
|
{
|
||||||
if (chroot(wwwroot) == -1) err(1, "chroot(\"%s\")", wwwroot);
|
if (chroot(wwwroot) == -1) err(1, "chroot(\"%s\")", wwwroot);
|
||||||
debugf("chrooted to `%s'\n", wwwroot);
|
printf("chrooted to `%s'\n", wwwroot);
|
||||||
wwwroot[0] = '\0'; /* empty string */
|
wwwroot[0] = '\0'; /* empty string */
|
||||||
}
|
}
|
||||||
if (drop_gid != INVALID_GID)
|
if (drop_gid != INVALID_GID)
|
||||||
{
|
{
|
||||||
if (setgid(drop_gid) == -1) err(1, "setgid(%d)", drop_gid);
|
if (setgid(drop_gid) == -1) err(1, "setgid(%d)", drop_gid);
|
||||||
debugf("set gid to %d\n", drop_gid);
|
printf("set gid to %d\n", drop_gid);
|
||||||
}
|
}
|
||||||
if (drop_uid != INVALID_UID)
|
if (drop_uid != INVALID_UID)
|
||||||
{
|
{
|
||||||
if (setuid(drop_uid) == -1) err(1, "setuid(%d)", drop_uid);
|
if (setuid(drop_uid) == -1) err(1, "setuid(%d)", drop_uid);
|
||||||
debugf("set uid to %d\n", drop_uid);
|
printf("set uid to %d\n", drop_uid);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (;;) httpd_poll();
|
for (;;) httpd_poll();
|
||||||
|
Loading…
Reference in New Issue
Block a user