diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/acl.c | 41 | ||||
-rw-r--r-- | src/anonymous.c | 11 | ||||
-rw-r--r-- | src/buffer.c | 49 | ||||
-rw-r--r-- | src/buffer.h | 4 | ||||
-rw-r--r-- | src/conns.c | 8 | ||||
-rw-r--r-- | src/dnscache.c | 21 | ||||
-rw-r--r-- | src/filter.c | 31 | ||||
-rw-r--r-- | src/log.c | 15 | ||||
-rw-r--r-- | src/log.h | 4 | ||||
-rw-r--r-- | src/reqs.c | 254 | ||||
-rw-r--r-- | src/stats.c | 43 | ||||
-rw-r--r-- | src/stats.h | 12 | ||||
-rw-r--r-- | src/ternary.c | 54 | ||||
-rw-r--r-- | src/ternary.h | 6 | ||||
-rw-r--r-- | src/thread.c | 59 | ||||
-rw-r--r-- | src/tinyproxy.c | 126 | ||||
-rw-r--r-- | src/tinyproxy.h | 4 | ||||
-rw-r--r-- | src/utils.c | 114 | ||||
-rw-r--r-- | src/utils.h | 17 |
19 files changed, 541 insertions, 332 deletions
@@ -1,4 +1,4 @@ -/* $Id: acl.c,v 1.10 2001-11-03 06:08:37 rjkaes Exp $ +/* $Id: acl.c,v 1.11 2001-11-22 00:31:10 rjkaes Exp $ * * This system handles Access Control for use of this daemon. A list of * domains, or IP addresses (including IP blocks) are stored in a list @@ -38,7 +38,8 @@ static struct acl_s *access_list = NULL; * Take a netmask number (between 0 and 32) and returns a network ordered * value for comparison. Somebody please clean this up. :) */ -static in_addr_t make_netmask(int netmask_num) +static in_addr_t +make_netmask(int netmask_num) { static in_addr_t netmasks[] = { 0x00000000, 0x80000000, 0xc0000000, 0xe0000000, @@ -66,7 +67,8 @@ static in_addr_t make_netmask(int netmask_num) * -1 on failure * 0 otherwise. */ -int insert_acl(char *location, acl_access_t access_type) +int +insert_acl(char *location, acl_access_t access_type) { size_t i; struct acl_s **rev_acl_ptr, *acl_ptr, *new_acl_ptr; @@ -81,7 +83,7 @@ int insert_acl(char *location, acl_access_t access_type) /* * Numeric strings can not contain letters, so test on it. */ - if (isalpha((unsigned char)location[i])) { + if (isalpha((unsigned char) location[i])) { break; } } @@ -99,9 +101,9 @@ int insert_acl(char *location, acl_access_t access_type) if (!new_acl_ptr) { return -1; } - + new_acl_ptr->acl_access = access_type; - + if (location[i] == '\0') { DEBUG2("ACL \"%s\" is a number.", location); @@ -115,7 +117,8 @@ int insert_acl(char *location, acl_access_t access_type) *nptr++ = '\0'; new_acl_ptr->netmask = strtol(nptr, NULL, 10); - if (new_acl_ptr->netmask < 0 || new_acl_ptr->netmask > 32) { + if (new_acl_ptr->netmask < 0 + || new_acl_ptr->netmask > 32) { safefree(new_acl_ptr); return -1; } @@ -137,7 +140,7 @@ int insert_acl(char *location, acl_access_t access_type) *rev_acl_ptr = new_acl_ptr; new_acl_ptr->next = acl_ptr; - + return 0; } @@ -149,7 +152,8 @@ int insert_acl(char *location, acl_access_t access_type) * 0 if denied * -1 if error */ -int check_acl(int fd) +int +check_acl(int fd) { struct acl_s *aclptr; char ip_address[PEER_IP_LENGTH]; @@ -180,9 +184,13 @@ int check_acl(int fd) continue; } - if (strcasecmp(string_address + (test_length - match_length), aclptr->location) == 0) { + if (strcasecmp + (string_address + (test_length - match_length), + aclptr->location) == 0) { if (aclptr->acl_access == ACL_DENY) { - log_message(LOG_NOTICE, "Unauthorized access from \"%s\"", string_address); + log_message(LOG_NOTICE, + "Unauthorized access from \"%s\"", + string_address); return 0; } else { return 1; @@ -202,9 +210,12 @@ int check_acl(int fd) netmask_addr = make_netmask(aclptr->netmask); - if ((test_addr.s_addr & netmask_addr) == (match_addr.s_addr & netmask_addr)) { + if ((test_addr.s_addr & netmask_addr) == + (match_addr.s_addr & netmask_addr)) { if (aclptr->acl_access == ACL_DENY) { - log_message(LOG_NOTICE, "Unauthorized access from [%s].", ip_address); + log_message(LOG_NOTICE, + "Unauthorized access from [%s].", + ip_address); return 0; } else { return 1; @@ -218,10 +229,10 @@ int check_acl(int fd) aclptr = aclptr->next; } - /* * Deny all connections by default. */ - log_message(LOG_NOTICE, "Unauthorized connection from \"%s\" [%s].", string_address, ip_address); + log_message(LOG_NOTICE, "Unauthorized connection from \"%s\" [%s].", + string_address, ip_address); return 0; } diff --git a/src/anonymous.c b/src/anonymous.c index 24ebd11..42f1e6e 100644 --- a/src/anonymous.c +++ b/src/anonymous.c @@ -1,4 +1,4 @@ -/* $Id: anonymous.c,v 1.8 2001-11-05 15:24:42 rjkaes Exp $ +/* $Id: anonymous.c,v 1.9 2001-11-22 00:31:10 rjkaes Exp $ * * Handles insertion and searches for headers which should be let through when * the anonymous feature is turned on. The headers are stored in a Ternary @@ -32,12 +32,14 @@ static TERNARY anonymous_tree = 0; */ static short int anonymous_is_enabled = 0; -inline short int is_anonymous_enabled(void) +inline short int +is_anonymous_enabled(void) { return anonymous_is_enabled; } -int anonymous_search(char *s) +int +anonymous_search(char *s) { assert(s != NULL); assert(anonymous_is_enabled == 1); @@ -46,7 +48,8 @@ int anonymous_search(char *s) return ternary_search(anonymous_tree, s, NULL); } -int anonymous_insert(char *s) +int +anonymous_insert(char *s) { assert(s != NULL); diff --git a/src/buffer.c b/src/buffer.c index bbb12a0..cfcdada 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -1,4 +1,4 @@ -/* $Id: buffer.c,v 1.15 2001-11-05 15:23:05 rjkaes Exp $ +/* $Id: buffer.c,v 1.16 2001-11-22 00:31:10 rjkaes Exp $ * * The buffer used in each connection is a linked list of lines. As the lines * are read in and written out the buffer expands and contracts. Basically, @@ -33,8 +33,8 @@ struct bufline_s { unsigned char *string; /* the actual string of data */ struct bufline_s *next; /* pointer to next in linked list */ - size_t length; /* length of the string of data */ - size_t pos; /* start sending from this offset */ + size_t length; /* length of the string of data */ + size_t pos; /* start sending from this offset */ }; /* @@ -43,7 +43,8 @@ struct bufline_s { * pointer into the structure. In other words, when you insert data into the * buffer, the buffer becomes responsible for freeing it. */ -static struct bufline_s *makenewline(unsigned char *data, size_t length) +static struct bufline_s * +makenewline(unsigned char *data, size_t length) { struct bufline_s *newline; @@ -66,7 +67,8 @@ static struct bufline_s *makenewline(unsigned char *data, size_t length) /* * Free the allocated buffer line */ -static void free_line(struct bufline_s *line) +static void +free_line(struct bufline_s *line) { assert(line != NULL); @@ -82,7 +84,8 @@ static void free_line(struct bufline_s *line) /* * Create a new buffer */ -struct buffer_s *new_buffer(void) +struct buffer_s * +new_buffer(void) { struct buffer_s *buffptr; @@ -103,7 +106,8 @@ struct buffer_s *new_buffer(void) /* * Delete all the lines in the buffer and the buffer itself */ -void delete_buffer(struct buffer_s *buffptr) +void +delete_buffer(struct buffer_s *buffptr) { struct bufline_s *next; @@ -121,8 +125,8 @@ void delete_buffer(struct buffer_s *buffptr) /* * Push a new line on to the end of the buffer */ -static int add_to_buffer(struct buffer_s *buffptr, unsigned char *data, - size_t length) +static int +add_to_buffer(struct buffer_s *buffptr, unsigned char *data, size_t length) { struct bufline_s *newline; @@ -158,7 +162,8 @@ static int add_to_buffer(struct buffer_s *buffptr, unsigned char *data, /* * Remove the first line from the top of the buffer */ -static struct bufline_s *remove_from_buffer(struct buffer_s *buffptr) +static struct bufline_s * +remove_from_buffer(struct buffer_s *buffptr) { struct bufline_s *line; @@ -178,7 +183,8 @@ static struct bufline_s *remove_from_buffer(struct buffer_s *buffptr) * Takes a connection and returns the number of bytes read. */ #define READ_BUFFER_SIZE (1024 * 2) -ssize_t readbuff(int fd, struct buffer_s *buffptr) +ssize_t +readbuff(int fd, struct buffer_s * buffptr) { ssize_t bytesin; unsigned char *buffer; @@ -204,7 +210,8 @@ ssize_t readbuff(int fd, struct buffer_s *buffptr) } if (add_to_buffer(buffptr, newbuffer, bytesin) < 0) { - log_message(LOG_ERR, "readbuff: add_to_buffer() error."); + log_message(LOG_ERR, + "readbuff: add_to_buffer() error."); return -1; } @@ -226,7 +233,9 @@ ssize_t readbuff(int fd, struct buffer_s *buffptr) case EINTR: return 0; default: - log_message(LOG_ERR, "readbuff: recv() error \"%s\" on file descriptor %d", strerror(errno), fd); + log_message(LOG_ERR, + "readbuff: recv() error \"%s\" on file descriptor %d", + strerror(errno), fd); return -1; } } @@ -237,7 +246,8 @@ ssize_t readbuff(int fd, struct buffer_s *buffptr) * Write the bytes in the buffer to the socket. * Takes a connection and returns the number of bytes written. */ -ssize_t writebuff(int fd, struct buffer_s *buffptr) +ssize_t +writebuff(int fd, struct buffer_s * buffptr) { ssize_t bytessent; struct bufline_s *line; @@ -252,7 +262,8 @@ ssize_t writebuff(int fd, struct buffer_s *buffptr) assert(BUFFER_HEAD(buffptr) != NULL); line = BUFFER_HEAD(buffptr); - bytessent = write(fd, line->string + line->pos, line->length - line->pos); + bytessent = + write(fd, line->string + line->pos, line->length - line->pos); if (bytessent >= 0) { /* bytes sent, adjust buffer */ @@ -273,10 +284,14 @@ ssize_t writebuff(int fd, struct buffer_s *buffptr) return 0; case ENOBUFS: case ENOMEM: - log_message(LOG_ERR, "writebuff: write() error [NOBUFS/NOMEM] \"%s\" on file descriptor %d", strerror(errno), fd); + log_message(LOG_ERR, + "writebuff: write() error [NOBUFS/NOMEM] \"%s\" on file descriptor %d", + strerror(errno), fd); return 0; default: - log_message(LOG_ERR, "writebuff: write() error \"%s\" on file descriptor %d", strerror(errno), fd); + log_message(LOG_ERR, + "writebuff: write() error \"%s\" on file descriptor %d", + strerror(errno), fd); return -1; } } diff --git a/src/buffer.h b/src/buffer.h index 28a088e..825f643 100644 --- a/src/buffer.h +++ b/src/buffer.h @@ -1,4 +1,4 @@ -/* $Id: buffer.h,v 1.5 2001-11-05 15:23:05 rjkaes Exp $ +/* $Id: buffer.h,v 1.6 2001-11-22 00:31:10 rjkaes Exp $ * * See 'buffer.c' for a detailed description. * @@ -25,7 +25,7 @@ struct buffer_s { struct bufline_s *head; /* top of the buffer */ struct bufline_s *tail; /* bottom of the buffer */ - size_t size; /* total size of the buffer */ + size_t size; /* total size of the buffer */ }; /* diff --git a/src/conns.c b/src/conns.c index 8c0767a..d47701c 100644 --- a/src/conns.c +++ b/src/conns.c @@ -1,4 +1,4 @@ -/* $Id: conns.c,v 1.4 2001-11-21 01:00:08 rjkaes Exp $ +/* $Id: conns.c,v 1.5 2001-11-22 00:31:10 rjkaes Exp $ * * Create and free the connection structure. One day there could be * other connnection related tasks put here, but for now the header @@ -25,7 +25,8 @@ #include "stats.h" #include "utils.h" -void initialize_conn(struct conn_s *connptr) +void +initialize_conn(struct conn_s *connptr) { connptr->client_fd = connptr->server_fd = -1; connptr->cbuffer = new_buffer(); @@ -42,7 +43,8 @@ void initialize_conn(struct conn_s *connptr) update_stats(STAT_OPEN); } -void destroy_conn(struct conn_s *connptr) +void +destroy_conn(struct conn_s *connptr) { if (connptr->client_fd != -1) close(connptr->client_fd); diff --git a/src/dnscache.c b/src/dnscache.c index 13a178b..a711c91 100644 --- a/src/dnscache.c +++ b/src/dnscache.c @@ -1,4 +1,4 @@ -/* $Id: dnscache.c,v 1.17 2001-10-25 17:27:39 rjkaes Exp $ +/* $Id: dnscache.c,v 1.18 2001-11-22 00:31:10 rjkaes Exp $ * * This is a caching DNS system. When a host name is needed we look it up here * and see if there is already an answer for it. The domains are placed in a @@ -36,7 +36,7 @@ static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; #define UNLOCK() pthread_mutex_unlock(&mutex); #define DNSEXPIRE (5 * 60) -#define DNS_INSERT_LIMIT 10000 /* free the memory after inserts */ +#define DNS_INSERT_LIMIT 10000 /* free the memory after inserts */ struct dnscache_s { struct in_addr ipaddr; @@ -46,7 +46,8 @@ struct dnscache_s { static TERNARY dns_tree = -1; static unsigned int dns_insertions; -static int dns_lookup(struct in_addr *addr, char *domain) +static int +dns_lookup(struct in_addr *addr, char *domain) { int ret; struct dnscache_s *ptr; @@ -54,7 +55,7 @@ static int dns_lookup(struct in_addr *addr, char *domain) assert(addr != NULL); assert(domain != NULL); - ret = ternary_search(dns_tree, domain, (void *)&ptr); + ret = ternary_search(dns_tree, domain, (void *) &ptr); if (TE_ISERROR(ret) || difftime(time(NULL), ptr->expire) > DNSEXPIRE) { @@ -66,7 +67,8 @@ static int dns_lookup(struct in_addr *addr, char *domain) return 0; } -static int dns_insert(struct in_addr *addr, char *domain) +static int +dns_insert(struct in_addr *addr, char *domain) { struct dnscache_s *newptr; @@ -92,7 +94,8 @@ static int dns_insert(struct in_addr *addr, char *domain) return 0; } -int dnscache(struct in_addr *addr, char *domain) +int +dnscache(struct in_addr *addr, char *domain) { struct hostent *resolv; @@ -107,7 +110,7 @@ int dnscache(struct in_addr *addr, char *domain) dns_insertions = 0; } - if (inet_aton(domain, (struct in_addr *)addr) != 0) { + if (inet_aton(domain, (struct in_addr *) addr) != 0) { UNLOCK(); return 0; } @@ -130,7 +133,9 @@ int dnscache(struct in_addr *addr, char *domain) dns_insertions++; if (dns_insertions > DNS_INSERT_LIMIT) { - log_message(LOG_INFO, "DNS Insertion limit reached (%u). Rebuilding cache.", dns_insertions); + log_message(LOG_INFO, + "DNS Insertion limit reached (%u). Rebuilding cache.", + dns_insertions); ternary_destroy(dns_tree, free); dns_tree = ternary_new(); dns_insertions = 0; diff --git a/src/filter.c b/src/filter.c index a1f5ed8..a580ebc 100644 --- a/src/filter.c +++ b/src/filter.c @@ -1,4 +1,4 @@ -/* $Id: filter.c,v 1.7 2001-10-25 17:27:39 rjkaes Exp $ +/* $Id: filter.c,v 1.8 2001-11-22 00:31:10 rjkaes Exp $ * * Copyright (c) 1999 George Talusan (gstalusan@uwaterloo.ca) * @@ -30,12 +30,12 @@ struct filter_list { regex_t *cpat; }; - static struct filter_list *fl = NULL; static int already_init = 0; /* initializes a linked list of strings containing hosts to be filtered */ -void filter_init(void) +void +filter_init(void) { FILE *fd; struct filter_list *p; @@ -50,22 +50,29 @@ void filter_init(void) while (fgets(buf, 255, fd)) { s = buf; if (!p) /* head of list */ - fl = p = safecalloc(1, sizeof(struct filter_list)); + fl = p = + safecalloc(1, + sizeof(struct + filter_list)); else { /* next entry */ - p->next = safecalloc(1, sizeof(struct filter_list)); + p->next = + safecalloc(1, + sizeof(struct + filter_list)); p = p->next; } /* replace first whitespace with \0 */ while (*s++) - if (isspace((unsigned char)*s)) + if (isspace((unsigned char) *s)) *s = '\0'; p->pat = strdup(buf); p->cpat = safemalloc(sizeof(regex_t)); - if ((err = regcomp(p->cpat, p->pat, REG_NEWLINE | REG_NOSUB)) != 0) { - fprintf(stderr, - "Bad regex in %s: %s\n", + if ((err = + regcomp(p->cpat, p->pat, + REG_NEWLINE | REG_NOSUB)) != 0) { + fprintf(stderr, "Bad regex in %s: %s\n", config.filter, p->pat); exit(EX_DATAERR); } @@ -77,7 +84,8 @@ void filter_init(void) } /* unlink the list */ -void filter_destroy(void) +void +filter_destroy(void) { struct filter_list *p, *q; @@ -95,7 +103,8 @@ void filter_destroy(void) } /* returns 0 if host is not an element of filter list, non-zero otherwise */ -int filter_url(char *host) +int +filter_url(char *host) { struct filter_list *p; char *s, *port; @@ -1,4 +1,4 @@ -/* $Id: log.c,v 1.15 2001-10-25 17:27:39 rjkaes Exp $ +/* $Id: log.c,v 1.16 2001-11-22 00:31:10 rjkaes Exp $ * * Logs the various messages which tinyproxy produces to either a log file or * the syslog daemon. Not much to it... @@ -44,7 +44,8 @@ static short int log_level = LOG_ERR; /* * Set the log level for writing to the log file. */ -void set_log_level(short int level) +void +set_log_level(short int level) { log_level = level; } @@ -52,7 +53,8 @@ void set_log_level(short int level) /* * This routine logs messages to either the log file or the syslog function. */ -void log_message(short int level, char *fmt, ...) +void +log_message(short int level, char *fmt, ...) { va_list args; time_t nowtime; @@ -74,12 +76,11 @@ void log_message(short int level, char *fmt, ...) if (level > LOG_INFO && level != LOG_CONN) return; } else if (level > log_level) - return; + return; #endif - #ifdef HAVE_SYSLOG_H - if (config.syslog && level == LOG_CONN) + if (config.syslog && level == LOG_CONN) level = LOG_INFO; #endif @@ -104,7 +105,7 @@ void log_message(short int level, char *fmt, ...) cf = stderr; fprintf(cf, "%-9s %s [%ld]: ", syslog_level[level], - time_string, (long int)getpid()); + time_string, (long int) getpid()); vfprintf(cf, fmt, args); fprintf(cf, "\n"); fflush(cf); @@ -1,4 +1,4 @@ -/* $Id: log.h,v 1.7 2001-08-26 21:10:04 rjkaes Exp $ +/* $Id: log.h,v 1.8 2001-11-22 00:31:10 rjkaes Exp $ * * See 'log.c' for a detailed description. * @@ -84,7 +84,7 @@ # define LOG_DEBUG 7 #endif -#define LOG_CONN 8 /* extra to log connections without the INFO stuff */ +#define LOG_CONN 8 /* extra to log connections without the INFO stuff */ /* * Use this for debugging. The format is specific: @@ -1,4 +1,4 @@ -/* $Id: reqs.c,v 1.40 2001-11-22 00:19:45 rjkaes Exp $ +/* $Id: reqs.c,v 1.41 2001-11-22 00:31:10 rjkaes Exp $ * * This is where all the work in tinyproxy is actually done. Incoming * connections have a new thread created for them. The thread then @@ -46,7 +46,8 @@ /* * Remove any new lines or carriage returns from the end of a string. */ -static inline void trim(char *string, unsigned int len) +static inline void +trim(char *string, unsigned int len) { char *ptr; @@ -71,14 +72,17 @@ static inline void trim(char *string, unsigned int len) * connections. The request line is allocated from the heap, but it must * be freed in another function. */ -static char *read_request_line(struct conn_s *connptr) +static char * +read_request_line(struct conn_s *connptr) { char *request_buffer; size_t len; len = readline(connptr->client_fd, &request_buffer); if (len <= 0) { - log_message(LOG_ERR, "read_request_line: Client (file descriptor: %d) closed socket before read.", connptr->client_fd); + log_message(LOG_ERR, + "read_request_line: Client (file descriptor: %d) closed socket before read.", + connptr->client_fd); safefree(request_buffer); return NULL; } @@ -106,7 +110,8 @@ struct request_s { int port; }; -static void free_request_struct(struct request_s *request) +static void +free_request_struct(struct request_s *request) { if (!request) return; @@ -123,7 +128,8 @@ static void free_request_struct(struct request_s *request) /* * Pull the information out of the URL line. */ -static int extract_http_url(const char *url, struct request_s *request) +static int +extract_http_url(const char *url, struct request_s *request) { request->host = safemalloc(strlen(url) + 1); request->path = safemalloc(strlen(url) + 1); @@ -135,11 +141,14 @@ static int extract_http_url(const char *url, struct request_s *request) return -1; } - if (sscanf(url, "http://%[^:/]:%d%s", request->host, &request->port, request->path) == 3) - ; - else if (sscanf(url, "http://%[^/]%s", request->host, request->path) == 2) + if (sscanf + (url, "http://%[^:/]:%d%s", request->host, &request->port, + request->path) == 3) ; + else if (sscanf(url, "http://%[^/]%s", request->host, request->path) == + 2) request->port = 80; - else if (sscanf(url, "http://%[^:/]:%d", request->host, &request->port) == 2) + else if (sscanf(url, "http://%[^:/]:%d", request->host, &request->port) + == 2) strcpy(request->path, "/"); else if (sscanf(url, "http://%[^/]", request->host) == 1) { request->port = 80; @@ -149,7 +158,7 @@ static int extract_http_url(const char *url, struct request_s *request) safefree(request->host); safefree(request->path); - + return -1; } @@ -159,14 +168,14 @@ static int extract_http_url(const char *url, struct request_s *request) /* * Extract the URL from a SSL connection. */ -static int extract_ssl_url(const char *url, struct request_s *request) +static int +extract_ssl_url(const char *url, struct request_s *request) { request->host = safemalloc(strlen(url) + 1); if (!request->host) return -1; - if (sscanf(url, "%[^:]:%d", request->host, &request->port) == 2) - ; + if (sscanf(url, "%[^:]:%d", request->host, &request->port) == 2) ; else if (sscanf(url, "%s", request->host) == 1) request->port = 443; else { @@ -182,17 +191,19 @@ static int extract_ssl_url(const char *url, struct request_s *request) /* * Create a connection for HTTP connections. */ -static int establish_http_connection(struct conn_s *connptr, - struct request_s *request) +static int +establish_http_connection(struct conn_s *connptr, struct request_s *request) { /* * Send the request line */ - if (safe_write(connptr->server_fd, request->method, strlen(request->method)) < 0) + if (safe_write + (connptr->server_fd, request->method, strlen(request->method)) < 0) return -1; if (safe_write(connptr->server_fd, " ", 1) < 0) return -1; - if (safe_write(connptr->server_fd, request->path, strlen(request->path)) < 0) + if (safe_write(connptr->server_fd, request->path, strlen(request->path)) + < 0) return -1; if (safe_write(connptr->server_fd, " ", 1) < 0) return -1; @@ -204,7 +215,8 @@ static int establish_http_connection(struct conn_s *connptr, */ if (safe_write(connptr->server_fd, "Host: ", 6) < 0) return -1; - if (safe_write(connptr->server_fd, request->host, strlen(request->host)) < 0) + if (safe_write(connptr->server_fd, request->host, strlen(request->host)) + < 0) return -1; if (safe_write(connptr->server_fd, "\r\n", 2) < 0) @@ -230,12 +242,16 @@ static int establish_http_connection(struct conn_s *connptr, * Send the appropriate response to the client to establish a SSL * connection. */ -static inline int send_ssl_response(struct conn_s *connptr) +static inline int +send_ssl_response(struct conn_s *connptr) { - if (safe_write(connptr->client_fd, SSL_CONNECTION_RESPONSE, strlen(SSL_CONNECTION_RESPONSE)) < 0) + if (safe_write + (connptr->client_fd, SSL_CONNECTION_RESPONSE, + strlen(SSL_CONNECTION_RESPONSE)) < 0) return -1; - if (safe_write(connptr->client_fd, PROXY_AGENT, strlen(PROXY_AGENT)) < 0) + if (safe_write(connptr->client_fd, PROXY_AGENT, strlen(PROXY_AGENT)) < + 0) return -1; if (safe_write(connptr->client_fd, "\r\n", 2) < 0) @@ -248,8 +264,8 @@ static inline int send_ssl_response(struct conn_s *connptr) * Break the request line apart and figure out where to connect and * build a new request line. Finally connect to the remote server. */ -static struct request_s *process_request(struct conn_s *connptr, - char *request_line) +static struct request_s * +process_request(struct conn_s *connptr, char *request_line) { char *url; struct request_s *request; @@ -276,9 +292,13 @@ static struct request_s *process_request(struct conn_s *connptr, return NULL; } - ret = sscanf(request_line, "%[^ ] %[^ ] %[^ ]", request->method, url, request->protocol); + ret = + sscanf(request_line, "%[^ ] %[^ ] %[^ ]", request->method, url, + request->protocol); if (ret < 2) { - log_message(LOG_ERR, "process_request: Bad Request on file descriptor %d", connptr->client_fd); + log_message(LOG_ERR, + "process_request: Bad Request on file descriptor %d", + connptr->client_fd); httperr(connptr, 400, "Bad Request. No request found."); safefree(url); @@ -290,7 +310,9 @@ static struct request_s *process_request(struct conn_s *connptr, } if (!url) { - log_message(LOG_ERR, "process_request: Null URL on file descriptor %d", connptr->client_fd); + log_message(LOG_ERR, + "process_request: Null URL on file descriptor %d", + connptr->client_fd); httperr(connptr, 400, "Bad Request. Null URL."); safefree(url); @@ -304,8 +326,9 @@ static struct request_s *process_request(struct conn_s *connptr, memcpy(url, "http", 4); if (extract_http_url(url, request) < 0) { - httperr(connptr, 400, "Bad Request. Could not parse URL."); - + httperr(connptr, 400, + "Bad Request. Could not parse URL."); + safefree(url); free_request_struct(request); @@ -314,7 +337,8 @@ static struct request_s *process_request(struct conn_s *connptr, connptr->ssl = FALSE; } else if (strcmp(request->method, "CONNECT") == 0) { if (extract_ssl_url(url, request) < 0) { - httperr(connptr, 400, "Bad Request. Could not parse URL."); + httperr(connptr, 400, + "Bad Request. Could not parse URL."); safefree(url); free_request_struct(request); @@ -323,7 +347,9 @@ static struct request_s *process_request(struct conn_s *connptr, } connptr->ssl = TRUE; } else { - log_message(LOG_ERR, "process_request: Unknown URL type on file descriptor %d", connptr->client_fd); + log_message(LOG_ERR, + "process_request: Unknown URL type on file descriptor %d", + connptr->client_fd); httperr(connptr, 400, "Bad Request. Unknown URL type."); safefree(url); @@ -342,8 +368,11 @@ static struct request_s *process_request(struct conn_s *connptr, if (filter_url(request->host)) { update_stats(STAT_DENIED); - log_message(LOG_NOTICE, "Proxying refused on filtered domain \"%s\"", request->host); - httperr(connptr, 404, "Connection to filtered domain is now allowed."); + log_message(LOG_NOTICE, + "Proxying refused on filtered domain \"%s\"", + request->host); + httperr(connptr, 404, + "Connection to filtered domain is now allowed."); free_request_struct(request); @@ -369,7 +398,8 @@ static struct request_s *process_request(struct conn_s *connptr, */ if (strncasecmp(request->protocol, "http", 4) == 0) { memcpy(request->protocol, "HTTP", 4); - sscanf(request->protocol, "HTTP/%hu.%hu", &connptr->protocol.major, &connptr->protocol.minor); + sscanf(request->protocol, "HTTP/%hu.%hu", + &connptr->protocol.major, &connptr->protocol.minor); } return request; @@ -380,7 +410,8 @@ static struct request_s *process_request(struct conn_s *connptr, * headers which are to be allowed. If the header is found in the * anonymous list return 0, otherwise return -1. */ -static int compare_header(char *line) +static int +compare_header(char *line) { char *buffer; char *ptr; @@ -392,7 +423,7 @@ static int compare_header(char *line) if ((buffer = safemalloc(ptr - line + 1)) == NULL) return -1; - memcpy(buffer, line, (size_t)(ptr - line)); + memcpy(buffer, line, (size_t) (ptr - line)); buffer[ptr - line] = '\0'; ret = anonymous_search(buffer); @@ -407,7 +438,8 @@ static int compare_header(char *line) * server headers can be processed. * - rjkaes */ -static int pull_client_data(struct conn_s *connptr, unsigned long int length) +static int +pull_client_data(struct conn_s *connptr, unsigned long int length) { char *buffer; ssize_t len; @@ -417,7 +449,9 @@ static int pull_client_data(struct conn_s *connptr, unsigned long int length) return -1; do { - len = safe_read(connptr->client_fd, buffer, min(MAXBUFFSIZE, length)); + len = + safe_read(connptr->client_fd, buffer, + min(MAXBUFFSIZE, length)); if (len <= 0) { safefree(buffer); @@ -444,7 +478,8 @@ static int pull_client_data(struct conn_s *connptr, unsigned long int length) * the server. * -rjkaes */ -static int add_xtinyproxy_header(struct conn_s *connptr) +static int +add_xtinyproxy_header(struct conn_s *connptr) { char ipaddr[PEER_IP_LENGTH]; char xtinyproxy[32]; @@ -464,7 +499,7 @@ static int add_xtinyproxy_header(struct conn_s *connptr) return 0; } -#endif /* XTINYPROXY */ +#endif /* XTINYPROXY */ /* * Here we loop through all the headers the client is sending. If we @@ -472,7 +507,8 @@ static int add_xtinyproxy_header(struct conn_s *connptr) * (plus a few which are required for various methods). * - rjkaes */ -static int process_client_headers(struct conn_s *connptr) +static int +process_client_headers(struct conn_s *connptr) { char *header; long content_length = -1; @@ -490,9 +526,10 @@ static int process_client_headers(struct conn_s *connptr) }; int i; - for ( ; ; ) { + for (;;) { if (readline(connptr->client_fd, &header) <= 0) { - DEBUG2("Client (file descriptor %d) closed connection.", connptr->client_fd); + DEBUG2("Client (file descriptor %d) closed connection.", + connptr->client_fd); return -1; } @@ -514,7 +551,6 @@ static int process_client_headers(struct conn_s *connptr) safefree(header); continue; } - #if 0 /* * If we find a Via header we need to append our information @@ -527,19 +563,25 @@ static int process_client_headers(struct conn_s *connptr) sent_via_header = 1; gethostname(hostname, sizeof(hostname)); - snprintf(via_header_buffer, sizeof(via_header_buffer), ", %hu.%hu %s (%s/%s)\r\n", connptr->protocol.major, connptr->protocol.minor, hostname, PACKAGE, VERSION); + snprintf(via_header_buffer, sizeof(via_header_buffer), + ", %hu.%hu %s (%s/%s)\r\n", + connptr->protocol.major, + connptr->protocol.minor, hostname, PACKAGE, + VERSION); trim(header, strlen(header)); strlcat(header, via_header_buffer, LINE_LENGTH); } -#endif +#endif /* * Don't send certain headers. */ for (i = 0; i < (sizeof(skipheaders) / sizeof(char *)); i++) { - if (strncasecmp(header, skipheaders[i], strlen(skipheaders[i])) == 0) { + if (strncasecmp + (header, skipheaders[i], + strlen(skipheaders[i])) == 0) { break; } } @@ -559,7 +601,9 @@ static int process_client_headers(struct conn_s *connptr) content_length = atol(content_ptr); } - if ((connptr->server_fd != -1) && safe_write(connptr->server_fd, header, strlen(header)) < 0) { + if ((connptr->server_fd != -1) + && safe_write(connptr->server_fd, header, + strlen(header)) < 0) { safefree(header); return -1; } @@ -576,22 +620,26 @@ static int process_client_headers(struct conn_s *connptr) char hostname[128]; gethostname(hostname, sizeof(hostname)); - snprintf(via_header_buffer, sizeof(via_header_buffer), "Via: %hu.%hu %s (%s/%s)\r\n", connptr->protocol.major, connptr->protocol.minor, hostname, PACKAGE, VERSION); + snprintf(via_header_buffer, sizeof(via_header_buffer), + "Via: %hu.%hu %s (%s/%s)\r\n", connptr->protocol.major, + connptr->protocol.minor, hostname, PACKAGE, VERSION); - safe_write(connptr->server_fd, via_header_buffer, strlen(via_header_buffer)); + safe_write(connptr->server_fd, via_header_buffer, + strlen(via_header_buffer)); } #endif if (!connptr->send_message && (connptr->upstream || !connptr->ssl)) { #ifdef XTINYPROXY_ENABLE - if (config.my_domain - && add_xtinyproxy_header(connptr) < 0) { + if (config.my_domain && add_xtinyproxy_header(connptr) < 0) { safefree(header); return -1; } -#endif /* XTINYPROXY */ +#endif /* XTINYPROXY */ - if ((connptr->server_fd != -1) && safe_write(connptr->server_fd, header, strlen(header)) < 0) { + if ((connptr->server_fd != -1) + && safe_write(connptr->server_fd, header, + strlen(header)) < 0) { safefree(header); return -1; } @@ -603,7 +651,8 @@ static int process_client_headers(struct conn_s *connptr) * Spin here pulling the data from the client. */ if (content_length >= 0) - return pull_client_data(connptr, (unsigned long int)content_length); + return pull_client_data(connptr, + (unsigned long int) content_length); else return 0; } @@ -612,13 +661,15 @@ static int process_client_headers(struct conn_s *connptr) * Loop through all the headers (including the response code) from the * server. */ -static int process_server_headers(struct conn_s *connptr) +static int +process_server_headers(struct conn_s *connptr) { char *header; - for ( ; ; ) { + for (;;) { if (readline(connptr->server_fd, &header) <= 0) { - DEBUG2("Server (file descriptor %d) closed connection.", connptr->server_fd); + DEBUG2("Server (file descriptor %d) closed connection.", + connptr->server_fd); return -1; } @@ -628,12 +679,13 @@ static int process_server_headers(struct conn_s *connptr) } if (!connptr->simple_req - && safe_write(connptr->client_fd, header, strlen(header)) < 0) { + && safe_write(connptr->client_fd, header, + strlen(header)) < 0) { safefree(header); return -1; } } - + if (!connptr->simple_req && safe_write(connptr->client_fd, header, strlen(header)) < 0) { safefree(header); @@ -652,7 +704,8 @@ static int process_server_headers(struct conn_s *connptr) * tinyproxy oh so long ago...) * - rjkaes */ -static void relay_connection(struct conn_s *connptr) +static void +relay_connection(struct conn_s *connptr) { fd_set rset, wset; struct timeval tv; @@ -666,11 +719,12 @@ static void relay_connection(struct conn_s *connptr) last_access = time(NULL); - for ( ; ; ) { + for (;;) { FD_ZERO(&rset); FD_ZERO(&wset); - tv.tv_sec = config.idletimeout - difftime(time(NULL), last_access); + tv.tv_sec = + config.idletimeout - difftime(time(NULL), last_access); tv.tv_usec = 0; if (BUFFER_SIZE(connptr->sbuffer) > 0) @@ -687,13 +741,18 @@ static void relay_connection(struct conn_s *connptr) if (ret == 0) { tdiff = difftime(time(NULL), last_access); if (tdiff > config.idletimeout) { - log_message(LOG_INFO, "Idle Timeout (after select) as %g > %u.", tdiff, config.idletimeout); + log_message(LOG_INFO, + "Idle Timeout (after select) as %g > %u.", + tdiff, config.idletimeout); return; } else { continue; } } else if (ret < 0) { - log_message(LOG_ERR, "relay_connection: select() error \"%s\". Closing connection (client_fd:%d, server_fd:%d)", strerror(errno), connptr->client_fd, connptr->server_fd); + log_message(LOG_ERR, + "relay_connection: select() error \"%s\". Closing connection (client_fd:%d, server_fd:%d)", + strerror(errno), connptr->client_fd, + connptr->server_fd); return; } else { /* @@ -701,7 +760,7 @@ static void relay_connection(struct conn_s *connptr) */ last_access = time(NULL); } - + if (FD_ISSET(connptr->server_fd, &rset) && readbuff(connptr->server_fd, connptr->sbuffer) < 0) { break; @@ -746,21 +805,25 @@ static void relay_connection(struct conn_s *connptr) /* * Establish a connection to the upstream proxy server. */ -static int connect_to_upstream(struct conn_s *connptr, - struct request_s *request) +static int +connect_to_upstream(struct conn_s *connptr, struct request_s *request) { char *combined_string; int len; - connptr->server_fd = opensock(config.upstream_name, config.upstream_port); + connptr->server_fd = + opensock(config.upstream_name, config.upstream_port); if (connptr->server_fd < 0) { - log_message(LOG_WARNING, "Could not connect to upstream proxy."); + log_message(LOG_WARNING, + "Could not connect to upstream proxy."); httperr(connptr, 404, "Unable to connect to upstream proxy."); return -1; } - log_message(LOG_CONN, "Established connection to upstream proxy \"%s\" using file descriptor %d.", config.upstream_name, connptr->server_fd); + log_message(LOG_CONN, + "Established connection to upstream proxy \"%s\" using file descriptor %d.", + config.upstream_name, connptr->server_fd); /* * We need to re-write the "path" part of the request so that we @@ -775,7 +838,8 @@ static int connect_to_upstream(struct conn_s *connptr, return -1; } - snprintf(combined_string, len, "%s:%d", request->host, request->port); + snprintf(combined_string, len, "%s:%d", request->host, + request->port); } else { len = strlen(request->host) + strlen(request->path) + 14; combined_string = safemalloc(len + 1); @@ -783,12 +847,13 @@ static int connect_to_upstream(struct conn_s *connptr, return -1; } - snprintf(combined_string, len, "http://%s:%d%s", request->host, request->port, request->path); + snprintf(combined_string, len, "http://%s:%d%s", request->host, + request->port, request->path); } safefree(request->path); request->path = combined_string; - + return establish_http_connection(connptr, request); } #endif @@ -802,7 +867,8 @@ static int connect_to_upstream(struct conn_s *connptr, * tinyproxy code, which was confusing, redundant. Hail progress. * - rjkaes */ -void handle_connection(int fd) +void +handle_connection(int fd) { struct conn_s *connptr; struct request_s *request = NULL; @@ -826,42 +892,46 @@ void handle_connection(int fd) if (check_acl(fd) <= 0) { update_stats(STAT_DENIED); - httperr(connptr, 403, "You do not have authorization for using this service."); + httperr(connptr, 403, + "You do not have authorization for using this service."); goto send_error; } - #ifdef TUNNEL_SUPPORT - /* + /* * If tunnel has been configured then redirect any connections to * it. I know I used GOTOs, but it seems to me to be the best way * of handling this situations. So sue me. :) - * - rjkaes + * - rjkaes */ if (config.tunnel_name && config.tunnel_port != -1) { log_message(LOG_INFO, "Redirecting to %s:%d", config.tunnel_name, config.tunnel_port); - connptr->server_fd = opensock(config.tunnel_name, config.tunnel_port); - + connptr->server_fd = + opensock(config.tunnel_name, config.tunnel_port); + if (connptr->server_fd < 0) { - log_message(LOG_WARNING, "Could not connect to tunnel."); + log_message(LOG_WARNING, + "Could not connect to tunnel."); httperr(connptr, 404, "Unable to connect to tunnel."); goto internal_proxy; } - log_message(LOG_INFO, "Established a connection to the tunnel \"%s\" using file descriptor %d.", config.tunnel_name, connptr->server_fd); + log_message(LOG_INFO, + "Established a connection to the tunnel \"%s\" using file descriptor %d.", + config.tunnel_name, connptr->server_fd); /* * I know GOTOs are evil, but duplicating the code is even * more evil. - * - rjkaes + * - rjkaes */ goto relay_proxy; } -#endif /* TUNNEL_SUPPORT */ +#endif /* TUNNEL_SUPPORT */ -internal_proxy: + internal_proxy: request_line = read_request_line(connptr); if (!request_line) { update_stats(STAT_BADCONN); @@ -880,7 +950,6 @@ internal_proxy: } goto send_error; } - #ifdef UPSTREAM_SUPPORT if (config.upstream_name && config.upstream_port != -1) { connptr->upstream = TRUE; @@ -895,7 +964,9 @@ internal_proxy: goto send_error; } - log_message(LOG_CONN, "Established connection to host \"%s\" using file descriptor %d.", request->host, connptr->server_fd); + log_message(LOG_CONN, + "Established connection to host \"%s\" using file descriptor %d.", + request->host, connptr->server_fd); if (!connptr->ssl) establish_http_connection(connptr, request); @@ -903,7 +974,7 @@ internal_proxy: } #endif -send_error: + send_error: free_request_struct(request); if (!connptr->simple_req) { @@ -929,14 +1000,15 @@ send_error: } } else { if (send_ssl_response(connptr) < 0) { - log_message(LOG_ERR, "handle_connection: Could not send SSL greeting to client."); + log_message(LOG_ERR, + "handle_connection: Could not send SSL greeting to client."); update_stats(STAT_BADCONN); destroy_conn(connptr); return; } } -relay_proxy: + relay_proxy: relay_connection(connptr); /* diff --git a/src/stats.c b/src/stats.c index 369d2ae..d41604a 100644 --- a/src/stats.c +++ b/src/stats.c @@ -1,4 +1,4 @@ -/* $Id: stats.c,v 1.6 2001-09-15 21:27:58 rjkaes Exp $ +/* $Id: stats.c,v 1.7 2001-11-22 00:31:10 rjkaes Exp $ * * This module handles the statistics for tinyproxy. There are only two * public API functions. The reason for the functions, rather than just a @@ -48,7 +48,8 @@ pthread_mutex_t stats_mutex = PTHREAD_MUTEX_INITIALIZER; /* * Initialise the statistics information to zero. */ -void init_stats(void) +void +init_stats(void) { LOCK(); memset(&stats, 0, sizeof(stats)); @@ -58,18 +59,19 @@ void init_stats(void) /* * Display the statics of the tinyproxy server. */ -int showstats(struct conn_s *connptr) +int +showstats(struct conn_s *connptr) { - static char *msg = \ - "<html><head><title>%s (%s) stats</title></head>\r\n" \ - "<body>\r\n" \ - "<center><h2>%s (%s) run-time statistics</h2></center><hr>\r\n" \ - "<blockquote>\r\n" \ - "Number of open connections: %lu<br>\r\n" \ - "Number of requests: %lu<br>\r\n" \ - "Number of bad connections: %lu<br>\r\n" \ - "Number of denied connections: %lu<br>\r\n" \ - "Number of refused connections due to high load: %lu\r\n" \ + static char *msg = + "<html><head><title>%s (%s) stats</title></head>\r\n" + "<body>\r\n" + "<center><h2>%s (%s) run-time statistics</h2></center><hr>\r\n" + "<blockquote>\r\n" + "Number of open connections: %lu<br>\r\n" + "Number of requests: %lu<br>\r\n" + "Number of bad connections: %lu<br>\r\n" + "Number of denied connections: %lu<br>\r\n" + "Number of refused connections due to high load: %lu\r\n" "</blockquote>\r\n</body></html>\r\n"; char *message_buffer; @@ -80,12 +82,10 @@ int showstats(struct conn_s *connptr) LOCK(); snprintf(message_buffer, MAXBUFFSIZE, msg, - PACKAGE, VERSION, PACKAGE, VERSION, - stats.num_open, - stats.num_reqs, - stats.num_badcons, - stats.num_denied, - stats.num_refused); + PACKAGE, VERSION, PACKAGE, VERSION, + stats.num_open, + stats.num_reqs, + stats.num_badcons, stats.num_denied, stats.num_refused); UNLOCK(); if (send_http_message(connptr, 200, "OK", message_buffer) < 0) { @@ -101,10 +101,11 @@ int showstats(struct conn_s *connptr) * Update the value of the statistics. The update_level is defined in * stats.h */ -int update_stats(status_t update_level) +int +update_stats(status_t update_level) { LOCK(); - switch(update_level) { + switch (update_level) { case STAT_BADCONN: stats.num_badcons++; break; diff --git a/src/stats.h b/src/stats.h index 26f5462..8c88dac 100644 --- a/src/stats.h +++ b/src/stats.h @@ -1,4 +1,4 @@ -/* $Id: stats.h,v 1.3 2001-10-25 16:58:50 rjkaes Exp $ +/* $Id: stats.h,v 1.4 2001-11-22 00:31:10 rjkaes Exp $ * * See 'stats.h' for a detailed description. * @@ -24,11 +24,11 @@ * Various logable statistics */ typedef enum { - STAT_BADCONN, /* bad connection, for unknown reason */ - STAT_OPEN, /* connection opened */ - STAT_CLOSE, /* connection closed */ - STAT_REFUSE, /* connection refused (to outside world) */ - STAT_DENIED /* connection denied to tinyproxy itself */ + STAT_BADCONN, /* bad connection, for unknown reason */ + STAT_OPEN, /* connection opened */ + STAT_CLOSE, /* connection closed */ + STAT_REFUSE, /* connection refused (to outside world) */ + STAT_DENIED /* connection denied to tinyproxy itself */ } status_t; /* diff --git a/src/ternary.c b/src/ternary.c index f4f0dc4..b6ff6c4 100644 --- a/src/ternary.c +++ b/src/ternary.c @@ -1,4 +1,4 @@ -/* $Id: ternary.c,v 1.11 2001-10-25 17:27:39 rjkaes Exp $ +/* $Id: ternary.c,v 1.12 2001-11-22 00:31:10 rjkaes Exp $ * * This module creates a Ternary Search Tree which can store both string * keys, and arbitrary data for each key. It works similar to a hash, and @@ -61,8 +61,8 @@ static Ttree *trees[MAXTREES]; /* the array of trees */ /* * nonce generator -- this MUST be non-zero _always_ */ -#define IOFFSET 0x1221 /* used to hide index number in token */ -#define NOFFSET 0x0502 /* initial nonce */ +#define IOFFSET 0x1221 /* used to hide index number in token */ +#define NOFFSET 0x0502 /* initial nonce */ static unsigned int noncectr = NOFFSET; /* @@ -82,10 +82,11 @@ char te_errbuf[256]; * (te_errbuf has disambiguating string) * Exceptions: none */ -static TERNARY create_token_ref(unsigned int ind) +static TERNARY +create_token_ref(unsigned int ind) { - unsigned int high; /* high 16 bits of token (index) */ - unsigned int low; /* low 16 bits of token (nonce) */ + unsigned int high; /* high 16 bits of token (index) */ + unsigned int low; /* low 16 bits of token (nonce) */ /* * Sanity check argument; called internally... @@ -118,7 +119,7 @@ static TERNARY create_token_ref(unsigned int ind) return TE_INTINCON; } - return (TERNARY)((high << 16) | low); + return (TERNARY) ((high << 16) | low); } /* @@ -136,9 +137,10 @@ static TERNARY create_token_ref(unsigned int ind) * (te_errbuf has disambiguating string) * EXCEPTIONS: none */ -static int read_token_ref(TERNARY tno) +static int +read_token_ref(TERNARY tno) { - unsigned int ind; /* index of current tree */ + unsigned int ind; /* index of current tree */ /* * Get the index number and check it for validity @@ -159,8 +161,8 @@ static int read_token_ref(TERNARY tno) */ if (trees[ind]->token != tno) { ERRBUF3("readbuf: token refers to old tree (new=%u, old=%u)", - (unsigned int)((trees[ind]->token) & 0xffff) - IOFFSET, - (unsigned int)(tno & 0xffff) - NOFFSET); + (unsigned int) ((trees[ind]->token) & 0xffff) - IOFFSET, + (unsigned int) (tno & 0xffff) - NOFFSET); return TE_BADTOKEN; } @@ -186,7 +188,8 @@ static int read_token_ref(TERNARY tno) * (te_errbuf has descriptive string) * Exceptions: none */ -TERNARY ternary_new(void) +TERNARY +ternary_new(void) { int cur; /* index of current tree */ TERNARY token; /* new token for current tree */ @@ -242,7 +245,8 @@ TERNARY ternary_new(void) * read_token_ref()). * Exceptions: none */ -int ternary_destroy(TERNARY tno, void (*freeptr)(void *)) +int +ternary_destroy(TERNARY tno, void (*freeptr) (void *)) { int cur; /* index of current tree */ unsigned int i, j; @@ -262,7 +266,7 @@ int ternary_destroy(TERNARY tno, void (*freeptr)(void *)) ptr = (trees[cur]->freearr[i] + j); if (ptr->splitchar == 0) if (freeptr) - (*freeptr)(ptr->eqkid); + (*freeptr) (ptr->eqkid); } safefree(trees[cur]->freearr[i]); } @@ -287,8 +291,9 @@ int ternary_destroy(TERNARY tno, void (*freeptr)(void *)) * TE_TOOFULL tree is full, so no new elements can be added. * Exceptions: none */ -int ternary_insert_replace(TERNARY tno, const char *s, void *data, - short int replace) +int +ternary_insert_replace(TERNARY tno, const char *s, void *data, + short int replace) { int cur; /* index of current tree */ Ttree *tree; /* pointer to tree structure */ @@ -301,7 +306,7 @@ int ternary_insert_replace(TERNARY tno, const char *s, void *data, */ if (TE_ISERROR(cur = read_token_ref(tno))) return cur; - + tree = trees[cur]; p = &(tree->tree_root); @@ -312,7 +317,7 @@ int ternary_insert_replace(TERNARY tno, const char *s, void *data, return TE_EXISTS; else { free(pp->eqkid); - pp->eqkid = (Tnode *)data; + pp->eqkid = (Tnode *) data; return TE_NONE; } } @@ -327,14 +332,14 @@ int ternary_insert_replace(TERNARY tno, const char *s, void *data, if (tree->bufn-- == 0) { tree->buf = safecalloc(BUFSIZE, sizeof(Tnode)); if (!tree->buf) { - ERRBUF("ternary_insert: malloc: no more memory"); + ERRBUF + ("ternary_insert: malloc: no more memory"); return TE_NOROOM; } if (tree->freen == BUFARRAY - 1) { ERRBUF3("ternary_insert: freen %u equals %u", - tree->freen, - BUFARRAY - 1); + tree->freen, BUFARRAY - 1); return TE_TOOFULL; } @@ -364,7 +369,8 @@ int ternary_insert_replace(TERNARY tno, const char *s, void *data, * Errors: * Exceptions: */ -int ternary_search(TERNARY tno, const char *s, void **data) +int +ternary_search(TERNARY tno, const char *s, void **data) { int cur; Tnode *p; @@ -384,7 +390,7 @@ int ternary_search(TERNARY tno, const char *s, void **data) else if (toupper(*s) == toupper(p->splitchar)) { if (*s++ == 0) { if (data) - *data = (void *)p->eqkid; + *data = (void *) p->eqkid; return TE_NONE; } p = p->eqkid; @@ -393,6 +399,6 @@ int ternary_search(TERNARY tno, const char *s, void **data) } if (data) - *data = (void *)NULL; + *data = (void *) NULL; return TE_EMPTY; } diff --git a/src/ternary.h b/src/ternary.h index 5fb6d51..38bfff6 100644 --- a/src/ternary.h +++ b/src/ternary.h @@ -1,4 +1,4 @@ -/* $Id: ternary.h,v 1.3 2001-08-30 16:52:09 rjkaes Exp $ +/* $Id: ternary.h,v 1.4 2001-11-22 00:31:10 rjkaes Exp $ * * See 'ternary.c' for a detailed description. * @@ -27,7 +27,7 @@ typedef long int TERNARY; * Macros for testing for errors from the various functions. */ #define TE_ISERROR(x) ((x) < 0) /* true if x is tlib error code */ -#define TE_NONE 0 /* no errors */ +#define TE_NONE 0 /* no errors */ /* * Contains any error messages from the functions. @@ -56,7 +56,7 @@ extern char te_errbuf[256]; * Library functions. */ extern TERNARY ternary_new(void); -extern int ternary_destroy(TERNARY tno, void (*freeptr)(void *)); +extern int ternary_destroy(TERNARY tno, void (*freeptr) (void *)); #define ternary_insert(x, y, z) ternary_insert_replace(x, y, z, 0) #define ternary_replace(x, y, z) ternary_insert_replace(x, y, z, 1) diff --git a/src/thread.c b/src/thread.c index db1036b..66f13d9 100644 --- a/src/thread.c +++ b/src/thread.c @@ -1,4 +1,4 @@ -/* $Id: thread.c,v 1.17 2001-10-24 00:37:23 rjkaes Exp $ +/* $Id: thread.c,v 1.18 2001-11-22 00:31:10 rjkaes Exp $ * * Handles the creation/destruction of the various threads required for * processing incoming connections. @@ -80,7 +80,8 @@ static pthread_mutex_t servers_mutex = PTHREAD_MUTEX_INITIALIZER; /* * Set the configuration values for the various thread related settings. */ -short int thread_configure(thread_config_t type, unsigned int val) +short int +thread_configure(thread_config_t type, unsigned int val) { switch (type) { case THREAD_MAXCLIENTS: @@ -109,19 +110,20 @@ short int thread_configure(thread_config_t type, unsigned int val) /* * This is the main (per thread) loop. */ -static void *thread_main(void *arg) +static void * +thread_main(void *arg) { int connfd; struct sockaddr *cliaddr; socklen_t clilen; struct thread_s *ptr; - ptr = (struct thread_s *)arg; + ptr = (struct thread_s *) arg; cliaddr = safemalloc(addrlen); if (!cliaddr) return NULL; - + while (!config.quit) { clilen = addrlen; @@ -142,10 +144,13 @@ static void *thread_main(void *arg) DEBUG2("%u connections so far...", ptr->connects); if (ptr->connects >= thread_config.maxrequestsperchild) { - log_message(LOG_NOTICE, "Thread has reached MaxRequestsPerChild (%u > %u). Killing thread.", ptr->connects, thread_config.maxrequestsperchild); + log_message(LOG_NOTICE, + "Thread has reached MaxRequestsPerChild (%u > %u). Killing thread.", + ptr->connects, + thread_config.maxrequestsperchild); ptr->status = T_EMPTY; - + safefree(cliaddr); return NULL; @@ -160,7 +165,8 @@ static void *thread_main(void *arg) */ SERVER_UNLOCK(); - log_message(LOG_NOTICE, "Waiting servers exceeds MaxSpareServers. Killing thread."); + log_message(LOG_NOTICE, + "Waiting servers exceeds MaxSpareServers. Killing thread."); ptr->status = T_EMPTY; @@ -170,7 +176,7 @@ static void *thread_main(void *arg) SERVER_UNLOCK(); ptr->status = T_WAITING; - + SERVER_INC(); } @@ -181,7 +187,8 @@ static void *thread_main(void *arg) /* * Create the initial pool of threads. */ -short int thread_pool_create(void) +short int +thread_pool_create(void) { unsigned int i; @@ -196,26 +203,33 @@ short int thread_pool_create(void) pthread_attr_setstacksize(&thread_attr, THREAD_STACK_SIZE); if (thread_config.maxclients == 0) { - log_message(LOG_ERR, "thread_pool_create: \"MaxClients\" must be greater than zero."); + log_message(LOG_ERR, + "thread_pool_create: \"MaxClients\" must be greater than zero."); return -1; } if (thread_config.startservers == 0) { - log_message(LOG_ERR, "thread_pool_create: \"StartServers\" must be greater than zero."); + log_message(LOG_ERR, + "thread_pool_create: \"StartServers\" must be greater than zero."); return -1; } - thread_ptr = safecalloc((size_t)thread_config.maxclients, sizeof(struct thread_s)); + thread_ptr = + safecalloc((size_t) thread_config.maxclients, + sizeof(struct thread_s)); if (!thread_ptr) return -1; if (thread_config.startservers > thread_config.maxclients) { - log_message(LOG_WARNING, "Can not start more than \"MaxClients\" servers. Starting %u servers instead.", thread_config.maxclients); + log_message(LOG_WARNING, + "Can not start more than \"MaxClients\" servers. Starting %u servers instead.", + thread_config.maxclients); thread_config.startservers = thread_config.maxclients; } for (i = 0; i < thread_config.startservers; i++) { thread_ptr[i].status = T_WAITING; - pthread_create(&thread_ptr[i].tid, &thread_attr, &thread_main, &thread_ptr[i]); + pthread_create(&thread_ptr[i].tid, &thread_attr, &thread_main, + &thread_ptr[i]); } servers_waiting = thread_config.startservers; @@ -231,7 +245,8 @@ short int thread_pool_create(void) * Keep the proper number of servers running. This is the birth of the * servers. It monitors this at least once a second. */ -void thread_main_loop(void) +void +thread_main_loop(void) { int i; @@ -242,13 +257,15 @@ void thread_main_loop(void) for (i = 0; i < thread_config.maxclients; i++) { if (thread_ptr[i].status == T_EMPTY) { - pthread_create(&thread_ptr[i].tid, &thread_attr, &thread_main, &thread_ptr[i]); + pthread_create(&thread_ptr[i].tid, &thread_attr, + &thread_main, &thread_ptr[i]); thread_ptr[i].status = T_WAITING; thread_ptr[i].connects = 0; SERVER_INC(); - log_message(LOG_NOTICE, "Waiting servers is less than MinSpareServers. Creating new thread."); + log_message(LOG_NOTICE, + "Waiting servers is less than MinSpareServers. Creating new thread."); break; } @@ -257,13 +274,15 @@ void thread_main_loop(void) SERVER_UNLOCK(); } -int thread_listening_sock(uint16_t port) +int +thread_listening_sock(uint16_t port) { listenfd = listen_sock(port, &addrlen); return listenfd; } -void thread_close_sock(void) +void +thread_close_sock(void) { close(listenfd); } diff --git a/src/tinyproxy.c b/src/tinyproxy.c index fa6280a..1aab0c5 100644 --- a/src/tinyproxy.c +++ b/src/tinyproxy.c @@ -1,4 +1,4 @@ -/* $Id: tinyproxy.c,v 1.18 2001-10-25 17:27:39 rjkaes Exp $ +/* $Id: tinyproxy.c,v 1.19 2001-11-22 00:31:10 rjkaes Exp $ * * The initialise routine. Basically sets up all the initial stuff (logfile, * listening socket, config options, etc.) and then sits there and loops @@ -49,7 +49,8 @@ float load = 0.00; /* * Handle a signal */ -void takesig(int sig) +void +takesig(int sig) { switch (sig) { case SIGHUP: @@ -62,7 +63,8 @@ void takesig(int sig) rename_file = safemalloc(strlen(config.logf_name) + 5); if (!rename_file) { - fprintf(stderr, "Could not allocate memory in signal handler!\n"); + fprintf(stderr, + "Could not allocate memory in signal handler!\n"); exit(EX_OSERR); } @@ -73,14 +75,16 @@ void takesig(int sig) log_file_des = create_file_safely(config.logf_name); if (log_file_des < 0) { - fprintf(stderr, "Could not safely create new log file.\n"); + fprintf(stderr, + "Could not safely create new log file.\n"); exit(EX_OSERR); } old_fd = config.logf; - + if (!(config.logf = fdopen(log_file_des, "w"))) { - fprintf(stderr, "Could not create new log file.\n"); + fprintf(stderr, + "Could not create new log file.\n"); exit(EX_CANTCREAT); } @@ -90,7 +94,6 @@ void takesig(int sig) safefree(rename_file); } - #ifdef FILTER_ENABLE if (config.filter) { filter_destroy(); @@ -98,7 +101,8 @@ void takesig(int sig) } log_message(LOG_NOTICE, "Re-reading filter file."); #endif /* FILTER_ENABLE */ - log_message(LOG_NOTICE, "Finished cleaning memory/connections."); + log_message(LOG_NOTICE, + "Finished cleaning memory/connections."); break; case SIGTERM: #ifdef FILTER_ENABLE @@ -118,7 +122,8 @@ void takesig(int sig) /* * Display the version information for the user. */ -static void display_version(void) +static void +display_version(void) { printf("%s %s (%s)\n", PACKAGE, VERSION, TARGET_SYSTEM); } @@ -126,7 +131,8 @@ static void display_version(void) /* * Display the copyright and license for this program. */ -static void display_license(void) +static void +display_license(void) { display_version(); @@ -154,7 +160,8 @@ static void display_license(void) /* * Display usage to the user. */ -static void display_usage(void) +static void +display_usage(void) { printf("Usage: %s [options]\n", PACKAGE); printf("\ @@ -165,7 +172,6 @@ Options:\n\ -l Display the license.\n\ -v Display the version number.\n"); - /* Display the modes compiled into tinyproxy */ printf("\nFeatures Compiled In:\n"); #ifdef XTINYPROXY_ENABLE @@ -183,7 +189,8 @@ Options:\n\ #endif /* TUNNEL_SUPPORT */ } -int main(int argc, char **argv) +int +main(int argc, char **argv) { int optch; bool_t godaemon = TRUE; @@ -195,18 +202,18 @@ int main(int argc, char **argv) * Disable the creation of CORE files right up front. */ #ifdef HAVE_SETRLIMIT - struct rlimit core_limit = {0, 0}; + struct rlimit core_limit = { 0, 0 }; if (setrlimit(RLIMIT_CORE, &core_limit) < 0) { - fprintf(stderr, "%s: Could not set the core limit to zero.\n", argv[0]); + fprintf(stderr, "%s: Could not set the core limit to zero.\n", + argv[0]); exit(EX_SOFTWARE); } -#endif /* HAVE_SETRLIMIT */ +#endif /* HAVE_SETRLIMIT */ /* * Process the various options */ - while ((optch = getopt(argc, argv, "c:vldh")) != - EOF) { + while ((optch = getopt(argc, argv, "c:vldh")) != EOF) { switch (optch) { case 'v': display_version(); @@ -220,13 +227,15 @@ int main(int argc, char **argv) case 'c': conf_file = strdup(optarg); if (!conf_file) { - fprintf(stderr, "%s: Could not allocate memory.\n", argv[0]); + fprintf(stderr, + "%s: Could not allocate memory.\n", + argv[0]); exit(EX_SOFTWARE); } break; case 'h': default: - display_usage(); + display_usage(); exit(EX_OK); } } @@ -236,14 +245,18 @@ int main(int argc, char **argv) */ yyin = fopen(conf_file, "r"); if (!yyin) { - fprintf(stderr, "%s: Could not open configuration file \"%s\".\n", argv[0], conf_file); + fprintf(stderr, + "%s: Could not open configuration file \"%s\".\n", + argv[0], conf_file); exit(EX_SOFTWARE); } yyparse(); #if defined(TUNNEL_SUPPORT) && defined(UPSTREAM_SUPPORT) if (config.tunnel_name && config.upstream_name) { - fprintf(stderr, "%s: \"Tunnel\" and \"Upstream\" directives can not be both set.\n", argv[0]); + fprintf(stderr, + "%s: \"Tunnel\" and \"Upstream\" directives can not be both set.\n", + argv[0]); exit(EX_SOFTWARE); } #endif @@ -253,19 +266,24 @@ int main(int argc, char **argv) int log_file_fd; if (!config.logf_name) { - fprintf(stderr, "%s: You MUST set a LogFile in the configuration file.\n", argv[0]); + fprintf(stderr, + "%s: You MUST set a LogFile in the configuration file.\n", + argv[0]); exit(EX_SOFTWARE); } log_file_fd = create_file_safely(config.logf_name); if (log_file_fd < 0) { - fprintf(stderr, "Could not safely create logfile \"%s\".\n", config.logf_name); + fprintf(stderr, + "Could not safely create logfile \"%s\".\n", + config.logf_name); exit(EX_CANTCREAT); } config.logf = fdopen(log_file_fd, "w"); if (!config.logf) { - fprintf(stderr, "Could not write to log file \"%s\".\n", config.logf_name); + fprintf(stderr, "Could not write to log file \"%s\".\n", + config.logf_name); exit(EX_CANTCREAT); } } else { @@ -281,18 +299,23 @@ int main(int argc, char **argv) * Set the default values if they were not set in the config file. */ if (config.port == 0) { - fprintf(stderr, "%s: You MUST set a Port in the configuration file.\n", argv[0]); + fprintf(stderr, + "%s: You MUST set a Port in the configuration file.\n", + argv[0]); exit(EX_SOFTWARE); } if (!config.stathost) { - log_message(LOG_INFO, "Setting stathost to \"%s\".", DEFAULT_STATHOST); + log_message(LOG_INFO, "Setting stathost to \"%s\".", + DEFAULT_STATHOST); config.stathost = DEFAULT_STATHOST; } if (!config.username) { - log_message(LOG_WARNING, "You SHOULD set a UserName in the configuration file. Using current user instead."); + log_message(LOG_WARNING, + "You SHOULD set a UserName in the configuration file. Using current user instead."); } if (config.idletimeout == 0) { - log_message(LOG_INFO, "Setting idle timeout to %u seconds.", MAX_IDLE_TIME); + log_message(LOG_INFO, "Setting idle timeout to %u seconds.", + MAX_IDLE_TIME); config.idletimeout = MAX_IDLE_TIME; } @@ -318,10 +341,10 @@ int main(int argc, char **argv) } if (signal(SIGPIPE, SIG_IGN) == SIG_ERR) { - fprintf(stderr, "%s: Could not set the \"SIGPIPE\" signal.\n", argv[0]); + fprintf(stderr, "%s: Could not set the \"SIGPIPE\" signal.\n", + argv[0]); exit(EX_OSERR); } - #ifdef FILTER_ENABLE if (config.filter) filter_init(); @@ -331,7 +354,8 @@ int main(int argc, char **argv) * Start listening on the selected port. */ if (thread_listening_sock(config.port) < 0) { - fprintf(stderr, "%s: Could not create listening socket.\n", argv[0]); + fprintf(stderr, "%s: Could not create listening socket.\n", + argv[0]); exit(EX_OSERR); } @@ -342,33 +366,45 @@ int main(int argc, char **argv) if (config.group && strlen(config.group) > 0) { thisgroup = getgrnam(config.group); if (!thisgroup) { - fprintf(stderr, "%s: Unable to find group \"%s\".\n", argv[0], config.group); + fprintf(stderr, + "%s: Unable to find group \"%s\".\n", + argv[0], config.group); exit(EX_NOUSER); } if (setgid(thisgroup->gr_gid) < 0) { - fprintf(stderr, "%s: Unable to change to group \"%s\".\n", argv[0], config.group); + fprintf(stderr, + "%s: Unable to change to group \"%s\".\n", + argv[0], config.group); exit(EX_CANTCREAT); } - log_message(LOG_INFO, "Now running as group \"%s\".", config.group); + log_message(LOG_INFO, "Now running as group \"%s\".", + config.group); } if (config.username && strlen(config.username) > 0) { thisuser = getpwnam(config.username); if (!thisuser) { - fprintf(stderr, "%s: Unable to find user \"%s\".", argv[0], config.username); + fprintf(stderr, + "%s: Unable to find user \"%s\".", + argv[0], config.username); exit(EX_NOUSER); } if (setuid(thisuser->pw_uid) < 0) { - fprintf(stderr, "%s: Unable to change to user \"%s\".", argv[0], config.username); + fprintf(stderr, + "%s: Unable to change to user \"%s\".", + argv[0], config.username); exit(EX_CANTCREAT); } - log_message(LOG_INFO, "Now running as user \"%s\".", config.username); + log_message(LOG_INFO, "Now running as user \"%s\".", + config.username); } } else { - log_message(LOG_WARNING, "Not running as root, so not changing UID/GID."); + log_message(LOG_WARNING, + "Not running as root, so not changing UID/GID."); } if (thread_pool_create() < 0) { - fprintf(stderr, "%s: Could not create the pool of threads.", argv[0]); + fprintf(stderr, "%s: Could not create the pool of threads.", + argv[0]); exit(EX_SOFTWARE); } @@ -377,11 +413,13 @@ int main(int argc, char **argv) */ log_message(LOG_INFO, "Setting the various signals."); if (signal(SIGTERM, takesig) == SIG_ERR) { - fprintf(stderr, "%s: Could not set the \"SIGTERM\" signal.\n", argv[0]); + fprintf(stderr, "%s: Could not set the \"SIGTERM\" signal.\n", + argv[0]); exit(EX_OSERR); } if (signal(SIGHUP, takesig) == SIG_ERR) { - fprintf(stderr, "%s: Could not set the \"SIGHUP\" signal.\n", argv[0]); + fprintf(stderr, "%s: Could not set the \"SIGHUP\" signal.\n", + argv[0]); exit(EX_OSERR); } @@ -401,10 +439,10 @@ int main(int argc, char **argv) * Remove the PID file. */ if (unlink(config.pidpath) < 0) { - log_message(LOG_WARNING, "Could not remove PID file \"%s\": %s.", + log_message(LOG_WARNING, + "Could not remove PID file \"%s\": %s.", config.pidpath, strerror(errno)); } - #ifdef FILTER_ENABLE if (config.filter) filter_destroy(); diff --git a/src/tinyproxy.h b/src/tinyproxy.h index 7dd6402..e38e886 100644 --- a/src/tinyproxy.h +++ b/src/tinyproxy.h @@ -1,4 +1,4 @@ -/* $Id: tinyproxy.h,v 1.19 2001-10-25 17:27:39 rjkaes Exp $ +/* $Id: tinyproxy.h,v 1.20 2001-11-22 00:31:10 rjkaes Exp $ * * See 'tinyproxy.c' for a detailed description. * @@ -81,7 +81,7 @@ /* Global variables for the main controls of the program */ #define MAXBUFFSIZE ((size_t)(1024 * 48)) /* Max size of buffer */ -#define MAXLISTEN 1024 /* Max number of connections */ +#define MAXLISTEN 1024 /* Max number of connections */ #define MAX_IDLE_TIME (60 * 10) /* 10 minutes of no activity */ /* Useful function macros */ diff --git a/src/utils.c b/src/utils.c index 0954bc4..5c83729 100644 --- a/src/utils.c +++ b/src/utils.c @@ -1,4 +1,4 @@ -/* $Id: utils.c,v 1.16 2001-10-25 17:27:39 rjkaes Exp $ +/* $Id: utils.c,v 1.17 2001-11-22 00:31:10 rjkaes Exp $ * * Misc. routines which are used by the various functions to handle strings * and memory allocation and pretty much anything else we can think of. Also, @@ -32,28 +32,35 @@ */ #ifndef NDEBUG -void *debugging_calloc(size_t nmemb, size_t size, const char *file, unsigned long line) +void * +debugging_calloc(size_t nmemb, size_t size, const char *file, + unsigned long line) { void *ptr = calloc(nmemb, size); - fprintf(stderr, "{calloc: %p:%u x %u} %s:%lu\n", ptr, nmemb, size, file, line); + fprintf(stderr, "{calloc: %p:%u x %u} %s:%lu\n", ptr, nmemb, size, file, + line); return ptr; } -void *debugging_malloc(size_t size, const char *file, unsigned long line) +void * +debugging_malloc(size_t size, const char *file, unsigned long line) { void *ptr = malloc(size); fprintf(stderr, "{malloc: %p:%u} %s:%lu\n", ptr, size, file, line); return ptr; } -void *debugging_realloc(void *ptr, size_t size, const char *file, unsigned long line) +void * +debugging_realloc(void *ptr, size_t size, const char *file, unsigned long line) { void *newptr = realloc(ptr, size); - fprintf(stderr, "{realloc: %p -> %p:%u} %s:%lu\n", ptr, newptr, size, file, line); + fprintf(stderr, "{realloc: %p -> %p:%u} %s:%lu\n", ptr, newptr, size, + file, line); return newptr; } -void debugging_free(void *ptr, const char *file, unsigned long line) +void +debugging_free(void *ptr, const char *file, unsigned long line) { fprintf(stderr, "{free: %p} %s:%lu\n", ptr, file, line); free(ptr); @@ -66,17 +73,16 @@ void debugging_free(void *ptr, const char *file, unsigned long line) /* * Build the data for a complete HTTP & HTML message for the client. */ -int send_http_message(struct conn_s* connptr, int http_code, - const char *error_title, const char *message) +int +send_http_message(struct conn_s *connptr, int http_code, + const char *error_title, const char *message) { - static char *headers = \ - "HTTP/1.0 %d %s\r\n" \ - "Server: %s/%s\r\n" \ - "Date: %s\r\n" \ - "Content-Type: text/html\r\n" \ - "Content-Length: %d\r\n" \ - "Connection: close\r\n" \ - "\r\n"; + static char *headers = + "HTTP/1.0 %d %s\r\n" + "Server: %s/%s\r\n" + "Date: %s\r\n" + "Content-Type: text/html\r\n" + "Content-Length: %d\r\n" "Connection: close\r\n" "\r\n"; char *header_buffer; char timebuf[30]; @@ -87,9 +93,11 @@ int send_http_message(struct conn_s* connptr, int http_code, return -1; global_time = time(NULL); - strftime(timebuf, sizeof(timebuf), "%a, %d %b %Y %H:%M:%S GMT", gmtime(&global_time)); + strftime(timebuf, sizeof(timebuf), "%a, %d %b %Y %H:%M:%S GMT", + gmtime(&global_time)); - snprintf(header_buffer, HEADER_SIZE - 1, headers, http_code, error_title, PACKAGE, VERSION, timebuf, strlen(message)); + snprintf(header_buffer, HEADER_SIZE - 1, headers, http_code, + error_title, PACKAGE, VERSION, timebuf, strlen(message)); safe_write(connptr->client_fd, header_buffer, strlen(header_buffer)); safe_write(connptr->client_fd, message, strlen(message)); @@ -104,15 +112,16 @@ int send_http_message(struct conn_s* connptr, int http_code, /* * Display an error to the client. */ -int httperr(struct conn_s *connptr, int err, const char *msg) +int +httperr(struct conn_s *connptr, int err, const char *msg) { - static char *message = \ - "<html><head><title>%s</title></head>\r\n" \ - "<body>\r\n" \ - "<font size=\"+2\">Cache Error!</font><br>\r\n" \ - "An error of type %d occurred: %s\r\n" \ - "<hr>\r\n" \ - "<font size=\"-1\"><em>Generated by %s (%s)</em></font>\r\n" \ + static char *message = + "<html><head><title>%s</title></head>\r\n" + "<body>\r\n" + "<font size=\"+2\">Cache Error!</font><br>\r\n" + "An error of type %d occurred: %s\r\n" + "<hr>\r\n" + "<font size=\"-1\"><em>Generated by %s (%s)</em></font>\r\n" "</body></html>\r\n\r\n"; char *message_buffer; @@ -121,7 +130,8 @@ int httperr(struct conn_s *connptr, int err, const char *msg) if (!message_buffer) return -1; - snprintf(message_buffer, MAXBUFFSIZE - 1, message, msg, err, msg, PACKAGE, VERSION); + snprintf(message_buffer, MAXBUFFSIZE - 1, message, msg, err, msg, + PACKAGE, VERSION); if (send_http_message(connptr, err, msg, message_buffer) < 0) { safefree(message_buffer); @@ -132,7 +142,8 @@ int httperr(struct conn_s *connptr, int err, const char *msg) return 0; } -void makedaemon(void) +void +makedaemon(void) { if (fork() != 0) exit(0); @@ -154,7 +165,8 @@ void makedaemon(void) /* * Safely creates filename and returns the low-level file descriptor. */ -int create_file_safely(const char *filename) +int +create_file_safely(const char *filename) { struct stat lstatinfo; int fildes; @@ -170,7 +182,8 @@ int create_file_safely(const char *filename) * existing", exit. */ if (errno != ENOENT) { - log_message(LOG_ERR, "create_file_safely: Error checking PID file %s: %s.", + log_message(LOG_ERR, + "create_file_safely: Error checking PID file %s: %s.", filename, strerror(errno)); return -1; } @@ -180,19 +193,22 @@ int create_file_safely(const char *filename) * sure an attacker can't slip in a file between the lstat() * and open() */ - if ((fildes = open(filename, O_RDWR | O_CREAT | O_EXCL, 0600)) < 0) { - log_message(LOG_ERR, "create_file_safely: Could not create PID file %s: %s.", + if ((fildes = + open(filename, O_RDWR | O_CREAT | O_EXCL, 0600)) < 0) { + log_message(LOG_ERR, + "create_file_safely: Could not create PID file %s: %s.", filename, strerror(errno)); return -1; } } else { struct stat fstatinfo; - + /* * Open an existing file. */ if ((fildes = open(filename, O_RDWR)) < 0) { - log_message(LOG_ERR, "create_file_safely: Could not open PID file %s: %s.", + log_message(LOG_ERR, + "create_file_safely: Could not open PID file %s: %s.", filename, strerror(errno)); return -1; } @@ -205,7 +221,8 @@ int create_file_safely(const char *filename) || lstatinfo.st_mode != fstatinfo.st_mode || lstatinfo.st_ino != fstatinfo.st_ino || lstatinfo.st_dev != fstatinfo.st_dev) { - log_message(LOG_ERR, "create_file_safely: The PID file %s has been changed before it could be opened.", + log_message(LOG_ERR, + "create_file_safely: The PID file %s has been changed before it could be opened.", filename); close(fildes); return -1; @@ -219,7 +236,8 @@ int create_file_safely(const char *filename) * st_mode check would also find this) */ if (fstatinfo.st_nlink > 1 || !S_ISREG(lstatinfo.st_mode)) { - log_message(LOG_ERR, "create_file_safely: The PID file %s has too many links, or is not a regular file: %s.", + log_message(LOG_ERR, + "create_file_safely: The PID file %s has too many links, or is not a regular file: %s.", filename, strerror(errno)); close(fildes); return -1; @@ -237,12 +255,14 @@ int create_file_safely(const char *filename) ftruncate(fildes, 0); #else close(fildes); - if ((fildes = open(filename, O_RDWR | O_CREAT | O_TRUNC, 0600)) < 0) { - log_message(LOG_ERR, "create_file_safely: Could not open PID file %s: %s.", + if ((fildes = + open(filename, O_RDWR | O_CREAT | O_TRUNC, 0600)) < 0) { + log_message(LOG_ERR, + "create_file_safely: Could not open PID file %s: %s.", filename, strerror(errno)); return -1; } -#endif /* HAVE_FTRUNCATE */ +#endif /* HAVE_FTRUNCATE */ } return fildes; @@ -251,7 +271,8 @@ int create_file_safely(const char *filename) /* * Write the PID of the program to the specified file. */ -void pidfile_create(const char *filename) +void +pidfile_create(const char *filename) { int fildes; FILE *fd; @@ -266,14 +287,15 @@ void pidfile_create(const char *filename) * Open a stdio file over the low-level one. */ if ((fd = fdopen(fildes, "w")) == NULL) { - log_message(LOG_ERR, "pidfile_create: fdopen() error on PID file %s: %s.", + log_message(LOG_ERR, + "pidfile_create: fdopen() error on PID file %s: %s.", filename, strerror(errno)); close(fildes); unlink(filename); exit(1); } - fprintf(fd, "%ld\n", (long)getpid()); + fprintf(fd, "%ld\n", (long) getpid()); fclose(fd); } @@ -283,7 +305,8 @@ void pidfile_create(const char *filename) * buffer, and always NULL terminates the buffer. size is the size of the * destination buffer. */ -size_t strlcpy(char *dst, const char *src, size_t size) +size_t +strlcpy(char *dst, const char *src, size_t size) { size_t len = strlen(src); size_t ret = len; @@ -305,7 +328,8 @@ size_t strlcpy(char *dst, const char *src, size_t size) * buffer, which should be one more than the maximum resulting string * length. */ -size_t strlcat(char *dst, const char *src, size_t size) +size_t +strlcat(char *dst, const char *src, size_t size) { size_t len1 = strlen(dst); size_t len2 = strlen(src); diff --git a/src/utils.h b/src/utils.h index ba6976c..5979064 100644 --- a/src/utils.h +++ b/src/utils.h @@ -1,4 +1,4 @@ -/* $Id: utils.h,v 1.10 2001-10-25 16:58:50 rjkaes Exp $ +/* $Id: utils.h,v 1.11 2001-11-22 00:31:10 rjkaes Exp $ * * See 'utils.h' for a detailed description. * @@ -23,7 +23,7 @@ #include "conns.h" -extern int send_http_message(struct conn_s* connptr, int http_code, +extern int send_http_message(struct conn_s *connptr, int http_code, const char *error_title, const char *message); extern int httperr(struct conn_s *connptr, int err, const char *msg); @@ -34,21 +34,24 @@ extern int create_file_safely(const char *filename); #ifndef HAVE_STRLCAT extern size_t strlcat(char *dst, const char *src, size_t size); -#endif /* HAVE_STRLCAT */ +#endif /* HAVE_STRLCAT */ #ifndef HAVE_STRLCPY extern size_t strlcpy(char *dst, const char *src, size_t size); -#endif /* HAVE_STRLCPY */ +#endif /* HAVE_STRLCPY */ /* * The following is to allow for better memory checking. */ #ifndef NDEBUG -extern void *debugging_calloc(size_t nmemb, size_t size, const char *file, unsigned long line); -extern void *debugging_malloc(size_t size, const char *file, unsigned long line); +extern void *debugging_calloc(size_t nmemb, size_t size, const char *file, + unsigned long line); +extern void *debugging_malloc(size_t size, const char *file, + unsigned long line); extern void debugging_free(void *ptr, const char *file, unsigned long line); -extern void *debugging_realloc(void *ptr, size_t size, const char *file, unsigned long line); +extern void *debugging_realloc(void *ptr, size_t size, const char *file, + unsigned long line); # define safecalloc(x, y) debugging_calloc(x, y, __FILE__, __LINE__) # define safemalloc(x) debugging_malloc(x, __FILE__, __LINE__) |