Initial revision
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@237 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
		
							
								
								
									
										21
									
								
								appl/ftp/ftpd/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								appl/ftp/ftpd/Makefile
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,21 @@
 | 
			
		||||
#	$NetBSD: Makefile,v 1.12 1995/04/11 02:44:45 cgd Exp $
 | 
			
		||||
#	@(#)Makefile	8.2 (Berkeley) 4/4/94
 | 
			
		||||
 | 
			
		||||
PROG=	ftpd
 | 
			
		||||
CFLAGS+=-DHASSETPROCTITLE -DSKEY
 | 
			
		||||
SRCS=	ftpd.c ftpcmd.c logwtmp.c popen.c
 | 
			
		||||
MAN=	ftpd.8
 | 
			
		||||
CLEANFILES+=ftpcmd.c y.tab.h
 | 
			
		||||
.PATH:	${.CURDIR}/../../usr.bin/ftp ${.CURDIR}/../../usr.bin/login
 | 
			
		||||
 | 
			
		||||
LDADD+= -lcrypt -lskey
 | 
			
		||||
DPADD+= ${LIBCRYPT} ${LIBSKEY}
 | 
			
		||||
 | 
			
		||||
.if defined(KERBEROS)
 | 
			
		||||
SRCS+= klogin.c
 | 
			
		||||
CFLAGS+= -DKERBEROS
 | 
			
		||||
LDADD+= -lkrb -ldes
 | 
			
		||||
DPADD+= ${LIBKRB} ${LIBDES}
 | 
			
		||||
.endif
 | 
			
		||||
 | 
			
		||||
.include <bsd.prog.mk>
 | 
			
		||||
							
								
								
									
										67
									
								
								appl/ftp/ftpd/extern.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								appl/ftp/ftpd/extern.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,67 @@
 | 
			
		||||
/*	$NetBSD: extern.h,v 1.2 1995/04/11 02:44:49 cgd Exp $	*/
 | 
			
		||||
 | 
			
		||||
