summaryrefslogtreecommitdiffstats
path: root/libexec/tftpd
diff options
context:
space:
mode:
authorsobomax <sobomax@FreeBSD.org>2003-11-20 13:36:31 +0000
committersobomax <sobomax@FreeBSD.org>2003-11-20 13:36:31 +0000
commitdced91d8f3c525ce50e8b61814028cfd393c983f (patch)
tree742347ee853e00786b1f1c280a5b073443ff52c1 /libexec/tftpd
parent18a4a482e18cdff1b46c621b046c43d87e244ce3 (diff)
downloadFreeBSD-src-dced91d8f3c525ce50e8b61814028cfd393c983f.zip
FreeBSD-src-dced91d8f3c525ce50e8b61814028cfd393c983f.tar.gz
Fix a bug which causes wrong filename being written into the syslog
in the case when client sends request with RFC2347 options. Approved by: re MFC After: 2 weeks
Diffstat (limited to 'libexec/tftpd')
-rw-r--r--libexec/tftpd/tftpd.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/libexec/tftpd/tftpd.c b/libexec/tftpd/tftpd.c
index bc24753..6435e8b 100644
--- a/libexec/tftpd/tftpd.c
+++ b/libexec/tftpd/tftpd.c
@@ -364,8 +364,9 @@ tftp(struct tftphdr *tp, int size)
int i, first = 1, has_options = 0, ecode;
struct formats *pf;
char *filename, *mode, *option, *ccp;
+ char fnbuf[MAXPATHLEN];
- filename = cp = tp->th_stuff;
+ cp = tp->th_stuff;
again:
while (cp < buf + size) {
if (*cp == '\0')
@@ -376,6 +377,14 @@ again:
nak(EBADOP);
exit(1);
}
+ i = cp - tp->th_stuff;
+ if (i >= sizeof(fnbuf)) {
+ nak(EBADOP);
+ exit(1);
+ }
+ memcpy(fnbuf, tp->th_stuff, i);
+ fnbuf[i] = '\0';
+ filename = fnbuf;
if (first) {
mode = ++cp;
first = 0;
OpenPOWER on IntegriCloud