diff -urN boa-0.94.13.orig/src/boa.c boa-0.94.13/src/boa.c --- boa-0.94.13.orig/src/boa.c 2002-07-23 17:50:29.000000000 +0200 +++ boa-0.94.13/src/boa.c 2004-09-01 20:00:36.000000000 +0200 @@ -208,10 +208,11 @@ struct passwd *passwdbuf; passwdbuf = getpwuid(server_uid); if (passwdbuf == NULL) { - DIE("getpwuid"); - } + WARN("getpwuid - will not initgroups"); + } else { if (initgroups(passwdbuf->pw_name, passwdbuf->pw_gid) == -1) { - DIE("initgroups"); + WARN("initgroups"); + } } if (setgid(server_gid) == -1) { DIE("setgid"); diff -urN boa-0.94.13.orig/src/boa.h boa-0.94.13/src/boa.h --- boa-0.94.13.orig/src/boa.h 2002-07-26 05:03:44.000000000 +0200 +++ boa-0.94.13/src/boa.h 2004-09-01 20:00:36.000000000 +0200 @@ -149,8 +149,9 @@ void clean_pathname(char *pathname); char *get_commonlog_time(void); void rfc822_time_buf(char *buf, time_t s); -char *simple_itoa(unsigned int i); +char *simple_itoa(long long int i); int boa_atoi(char *s); +long long int boa_atoll(char *s); char *escape_string(char *inp, char *buf); int month2int(char *month); int modified_since(time_t * mtime, char *if_modified_since); diff -urN boa-0.94.13.orig/src/boa_grammar.y boa-0.94.13/src/boa_grammar.y --- boa-0.94.13.orig/src/boa_grammar.y 1999-10-12 16:49:07.000000000 +0200 +++ boa-0.94.13/src/boa_grammar.y 2004-09-01 20:00:36.000000000 +0200 @@ -20,7 +20,7 @@ * */ -/* $Id$*/ +/* $Id$ */ #include #include diff -urN boa-0.94.13.orig/src/compat.h boa-0.94.13/src/compat.h --- boa-0.94.13.orig/src/compat.h 2002-06-06 07:02:28.000000000 +0200 +++ boa-0.94.13/src/compat.h 2004-09-01 20:00:36.000000000 +0200 @@ -117,7 +117,7 @@ #endif #ifdef HAVE_TM_GMTOFF -#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff +#define TIMEZONE_OFFSET(foo) foo->tm_gmtoff #else #define TIMEZONE_OFFSET(foo) timezone #endif diff -urN boa-0.94.13.orig/src/get.c boa-0.94.13/src/get.c --- boa-0.94.13.orig/src/get.c 2002-07-26 05:05:59.000000000 +0200 +++ boa-0.94.13/src/get.c 2004-09-01 20:00:36.000000000 +0200 @@ -43,7 +43,7 @@ struct stat statbuf; volatile int bytes; - data_fd = open(req->pathname, O_RDONLY); + data_fd = open(req->pathname, O_RDONLY | O_LARGEFILE); saved_errno = errno; /* might not get used */ #ifdef GUNZIP @@ -58,7 +58,7 @@ memcpy(gzip_pathname, req->pathname, len); memcpy(gzip_pathname + len, ".gz", 3); gzip_pathname[len + 3] = '\0'; - data_fd = open(gzip_pathname, O_RDONLY); + data_fd = open(gzip_pathname, O_RDONLY | O_LARGEFILE); if (data_fd != -1) { close(data_fd); @@ -313,7 +313,7 @@ sprintf(pathname_with_index, "%s%s", req->pathname, directory_index); */ - data_fd = open(pathname_with_index, O_RDONLY); + data_fd = open(pathname_with_index, O_RDONLY | O_LARGEFILE); if (data_fd != -1) { /* user's index file */ strcpy(req->request_uri, directory_index); /* for mimetype */ @@ -334,7 +334,7 @@ * try index.html.gz */ strcat(pathname_with_index, ".gz"); - data_fd = open(pathname_with_index, O_RDONLY); + data_fd = open(pathname_with_index, O_RDONLY | O_LARGEFILE); if (data_fd != -1) { /* user's index file */ close(data_fd); @@ -399,9 +399,9 @@ time_t real_dir_mtime; real_dir_mtime = statbuf->st_mtime; - sprintf(pathname_with_index, "%s/dir.%d.%ld", + sprintf(pathname_with_index, "%s/dir.%d.%lld", cachedir, (int) statbuf->st_dev, statbuf->st_ino); - data_fd = open(pathname_with_index, O_RDONLY); + data_fd = open(pathname_with_index, O_RDONLY | O_LARGEFILE); if (data_fd != -1) { /* index cache */ @@ -417,7 +417,7 @@ if (index_directory(req, pathname_with_index) == -1) return -1; - data_fd = open(pathname_with_index, O_RDONLY); /* Last chance */ + data_fd = open(pathname_with_index, O_RDONLY | O_LARGEFILE); /* Last chance */ if (data_fd != -1) { strcpy(req->request_uri, directory_index); /* for mimetype */ fstat(data_fd, statbuf); diff -urN boa-0.94.13.orig/src/globals.h boa-0.94.13/src/globals.h --- boa-0.94.13.orig/src/globals.h 2002-07-24 05:03:59.000000000 +0200 +++ boa-0.94.13/src/globals.h 2004-09-01 20:00:36.000000000 +0200 @@ -54,8 +54,8 @@ int kacount; /* keepalive count */ int data_fd; /* fd of data */ - unsigned long filesize; /* filesize */ - unsigned long filepos; /* position in file */ + unsigned long long filesize; /* filesize */ + unsigned long long filepos; /* position in file */ char *data_mem; /* mmapped/malloced char array */ int method; /* M_GET, M_POST, etc. */ diff -urN boa-0.94.13.orig/src/index_dir.c boa-0.94.13/src/index_dir.c --- boa-0.94.13.orig/src/index_dir.c 2002-01-30 04:41:45.000000000 +0100 +++ boa-0.94.13/src/index_dir.c 2004-09-01 20:00:36.000000000 +0200 @@ -240,10 +240,10 @@ printf("" "%s/" "%s" - "%ld bytes" + "%lld bytes" "\n", http_filename, html_filename, - ctime(&statbuf.st_mtime), (long) statbuf.st_size); + ctime(&statbuf.st_mtime), (long long) statbuf.st_size); } printf @@ -281,19 +281,19 @@ "%s " "(.gz)" "%s" - "%ld bytes" + "%lld bytes" "\n", http_filename, html_filename, http_filename, - ctime(&statbuf.st_mtime), (long) statbuf.st_size); + ctime(&statbuf.st_mtime), (long long) statbuf.st_size); } else { #endif printf("" "%s" "%s" - "%ld bytes" + "%lld bytes" "\n", http_filename, html_filename, - ctime(&statbuf.st_mtime), (long) statbuf.st_size); + ctime(&statbuf.st_mtime), (long long) statbuf.st_size); #ifdef GUNZIP } #endif diff -urN boa-0.94.13.orig/src/log.c boa-0.94.13/src/log.c --- boa-0.94.13.orig/src/log.c 2002-07-26 05:04:48.000000000 +0200 +++ boa-0.94.13/src/log.c 2004-09-01 20:00:36.000000000 +0200 @@ -142,7 +142,7 @@ if (access_log) { if (virtualhost) fprintf(access_log, "%s ", req->local_ip_addr); - fprintf(access_log, "%s - - %s\"%s\" %d %ld \"%s\" \"%s\"\n", + fprintf(access_log, "%s - - %s\"%s\" %d %lld \"%s\" \"%s\"\n", req->remote_ip_addr, get_commonlog_time(), req->logline, diff -urN boa-0.94.13.orig/src/mmap_cache.c boa-0.94.13/src/mmap_cache.c --- boa-0.94.13.orig/src/mmap_cache.c 2002-03-24 23:35:34.000000000 +0100 +++ boa-0.94.13/src/mmap_cache.c 2004-09-01 20:00:36.000000000 +0200 @@ -104,7 +104,7 @@ int data_fd; struct stat statbuf; struct mmap_entry *e; - data_fd = open(fname, O_RDONLY); + data_fd = open(fname, O_RDONLY | O_LARGEFILE); if (data_fd == -1) { perror(fname); return NULL; diff -urN boa-0.94.13.orig/src/read.c boa-0.94.13/src/read.c --- boa-0.94.13.orig/src/read.c 2002-03-18 02:53:48.000000000 +0100 +++ boa-0.94.13/src/read.c 2004-09-01 20:00:36.000000000 +0200 @@ -157,7 +157,7 @@ if (req->content_length) { int content_length; - content_length = boa_atoi(req->content_length); + content_length = boa_atoll(req->content_length); /* Is a content-length of 0 legal? */ if (content_length <= 0) { log_error_time(); diff -urN boa-0.94.13.orig/src/util.c boa-0.94.13/src/util.c --- boa-0.94.13.orig/src/util.c 2002-07-08 01:22:18.000000000 +0200 +++ boa-0.94.13/src/util.c 2004-09-01 20:00:36.000000000 +0200 @@ -386,7 +386,7 @@ memcpy(p, day_tab + t->tm_wday * 4, 4); } -char *simple_itoa(unsigned int i) +char *simple_itoa(long long int i) { /* 21 digits plus null terminator, good for 64-bit or smaller ints * for bigger ints, use a bigger buffer! @@ -427,6 +427,24 @@ return retval; } +/* I don't "do" negative conversions + * Therefore, -1 indicates error + */ + +long long int boa_atoll(char *s) +{ + long long int retval; + + if (!isdigit(*s)) + return -1; + + retval = atoll(s); + if (retval < 0) + return -1; + + return retval; +} + int create_temporary_file(short want_unlink, char *storage, int size) { static char boa_tempfile[MAX_PATH_LENGTH + 1];