/*-
 | 
			
		||||
 * Copyright (c) 1992, 1993
 | 
			
		||||
 *	The Regents of the University of California.  All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
 *    documentation and/or other materials provided with the distribution.
 | 
			
		||||
 * 3. All advertising materials mentioning features or use of this software
 | 
			
		||||
 *    must display the following acknowledgement:
 | 
			
		||||
 *	This product includes software developed by the University of
 | 
			
		||||
 *	California, Berkeley and its contributors.
 | 
			
		||||
 * 4. Neither the name of the University nor the names of its contributors
 | 
			
		||||
 *    may be used to endorse or promote products derived from this software
 | 
			
		||||
 *    without specific prior written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
 | 
			
		||||
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
			
		||||
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 | 
			
		||||
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | 
			
		||||
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 | 
			
		||||
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
			
		||||
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
			
		||||
 * SUCH DAMAGE.
 | 
			
		||||
 *
 | 
			
		||||
 *	@(#)extern.h	8.2 (Berkeley) 4/4/94
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
void	blkfree __P((char **));
 | 
			
		||||
char  **copyblk __P((char **));
 | 
			
		||||
void	cwd __P((char *));
 | 
			
		||||
void	delete __P((char *));
 | 
			
		||||
void	dologout __P((int));
 | 
			
		||||
void	fatal __P((char *));
 | 
			
		||||
int	ftpd_pclose __P((FILE *));
 | 
			
		||||
FILE   *ftpd_popen __P((char *, char *));
 | 
			
		||||
char   *getline __P((char *, int, FILE *));
 | 
			
		||||
void	logwtmp __P((char *, char *, char *));
 | 
			
		||||
void	lreply __P((int, const char *, ...));
 | 
			
		||||
void	makedir __P((char *));
 | 
			
		||||
void	nack __P((char *));
 | 
			
		||||
void	pass __P((char *));
 | 
			
		||||
void	passive __P((void));
 | 
			
		||||
void	perror_reply __P((int, char *));
 | 
			
		||||
void	pwd __P((void));
 | 
			
		||||
void	removedir __P((char *));
 | 
			
		||||
void	renamecmd __P((char *, char *));
 | 
			
		||||
char   *renamefrom __P((char *));
 | 
			
		||||
void	reply __P((int, const char *, ...));
 | 
			
		||||
void	retrieve __P((char *, char *));
 | 
			
		||||
void	send_file_list __P((char *));
 | 
			
		||||
void	setproctitle __P((const char *, ...));
 | 
			
		||||
void	statcmd __P((void));
 | 
			
		||||
void	statfilecmd __P((char *));
 | 
			
		||||
void	store __P((char *, char *, int));
 | 
			
		||||
void	upper __P((char *));
 | 
			
		||||
void	user __P((char *));
 | 
			
		||||
void	yyerror __P((char *));
 | 
			
		||||
							
								
								
									
										1273
									
								
								appl/ftp/ftpd/ftpcmd.y
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1273
									
								
								appl/ftp/ftpd/ftpcmd.y
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										316
									
								
								appl/ftp/ftpd/ftpd.8
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										316
									
								
								appl/ftp/ftpd/ftpd.8
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,316 @@
 | 
			
		||||
.\"	$NetBSD: ftpd.8,v 1.7 1995/04/11 02:44:53 cgd Exp $
 | 
			
		||||
.\"
 | 
			
		||||
.\" Copyright (c) 1985, 1988, 1991, 1993
 | 
			
		||||
.\"	The Regents of the University of California.  All rights reserved.
 | 
			
		||||
.\"
 | 
			
		||||
.\" Redistribution and use in source and binary forms, with or without
 | 
			
		||||
.\" modification, are permitted provided that the following conditions
 | 
			
		||||
.\" are met:
 | 
			
		||||
.\" 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
.\"    notice, this list of conditions and the following disclaimer.
 | 
			
		||||
.\" 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
.\"    notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
.\"    documentation and/or other materials provided with the distribution.
 | 
			
		||||
.\" 3. All advertising materials mentioning features or use of this software
 | 
			
		||||
.\"    must display the following acknowledgement:
 | 
			
		||||
.\"	This product includes software developed by the University of
 | 
			
		||||
.\"	California, Berkeley and its contributors.
 | 
			
		||||
.\" 4. Neither the name of the University nor the names of its contributors
 | 
			
		||||
.\"    may be used to endorse or promote products derived from this software
 | 
			
		||||
.\"    without specific prior written permission.
 | 
			
		||||
.\"
 | 
			
		||||
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
 | 
			
		||||
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
 | 
			
		||||
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
			
		||||
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 | 
			
		||||
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | 
			
		||||
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 | 
			
		||||
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
			
		||||
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
			
		||||
.\" SUCH DAMAGE.
 | 
			
		||||
.\"
 | 
			
		||||
.\"     @(#)ftpd.8	8.2 (Berkeley) 4/19/94
 | 
			
		||||
.\"
 | 
			
		||||
.Dd April 19, 1994
 | 
			
		||||
.Dt FTPD 8
 | 
			
		||||
.Os BSD 4.2
 | 
			
		||||
.Sh NAME
 | 
			
		||||
.Nm ftpd
 | 
			
		||||
.Nd
 | 
			
		||||
Internet File Transfer Protocol server
 | 
			
		||||
.Sh SYNOPSIS
 | 
			
		||||
.Nm ftpd
 | 
			
		||||
.Op Fl dl
 | 
			
		||||
.Op Fl T Ar maxtimeout
 | 
			
		||||
.Op Fl t Ar timeout
 | 
			
		||||
.Sh DESCRIPTION
 | 
			
		||||
.Nm Ftpd
 | 
			
		||||
is the
 | 
			
		||||
Internet File Transfer Protocol
 | 
			
		||||
server process.  The server uses the
 | 
			
		||||
.Tn TCP
 | 
			
		||||
protocol
 | 
			
		||||
and listens at the port specified in the
 | 
			
		||||
.Dq ftp
 | 
			
		||||
service specification; see
 | 
			
		||||
.Xr services 5 .
 | 
			
		||||
.Pp
 | 
			
		||||
Available options:
 | 
			
		||||
.Bl -tag -width Ds
 | 
			
		||||
.It Fl d
 | 
			
		||||
Debugging information is written to the syslog using LOG_FTP.
 | 
			
		||||
.It Fl l
 | 
			
		||||
Each successful and failed 
 | 
			
		||||
.Xr ftp 1
 | 
			
		||||
session is logged using syslog with a facility of LOG_FTP.
 | 
			
		||||
If this option is specified twice, the retrieve (get), store (put), append,
 | 
			
		||||
delete, make directory, remove directory and rename operations and
 | 
			
		||||
their filename arguments are also logged.
 | 
			
		||||
.It Fl T
 | 
			
		||||
A client may also request a different timeout period;
 | 
			
		||||
the maximum period allowed may be set to
 | 
			
		||||
.Ar timeout
 | 
			
		||||
seconds with the
 | 
			
		||||
.Fl T
 | 
			
		||||
option.
 | 
			
		||||
The default limit is 2 hours.
 | 
			
		||||
.It Fl t
 | 
			
		||||
The inactivity timeout period is set to
 | 
			
		||||
.Ar timeout
 | 
			
		||||
seconds (the default is 15 minutes).
 | 
			
		||||
.El
 | 
			
		||||
.Pp
 | 
			
		||||
The file
 | 
			
		||||
.Pa /etc/nologin
 | 
			
		||||
can be used to disable ftp access.
 | 
			
		||||
If the file exists,
 | 
			
		||||
.Nm
 | 
			
		||||
displays it and exits.
 | 
			
		||||
If the file
 | 
			
		||||
.Pa /etc/ftpwelcome
 | 
			
		||||
exists,
 | 
			
		||||
.Nm
 | 
			
		||||
prints it before issuing the 
 | 
			
		||||
.Dq ready
 | 
			
		||||
message.
 | 
			
		||||
If the file
 | 
			
		||||
.Pa /etc/motd
 | 
			
		||||
exists,
 | 
			
		||||
.Nm
 | 
			
		||||
prints it after a successful login.
 | 
			
		||||
.Pp
 | 
			
		||||
The ftp server currently supports the following ftp requests.
 | 
			
		||||
The case of the requests is ignored.
 | 
			
		||||
.Bl -column "Request" -offset indent
 | 
			
		||||
.It Request Ta "Description"
 | 
			
		||||
.It ABOR Ta "abort previous command"
 | 
			
		||||
.It ACCT Ta "specify account (ignored)"
 | 
			
		||||
.It ALLO Ta "allocate storage (vacuously)"
 | 
			
		||||
.It APPE Ta "append to a file"
 | 
			
		||||
.It CDUP Ta "change to parent of current working directory"
 | 
			
		||||
.It CWD Ta "change working directory"
 | 
			
		||||
.It DELE Ta "delete a file"
 | 
			
		||||
.It HELP Ta "give help information"
 | 
			
		||||
.It LIST Ta "give list files in a directory" Pq Dq Li "ls -lgA"
 | 
			
		||||
.It MKD Ta "make a directory"
 | 
			
		||||
.It MDTM Ta "show last modification time of file"
 | 
			
		||||
.It MODE Ta "specify data transfer" Em mode
 | 
			
		||||
.It NLST Ta "give name list of files in directory"
 | 
			
		||||
.It NOOP Ta "do nothing"
 | 
			
		||||
.It PASS Ta "specify password"
 | 
			
		||||
.It PASV Ta "prepare for server-to-server transfer"
 | 
			
		||||
.It PORT Ta "specify data connection port"
 | 
			
		||||
.It PWD Ta "print the current working directory"
 | 
			
		||||
.It QUIT Ta "terminate session"
 | 
			
		||||
.It REST Ta "restart incomplete transfer"
 | 
			
		||||
.It RETR Ta "retrieve a file"
 | 
			
		||||
.It RMD Ta "remove a directory"
 | 
			
		||||
.It RNFR Ta "specify rename-from file name"
 | 
			
		||||
.It RNTO Ta "specify rename-to file name"
 | 
			
		||||
.It SITE Ta "non-standard commands (see next section)"
 | 
			
		||||
.It SIZE Ta "return size of file"
 | 
			
		||||
.It STAT Ta "return status of server"
 | 
			
		||||
.It STOR Ta "store a file"
 | 
			
		||||
.It STOU Ta "store a file with a unique name"
 | 
			
		||||
.It STRU Ta "specify data transfer" Em structure
 | 
			
		||||
.It SYST Ta "show operating system type of server system"
 | 
			
		||||
.It TYPE Ta "specify data transfer" Em type
 | 
			
		||||
.It USER Ta "specify user name"
 | 
			
		||||
.It XCUP Ta "change to parent of current working directory (deprecated)"
 | 
			
		||||
.It XCWD Ta "change working directory (deprecated)"
 | 
			
		||||
.It XMKD Ta "make a directory (deprecated)"
 | 
			
		||||
.It XPWD Ta "print the current working directory (deprecated)"
 | 
			
		||||
.It XRMD Ta "remove a directory (deprecated)"
 | 
			
		||||
.El
 | 
			
		||||
.Pp
 | 
			
		||||
The following non-standard or
 | 
			
		||||
.Tn UNIX
 | 
			
		||||
specific commands are supported
 | 
			
		||||
by the
 | 
			
		||||
SITE request.
 | 
			
		||||
.Pp
 | 
			
		||||
.Bl -column Request -offset indent
 | 
			
		||||
.It Sy Request Ta Sy Description
 | 
			
		||||
.It UMASK Ta change umask, e.g. ``SITE UMASK 002''
 | 
			
		||||
.It IDLE Ta set idle-timer, e.g. ``SITE IDLE 60''
 | 
			
		||||
.It CHMOD Ta change mode of a file, e.g. ``SITE CHMOD 755 filename''
 | 
			
		||||
.It HELP Ta give help information.
 | 
			
		||||
.El
 | 
			
		||||
.Pp
 | 
			
		||||
The remaining ftp requests specified in Internet RFC 959
 | 
			
		||||
are
 | 
			
		||||
recognized, but not implemented.
 | 
			
		||||
MDTM and SIZE are not specified in RFC 959, but will appear in the
 | 
			
		||||
next updated FTP RFC.
 | 
			
		||||
.Pp
 | 
			
		||||
The ftp server will abort an active file transfer only when the
 | 
			
		||||
ABOR
 | 
			
		||||
command is preceded by a Telnet "Interrupt Process" (IP)
 | 
			
		||||
signal and a Telnet "Synch" signal in the command Telnet stream,
 | 
			
		||||
as described in Internet RFC 959.
 | 
			
		||||
If a
 | 
			
		||||
STAT
 | 
			
		||||
command is received during a data transfer, preceded by a Telnet IP
 | 
			
		||||
and Synch, transfer status will be returned.
 | 
			
		||||
.Pp
 | 
			
		||||
.Nm Ftpd
 | 
			
		||||
interprets file names according to the
 | 
			
		||||
.Dq globbing
 | 
			
		||||
conventions used by
 | 
			
		||||
.Xr csh 1 .
 | 
			
		||||
This allows users to utilize the metacharacters
 | 
			
		||||
.Dq Li \&*?[]{}~ .
 | 
			
		||||
.Pp
 | 
			
		||||
.Nm Ftpd
 | 
			
		||||
authenticates users according to five rules. 
 | 
			
		||||
.Pp
 | 
			
		||||
.Bl -enum -offset indent
 | 
			
		||||
.It
 | 
			
		||||
The login name must be in the password data base,
 | 
			
		||||
.Pa /etc/pwd.db ,
 | 
			
		||||
and not have a null password.
 | 
			
		||||
In this case a password must be provided by the client before any
 | 
			
		||||
file operations may be performed.
 | 
			
		||||
If the user has an S/Key key, the response from a successful USER
 | 
			
		||||
command will include an S/Key challenge. The client may choose to respond
 | 
			
		||||
with a PASS command giving either a standard password or an S/Key
 | 
			
		||||
one-time password. The server will automatically determine which type of
 | 
			
		||||
password it has been given and attempt to authenticate accordingly. See
 | 
			
		||||
.Xr skey 1
 | 
			
		||||
for more information on S/Key authentication. S/Key is a Trademark of
 | 
			
		||||
Bellcore.
 | 
			
		||||
.It
 | 
			
		||||
The login name must not appear in the file
 | 
			
		||||
.Pa /etc/ftpusers .
 | 
			
		||||
.It
 | 
			
		||||
The user must have a standard shell returned by 
 | 
			
		||||
.Xr getusershell 3 .
 | 
			
		||||
.It
 | 
			
		||||
If the user name appears in the file
 | 
			
		||||
.Pa /etc/ftpchroot
 | 
			
		||||
the session's root will be changed to the user's login directory by
 | 
			
		||||
.Xr chroot 2
 | 
			
		||||
as for an
 | 
			
		||||
.Dq anonymous
 | 
			
		||||
or
 | 
			
		||||
.Dq ftp
 | 
			
		||||
account (see next item).  However, the user must still supply a password.
 | 
			
		||||
This feature is intended as a compromise between a fully anonymous account 
 | 
			
		||||
and a fully privileged account.  The account should also be set up as for an
 | 
			
		||||
anonymous account.
 | 
			
		||||
.It
 | 
			
		||||
If the user name is
 | 
			
		||||
.Dq anonymous
 | 
			
		||||
or
 | 
			
		||||
.Dq ftp ,
 | 
			
		||||
an
 | 
			
		||||
anonymous ftp account must be present in the password
 | 
			
		||||
file (user
 | 
			
		||||
.Dq ftp ) .
 | 
			
		||||
In this case the user is allowed
 | 
			
		||||
to log in by specifying any password (by convention an email address for
 | 
			
		||||
the user should be used as the password).
 | 
			
		||||
.El
 | 
			
		||||
.Pp
 | 
			
		||||
In the last case, 
 | 
			
		||||
.Nm ftpd
 | 
			
		||||
takes special measures to restrict the client's access privileges.
 | 
			
		||||
The server performs a 
 | 
			
		||||
.Xr chroot 2
 | 
			
		||||
to the home directory of the
 | 
			
		||||
.Dq ftp
 | 
			
		||||
user.
 | 
			
		||||
In order that system security is not breached, it is recommended
 | 
			
		||||
that the
 | 
			
		||||
.Dq ftp
 | 
			
		||||
subtree be constructed with care, following these rules:
 | 
			
		||||
.Bl -tag -width "~ftp/pub" -offset indent
 | 
			
		||||
.It Pa ~ftp
 | 
			
		||||
Make the home directory owned by
 | 
			
		||||
.Dq root
 | 
			
		||||
and unwritable by anyone.
 | 
			
		||||
.It Pa ~ftp/bin
 | 
			
		||||
Make this directory owned by
 | 
			
		||||
.Dq root
 | 
			
		||||
and unwritable by anyone (mode 555).
 | 
			
		||||
The program
 | 
			
		||||
.Xr ls 1
 | 
			
		||||
must be present to support the list command.
 | 
			
		||||
This program should be mode 111.
 | 
			
		||||
.It Pa ~ftp/etc
 | 
			
		||||
Make this directory owned by
 | 
			
		||||
.Dq root
 | 
			
		||||
and unwritable by anyone (mode 555).
 | 
			
		||||
The files
 | 
			
		||||
.Xr passwd 5
 | 
			
		||||
and
 | 
			
		||||
.Xr group 5
 | 
			
		||||
must be present for the 
 | 
			
		||||
.Xr ls
 | 
			
		||||
command to be able to produce owner names rather than numbers.
 | 
			
		||||
The password field in
 | 
			
		||||
.Xr passwd
 | 
			
		||||
is not used, and should not contain real passwords.
 | 
			
		||||
The file
 | 
			
		||||
.Pa motd ,
 | 
			
		||||
if present, will be printed after a successful login.
 | 
			
		||||
These files should be mode 444.
 | 
			
		||||
.It Pa ~ftp/pub
 | 
			
		||||
Make this directory mode 777 and owned by
 | 
			
		||||
.Dq ftp .
 | 
			
		||||
Guests
 | 
			
		||||
can then place files which are to be accessible via the anonymous
 | 
			
		||||
account in this directory.
 | 
			
		||||
.El
 | 
			
		||||
.Sh FILES
 | 
			
		||||
.Bl -tag -width /etc/ftpwelcome -compact
 | 
			
		||||
.It Pa /etc/ftpusers
 | 
			
		||||
List of unwelcome/restricted users.
 | 
			
		||||
.It Pa /etc/ftpchroot
 | 
			
		||||
List of normal users who should be chroot'd.
 | 
			
		||||
.It Pa /etc/ftpwelcome
 | 
			
		||||
Welcome notice.
 | 
			
		||||
.It Pa /etc/motd
 | 
			
		||||
Welcome notice after login.
 | 
			
		||||
.It Pa /etc/nologin
 | 
			
		||||
Displayed and access refused.
 | 
			
		||||
.El
 | 
			
		||||
.Sh SEE ALSO
 | 
			
		||||
.Xr ftp 1 ,
 | 
			
		||||
.Xr skey 1 ,
 | 
			
		||||
.Xr getusershell 3 ,
 | 
			
		||||
.Xr syslogd 8
 | 
			
		||||
.Sh BUGS
 | 
			
		||||
The server must run as the super-user
 | 
			
		||||
to create sockets with privileged port numbers.  It maintains
 | 
			
		||||
an effective user id of the logged in user, reverting to
 | 
			
		||||
the super-user only when binding addresses to sockets.  The
 | 
			
		||||
possible security holes have been extensively
 | 
			
		||||
scrutinized, but are possibly incomplete.
 | 
			
		||||
.Sh HISTORY
 | 
			
		||||
The
 | 
			
		||||
.Nm
 | 
			
		||||
command appeared in
 | 
			
		||||
.Bx 4.2 .
 | 
			
		||||
							
								
								
									
										1662
									
								
								appl/ftp/ftpd/ftpd.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1662
									
								
								appl/ftp/ftpd/ftpd.c
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										81
									
								
								appl/ftp/ftpd/logwtmp.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										81
									
								
								appl/ftp/ftpd/logwtmp.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,81 @@
 | 
			
		||||
/*	$NetBSD: logwtmp.c,v 1.4 1995/04/11 02:44:58 cgd Exp $	*/
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 1988, 1993
 | 
			
		||||
 *	The Regents of the University of California.  All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
 *    documentation and/or other materials provided with the distribution.
 | 
			
		||||
 * 3. All advertising materials mentioning features or use of this software
 | 
			
		||||
 *    must display the following acknowledgement:
 | 
			
		||||
 *	This product includes software developed by the University of
 | 
			
		||||
 *	California, Berkeley and its contributors.
 | 
			
		||||
 * 4. Neither the name of the University nor the names of its contributors
 | 
			
		||||
 *    may be used to endorse or promote products derived from this software
 | 
			
		||||
 *    without specific prior written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
 | 
			
		||||
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
			
		||||
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 | 
			
		||||
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | 
			
		||||
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 | 
			
		||||
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
			
		||||
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
			
		||||
 * SUCH DAMAGE.
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef lint
 | 
			
		||||
