| diff -cr ../TIS.orig/fwtk/Makefile.config.linux fwtk/Makefile.config.linux |
| *** ../TIS.orig/fwtk/Makefile.config.linux Sat Sep 7 05:58:21 1996 |
| --- fwtk/Makefile.config.linux Sun Feb 2 05:48:01 1997 |
| *************** |
| *** 13,19 **** |
| |
| |
| # Your C compiler (eg, "cc" or "gcc") |
| ! CC= cc |
| |
| |
| # program to use for installation -- this may or may not preserve |
| --- 13,19 ---- |
| |
| |
| # Your C compiler (eg, "cc" or "gcc") |
| ! CC= gcc |
| |
| |
| # program to use for installation -- this may or may not preserve |
| *************** |
| *** 24,37 **** |
| |
| # Defines for your operating system |
| # |
| ! DEFINES=-DLINUX |
| #DEFINES=-DSYSV -DSOLARIS |
| |
| # Options for your compiler (eg, "-g" for debugging, "-O" for |
| # optimizing, or "-g -O" for both under GCC) |
| #COPT= -g -traditional $(DEFINES) |
| ! COPT= -g $(DEFINES) |
| ! #COPT= -O $(DEFINES) |
| |
| # Version of "make" you want to use |
| #MAKE= gnumake |
| --- 24,37 ---- |
| |
| # Defines for your operating system |
| # |
| ! DEFINES=-DLINUX -DUSE_IP_FILTER |
| #DEFINES=-DSYSV -DSOLARIS |
| |
| # Options for your compiler (eg, "-g" for debugging, "-O" for |
| # optimizing, or "-g -O" for both under GCC) |
| #COPT= -g -traditional $(DEFINES) |
| ! #COPT= -g $(DEFINES) |
| ! COPT= -O $(DEFINES) |
| |
| # Version of "make" you want to use |
| #MAKE= gnumake |
| *************** |
| *** 44,50 **** |
| |
| |
| # Destination directory for installation of binaries |
| ! DEST= /usr/local/etc |
| |
| |
| # Destination directory for installation of man pages |
| --- 44,50 ---- |
| |
| |
| # Destination directory for installation of binaries |
| ! DEST= /usr/local/sbin |
| |
| |
| # Destination directory for installation of man pages |
| *************** |
| *** 72,78 **** |
| # or -Bstatic for static binaries under SunOS 4.1.x) |
| #LDFL= -Bstatic |
| #LDFL= |
| ! LDFL= -g |
| |
| |
| # Location of the fwtk sources [For #include by any external tools needing it] |
| --- 72,79 ---- |
| # or -Bstatic for static binaries under SunOS 4.1.x) |
| #LDFL= -Bstatic |
| #LDFL= |
| ! #LDFL= -g |
| ! LDFL= -O |
| |
| |
| # Location of the fwtk sources [For #include by any external tools needing it] |
| *************** |
| *** 81,87 **** |
| |
| |
| # Location of X libraries for X-gw |
| ! XLIBDIR=/usr/X11/lib |
| #XLIBDIR=/usr/local/X11R5/lib |
| |
| # X Libraries |
| --- 82,88 ---- |
| |
| |
| # Location of X libraries for X-gw |
| ! XLIBDIR=/usr/X11R6/lib |
| #XLIBDIR=/usr/local/X11R5/lib |
| |
| # X Libraries |
| *************** |
| *** 96,102 **** |
| #XLIBS = -L$(XLIBDIR) -lXaw -lXmu -lXt -lXext -lX11 |
| |
| # Location of X include files |
| ! XINCLUDE=/usr/X11/include |
| #XINCLUDE=/usr/local/X11R5/include |
| |
| # Objects to include in libfwall for SYSV |
| --- 97,103 ---- |
| #XLIBS = -L$(XLIBDIR) -lXaw -lXmu -lXt -lXext -lX11 |
| |
| # Location of X include files |
| ! XINCLUDE=/usr/X11R6/include |
| #XINCLUDE=/usr/local/X11R5/include |
| |
| # Objects to include in libfwall for SYSV |
| diff -cr ../TIS.orig/fwtk/Makefile.config.solaris fwtk/Makefile.config.solaris |
| *** ../TIS.orig/fwtk/Makefile.config.solaris Sat Sep 7 06:14:13 1996 |
| --- fwtk/Makefile.config.solaris Sun Feb 2 06:09:19 1997 |
| *************** |
| *** 11,30 **** |
| # |
| # RcsId: "$Header$" |
| |
| |
| # Your C compiler (eg, "cc" or "gcc") |
| ! CC= cc |
| |
| |
| # program to use for installation -- this may or may not preserve |
| # old versions (or whatever). assumes that it takes parameters: |
| # copy source dest |
| ! CP= cp |
| |
| |
| # Defines for your operating system |
| # |
| ! DEFINES=-DSYSV -DSOLARIS |
| |
| #DEFINES=-DSYSV -DSOLARIS -Dgethostbyname=res_gethostbyname \ |
| -Dgethostbyaddr=res_gethostbyaddr -Dgetnetbyname=res_getnetbyname \ |
| --- 11,34 ---- |
| # |
| # RcsId: "$Header$" |
| |
| + # |
| + # Path to sources of ip_filter (ip_nat.h required in lib/hnam.c) |
| + # |
| + IPFPATH=/src/unpacked/firewall/ip_fil3.1.5 |
| |
| # Your C compiler (eg, "cc" or "gcc") |
| ! CC= gcc |
| |
| |
| # program to use for installation -- this may or may not preserve |
| # old versions (or whatever). assumes that it takes parameters: |
| # copy source dest |
| ! CP= /usr/ucb/install -c -s |
| |
| |
| # Defines for your operating system |
| # |
| ! DEFINES=-DSYSV -DSOLARIS -DUSE_IP_FILTER -I$(IPFPATH) |
| |
| #DEFINES=-DSYSV -DSOLARIS -Dgethostbyname=res_gethostbyname \ |
| -Dgethostbyaddr=res_gethostbyaddr -Dgetnetbyname=res_getnetbyname \ |
| *************** |
| *** 45,52 **** |
| |
| |
| # Your ranlib utility (use "touch" if you don't have ranlib) |
| ! RANLIB= ranlib |
| ! #RANLIB= touch |
| |
| |
| # Destination directory for installation of binaries |
| --- 49,56 ---- |
| |
| |
| # Your ranlib utility (use "touch" if you don't have ranlib) |
| ! # RANLIB= ranlib |
| ! RANLIB= touch |
| |
| |
| # Destination directory for installation of binaries |
| diff -cr ../TIS.orig/fwtk/firewall.h fwtk/firewall.h |
| *** ../TIS.orig/fwtk/firewall.h Sun Sep 8 05:55:26 1996 |
| --- fwtk/firewall.h Sun Feb 2 05:23:33 1997 |
| *************** |
| *** 47,53 **** |
| system. |
| */ |
| #ifndef PERMFILE |
| ! #define PERMFILE "/usr/local/etc/netperm-table" |
| #endif |
| |
| /* |
| --- 47,53 ---- |
| system. |
| */ |
| #ifndef PERMFILE |
| ! #define PERMFILE "/etc/fwtk/netperm-table" |
| #endif |
| |
| /* |
| *************** |
| *** 67,73 **** |
| |
| /* Choose a system logging facility for the firewall toolkit. */ |
| #ifndef LFAC |
| ! #define LFAC LOG_DAEMON |
| #endif |
| |
| |
| --- 67,73 ---- |
| |
| /* Choose a system logging facility for the firewall toolkit. */ |
| #ifndef LFAC |
| ! #define LFAC LOG_LOCAL5 |
| #endif |
| |
| |
| *************** |
| *** 215,220 **** |
| #define PERM_ALLOW 01 |
| #define PERM_DENY 02 |
| |
| ! |
| #define _INCL_FWALL_H |
| #endif |
| --- 215,222 ---- |
| #define PERM_ALLOW 01 |
| #define PERM_DENY 02 |
| |
| ! #ifdef USE_IP_FILTER |
| ! extern char *getdsthost(int, int*); |
| ! #endif |
| #define _INCL_FWALL_H |
| #endif |
| diff -cr ../TIS.orig/fwtk/ftp-gw/ftp-gw.c fwtk/ftp-gw/ftp-gw.c |
| *** ../TIS.orig/fwtk/ftp-gw/ftp-gw.c Fri Sep 6 18:55:05 1996 |
| --- fwtk/ftp-gw/ftp-gw.c Sat Feb 1 06:49:13 1997 |
| *************** |
| *** 50,55 **** |
| --- 50,59 ---- |
| #ifndef FTPPORT |
| #define FTPPORT 21 |
| #endif |
| + #ifdef USE_IP_FILTER |
| + static int do_transparent=0; |
| + static int connectdest(); |
| + #endif |
| |
| static Cfg *confp; |
| static char **validests = (char **)0; |
| *************** |
| *** 170,175 **** |
| --- 174,182 ---- |
| char xuf[1024]; |
| char huf[128]; |
| char *passuser = (char *)0; /* passed user as av */ |
| + #ifdef USE_IP_FILTER |
| + char *psychic, *hotline; |
| + #endif |
| |
| #ifndef LOG_DAEMON |
| openlog("ftp-gw",LOG_PID); |
| *************** |
| *** 313,320 **** |
| } |
| } else |
| timeout = 60*60; |
| |
| - |
| /* display a welcome file or message */ |
| if(passuser == (char *)0) { |
| if((cf = cfg_get("welcome-msg",confp)) != (Cfg *)0) { |
| --- 320,330 ---- |
| } |
| } else |
| timeout = 60*60; |
| + #ifdef USE_IP_FILTER |
| + psychic=getdsthost(0,NULL); |
| + if(psychic) { do_transparent++; } |
| + #endif |
| |
| /* display a welcome file or message */ |
| if(passuser == (char *)0) { |
| if((cf = cfg_get("welcome-msg",confp)) != (Cfg *)0) { |
| *************** |
| *** 322,327 **** |
| --- 332,345 ---- |
| syslog(LLEV,"fwtkcfgerr: welcome-msg must have one parameter, line %d",cf->ln); |
| exit(1); |
| } |
| + #ifdef USE_IP_FILTER |
| + if(do_transparent) { |
| + if(sayfile2(0,cf->argv[0],220)) { |
| + syslog(LLEV,"fwtksyserr: cannot display welcome %s: %m",cf->argv[0]); |
| + exit(1); |
| + } |
| + } else |
| + #endif /* USE_IP_FILTER */ |
| if(sayfile(0,cf->argv[0],220)) { |
| syslog(LLEV,"fwtksyserr: cannot display welcome %s: %m",cf->argv[0]); |
| exit(1); |
| *************** |
| *** 332,338 **** |
| if(authallflg) |
| if(say(0,"220-Proxy first requires authentication")) |
| exit(1); |
| ! sprintf(xuf,"220 %s FTP proxy (Version %s) ready.",huf,FWTK_VERSION_MINOR); |
| if(say(0,xuf)) |
| exit(1); |
| } |
| --- 350,361 ---- |
| if(authallflg) |
| if(say(0,"220-Proxy first requires authentication")) |
| exit(1); |
| ! #ifdef USE_IP_FILTER |
| ! if(do_transparent) |
| ! sprintf(xuf,"220-%s FTP proxy (Version %s) ready.",huf,FWTK_VERSION_MINOR); |
| ! else |
| ! #endif |
| ! sprintf(xuf,"220 %s FTP proxy (Version %s) ready.",huf,FWTK_VERSION_MINOR); |
| if(say(0,xuf)) |
| exit(1); |
| } |
| *************** |
| *** 352,358 **** |
| if(cmd_user(2,fakav,"user internal")) |
| exit(1); |
| } |
| ! |
| /* main loop */ |
| while(1) { |
| FD_ZERO(&rdy); |
| --- 375,386 ---- |
| if(cmd_user(2,fakav,"user internal")) |
| exit(1); |
| } |
| ! #ifdef USE_IP_FILTER |
| ! if(do_transparent) { |
| ! connectdest(psychic,21); |
| ! } |
| ! #endif |
| ! |
| /* main loop */ |
| while(1) { |
| FD_ZERO(&rdy); |
| *************** |
| *** 676,681 **** |
| --- 704,719 ---- |
| return(sayn(0,noad,sizeof(noad)-1)); |
| } |
| |
| + #ifdef USE_IP_FILTER |
| + if(do_transparent) { |
| + if((rfd==(-1)) && (x=connectdest(dest,port))) return x; |
| + sprintf(buf,"USER %s",user); |
| + if(say(rfd,buf)) return(1); |
| + x=getresp(rfd,buf,sizeof(buf),1); |
| + if(sendsaved(0,x)) return(1); |
| + return(say(0,buf)); |
| + } |
| + #endif |
| if(*dest == '\0') |
| dest = "localhost"; |
| |
| *************** |
| *** 717,723 **** |
| char ebuf[512]; |
| |
| strcpy(ebuf,buf); |
| ! sprintf(buf,"521 %s: %s",dest,ebuf); |
| rfd = -1; |
| return(say(0,buf)); |
| } |
| --- 755,766 ---- |
| char ebuf[512]; |
| |
| strcpy(ebuf,buf); |
| ! #ifdef USE_IP_FILTER |
| ! if(do_transparent) { |
| ! sprintf(buf,"521 %s,%d: %s",dest,ntohs(port),ebuf); |
| ! } else |
| ! #endif |
| ! sprintf(buf,"521 %s: %s",dest,ebuf); |
| rfd = -1; |
| return(say(0,buf)); |
| } |
| *************** |
| *** 1874,1876 **** |
| --- 1917,2036 ---- |
| dup(nread); |
| } |
| #endif |
| + |
| + #ifdef USE_IP_FILTER |
| + static int connectdest(dest, port) |
| + char *dest; |
| + short port; |
| + { |
| + char buf[1024], mbuf[512]; |
| + int msg_int, x; |
| + |
| + if(*dest == '\0') |
| + dest = "localhost"; |
| + |
| + if(validests != (char **)0) { |
| + char **xp; |
| + int x; |
| + |
| + for(xp = validests; *xp != (char *)0; xp++) { |
| + if(**xp == '!' && hostmatch(*xp + 1,dest)) { |
| + return(baddest(0,dest)); |
| + } else { |
| + if(hostmatch(*xp,dest)) |
| + break; |
| + } |
| + } |
| + if(*xp == (char *)0) |
| + return(baddest(0,dest)); |
| + } |
| + |
| + /* Extended permissions processing goes in here for destination */ |
| + if(extendperm) { |
| + msg_int = auth_perm(confp, authuser, "ftp-gw", dest,(char *)0); |
| + if(msg_int == 1) { |
| + sprintf(mbuf,"Permission denied for user %s to connect to %s",authuser,dest); |
| + syslog(LLEV,"deny host=%s/%s connect to %s user=%s",rladdr,riaddr,dest,authuser); |
| + say(0,mbuf); |
| + return(1); |
| + } else { |
| + if(msg_int == -1) { |
| + sprintf(mbuf,"No match in netperm-table for %s to ftp to %s",authuser,dest); |
| + say(0,mbuf); |
| + return(1); |
| + } |
| + } |
| + } |
| + |
| + syslog(LLEV,"permit host=%s/%s connect to %s",rladdr,riaddr,dest); |
| + |
| + if((rfd = conn_server(dest,port,0,buf)) < 0) { |
| + char ebuf[512]; |
| + |
| + strcpy(ebuf,buf); |
| + sprintf(buf,"521 %s: %s",dest,ebuf); |
| + rfd = -1; |
| + return(say(0,buf)); |
| + } |
| + if(!do_transparent) { |
| + sprintf(buf,"----GATEWAY CONNECTED TO %s----",dest); |
| + saveline(buf); |
| + } |
| + |
| + /* we are now connected and need to try the autologin thing */ |
| + x = getresp(rfd,buf,sizeof(buf),1); |
| + if(x / 100 != COMPLETE) { |
| + sendsaved(0,-1); |
| + return(say(0,buf)); |
| + } |
| + saveline(buf); |
| + |
| + sendsaved(0,-1); |
| + return 0; |
| + } |
| + |
| + |
| + /* ok, so i'm in a hurry. english paper due RSN. */ |
| + sayfile2(fd,fn,code) |
| + int fd; |
| + char *fn; |
| + int code; |
| + { |
| + FILE *f; |
| + char buf[BUFSIZ]; |
| + char yuf[BUFSIZ]; |
| + char *c; |
| + int x; |
| + int saidsomething = 0; |
| + |
| + if((f = fopen(fn,"r")) == (FILE *)0) |
| + return(1); |
| + while(fgets(buf,sizeof(buf),f) != (char *)0) { |
| + if((c = index(buf,'\n')) != (char *)0) |
| + *c = '\0'; |
| + x = fgetc(f); |
| + if(feof(f)) |
| + sprintf(yuf,"%3.3d-%s",code,buf); |
| + else { |
| + sprintf(yuf,"%3.3d-%s",code,buf); |
| + ungetc(x,f); |
| + } |
| + if(say(fd,yuf)) { |
| + fclose(f); |
| + return(1); |
| + } |
| + saidsomething++; |
| + } |
| + fclose(f); |
| + if (!saidsomething) { |
| + syslog(LLEV,"fwtkcfgerr: sayfile for %d is empty",code); |
| + sprintf(yuf, "%3.3d The file to display is empty",code); |
| + if(say(fd,yuf)) { |
| + fclose(f); |
| + return(1); |
| + } |
| + } |
| + return(0); |
| + } |
| + |
| + #endif /* USE_IP_FILTER */ |
| diff -cr ../TIS.orig/fwtk/http-gw/http-gw.c fwtk/http-gw/http-gw.c |
| *** ../TIS.orig/fwtk/http-gw/http-gw.c Mon Sep 9 20:40:53 1996 |
| --- fwtk/http-gw/http-gw.c Sun Feb 2 06:41:18 1997 |
| *************** |
| *** 27,32 **** |
| --- 27,35 ---- |
| static char http_buffer[8192]; |
| static char reason[8192]; |
| static int checkBrowserType = 1; |
| + #ifdef USE_IP_FILTER |
| + static int do_transparent=0; |
| + #endif |
| |
| static void do_logging() |
| { char *proto = "GOPHER"; |
| *************** |
| *** 422,427 **** |
| --- 425,441 ---- |
| /*(NOT A SPECIAL FORM)*/ |
| |
| if((rem_type & TYPE_LOCAL)== 0){ |
| + #ifdef USE_IP_FILTER |
| + char *psychic=getdsthost(sockfd,&def_port); |
| + if(psychic) { |
| + if(strlen(psychic)<=MAXHOSTNAMELEN) { |
| + do_transparent++; |
| + strncpy(def_httpd,psychic,strlen(psychic)); |
| + strncpy(def_server,psychic,strlen(psychic)); |
| + } |
| + } |
| + |
| + #endif /* USE_IP_FILTER */ |
| /* See if it can be forwarded */ |
| |
| if( can_forward(buf)){ |
| *************** |
| *** 1513,1518 **** |
| --- 1527,1537 ---- |
| parse_vec[0], |
| parse_vec[1], |
| ourname, ourport); |
| + } |
| + #ifdef USE_IP_FILTER |
| + else if(do_transparent) { |
| + sprintf(new_reply,"%s\t%s\t%s\t%s",parse_vec[0],parse_vec[1],parse_vec[2],parse_vec[3]); |
| + #endif /* USE_IP_FILTER */ |
| }else{ |
| sprintf(new_reply,"%s\tgopher://%s:%s/%c%s\t%s\t%u", |
| parse_vec[0], parse_vec[2], |
| diff -cr ../TIS.orig/fwtk/lib/hnam.c fwtk/lib/hnam.c |
| *** ../TIS.orig/fwtk/lib/hnam.c Sat Nov 5 00:30:19 1994 |
| --- fwtk/lib/hnam.c Sat Feb 1 08:17:46 1997 |
| *************** |
| *** 20,25 **** |
| --- 20,37 ---- |
| |
| extern char *inet_ntoa(); |
| |
| + #if defined(USE_IP_FILTER) |
| + #include <net/if.h> |
| + #ifndef LINUX |
| + #include "ip_nat.h" |
| + #endif |
| + #if defined(SOLARIS) |
| + #include <sys/stat.h> |
| + #include <fcntl.h> |
| + #include <unistd.h> |
| + #include <sys/ioccom.h> |
| + #endif |
| + #endif /* IP_FILTER */ |
| |
| #include "firewall.h" |
| |
| *************** |
| *** 45,47 **** |
| --- 57,158 ---- |
| bcopy(hp->h_addr,&sin.sin_addr,hp->h_length); |
| return(inet_ntoa(sin.sin_addr)); |
| } |
| + |
| + |
| + |
| + #ifdef USE_IP_FILTER |
| + char *getdsthost(fd, ptr) |
| + int fd; |
| + int *ptr; |
| + { |
| + struct sockaddr_in sin; |
| + struct hostent *hp; |
| + int sl=sizeof(struct sockaddr_in), err=0, local_h=0, i=0; |
| + static char buf[255], hostbuf[255]; |
| + #if defined(__FreeBSD__) || defined(SOLARIS) |
| + struct sockaddr_in rsin; |
| + struct natlookup natlookup; |
| + int natfd; |
| + #endif |
| + |
| + #ifdef linux |
| + /* This should also work for UDP. Unfortunately, it doesn't. |
| + Maybe when the Linux UDP proxy code gets a little cleaner. |
| + */ |
| + if(!(err=getsockname(0,&sin,&sl))) { |
| + if(ptr) *ptr=ntohs(sin.sin_port); |
| + sprintf(buf,"%s",inet_ntoa(sin.sin_addr)); |
| + gethostname(hostbuf,254); |
| + hp=gethostbyname(hostbuf); |
| + while(hp->h_addr_list[i]) { |
| + bzero(&sin,&sl); |
| + memcpy(&sin.sin_addr,hp->h_addr_list[i++],sizeof(hp->h_addr_list[i++])); |
| + if(!strcmp(buf,inet_ntoa(sin.sin_addr))) local_h++; |
| + } |
| + if(local_h) { /* syslog(LLEV,"DEBUG: hnam.c: non-transparent."); */ return(NULL); } |
| + else { return(buf); } |
| + } |
| + #endif |
| + |
| + #if defined(__FreeBSD__) |
| + /* The basis for this block of code is Darren Reed's |
| + patches to the TIS ftwk's ftp-gw. |
| + */ |
| + bzero((char*)&sin,sizeof(sin)); |
| + bzero((char*)&rsin,sizeof(rsin)); |
| + if(getsockname(fd,(struct sockaddr*)&sin,&sl)<0) { |
| + return NULL; |
| + } |
| + sl=sizeof(rsin); |
| + if(getpeername(fd,(struct sockaddr*)&rsin,&sl)<0) { |
| + return NULL; |
| + } |
| + natlookup.nl_inport=sin.sin_port; |
| + natlookup.nl_outport=rsin.sin_port; |
| + natlookup.nl_inip=sin.sin_addr; |
| + natlookup.nl_outip=rsin.sin_addr; |
| + if((natfd=open("/dev/ipnat",O_RDONLY))<0) { |
| + return(NULL); |
| + } |
| + if(ioctl(natfd,SIOCGNATL,&natlookup)==(-1)) { |
| + return(NULL); |
| + } |
| + close(natfd); |
| + if(ptr) *ptr=ntohs(natlookup.nl_realport); |
| + sprintf(buf,"%s",inet_ntoa(natlookup.nl_realip)); |
| + #endif |
| + |
| + #if defined(SOLARIS) /* for Solaris */ |
| + /* The basis for this block of code is Darren Reed's |
| + * patches to the TIS ftwk's ftp-gw. |
| + * modified for Solaris from Michael Kutzner, Michael.Kutzner@paderlinx.de |
| + */ |
| + memset((char*)&sin, 0, sizeof(sin)); |
| + memset((char*)&rsin, 0, sizeof(rsin)); |
| + |
| + if(getsockname(fd,(struct sockaddr*)&sin,&sl)<0) { |
| + return NULL; |
| + } |
| + sl=sizeof(rsin); |
| + if(getpeername(fd,(struct sockaddr*)&rsin,&sl)<0) { |
| + return NULL; |
| + } |
| + natlookup.nl_inport=sin.sin_port; |
| + natlookup.nl_outport=rsin.sin_port; |
| + natlookup.nl_inip=sin.sin_addr; |
| + natlookup.nl_outip=rsin.sin_addr; |
| + if( (natfd=open(IPL_NAT,O_RDONLY)) < 0) { |
| + return(NULL); |
| + } |
| + if(ioctl(natfd, SIOCGNATL, &natlookup) == -1) { |
| + return(NULL); |
| + } |
| + close(natfd); |
| + if(ptr) *ptr=ntohs(natlookup.nl_realport); |
| + sprintf(buf,"%s",inet_ntoa(natlookup.nl_realip)); |
| + #endif |
| + |
| + /* No transparent proxy support */ |
| + return(NULL); |
| + } |
| + #endif /* USE_IP_FILTER */ |
| diff -cr ../TIS.orig/fwtk/plug-gw/plug-gw.c fwtk/plug-gw/plug-gw.c |
| *** ../TIS.orig/fwtk/plug-gw/plug-gw.c Thu Sep 5 21:36:33 1996 |
| --- fwtk/plug-gw/plug-gw.c Sun Feb 2 04:50:40 1997 |
| *************** |
| *** 38,44 **** |
| static int timeout = PROXY_TIMEOUT; |
| static char **validdests = (char **)0; |
| static Cfg *confp; |
| ! |
| main(ac,av) |
| int ac; |
| char *av[]; |
| --- 38,46 ---- |
| static int timeout = PROXY_TIMEOUT; |
| static char **validdests = (char **)0; |
| static Cfg *confp; |
| ! #ifdef USE_IP_FILTER |
| ! static int do_transparent=0; |
| ! #endif |
| main(ac,av) |
| int ac; |
| char *av[]; |
| *************** |
| *** 189,201 **** |
| static char buf[1024 * 4]; |
| void (*op)(); |
| char *dhost = NULL; |
| char hostport[1024 * 4]; |
| char *ptr; |
| int state = 0; |
| int ssl_plug = 0; |
| ! |
| struct timeval timo; |
| |
| if(c->flags & PERM_DENY) { |
| if (p == -1) |
| syslog(LLEV,"deny host=%s/%s port=any",rhost,raddr); |
| --- 191,215 ---- |
| static char buf[1024 * 4]; |
| void (*op)(); |
| char *dhost = NULL; |
| + char *transhost = NULL; |
| char hostport[1024 * 4]; |
| char *ptr; |
| int state = 0; |
| int ssl_plug = 0; |
| ! #ifdef USE_IP_FILTER |
| ! int pport; |
| ! #endif |
| struct timeval timo; |
| |
| + #ifdef USE_IP_FILTER |
| + /* Transparent plug-gw is probably a bad idea, but hey .. */ |
| + transhost=getdsthost(0,&pport); |
| + if(transhost) { |
| + do_transparent++; |
| + portid=pport; |
| + } |
| + #endif |
| + |
| if(c->flags & PERM_DENY) { |
| if (p == -1) |
| syslog(LLEV,"deny host=%s/%s port=any",rhost,raddr); |
| *************** |
| *** 223,229 **** |
| privport = 1; |
| continue; |
| } |
| ! |
| if (!strcmp(av[x], "-port")) { |
| if (++x >= ac) { |
| syslog(LLEV,"fwtkcfgerr: -port takes an argument, line %d",c->ln); |
| --- 237,248 ---- |
| privport = 1; |
| continue; |
| } |
| ! #ifdef USE_IP_FILTER |
| ! if (!strcmp(av[x],"-all-destinations")) { |
| ! dhost = transhost; |
| ! continue; |
| ! } |
| ! #endif |
| if (!strcmp(av[x], "-port")) { |
| if (++x >= ac) { |
| syslog(LLEV,"fwtkcfgerr: -port takes an argument, line %d",c->ln); |
| diff -cr ../TIS.orig/fwtk/rlogin-gw/rlogin-gw.c fwtk/rlogin-gw/rlogin-gw.c |
| *** ../TIS.orig/fwtk/rlogin-gw/rlogin-gw.c Fri Sep 6 18:56:33 1996 |
| --- fwtk/rlogin-gw/rlogin-gw.c Sun Feb 2 06:26:04 1997 |
| *************** |
| *** 40,46 **** |
| |
| extern char *maphostname(); |
| |
| ! |
| static int cmd_quit(); |
| static int cmd_help(); |
| static int cmd_connect(); |
| --- 40,48 ---- |
| |
| extern char *maphostname(); |
| |
| ! #ifdef USE_IP_FILTER |
| ! static int do_transparent=0; |
| ! #endif |
| static int cmd_quit(); |
| static int cmd_help(); |
| static int cmd_connect(); |
| *************** |
| *** 120,125 **** |
| --- 122,130 ---- |
| static char *tokav[56]; |
| int tokac; |
| struct timeval timo; |
| + #ifdef USE_IP_FILTER |
| + char *psychic; |
| + #endif |
| |
| #ifndef LOG_NDELAY |
| openlog("rlogin-gw",LOG_PID); |
| *************** |
| *** 186,192 **** |
| } |
| |
| |
| ! |
| if((cf = cfg_get("directory",confp)) != (Cfg *)0) { |
| if(cf->argc != 1) { |
| syslog(LLEV,"fwtkcfgerr: chroot must have one parameter, line %d",cf->ln); |
| --- 191,204 ---- |
| } |
| |
| |
| ! #ifdef USE_IP_FILTER |
| ! psychic=getdsthost(0,NULL); |
| ! if(psychic) { |
| ! do_transparent++; |
| ! strncpy(dest,psychic,511); |
| ! dest[511]='\0'; |
| ! } |
| ! #endif /* USE_IP_FILTER */ |
| if((cf = cfg_get("directory",confp)) != (Cfg *)0) { |
| if(cf->argc != 1) { |
| syslog(LLEV,"fwtkcfgerr: chroot must have one parameter, line %d",cf->ln); |
| *************** |
| *** 260,269 **** |
| } |
| |
| /* if present a host name, chop and save username and hostname */ |
| - dest[0] = '\0'; |
| if((p = index(rusername,'@')) != (char *)0) { |
| char *namp; |
| |
| *p++ = '\0'; |
| if(*p == '\0') |
| p = "localhost"; |
| --- 272,281 ---- |
| } |
| |
| /* if present a host name, chop and save username and hostname */ |
| if((p = index(rusername,'@')) != (char *)0) { |
| char *namp; |
| |
| + dest[0] = '\0'; |
| *p++ = '\0'; |
| if(*p == '\0') |
| p = "localhost"; |
| *************** |
| *** 532,539 **** |
| --- 544,557 ---- |
| sprintf(ebuf,"Trying %s@%s...",rusername,namp); |
| else |
| sprintf(ebuf,"Trying %s...",namp); |
| + #ifdef USE_IP_FILTER |
| + if(!do_transparent) { |
| + #endif |
| if(say(0,ebuf)) |
| return(1); |
| + #ifdef USE_IP_FILTER |
| + } |
| + #endif |
| } else |
| syslog(LLEV,"permit host=%s/%s connect to %s",rhost,raddr,av[1]); |
| if((serfd = conn_server(av[1],RLOGINPORT,1,buf)) < 0) { |
| diff -cr ../TIS.orig/fwtk/tn-gw/tn-gw.c fwtk/tn-gw/tn-gw.c |
| *** ../TIS.orig/fwtk/tn-gw/tn-gw.c Fri Sep 6 18:55:48 1996 |
| --- fwtk/tn-gw/tn-gw.c Sun Feb 2 06:06:33 1997 |
| *************** |
| *** 97,102 **** |
| --- 97,106 ---- |
| static int timeout = PROXY_TIMEOUT; |
| static char timed_out_msg[] = "\r\nConnection closed due to inactivity"; |
| |
| + #ifdef USE_IP_FILTER |
| + static int do_transparent=0; |
| + #endif |
| + |
| typedef struct { |
| char *name; |
| char *hmsg; |
| *************** |
| *** 140,145 **** |
| --- 144,153 ---- |
| char tokbuf[BSIZ]; |
| char *tokav[56]; |
| int tokac; |
| + #ifdef USE_IP_FILTER |
| + int port; |
| + char *psychic; |
| + #endif |
| |
| #ifndef LOG_DAEMON |
| openlog("tn-gw",LOG_PID); |
| *************** |
| *** 307,313 **** |
| exit(1); |
| } |
| } |
| ! |
| while (argc > 1) { |
| argc--; |
| argv++; |
| --- 315,349 ---- |
| exit(1); |
| } |
| } |
| ! #ifdef USE_IP_FILTER |
| ! psychic=getdsthost(0,&port); |
| ! if(psychic) { |
| ! if((strlen(psychic) + 10) < 510) { |
| ! do_transparent++; |
| ! if(port) |
| ! sprintf(dest,"%s:%d",psychic,port); |
| ! else |
| ! sprintf(dest,"%s",psychic); |
| ! |
| ! |
| ! if(!welcomedone) |
| ! if((cf = cfg_get("welcome-msg",confp)) != (Cfg *)0) { |
| ! if(cf->argc != 1) { |
| ! syslog(LLEV,"fwtkcfgerr: welcome-msg must have one parameter, line %d",cf->ln); |
| ! exit(1); |
| ! } |
| ! if(sayfile(0,cf->argv[0])) { |
| ! syslog(LLEV,"fwtksyserr: cannot display welcome %s:%m",cf->argv[0]); |
| ! exit(1); |
| ! } |
| ! welcomedone = 1; |
| ! } |
| ! |
| ! |
| ! } |
| ! } |
| ! |
| ! #endif /* USE_IP_FILTER */ |
| while (argc > 1) { |
| argc--; |
| argv++; |
| *************** |
| *** 870,877 **** |
| |
| syslog(LLEV,"permit host=%s/%s destination=%s",rladdr,riaddr,namp); |
| sprintf(ebuf,"Trying %s port %d...",namp,port); |
| ! if(say(0,ebuf)) |
| ! return(1); |
| } else |
| syslog(LLEV,"permit host=%s/%s destination=%s",rladdr,riaddr,av[1]); |
| |
| --- 906,920 ---- |
| |
| syslog(LLEV,"permit host=%s/%s destination=%s",rladdr,riaddr,namp); |
| sprintf(ebuf,"Trying %s port %d...",namp,port); |
| ! #ifdef USE_IP_FILTER |
| ! if(!do_transparent) { |
| ! sprintf(ebuf,"Trying %s port %d...",namp,port); |
| ! #endif |
| ! if(say(0,ebuf)) |
| ! return(1); |
| ! #ifdef USE_IP_FILTER |
| ! } |
| ! #endif |
| } else |
| syslog(LLEV,"permit host=%s/%s destination=%s",rladdr,riaddr,av[1]); |
| |
| *************** |
| *** 903,910 **** |
| |
| syslog(LLEV,"connected host=%s/%s destination=%s",rladdr,riaddr,av[1]); |
| strncpy(dest,av[1], 511); |
| ! sprintf(buf, "Connected to %s.", dest); |
| say(0, buf); |
| return(2); |
| } |
| |
| --- 946,959 ---- |
| |
| syslog(LLEV,"connected host=%s/%s destination=%s",rladdr,riaddr,av[1]); |
| strncpy(dest,av[1], 511); |
| ! #ifdef USE_IP_FILTER |
| ! if(!do_transparent) { |
| ! sprintf(buf, "Connected to %s.", dest); |
| ! say(0, buf); |
| ! } |
| ! #else |
| say(0, buf); |
| + #endif |
| return(2); |
| } |
| |
| diff -cr ../TIS.orig/fwtk/x-gw/socket.c fwtk/x-gw/socket.c |
| *** ../TIS.orig/fwtk/x-gw/socket.c Sat Sep 7 05:16:35 1996 |
| --- fwtk/x-gw/socket.c Sun Feb 2 05:26:44 1997 |
| *************** |
| *** 212,218 **** |
| case AF_UNIX: un_name = (struct sockaddr_un *)addr; |
| len = sizeof(un_name->sun_family) + |
| sizeof(un_name->sun_path) |
| ! #ifdef SCM_RIGHTS /* 4.3BSD Reno and later */ |
| + sizeof(un_name->sun_len) + 1 |
| #endif |
| ; |
| --- 212,218 ---- |
| case AF_UNIX: un_name = (struct sockaddr_un *)addr; |
| len = sizeof(un_name->sun_family) + |
| sizeof(un_name->sun_path) |
| ! #if defined(SCM_RIGHTS) && !defined(LINUX)/* 4.3BSD Reno and later */ |
| + sizeof(un_name->sun_len) + 1 |
| #endif |
| ; |
| Only in fwtk/x-gw: socket.c.bak |