ports/61065: [Maintainer Update] Port: www/pserv
Alex Dupre
ale at FreeBSD.org
Thu Jan 8 12:10:16 UTC 2004
>Number: 61065
>Category: ports
>Synopsis: [Maintainer Update] Port: www/pserv
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: freebsd-ports-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: maintainer-update
>Submitter-Id: current-users
>Arrival-Date: Thu Jan 08 04:10:09 PST 2004
>Closed-Date:
>Last-Modified:
>Originator: Alex Dupre
>Release: FreeBSD 5.2-CURRENT i386
>Organization:
>Environment:
System: FreeBSD armada.alexdupre.com 5.2-CURRENT FreeBSD 5.2-CURRENT #0: Wed Jan 7 02:41:45 CET 2004 alex at armada.alexdupre.com:/usr/obj/usr/src/sys/ARMADA i386
>Description:
Update to 3.0 beta 3 release.
>How-To-Repeat:
>Fix:
--- pserv.diff begins here ---
diff -ruN pserv.orig/Makefile pserv/Makefile
--- pserv.orig/Makefile Thu Jan 8 11:29:18 2004
+++ pserv/Makefile Thu Jan 8 12:35:53 2004
@@ -6,27 +6,28 @@
#
PORTNAME= pserv
-PORTVERSION= 3.0.b2
+PORTVERSION= 3.0.b3
CATEGORIES= www
MASTER_SITES= ${MASTER_SITE_SOURCEFORGE}
MASTER_SITE_SUBDIR= ${PORTNAME}
-DISTNAME= ${PORTNAME}-20-Oct-03
+DISTNAME= ${PORTNAME}-08-Jan-04
EXTRACT_SUFX= .tar.Z
MAINTAINER= sysadmin at alexdupre.com
COMMENT= A portable and small webserver written in C
WRKSRC= ${WRKDIR}/${PORTNAME}
+BUILD_WRKSRC= ${WRKSRC}/sources
USE_REINPLACE= yes
post-patch:
@${REINPLACE_CMD} "s|%%PREFIX%%|${PREFIX}|g;s|%%LOCALBASE%%|${LOCALBASE}|g" \
- ${WRKSRC}/pserv.conf
+ ${WRKSRC}/defaults/pserv.conf
do-install:
- ${INSTALL_PROGRAM} ${WRKSRC}/pserv ${PREFIX}/sbin/
- ${INSTALL_DATA} ${WRKSRC}/mime_types.dat ${PREFIX}/etc/mime.types
- ${INSTALL_DATA} ${WRKSRC}/pserv.conf ${PREFIX}/etc/
+ ${INSTALL_PROGRAM} ${WRKSRC}/sources/pserv ${PREFIX}/sbin/
+ ${INSTALL_DATA} ${WRKSRC}/defaults/mime_types.dat ${PREFIX}/etc/mime.types
+ ${INSTALL_DATA} ${WRKSRC}/defaults/pserv.conf ${PREFIX}/etc/
${INSTALL_SCRIPT} ${FILESDIR}/pserv.sh ${PREFIX}/etc/rc.d/
.include <bsd.port.mk>
diff -ruN pserv.orig/distinfo pserv/distinfo
--- pserv.orig/distinfo Thu Jan 8 11:29:18 2004
+++ pserv/distinfo Thu Jan 8 11:31:17 2004
@@ -1 +1 @@
-MD5 (pserv-20-Oct-03.tar.Z) = 1b38238b8de0704b03ae245271f4899e
+MD5 (pserv-08-Jan-04.tar.Z) = 716795e74babdf70daeb7b93dbb7f47b
diff -ruN pserv.orig/files/patch-Makefile pserv/files/patch-Makefile
--- pserv.orig/files/patch-Makefile Thu Jan 8 11:29:18 2004
+++ pserv/files/patch-Makefile Thu Jan 8 12:38:14 2004
@@ -1,12 +1,12 @@
---- Makefile.orig Tue Oct 21 00:05:55 2003
-+++ Makefile Tue Oct 21 00:07:34 2003
+--- sources/Makefile.orig Thu Oct 23 12:43:08 2003
++++ sources/Makefile Thu Jan 8 12:37:57 2004
@@ -1,11 +1,11 @@
#Change the following to your needs
--CC = gcc
+-CC = cc
+-#insert here flags, eg. optimizations
+-CFLAGS = -Wall
+CC ?= gcc
- #insert here flags, eg. optimizations
--CFLAGS = -Wall -O3
--LIBS =
+ LIBS =
SRCS = main.c handlers.c mime.c log.c
OBJS = main.o handlers.o mime.o log.o
PROGRAM = pserv
diff -ruN pserv.orig/files/patch-handlers.c pserv/files/patch-handlers.c
--- pserv.orig/files/patch-handlers.c Thu Jan 8 11:29:18 2004
+++ pserv/files/patch-handlers.c Thu Jan 8 12:20:11 2004
@@ -1,5 +1,5 @@
---- handlers.c.orig Mon Oct 20 10:27:32 2003
-+++ handlers.c Tue Oct 21 00:13:59 2003
+--- sources/handlers.c.orig Mon Oct 20 10:27:32 2003
++++ sources/handlers.c Tue Oct 21 00:13:59 2003
@@ -24,6 +24,7 @@
#endif
@@ -295,20 +295,3 @@
fatal = NO;
retry = NO;
while(!feof(inFile) && !fatal)
-@@ -408,11 +659,11 @@
- if (howMany > 0)
- {
- #ifdef ON_THE_FLY_CONVERSION
-- {
-- int i;
-- for (i = 0; i < howMany; i++)
-- if(outBuff[i] == '\r') outBuff[i] = '\n';
-- }
-+ {
-+ int i;
-+ for (i = 0; i < howMany; i++)
-+ if(outBuff[i] == '\r') outBuff[i] = '\n';
-+ }
- #endif
- if (send(sock, outBuff, howMany, 0) < 0)
- {
diff -ruN pserv.orig/files/patch-handlers.h pserv/files/patch-handlers.h
--- pserv.orig/files/patch-handlers.h Thu Jan 8 11:29:18 2004
+++ pserv/files/patch-handlers.h Thu Jan 8 11:35:59 2004
@@ -1,5 +1,5 @@
---- handlers.h.orig Wed Oct 15 17:06:59 2003
-+++ handlers.h Wed Oct 15 17:07:08 2003
+--- sources/handlers.h.orig Wed Oct 15 17:06:59 2003
++++ sources/handlers.h Wed Oct 15 17:07:08 2003
@@ -19,6 +19,7 @@
/* handlers.c */
diff -ruN pserv.orig/files/patch-main.c pserv/files/patch-main.c
--- pserv.orig/files/patch-main.c Thu Jan 8 11:29:18 2004
+++ pserv/files/patch-main.c Thu Jan 8 12:28:04 2004
@@ -1,5 +1,5 @@
---- main.c.orig Mon Sep 22 10:39:24 2003
-+++ main.c Thu Oct 16 14:00:02 2003
+--- sources/main.c.orig Sat Dec 20 11:16:21 2003
++++ sources/main.c Thu Jan 8 12:27:13 2004
@@ -23,6 +23,7 @@
char defaultFileName[MAX_PATH_LEN+1];
char logFileName[MAX_PATH_LEN+1];
@@ -8,68 +8,10 @@
char cgiRoot[MAX_PATH_LEN+1]; /* root for CGI scripts exec */
struct timeval sockTimeVal;
mimeData *mimeArray; /* here we will hold all MIME data, inited once, never to be changed */
-@@ -206,10 +207,10 @@
- int reqSize;
- int readLines;
- int tokenEnd;
--
-- /* we copy the header lines to an array for easier parsing */
-+
-+ /* we copy the header lines to an array for easier parsing */
- /* but first we make sure that our string has a newline and an end */
-- req[BUFFER_SIZE] = '\0';
-+ req[BUFFER_SIZE] = '\0';
- reqSize = strlen(req);
- req[reqSize] = '\n';
- reqSize++;
-@@ -230,7 +231,7 @@
- for (k = 0; k < readLines; k++)
- printf("%d - |%s|\n", k, reqArray[k]);
- #endif
--
-+
- /* first line: method, path and protocol version */
- /* we copy to a temporary buffer to be more secure against overflows */
- i = j = 0;
-@@ -246,7 +247,7 @@
- else
- tokenEnd = NO;
- i++;
--
-+
- /* we look for the document address */
- j = 0;
- reqStruct->documentAddress[0] = '\0';
-@@ -259,14 +260,14 @@
- else
- token[j] = '\0'; /* to make sure we have a string */
- /* now we need to convert some escapings from the path like %20 */
-- convertPercents(token, j);
-+ convertPercents(token, j);
- strcpy(reqStruct->documentAddress, token); /* copy back */
- if (reqArray[0][i] == '\0')
- tokenEnd = YES;
- else
- tokenEnd = NO;
- i++;
--
-+
- /* we need now to separate path from query string ("?" separated) */
- if (reqArray[0][i-1] == '?')
- {
-@@ -282,7 +283,7 @@
- i++;
- }
- }
--
-+
- /* we analyze the HTTP protocol version */
- /* default is 0.9 since that version didn't report itself */
- strcpy(reqStruct->protocolVersion, "HTTP/0.9");
-@@ -306,10 +307,13 @@
+@@ -316,10 +317,13 @@
+ reqStruct->keepAlive = YES;
else if (!strncmp(reqArray[1], "Connection: Keep-Alive", strlen("Connection: keep-alive")))
reqStruct->keepAlive = YES;
-
- /* user-agent, content-length and else */
+ /* user-agent, content-length, content-type, cookie and else */
i = 1;
@@ -81,7 +23,7 @@
while (i < readLines)
{
if (!strncmp(reqArray[i], "User-Agent:", strlen("User-Agent:")))
-@@ -317,14 +321,28 @@
+@@ -327,14 +331,28 @@
strncpy(reqStruct->userAgent, &reqArray[i][strlen("User-Agent: ")], USER_AGENT_LEN - 1);
reqStruct->userAgent[USER_AGENT_LEN] = '\0';
}
@@ -93,11 +35,9 @@
+ {
+ strcpy(token, &reqArray[i][strlen("Content-length: ")]);
+ sscanf(token, "%ld", &(reqStruct->contentLength));
- #ifdef PRINTF_DEBUG
-- printf("content length %ld\n", reqStruct->contentLength);
++#ifdef PRINTF_DEBUG
+ printf("content length %ld\n", reqStruct->contentLength);
- #endif
-- }
++#endif
+ }
+ else if (!strncmp(reqArray[i], "Content-Type:", strlen("Content-type:")) || !strncmp(reqArray[i], "Content-type:", strlen("Content-type:")))
+ {
@@ -109,14 +49,16 @@
+ else if (!strncmp(reqArray[i], "Cookie:", strlen("Cookie:")))
+ {
+ strncpy(reqStruct->cookie, &reqArray[i][strlen("Cookie: ")], MAX_COOKIE_LEN - 1);
-+#ifdef PRINTF_DEBUG
+ #ifdef PRINTF_DEBUG
+- printf("content length %ld\n", reqStruct->contentLength);
+ printf("cookie %s\n", reqStruct->cookie);
-+#endif
+ #endif
+- }
+ }
i++;
}
- /* if we didn't find a User-Aget we fill in a (N)ot(R)ecognized */
-@@ -414,18 +432,39 @@
+ /* if we didn't find a User-Agent we fill in a (N)ot(R)ecognized */
+@@ -431,18 +449,39 @@
/* we append the default file name */
strcat(completeFilePath, defaultFileName);
analyzeExtension(mimeType, completeFilePath);
@@ -159,7 +101,7 @@
}
}
} else if (!strcmp(req.method, "HEAD"))
-@@ -494,7 +533,14 @@
+@@ -511,7 +550,14 @@
strcat(completeFilePath, defaultFileName);
}
analyzeExtension(mimeType, completeFilePath);
@@ -175,7 +117,7 @@
}
} else if (!strcmp(req.method, "POST"))
{
-@@ -507,13 +553,6 @@
+@@ -525,13 +571,6 @@
int readFinished;
printf("Handling of POST method\n");
@@ -189,50 +131,7 @@
#ifdef PRINTF_DEBUG
printf ("begin of post handling\n");
-@@ -523,9 +562,15 @@
- totalRead = 0;
- stuckCounter = 0;
- timeOutCounter = 0;
-- while (!readFinished)
-- {
-- howMany = recv(newSocket, tempBuff, BUFFER_SIZE, 0);
-+
-+ /* SECURITY: Avoid malicious Content-Length -- check \r\n\r\n\0 also */
-+ if (req.contentLength < 0 || req.contentLength >= BUFFER_SIZE-5) {
-+ sayError(sock, 500, "", req);
-+ return -1;
-+ }
-+
-+ /* SECURITY: Remove loop to prevent buffer overflow */
-+ howMany = recv(newSocket, tempBuff, req.contentLength+5, 0);
- tempBuff[howMany] = '\0'; /* seems that some Unices need this */
- #ifdef PRINTF_DEBUG
- printf ("read: %d\n%s\n", howMany, tempBuff);
-@@ -579,16 +624,15 @@
- if (howMany == req.contentLength)
- readFinished = YES;
- }
-- }
- #ifdef PRINTF_DEBUG
-- printf("total read %d\n", totalRead);
-+ printf("total read %d\n", totalRead);
- #endif
-- if (totalRead == 0)
-- {
-- printf("Request read error\n");
-- } else
-- {
-- if (buff[totalRead - 1] != '\n') /* we need a trailing \n or the script will wait forever */
-+ if (totalRead == 0)
-+ {
-+ printf("Request read error\n");
-+ } else
-+ {
-+ if (buff[totalRead - 1] != '\n') /* we need a trailing \n or the script will wait forever */
- {
- buff[totalRead++] = '\n';
- buff[totalRead] = '\0';
-@@ -596,7 +640,77 @@
+@@ -625,7 +664,77 @@
#ifdef PRINTF_DEBUG
printf("buff: |%s|\n", buff);
#endif
@@ -311,7 +210,7 @@
}
} else
{
-@@ -625,7 +739,7 @@
+@@ -654,7 +763,7 @@
f = fopen(configFile, "r");
if (f == NULL)
{
@@ -320,7 +219,7 @@
*serverPort = DEFAULT_PORT;
*maxChildren = DEFAULT_MAX_CHILDREN;
strcpy(homePath, DEFAULT_DOCS_LOCATION);
-@@ -634,7 +748,9 @@
+@@ -663,7 +772,9 @@
sockTimeVal.tv_usec = DEFAULT_USEC_TO;
strcpy(logFileName, DEFAULT_LOG_FILE);
strcpy(mimeTypesFileName, DEFAULT_MIME_FILE);
@@ -330,7 +229,7 @@
return -1;
}
if (!feof(f)) fscanf(f, "%s %s", str1, str2);
-@@ -735,11 +851,25 @@
+@@ -764,11 +875,25 @@
if (mimeTypesFileName == NULL)
{
strcpy(mimeTypesFileName, DEFAULT_MIME_FILE);
@@ -358,29 +257,3 @@
}
if (!feof(f)) fscanf(f, "%s %s", str1, str2);
if (str1 != NULL && str2 != NULL && !strcmp(str1, "cgiRoot"))
-@@ -775,6 +905,7 @@
- int readFinished;
- struct request gottenReq;
- int isKeepAlive;
-+ int bool;
- struct sockaddr_in listenName; /* data struct for the listen port */
- struct sockaddr_in acceptedSockStruct; /* sockaddr for the internetworking */
- int acceptedSocketLen; /* size of the structure */
-@@ -808,9 +939,16 @@
- printf("socket creation error occoured\n");
- return -1;
- }
-+ bool = 1;
-+ error = setsockopt (theSocket, SOL_SOCKET, SO_REUSEADDR, &bool, sizeof(bool));
-+ if (error == -1)
-+ { if (errno == EADDRINUSE)
-+ printf("set socket option error occoured\n");
-+ return -1;
-+ }
- error = bind (theSocket, (struct sockaddr*) &listenName, sizeof(listenName));
- if (error == -1)
-- {
-+ { if (errno == EADDRINUSE)
- printf("socket binding error occoured\n");
- return -2;
- }
diff -ruN pserv.orig/files/patch-main.h pserv/files/patch-main.h
--- pserv.orig/files/patch-main.h Thu Jan 8 11:29:18 2004
+++ pserv/files/patch-main.h Thu Jan 8 12:31:33 2004
@@ -1,25 +1,25 @@
---- main.h.orig Sun Oct 19 17:22:03 2003
-+++ main.h Tue Oct 21 00:19:57 2003
-@@ -27,11 +27,12 @@
+--- sources/main.h.orig Sat Dec 20 11:16:21 2003
++++ sources/main.h Thu Jan 8 12:31:15 2004
+@@ -27,12 +27,13 @@
/* --- CPP parsing options --- */
-#define PRINTF_DEBUG /* enable this to print some debugging messages */
+#undef PRINTF_DEBUG /* enable this to print some debugging messages */
#undef ON_THE_FLY_CONVERSION /* enable this for line ending conversion */
- #undef BRAIN_DEAD_CAST /* if your compiler is brainwashed and does not cast standard types.h structures */
- #define FORKING_SERVER /* enables to fork for every request */
- #define AUTO_INDEX /* enables auto-index of directories */
-+#define PHP /* enables transparent PHP support */
+ #define BRAIN_DEAD_CAST /* if your compiler is brainwashed and does not cast standard types.h structures */
+ #define FORKING_SERVER /* enables to fork for every request */
+ #define AUTO_INDEX /* enables auto-index of directories */
+ #define SOCKADDR_REUSE /* enables reuse oth the socket (quick relaunch) */
++#define PHP /* enables transparent PHP support */
+
/* --- Configure options --- */
- #define CONFIG_FILE_NAME "pserv.conf"
-@@ -42,19 +43,19 @@
+@@ -44,18 +45,19 @@
#define MIME_TYPE_DEFAULT "application/octet-stream"
/* configuration file location */
--#define DEFAULT_CONFIG_LOCATION "/home/multix/pserv/"
--//#define DEFAULT_CONFIG_LOCATION "/Users/multix/Documents/code/pserv/"
+-#define DEFAULT_CONFIG_LOCATION "/home/multix/pserv/defaults/"
+#define DEFAULT_CONFIG_LOCATION "/usr/local/etc/"
/* hard-wired defaults, if loading of config file fails */
@@ -31,9 +31,9 @@
#define DEFAULT_FILE_NAME "index.html"
#define DEFAULT_SEC_TO 1
#define DEFAULT_USEC_TO 100
--#define DEFAULT_LOG_FILE "/export/home/multix/pserv/pserv.log"
--#define DEFAULT_MIME_FILE "/export/home/multix/pserv/mime_types.dat"
--#define DEFAULT_CGI_ROOT "/export/home/multix/public_html/cgi-bin"
+-#define DEFAULT_LOG_FILE "/home/multix/pserv/pserv.log"
+-#define DEFAULT_MIME_FILE "/home/multix/pserv/mime_types.dat"
+-#define DEFAULT_CGI_ROOT "/home/multix/public_html/cgi-bin"
+#define DEFAULT_LOG_FILE "/var/log/pserv.log"
+#define DEFAULT_MIME_FILE "/usr/local/etc/mime.types"
+#define DEFAULT_PHP_FILE "/usr/local/bin/php"
@@ -41,7 +41,7 @@
#define DEFAULT_SERVER_NAME "localhost"
/* amount of connections queued in listening */
-@@ -123,8 +124,10 @@
+@@ -127,8 +129,10 @@
#define ADDRESS_LEN 16
#define METHOD_LEN 16
#define PROTOCOL_LEN 16
@@ -52,7 +52,7 @@
/* the maximum path name of your system should be available in MAXNAMLEN
defined in dirent.h. If not, set a reasonable value like 1024 */
-@@ -139,7 +142,9 @@
+@@ -143,7 +147,9 @@
char protocolVersion[PROTOCOL_LEN+1];
int keepAlive;
char userAgent[USER_AGENT_LEN+1];
diff -ruN pserv.orig/files/patch-mime.c pserv/files/patch-mime.c
--- pserv.orig/files/patch-mime.c Thu Jan 8 11:29:18 2004
+++ pserv/files/patch-mime.c Thu Jan 8 11:38:08 2004
@@ -1,5 +1,5 @@
---- mime.c.orig Thu Sep 18 15:26:55 2003
-+++ mime.c Wed Oct 15 18:38:42 2003
+--- sources/mime.c.orig Thu Sep 18 15:26:55 2003
++++ sources/mime.c Wed Oct 15 18:38:42 2003
@@ -43,8 +43,8 @@
f = fopen(mimeTypesFileName, "r");
if (f == NULL)
diff -ruN pserv.orig/files/patch-mime_types.dat pserv/files/patch-mime_types.dat
--- pserv.orig/files/patch-mime_types.dat Thu Jan 8 11:29:18 2004
+++ pserv/files/patch-mime_types.dat Thu Jan 8 11:38:24 2004
@@ -1,5 +1,5 @@
---- mime_types.dat.orig Wed Oct 15 15:57:08 2003
-+++ mime_types.dat Wed Oct 15 15:57:22 2003
+--- defaults/mime_types.dat.orig Wed Oct 15 15:57:08 2003
++++ defaults/mime_types.dat Wed Oct 15 15:57:22 2003
@@ -14,3 +14,4 @@
tar application/x-tar
lha application/octet-stream
diff -ruN pserv.orig/files/patch-pserv.conf pserv/files/patch-pserv.conf
--- pserv.orig/files/patch-pserv.conf Thu Jan 8 11:29:18 2004
+++ pserv/files/patch-pserv.conf Thu Jan 8 12:34:01 2004
@@ -1,8 +1,8 @@
---- pserv.conf.orig Sun Oct 19 16:51:27 2003
-+++ pserv.conf Tue Oct 21 00:22:07 2003
+--- defaults/pserv.conf.orig Sat Dec 20 01:22:10 2003
++++ defaults/pserv.conf Thu Jan 8 12:33:51 2004
@@ -1,9 +1,10 @@
--port 80
-+port 80
+-port 8080
++port 80
maxChildren 4
-documentsPath /home/multix/public_html
+documentsPath %%PREFIX%%/www/data
@@ -10,7 +10,7 @@
secTimeout 1
uSecTimeout 100000
-logFile /home/multix/pserv/pserv.log
--mimeTypesFile /home/multix/pserv/mime_types.dat
+-mimeTypesFile /home/multix/pserv/defaults/mime_types.dat
-cgiRoot /home/multix/public_html/cgi-bin
+logFile /var/log/pserv.log
+mimeTypesFile %%PREFIX%%/etc/mime.types
--- pserv.diff ends here ---
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-ports-bugs
mailing list