--- extensions.c +++ extensions.c Fri May 26 20:48:13 1995 @@ -278,7 +278,7 @@ /*************************************************************************/ void -show_banner(int msgcode) +show_banner(int msgcode, int virtual_mode, char *virtual_banner) { char *crptr, linebuf[1024], @@ -286,22 +286,38 @@ struct aclmember *entry = NULL; FILE *infile; - /* banner */ - while (getaclentry("banner", &entry)) { + if (virtual_mode) { + infile = fopen(virtual_banner, "r"); + if (infile) { + while (fgets(linebuf, 255, infile) != NULL) { + if ((crptr = strchr(linebuf, '\n')) != NULL) + *crptr = '\0'; + msg_massage(linebuf, outbuf); + lreply(msgcode, "%s", outbuf); + } + fclose(infile); + lreply(msgcode, ""); + } + } + else { + /* banner */ + while (getaclentry("banner", &entry)) { if (ARG0 && strlen(ARG0) > 0) { - infile = fopen(ARG0, "r"); - if (infile) { - while (fgets(linebuf, 255, infile) != NULL) { - if ((crptr = strchr(linebuf, '\n')) != NULL) - *crptr = '\0'; - msg_massage(linebuf, outbuf); - lreply(msgcode, "%s", outbuf); - } - fclose(infile); - lreply(msgcode, ""); - } - } + infile = fopen(ARG0, "r"); + if (infile) { + while (fgets(linebuf, 255, infile) != NULL) { + if ((crptr = strchr(linebuf, '\n')) != NULL) + *crptr = '\0'; + msg_massage(linebuf, outbuf); + lreply(msgcode, "%s", outbuf); + } + fclose(infile); + lreply(msgcode, ""); + } + } + } } + } /*************************************************************************/ --- ftpd.c +++ ftpd.c Fri May 26 20:53:57 1995 @@ -150,6 +150,14 @@ struct sockaddr_in his_addr; struct sockaddr_in pasv_addr; +int virtual_mode=0; +#ifdef VIRTUAL +struct sockaddr_in virtual_addr; +struct sockaddr_in *virtual_ptr; +char virtual_root[MAXPATHLEN]; +char virtual_banner[MAXPATHLEN]; +#endif + int data; jmp_buf errcatch, urgcatch; @@ -261,6 +269,11 @@ #endif char *cp; +#ifdef VIRTUAL + int virtual_len; + int set; +#endif + #ifdef SecureWare setluid(1); /* make sure there is a valid luid */ set_auth_parameters(argc,argv); @@ -499,6 +512,31 @@ authenticate(); conv_init(); + +#ifdef VIRTUAL + virtual_len = sizeof(virtual_addr); + if (getsockname(0, (struct sockaddr *) &virtual_addr, + &virtual_len) < 0) { + virtual_mode = 0; + } + else { + virtual_ptr = (struct sockaddr_in *) &virtual_addr; + set = 0; + entry = (struct aclmember *) NULL; + while (!set && getaclentry("virtual", &entry)) { + if (!strcmp(ARG0, inet_ntoa(virtual_ptr->sin_addr))) { + if (ARG1 != NULL && ARG2 != NULL) { + virtual_mode = 1; + strncpy(virtual_root, ARG1, MAXPATHLEN); + strncpy(virtual_banner, ARG2, MAXPATHLEN); + syslog(LOG_ERR, "VirtualFTP Connect to: %s", + inet_ntoa(virtual_ptr->sin_addr)); + } + } + } + } +#endif + if (is_shutdown(1) != 0) { syslog(LOG_INFO, "connection refused (server shut down) from %s [%s]", remotehost, remoteaddr); @@ -506,7 +544,8 @@ hostname); exit(0); } - show_banner(220); + + show_banner(220, virtual_mode, virtual_banner); entry = (struct aclmember *) NULL; if (getaclentry("lslong", &entry) && ARG0 && strlen(ARG0) > 0) { @@ -1108,6 +1147,13 @@ if (anonymous || guest) { /* We MUST do a chdir() after the chroot. Otherwise the old current * directory will be accessible as "." outside the new root! */ + +#ifdef VIRTUAL + if (virtual_mode) { + strcpy(pw->pw_dir, virtual_root); + } +#endif + if (anonymous) { if (chroot(pw->pw_dir) < 0 || chdir("/") < 0) { reply(550, "Can't set guest privileges."); --- makefiles/Makefile.aix +++ makefiles/Makefile.aix Fri May 26 20:57:36 1995 @@ -1,13 +1,14 @@ CC = cc IFLAGS = -I.. -I../support LFLAGS = -L../support -CFLAGS = -O -DDEBUG ${IFLAGS} ${LFLAGS} +CFLAGS = -O -DDEBUG -DVIRTUAL ${IFLAGS} ${LFLAGS} LIBES = -lsupport LIBC = /lib/libc.a LINTFLAGS= LKERB = -lauth -lckrb -lkrb -ldes MKDEP = ../util/mkdep + SRCS = ftpd.c ftpcmd.c glob.c logwtmp.c popen.c vers.c access.c extensions.c \ realpath.c acl.c private.c authenticate.c conversions.c hostacc.c OBJS = ftpd.o ftpcmd.o glob.o logwtmp.o popen.o vers.o access.o extensions.o \ --- makefiles/Makefile.bsd +++ makefiles/Makefile.bsd Fri May 26 20:57:56 1995 @@ -1,12 +1,13 @@ CC = cc IFLAGS = -I.. -I../support LFLAGS = -L../support -CFLAGS = -O -DDEBUG ${IFLAGS} ${LFLAGS} +CFLAGS = -O -DDEBUG -DVIRTUAL ${IFLAGS} ${LFLAGS} LIBES = -lsupport LIBC = /usr/lib/libc.a LINTFLAGS= LKERB = -lauth -lckrb -lkrb -ldes MKDEP = ../util/mkdep + SRCS = ftpd.c ftpcmd.c glob.c logwtmp.c popen.c vers.c access.c extensions.c \ realpath.c acl.c private.c authenticate.c conversions.c hostacc.c --- makefiles/Makefile.dgx +++ makefiles/Makefile.dgx Fri May 26 20:58:05 1995 @@ -1,12 +1,13 @@ CC = gcc IFLAGS = -I.. -I../support LFLAGS = -L../support -CFLAGS = -g -DDEBUG ${IFLAGS} ${LFLAGS} +CFLAGS = -g -DDEBUG -DVIRTUAL ${IFLAGS} ${LFLAGS} LIBES = -lsupport LIBC = -lc LINTFLAGS= LKERB = -lauth -lckrb -lkrb -ldes MKDEP = ../util/mkdep + SRCS = ftpd.c ftpcmd.c glob.c logwtmp.c popen.c vers.c access.c extensions.c \ realpath.c acl.c private.c authenticate.c conversions.c hostacc.c --- makefiles/Makefile.dyn +++ makefiles/Makefile.dyn Fri May 26 20:58:15 1995 @@ -1,7 +1,7 @@ CC = gcc IFLAGS = -I.. -I../support LFLAGS = -L../support -CFLAGS = -O -DDEBUG ${IFLAGS} ${LFLAGS} +CFLAGS = -O -DDEBUG -DVIRTUAL ${IFLAGS} ${LFLAGS} LIBES = -lsupport LIBC = /lib/libc.a LINTFLAGS= --- makefiles/Makefile.gen +++ makefiles/Makefile.gen Fri May 26 20:58:25 1995 @@ -1,12 +1,14 @@ CC = cc IFLAGS = -I.. -I../support LFLAGS = -L../support -CFLAGS = -O -DDEBUG ${IFLAGS} ${LFLAGS} +CFLAGS = -O -DDEBUG -DVIRTUAL ${IFLAGS} ${LFLAGS} LIBES = -lsupport LIBC = /lib/libc.a LINTFLAGS= LKERB = -lauth -lckrb -lkrb -ldes MKDEP = ../util/mkdep +DEFINES = -DVIRTUAL + SRCS = ftpd.c ftpcmd.c glob.c logwtmp.c popen.c vers.c access.c extensions.c \ realpath.c acl.c private.c authenticate.c conversions.c hostacc.c --- makefiles/Makefile.hpx +++ makefiles/Makefile.hpx Fri May 26 20:58:46 1995 @@ -1,12 +1,13 @@ CC = cc IFLAGS = -I.. -I../support LFLAGS = -L../support -CFLAGS = -Aa -Dunix -D_HPUX_SOURCE -O -DDEBUG ${IFLAGS} ${LFLAGS} +CFLAGS = -Aa -Dunix -DVIRTUAL -D_HPUX_SOURCE -O -DDEBUG ${IFLAGS} ${LFLAGS} LIBES = -lsupport -lc -lPW LIBC = /lib/libc.a LINTFLAGS= LKERB = -lauth -lckrb -lkrb -ldes MKDEP = ../util/mkdep.hpx + SRCS = ftpd.c ftpcmd.c glob.c logwtmp.c popen.c vers.c access.c extensions.c \ realpath.c acl.c private.c authenticate.c conversions.c hostacc.c --- makefiles/Makefile.isc +++ makefiles/Makefile.isc Fri May 26 20:58:57 1995 @@ -1,12 +1,13 @@ CC = gcc IFLAGS = -I.. -I../support LFLAGS = -L../support -CFLAGS = -O -DISC -DM_UNIX -DPOSIX_JC -DHAVE_VPRINTF -DHAVE_DIRENT -DNBBY=8 -DHAVE_GETDTABLESIZE -DHAVE_GETCWD -DREGEX -DSHADOW_PASSWORD ${IFLAGS} ${LFLAGS} +CFLAGS = -O -DVIRTUAL -DISC -DM_UNIX -DPOSIX_JC -DHAVE_VPRINTF -DHAVE_DIRENT -DNBBY=8 -DHAVE_GETDTABLESIZE -DHAVE_GETCWD -DREGEX -DSHADOW_PASSWORD ${IFLAGS} ${LFLAGS} LIBES = -lsupport -linet -lnsl_s -lcposix -lPW -lsec LIBC = /lib/libc.a LINTFLAGS= #LKERB = MKDEP = ../util/mkdep + SRCS = ftpd.c ftpcmd.c glob.c logwtmp.c popen.c vers.c access.c extensions.c \ realpath.c acl.c private.c authenticate.c conversions.c hostacc.c --- makefiles/Makefile.lnx +++ makefiles/Makefile.lnx Fri May 26 20:59:22 1995 @@ -1,13 +1,13 @@ CC = gcc IFLAGS = -I.. -I../support -I/usr/include/bsd LFLAGS = -L../support -CFLAGS = -O -DDEBUG ${IFLAGS} ${LFLAGS} +CFLAGS = -O -DVIRTUAL -DDEBUG ${IFLAGS} ${LFLAGS} LIBES = -lsupport -lbsd LIBC = /usr/lib/libc.a LINTFLAGS= LKERB = -lauth -lckrb -lkrb -ldes MKDEP = ../util/mkdep - + SRCS = ftpd.c ftpcmd.c glob.c logwtmp.c popen.c vers.c access.c extensions.c \ realpath.c acl.c private.c authenticate.c conversions.c hostacc.c OBJS = ftpd.o ftpcmd.o glob.o logwtmp.o popen.o vers.o access.o extensions.o \ @@ -22,7 +22,7 @@ ${CC} ${CFLAGS} -o $@ ftpshut.c vers.o ${LIBES} ftpd: ${OBJS} ${LIBC} - ${CC} ${CFLAGS} -o $@ ${OBJS} ${LIBES} + ${CC} ${CFLAGS} ${DEFINES} -o $@ ${OBJS} ${LIBES} ckconfig: ckconfig.c ${CC} ${CFLAGS} -o $@ ckconfig.c --- makefiles/Makefile.nx2 +++ makefiles/Makefile.nx2 Fri May 26 20:59:12 1995 @@ -1,7 +1,7 @@ CC = cc IFLAGS = -I.. -I../support LFLAGS = -L../support -CFLAGS = -O -DDEBUG ${IFLAGS} ${LFLAGS} +CFLAGS = -O -DVIRTUAL -DDEBUG ${IFLAGS} ${LFLAGS} LIBES = -lsupport LIBC = /lib/libsys_s.a LINTFLAGS= --- makefiles/Makefile.nx3 +++ makefiles/Makefile.nx3 Fri May 26 20:59:31 1995 @@ -1,7 +1,7 @@ CC = cc IFLAGS = -I.. LFLAGS = -L../support -CFLAGS = -O2 ${IFLAGS} ${LFLAGS} +CFLAGS = -O2 -DVIRTUAL ${IFLAGS} ${LFLAGS} LIBES = -lsupport LIBC = LINTFLAGS= --- makefiles/Makefile.osf +++ makefiles/Makefile.osf Fri May 26 20:59:39 1995 @@ -1,7 +1,7 @@ CC = cc IFLAGS = -I.. -I../support LFLAGS = -L../support -s -x -CFLAGS = -O -DDEBUG ${IFLAGS} ${LFLAGS} +CFLAGS = -O -DVIRTUAL -DDEBUG ${IFLAGS} ${LFLAGS} LIBES = -lsupport LIBC = /lib/libc.a LINTFLAGS= --- makefiles/Makefile.ptx +++ makefiles/Makefile.ptx Fri May 26 20:59:47 1995 @@ -1,7 +1,7 @@ CC = cc IFLAGS = -I.. -I../support LFLAGS = -L../support -CFLAGS = -O -DDEBUG ${IFLAGS} ${LFLAGS} +CFLAGS = -O -DVIRTUAL -DDEBUG ${IFLAGS} ${LFLAGS} LIBES = -lsupport -lsec -lgen -lseq -lsocket -linet -lnsl -lmalloc LIBC = /lib/libc.a LINTFLAGS= --- makefiles/Makefile.s41 +++ makefiles/Makefile.s41 Fri May 26 20:59:56 1995 @@ -2,7 +2,7 @@ #CC = acc IFLAGS = -I.. -I../support LFLAGS = -L../support -CFLAGS = $(OPT) -DDEBUG ${IFLAGS} ${LFLAGS} +CFLAGS = $(OPT) -DVIRTUAL -DDEBUG ${IFLAGS} ${LFLAGS} OPT = -g LIBES = -lsupport LIBC = /lib/libc.a --- makefiles/Makefile.sco +++ makefiles/Makefile.sco Fri May 26 21:00:09 1995 @@ -1,7 +1,7 @@ CC = cc IFLAGS = -I.. -I../support LFLAGS = -L../support -CFLAGS = -O ${IFLAGS} ${LFLAGS} +CFLAGS = -O -DVIRTUAL ${IFLAGS} ${LFLAGS} # 1) If you do not have -lprot_s, use -lprot instead. # 2) -lcrypt can be used in place of -lcrypt_i. If you do not have any crypt # library, get and install ftp.sco.com:/SLS/lng225* (International Crypt --- makefiles/Makefile.sgi +++ makefiles/Makefile.sgi Fri May 26 21:00:18 1995 @@ -1,7 +1,7 @@ CC = cc IFLAGS = -I.. -I../support LFLAGS = -L../support -CFLAGS = -O -DDEBUG ${IFLAGS} ${LFLAGS} +CFLAGS = -O -DVIRTUAL -DDEBUG ${IFLAGS} ${LFLAGS} LIBES = -lsupport LIBC = /usr/lib/libc.a LINTFLAGS= --- makefiles/Makefile.sny +++ makefiles/Makefile.sny Fri May 26 21:00:26 1995 @@ -1,7 +1,7 @@ CC = cc IFLAGS = -I.. -I../support LFLAGS = -L../support -CFLAGS = -O -DDEBUG ${IFLAGS} ${LFLAGS} +CFLAGS = -O -DVIRTUAL -DDEBUG ${IFLAGS} ${LFLAGS} LIBES = -lsupport LIBC = /lib/libc.a LINTFLAGS= --- makefiles/Makefile.sol +++ makefiles/Makefile.sol Fri May 26 21:00:35 1995 @@ -1,7 +1,7 @@ CC = cc IFLAGS = -I.. -I../support LFLAGS = -L../support -CFLAGS = -g -DDEBUG ${IFLAGS} ${LFLAGS} +CFLAGS = -g -DDEBUG -DVIRTUAL ${IFLAGS} ${LFLAGS} LIBES = -lsupport -lsocket -lnsl -lgen LIBC = /lib/libc.a LINTFLAGS= --- makefiles/Makefile.ult +++ makefiles/Makefile.ult Fri May 26 21:00:47 1995 @@ -1,7 +1,7 @@ CC = cc IFLAGS = -I.. -I../support LFLAGS = -L../support -CFLAGS = -Dconst="" -O -DDEBUG -DSYSSYSLOG ${IFLAGS} ${LFLAGS} +CFLAGS = -Dconst="" -O -DVIRTUAL -DDEBUG -DSYSSYSLOG ${IFLAGS} ${LFLAGS} LIBES = -lsupport LIBC = /lib/libc.a LINTFLAGS=