Use full path in synopsis. Syslog will add trailing \n.
This commit is contained in:
parent
5f806c3ccf
commit
a8faeabc96
@ -39,7 +39,7 @@
|
||||
.Nd
|
||||
Internet Trivial File Transfer Protocol server
|
||||
.Sh SYNOPSIS
|
||||
.Nm tftpd
|
||||
.Nm /usr/libexec/tftpd
|
||||
.Op Fl l
|
||||
.Op Fl n
|
||||
.Op Fl s Ar directory
|
||||
@ -65,7 +65,7 @@ The use of
|
||||
.Xr tftp 1
|
||||
does not require an account or password on the remote system.
|
||||
Due to the lack of authentication information,
|
||||
.Nm tftpd
|
||||
.Nm
|
||||
will allow only publicly readable files to be
|
||||
accessed.
|
||||
Files containing the string ``/\|\fB.\|.\fP\|/'' or starting with
|
||||
@ -80,7 +80,7 @@ should be considered before enabling tftp service.
|
||||
The server should have the user ID with the lowest possible privilege.
|
||||
.Pp
|
||||
Access to files may be restricted by invoking
|
||||
.Nm tftpd
|
||||
.Nm
|
||||
with a list of directories by including up to 20 pathnames
|
||||
as server program arguments in
|
||||
.Pa /etc/inetd.conf .
|
||||
@ -90,30 +90,40 @@ The given directories are also treated as a search path for
|
||||
relative filename requests.
|
||||
.Pp
|
||||
The chroot option provides additional security by restricting access
|
||||
of tftpd to only a chroot'd file system. This is useful when moving
|
||||
of
|
||||
.Nm
|
||||
to only a chroot'd file system. This is useful when moving
|
||||
from an OS that supported
|
||||
.Nm -s
|
||||
.Fl s
|
||||
as a boot server. Because chroot is restricted to root, you must run
|
||||
tftpd as root. However, if you chroot, then
|
||||
.Nm tftpd
|
||||
.Nm
|
||||
as root. However, if you chroot, then
|
||||
.Nm
|
||||
will set its user id to nobody.
|
||||
.Pp
|
||||
The options are:
|
||||
.Bl -tag -width Ds
|
||||
.It Fl l
|
||||
Logs all requests using
|
||||
Log all requests using
|
||||
.Xr syslog 3 .
|
||||
.It Fl n
|
||||
Suppresses negative acknowledgement of requests for nonexistent
|
||||
Suppress negative acknowledgement of requests for nonexistent
|
||||
relative filenames.
|
||||
.It Fl s Ar directory
|
||||
Causes tftpd to chroot to
|
||||
Cause
|
||||
.Nm
|
||||
to chroot to
|
||||
.Pa directory
|
||||
before accepting commands. In addition, the user id is set to
|
||||
nobody.
|
||||
.Pp
|
||||
If you are not running -s, no user id change will be
|
||||
attempted. You should not run tftpd as root unless you are using -s.
|
||||
If you are not running
|
||||
.Fl s ,
|
||||
no user id change will be
|
||||
attempted. You should not run
|
||||
.Nm
|
||||
as root unless you are using
|
||||
.Fl s .
|
||||
.El
|
||||
.Sh SEE ALSO
|
||||
.Xr tftp 1 ,
|
||||
|
@ -29,18 +29,20 @@
|
||||
* 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.
|
||||
*
|
||||
* $Id: tftpd.c,v 1.8 1997/03/24 06:04:08 imp Exp $
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
static char copyright[] =
|
||||
static const char copyright[] =
|
||||
"@(#) Copyright (c) 1983, 1993\n\
|
||||
The Regents of the University of California. All rights reserved.\n";
|
||||
#endif /* not lint */
|
||||
|
||||
#ifndef lint
|
||||
#if 0
|
||||
static char sccsid[] = "@(#)tftpd.c 8.1 (Berkeley) 6/4/93";
|
||||
#endif
|
||||
static const char rcsid[] =
|
||||
"$Id$";
|
||||
#endif /* not lint */
|
||||
|
||||
/*
|
||||
@ -64,6 +66,7 @@ static char sccsid[] = "@(#)tftpd.c 8.1 (Berkeley) 6/4/93";
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <netdb.h>
|
||||
#include <pwd.h>
|
||||
#include <setjmp.h>
|
||||
#include <signal.h>
|
||||
#include <stdio.h>
|
||||
@ -71,7 +74,6 @@ static char sccsid[] = "@(#)tftpd.c 8.1 (Berkeley) 6/4/93";
|
||||
#include <string.h>
|
||||
#include <syslog.h>
|
||||
#include <unistd.h>
|
||||
#include <pwd.h>
|
||||
|
||||
#include "tftpsubs.h"
|
||||
|
||||
@ -156,14 +158,14 @@ main(argc, argv)
|
||||
|
||||
on = 1;
|
||||
if (ioctl(0, FIONBIO, &on) < 0) {
|
||||
syslog(LOG_ERR, "ioctl(FIONBIO): %m\n");
|
||||
syslog(LOG_ERR, "ioctl(FIONBIO): %m");
|
||||
exit(1);
|
||||
}
|
||||
fromlen = sizeof (from);
|
||||
n = recvfrom(0, buf, sizeof (buf), 0,
|
||||
(struct sockaddr *)&from, &fromlen);
|
||||
if (n < 0) {
|
||||
syslog(LOG_ERR, "recvfrom: %m\n");
|
||||
syslog(LOG_ERR, "recvfrom: %m");
|
||||
exit(1);
|
||||
}
|
||||
/*
|
||||
@ -210,7 +212,7 @@ main(argc, argv)
|
||||
}
|
||||
}
|
||||
if (pid < 0) {
|
||||
syslog(LOG_ERR, "fork: %m\n");
|
||||
syslog(LOG_ERR, "fork: %m");
|
||||
exit(1);
|
||||
} else if (pid != 0) {
|
||||
exit(0);
|
||||
@ -242,17 +244,17 @@ main(argc, argv)
|
||||
close(1);
|
||||
peer = socket(AF_INET, SOCK_DGRAM, 0);
|
||||
if (peer < 0) {
|
||||
syslog(LOG_ERR, "socket: %m\n");
|
||||
syslog(LOG_ERR, "socket: %m");
|
||||
exit(1);
|
||||
}
|
||||
memset(&sin, 0, sizeof(sin));
|
||||
sin.sin_family = AF_INET;
|
||||
if (bind(peer, (struct sockaddr *)&sin, sizeof (sin)) < 0) {
|
||||
syslog(LOG_ERR, "bind: %m\n");
|
||||
syslog(LOG_ERR, "bind: %m");
|
||||
exit(1);
|
||||
}
|
||||
if (connect(peer, (struct sockaddr *)&from, sizeof(from)) < 0) {
|
||||
syslog(LOG_ERR, "connect: %m\n");
|
||||
syslog(LOG_ERR, "connect: %m");
|
||||
exit(1);
|
||||
}
|
||||
tp = (struct tftphdr *)buf;
|
||||
@ -488,7 +490,7 @@ sendfile(pf)
|
||||
|
||||
send_data:
|
||||
if (send(peer, dp, size + 4, 0) != size + 4) {
|
||||
syslog(LOG_ERR, "tftpd: write: %m\n");
|
||||
syslog(LOG_ERR, "write: %m");
|
||||
goto abort;
|
||||
}
|
||||
read_ahead(file, pf->f_convert);
|
||||
@ -497,7 +499,7 @@ sendfile(pf)
|
||||
n = recv(peer, ackbuf, sizeof (ackbuf), 0);
|
||||
alarm(0);
|
||||
if (n < 0) {
|
||||
syslog(LOG_ERR, "tftpd: read: %m\n");
|
||||
syslog(LOG_ERR, "read: %m");
|
||||
goto abort;
|
||||
}
|
||||
ap->th_opcode = ntohs((u_short)ap->th_opcode);
|
||||
@ -553,7 +555,7 @@ recvfile(pf)
|
||||
(void) setjmp(timeoutbuf);
|
||||
send_ack:
|
||||
if (send(peer, ackbuf, 4, 0) != 4) {
|
||||
syslog(LOG_ERR, "tftpd: write: %m\n");
|
||||
syslog(LOG_ERR, "write: %m");
|
||||
goto abort;
|
||||
}
|
||||
write_behind(file, pf->f_convert);
|
||||
@ -562,7 +564,7 @@ recvfile(pf)
|
||||
n = recv(peer, dp, PKTSIZE, 0);
|
||||
alarm(0);
|
||||
if (n < 0) { /* really? */
|
||||
syslog(LOG_ERR, "tftpd: read: %m\n");
|
||||
syslog(LOG_ERR, "read: %m");
|
||||
goto abort;
|
||||
}
|
||||
dp->th_opcode = ntohs((u_short)dp->th_opcode);
|
||||
@ -666,7 +668,7 @@ nak(error)
|
||||
tp->th_msg[length] = '\0';
|
||||
length += 5;
|
||||
if (send(peer, buf, length, 0) != length)
|
||||
syslog(LOG_ERR, "nak: %m\n");
|
||||
syslog(LOG_ERR, "nak: %m");
|
||||
}
|
||||
|
||||
static char *
|
||||
|
Loading…
Reference in New Issue
Block a user