Date: Sun, 11 Aug 2002 14:47:54 -0500 From: Jerry Lundy <jwlundy@swbell.net> To: roman@xpert.com Cc: ports@FreeBSD.org Subject: FreeBSD Port: netsed-0.01 Message-ID: <3D56BF6A.F71C5F20@swbell.net>
next in thread | raw e-mail | index | archive | help
This is a multi-part message in MIME format. --------------4C8B423034AD1BB86C3CE093 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Greetings. The netsed-0.01 port uses System V / Unix 98 methods to catch SIGCHLD and prevent zombies. The method doesn't work under FreeBSD. The attached patch adds a waitpid signal handler to the code to prevent the accumulation of zombie child processes. (The patch is to the original, unpatched netsed.c source. No additional changes were made to the Makefile.) If I need to submit this elsewhere or in another format, please let me know. Cheers, Jerry Lundy --------------4C8B423034AD1BB86C3CE093 Content-Type: text/plain; charset=us-ascii; name="netsed-bsd.patch" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="netsed-bsd.patch" --- netsed.c.orig Fri Jan 5 18:58:22 2001 +++ netsed.c Sun Aug 11 14:32:29 2002 @@ -2,6 +2,7 @@ #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> +#include <sys/wait.h> #include <netinet/in.h> #include <arpa/inet.h> #include <fcntl.h> @@ -45,11 +46,11 @@ ERR("This will replace all occurences of pat1 with pat2 in matching packets.\n"); ERR("Additional parameter (count) can be used to expire rule after 'count'\n"); ERR("succesful substitutions. Eight-bit characters, including NULL and '/', can\n"); - ERR("be passed using HTTP-alike hex escape sequences (eg. %%0a%%0d). Single '%%'\n"); - ERR("can be reached by using '%%%%'. Examples:\n\n"); - ERR(" 's/anrew/mike/1' - replace 'andrew' with 'mike' (once)\n"); - ERR(" 's/anrew/mike' - replace all occurences of 'andrew' with 'mike'\n"); - ERR(" 's/anrew/mike%%00' - replace 'andrew' with 'mike\\x00' (to keep orig. size)\n"); + ERR("be passed using HTTP-alike hex escape sequences (eg. CRLF -> %%0a%%0d).\n"); + ERR("Single '%%' can be reached by using '%%%%'. Examples:\n\n"); + ERR(" 's/andrew/mike/1' - replace 'andrew' with 'mike' (once)\n"); + ERR(" 's/andrew/mike' - replace all occurences of 'andrew' with 'mike'\n"); + ERR(" 's/andrew/mike%%00' - replace 'andrew' with 'mike\\x00' (to keep orig. size)\n"); ERR(" 's/%%%%/%%2f/20' - replace '%%' with '/' in first 20 packets\n\n"); ERR("Rules are not working on cross-packet boundaries and are evaluated from\n"); ERR("first to last not expired rule.\n"); @@ -134,8 +135,10 @@ void bind_and_listen(int tcp,int port) { + int on=1; struct sockaddr_in laddr; lsock=socket(PF_INET,tcp ? SOCK_STREAM:SOCK_DGRAM,0); + setsockopt(lsock, SOL_SOCKET, SO_REUSEADDR, (char *)&on, sizeof(on)); fcntl(lsock,F_SETFL,O_NONBLOCK); laddr.sin_family = PF_INET; laddr.sin_port = htons (port); @@ -186,7 +189,6 @@ rd=read(s1,buf,sizeof(buf)); if (rd<0 && errno!=EAGAIN) return 0; // s1 not connected if (rd>0) { - fcntl(s2,F_SETFL,O_SYNC); printf("[+] Caught server -> client packet.\n"); rd=sed_the_buffer(rd); if (write(s2,b2,rd)<=0) return 0; // not able to send @@ -195,7 +197,6 @@ rd=read(s2,buf,sizeof(buf)); if (rd<0 && errno!=EAGAIN) return 0; // s2 not connected if (rd>0) { - fcntl(s1,F_SETFL,O_SYNC); printf("[+] Caught client -> server packet.\n"); rd=sed_the_buffer(rd); if (write(s1,b2,rd)<=0) return 0; // not able to send @@ -204,6 +205,14 @@ return 1; } +void sig_chld(int signo) +{ + pid_t pid; + int stat; + while ( (pid = waitpid(-1, &stat, WNOHANG)) > 0) + printf("child %d terminated\n", pid); + return; +} int main(int argc,char* argv[]) { int i; @@ -242,7 +251,7 @@ if (fixedhost && fixedport) printf("[+] Using fixed forwarding to %s:%s.\n",argv[3],argv[4]); else printf("[+] Using dynamic (transparent proxy) forwarding.\n"); signal(SIGPIPE,SIG_IGN); - signal(SIGCHLD,SIG_IGN); + signal(SIGCHLD,sig_chld); // Am I bad coder?;> --------------4C8B423034AD1BB86C3CE093-- To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-ports" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?3D56BF6A.F71C5F20>