mirror of
https://git.FreeBSD.org/ports.git
synced 2024-12-25 04:43:33 +00:00
- Update to version 3.0.b3
PR: 61065 Submitted by: ale (maintainer)
This commit is contained in:
parent
8ff56546a2
commit
b68900d3dc
Notes:
svn2git
2021-03-31 03:12:20 +00:00
svn path=/head/; revision=97694
@ -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@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>
|
||||
|
@ -1 +1 @@
|
||||
MD5 (pserv-20-Oct-03.tar.Z) = 1b38238b8de0704b03ae245271f4899e
|
||||
MD5 (pserv-08-Jan-04.tar.Z) = 716795e74babdf70daeb7b93dbb7f47b
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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 */
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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];
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user