#if 0
 | 
			
		||||
static char sccsid[] = "@(#)logwtmp.c	8.1 (Berkeley) 6/4/93";
 | 
			
		||||
#else
 | 
			
		||||
static char rcsid[] = "$NetBSD: logwtmp.c,v 1.4 1995/04/11 02:44:58 cgd Exp $";
 | 
			
		||||
#endif
 | 
			
		||||
#endif /* not lint */
 | 
			
		||||
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#include <sys/time.h>
 | 
			
		||||
#include <sys/stat.h>
 | 
			
		||||
 | 
			
		||||
#include <fcntl.h>
 | 
			
		||||
#include <utmp.h>
 | 
			
		||||
#include <unistd.h>
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include "extern.h"
 | 
			
		||||
 | 
			
		||||
static int fd = -1;
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Modified version of logwtmp that holds wtmp file open
 | 
			
		||||
 * after first call, for use with ftp (which may chroot
 | 
			
		||||
 * after login, but before logout).
 | 
			
		||||
 */
 | 
			
		||||
void
 | 
			
		||||
logwtmp(line, name, host)
 | 
			
		||||
	char *line, *name, *host;
 | 
			
		||||
{
 | 
			
		||||
	struct utmp ut;
 | 
			
		||||
	struct stat buf;
 | 
			
		||||
 | 
			
		||||
	if (fd < 0 && (fd = open(_PATH_WTMP, O_WRONLY|O_APPEND, 0)) < 0)
 | 
			
		||||
		return;
 | 
			
		||||
	if (fstat(fd, &buf) == 0) {
 | 
			
		||||
		(void)strncpy(ut.ut_line, line, sizeof(ut.ut_line));
 | 
			
		||||
		(void)strncpy(ut.ut_name, name, sizeof(ut.ut_name));
 | 
			
		||||
		(void)strncpy(ut.ut_host, host, sizeof(ut.ut_host));
 | 
			
		||||
		(void)time(&ut.ut_time);
 | 
			
		||||
		if (write(fd, (char *)&ut, sizeof(struct utmp)) !=
 | 
			
		||||
		    sizeof(struct utmp))
 | 
			
		||||
			(void)ftruncate(fd, buf.st_size);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										43
									
								
								appl/ftp/ftpd/pathnames.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								appl/ftp/ftpd/pathnames.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,43 @@
 | 
			
		||||
/*	$NetBSD: pathnames.h,v 1.5 1995/04/11 02:44:59 cgd Exp $	*/
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 1989, 1993
 | 
			
		||||
 *	The Regents of the University of California.  All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
 *    documentation and/or other materials provided with the distribution.
 | 
			
		||||
 * 3. All advertising materials mentioning features or use of this software
 | 
			
		||||
 *    must display the following acknowledgement:
 | 
			
		||||
 *	This product includes software developed by the University of
 | 
			
		||||
 *	California, Berkeley and its contributors.
 | 
			
		||||
 * 4. Neither the name of the University nor the names of its contributors
 | 
			
		||||
 *    may be used to endorse or promote products derived from this software
 | 
			
		||||
 *    without specific prior written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
 | 
			
		||||
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
			
		||||
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 | 
			
		||||
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | 
			
		||||
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 | 
			
		||||
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
			
		||||
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
			
		||||
 * SUCH DAMAGE.
 | 
			
		||||
 *
 | 
			
		||||
 *	@(#)pathnames.h	8.1 (Berkeley) 6/4/93
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <paths.h>
 | 
			
		||||
 | 
			
		||||
#define	_PATH_FTPUSERS		"/etc/ftpusers"
 | 
			
		||||
#define	_PATH_FTPCHROOT		"/etc/ftpchroot"
 | 
			
		||||
#define	_PATH_FTPWELCOME	"/etc/ftpwelcome"
 | 
			
		||||
#define	_PATH_FTPLOGINMESG	"/etc/motd"
 | 
			
		||||
							
								
								
									
										182
									
								
								appl/ftp/ftpd/popen.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										182
									
								
								appl/ftp/ftpd/popen.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,182 @@
 | 
			
		||||
/*	$NetBSD: popen.c,v 1.5 1995/04/11 02:45:00 cgd Exp $	*/
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 1988, 1993, 1994
 | 
			
		||||
 *	The Regents of the University of California.  All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * This code is derived from software written by Ken Arnold and
 | 
			
		||||
 * published in UNIX Review, Vol. 6, No. 8.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
 *    documentation and/or other materials provided with the distribution.
 | 
			
		||||
 * 3. All advertising materials mentioning features or use of this software
 | 
			
		||||
 *    must display the following acknowledgement:
 | 
			
		||||
 *	This product includes software developed by the University of
 | 
			
		||||
 *	California, Berkeley and its contributors.
 | 
			
		||||
 * 4. Neither the name of the University nor the names of its contributors
 | 
			
		||||
 *    may be used to endorse or promote products derived from this software
 | 
			
		||||
 *    without specific prior written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
 | 
			
		||||
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
			
		||||
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 | 
			
		||||
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | 
			
		||||
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 | 
			
		||||
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
			
		||||
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
			
		||||
 * SUCH DAMAGE.
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef lint
 | 
			
		||||
#if 0
 | 
			
		||||
static char sccsid[] = "@(#)popen.c	8.3 (Berkeley) 4/6/94";
 | 
			
		||||
#else
 | 
			
		||||
static char rcsid[] = "$NetBSD: popen.c,v 1.5 1995/04/11 02:45:00 cgd Exp $";
 | 
			
		||||
#endif
 | 
			
		||||
#endif /* not lint */
 | 
			
		||||
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#include <sys/wait.h>
 | 
			
		||||
 | 
			
		||||
#include <errno.h>
 | 
			
		||||
#include <glob.h>
 | 
			
		||||
#include <signal.h>
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <unistd.h>
 | 
			
		||||
 | 
			
		||||
#include "extern.h"
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Special version of popen which avoids call to shell.  This ensures noone
 | 
			
		||||
 * may create a pipe to a hidden program as a side effect of a list or dir
 | 
			
		||||
 * command.
 | 
			
		||||
 */
 | 
			
		||||
static int *pids;
 | 
			
		||||
static int fds;
 | 
			
		||||
 | 
			
		||||
FILE *
 | 
			
		||||
ftpd_popen(program, type)
 | 
			
		||||
	char *program, *type;
 | 
			
		||||
{
 | 
			
		||||
	char *cp;
 | 
			
		||||
	FILE *iop;
 | 
			
		||||
	int argc, gargc, pdes[2], pid;
 | 
			
		||||
	char **pop, *argv[100], *gargv[1000];
 | 
			
		||||
 | 
			
		||||
	if (*type != 'r' && *type != 'w' || type[1])
 | 
			
		||||
		return (NULL);
 | 
			
		||||
 | 
			
		||||
	if (!pids) {
 | 
			
		||||
		if ((fds = getdtablesize()) <= 0)
 | 
			
		||||
			return (NULL);
 | 
			
		||||
		if ((pids = (int *)malloc((u_int)(fds * sizeof(int)))) == NULL)
 | 
			
		||||
			return (NULL);
 | 
			
		||||
		memset(pids, 0, fds * sizeof(int));
 | 
			
		||||
	}
 | 
			
		||||
	if (pipe(pdes) < 0)
 | 
			
		||||
		return (NULL);
 | 
			
		||||
 | 
			
		||||
	/* break up string into pieces */
 | 
			
		||||
	for (argc = 0, cp = program;; cp = NULL)
 | 
			
		||||
		if (!(argv[argc++] = strtok(cp, " \t\n")))
 | 
			
		||||
			break;
 | 
			
		||||
 | 
			
		||||
	/* glob each piece */
 | 
			
		||||
	gargv[0] = argv[0];
 | 
			
		||||
	for (gargc = argc = 1; argv[argc]; argc++) {
 | 
			
		||||
		glob_t gl;
 | 
			
		||||
		int flags = GLOB_BRACE|GLOB_NOCHECK|GLOB_QUOTE|GLOB_TILDE;
 | 
			
		||||
 | 
			
		||||
		memset(&gl, 0, sizeof(gl));
 | 
			
		||||
		if (glob(argv[argc], flags, NULL, &gl))
 | 
			
		||||
			gargv[gargc++] = strdup(argv[argc]);
 | 
			
		||||
		else
 | 
			
		||||
			for (pop = gl.gl_pathv; *pop; pop++)
 | 
			
		||||
				gargv[gargc++] = strdup(*pop);
 | 
			
		||||
		globfree(&gl);
 | 
			
		||||
	}
 | 
			
		||||
	gargv[gargc] = NULL;
 | 
			
		||||
 | 
			
		||||
	iop = NULL;
 | 
			
		||||
	switch(pid = vfork()) {
 | 
			
		||||
	case -1:			/* error */
 | 
			
		||||
		(void)close(pdes[0]);
 | 
			
		||||
		(void)close(pdes[1]);
 | 
			
		||||
		goto pfree;
 | 
			
		||||
		/* NOTREACHED */
 | 
			
		||||
	case 0:				/* child */
 | 
			
		||||
		if (*type == 'r') {
 | 
			
		||||
			if (pdes[1] != STDOUT_FILENO) {
 | 
			
		||||
				dup2(pdes[1], STDOUT_FILENO);
 | 
			
		||||
				(void)close(pdes[1]);
 | 
			
		||||
			}
 | 
			
		||||
			dup2(STDOUT_FILENO, STDERR_FILENO); /* stderr too! */
 | 
			
		||||
			(void)close(pdes[0]);
 | 
			
		||||
		} else {
 | 
			
		||||
			if (pdes[0] != STDIN_FILENO) {
 | 
			
		||||
				dup2(pdes[0], STDIN_FILENO);
 | 
			
		||||
				(void)close(pdes[0]);
 | 
			
		||||
			}
 | 
			
		||||
			(void)close(pdes[1]);
 | 
			
		||||
		}
 | 
			
		||||
		execv(gargv[0], gargv);
 | 
			
		||||
		_exit(1);
 | 
			
		||||
	}
 | 
			
		||||
	/* parent; assume fdopen can't fail...  */
 | 
			
		||||
	if (*type == 'r') {
 | 
			
		||||
		iop = fdopen(pdes[0], type);
 | 
			
		||||
		(void)close(pdes[1]);
 | 
			
		||||
	} else {
 | 
			
		||||
		iop = fdopen(pdes[1], type);
 | 
			
		||||
		(void)close(pdes[0]);
 | 
			
		||||
	}
 | 
			
		||||
	pids[fileno(iop)] = pid;
 | 
			
		||||
 | 
			
		||||
pfree:	for (argc = 1; gargv[argc] != NULL; argc++)
 | 
			
		||||
		free(gargv[argc]);
 | 
			
		||||
 | 
			
		||||
	return (iop);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int
 | 
			
		||||
ftpd_pclose(iop)
 | 
			
		||||
	FILE *iop;
 | 
			
		||||
{
 | 
			
		||||
	int fdes, omask, status;
 | 
			
		||||
	pid_t pid;
 | 
			
		||||
	sigset_t sigset, osigset;
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
	 * pclose returns -1 if stream is not associated with a
 | 
			
		||||
	 * `popened' command, or, if already `pclosed'.
 | 
			
		||||
	 */
 | 
			
		||||
	if (pids == 0 || pids[fdes = fileno(iop)] == 0)
 | 
			
		||||
		return (-1);
 | 
			
		||||
	(void)fclose(iop);
 | 
			
		||||
	sigemptyset(&sigset);
 | 
			
		||||
	sigaddset(&sigset, SIGINT);
 | 
			
		||||
	sigaddset(&sigset, SIGQUIT);
 | 
			
		||||
	sigaddset(&sigset, SIGHUP);
 | 
			
		||||
	sigprocmask(SIG_BLOCK, &sigset, &osigset);
 | 
			
		||||
	while ((pid = waitpid(pids[fdes], &status, 0)) < 0 && errno == EINTR)
 | 
			
		||||
		continue;
 | 
			
		||||
	sigprocmask(SIG_SETMASK, &osigset, NULL);
 | 
			
		||||
	pids[fdes] = 0;
 | 
			
		||||
	if (pid < 0)
 | 
			
		||||
		return (pid);
 | 
			
		||||
	if (WIFEXITED(status))
 | 
			
		||||
		return (WEXITSTATUS(status));
 | 
			
		||||
	return (1);
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user