merge
This commit is contained in:
commit
e4d29ea9a7
|
@ -33,7 +33,6 @@ enum
|
||||||
/* maximum ms we'll wait for a command */
|
/* maximum ms we'll wait for a command */
|
||||||
Maxwait= 1000*60*30, /* inactive for 30 minutes, we hang up */
|
Maxwait= 1000*60*30, /* inactive for 30 minutes, we hang up */
|
||||||
|
|
||||||
Maxerr= 128,
|
|
||||||
Maxpath= 512,
|
Maxpath= 512,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -161,7 +160,7 @@ logit(char *fmt, ...)
|
||||||
{
|
{
|
||||||
char buf[8192];
|
char buf[8192];
|
||||||
va_list arg;
|
va_list arg;
|
||||||
char errstr[128];
|
char errstr[ERRMAX];
|
||||||
|
|
||||||
rerrstr(errstr, sizeof errstr);
|
rerrstr(errstr, sizeof errstr);
|
||||||
va_start(arg, fmt);
|
va_start(arg, fmt);
|
||||||
|
@ -1078,7 +1077,7 @@ list(char *arg, int lflag)
|
||||||
|
|
||||||
dfd = dialdata();
|
dfd = dialdata();
|
||||||
if(dfd < 0){
|
if(dfd < 0){
|
||||||
reply("425 Error opening data connection:%r");
|
reply("425 Error opening data connection: %r");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
reply("150 Opened data connection (%s)", data);
|
reply("150 Opened data connection (%s)", data);
|
||||||
|
@ -1373,7 +1372,7 @@ retrieve(char *arg, int arg2)
|
||||||
reply("150 Opening data connection for %s (%s)", arg, data);
|
reply("150 Opening data connection for %s (%s)", arg, data);
|
||||||
dfd = dialdata();
|
dfd = dialdata();
|
||||||
if(dfd < 0){
|
if(dfd < 0){
|
||||||
reply("425 Error opening data connection:%r");
|
reply("425 Error opening data connection: %r");
|
||||||
close(fd);
|
close(fd);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1445,7 +1444,7 @@ store(char *arg, int fd)
|
||||||
reply("150 Opening data connection for %s (%s)", arg, data);
|
reply("150 Opening data connection for %s (%s)", arg, data);
|
||||||
dfd = dialdata();
|
dfd = dialdata();
|
||||||
if(dfd < 0){
|
if(dfd < 0){
|
||||||
reply("425 Error opening data connection:%r");
|
reply("425 Error opening data connection: %r");
|
||||||
close(fd);
|
close(fd);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1697,30 +1696,29 @@ dialdata(void)
|
||||||
{
|
{
|
||||||
int fd, cfd;
|
int fd, cfd;
|
||||||
char ldir[40];
|
char ldir[40];
|
||||||
char err[Maxerr];
|
char err[ERRMAX];
|
||||||
|
|
||||||
if(mountnet() < 0)
|
if(mountnet() < 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if(!passive.inuse){
|
if(!passive.inuse)
|
||||||
fd = dial(data, "20", 0, 0);
|
fd = dial(data, "20", 0, 0);
|
||||||
errstr(err, sizeof err);
|
else {
|
||||||
} else {
|
fd = -1;
|
||||||
alarm(5*60*1000);
|
alarm(5*60*1000);
|
||||||
cfd = listen(passive.adir, ldir);
|
cfd = listen(passive.adir, ldir);
|
||||||
alarm(0);
|
alarm(0);
|
||||||
errstr(err, sizeof err);
|
if(cfd >= 0){
|
||||||
if(cfd < 0)
|
fd = accept(cfd, ldir);
|
||||||
return -1;
|
close(cfd);
|
||||||
fd = accept(cfd, ldir);
|
}
|
||||||
errstr(err, sizeof err);
|
|
||||||
close(cfd);
|
|
||||||
}
|
}
|
||||||
|
err[0] = 0;
|
||||||
|
errstr(err, sizeof err);
|
||||||
if(fd < 0)
|
if(fd < 0)
|
||||||
logit("can't dial %s: %s", data, err);
|
logit("can't dial %s: %s", data, err);
|
||||||
|
|
||||||
unmountnet();
|
unmountnet();
|
||||||
werrstr(err, sizeof err);
|
errstr(err, sizeof err);
|
||||||
return fd;
|
return fd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -11,7 +11,6 @@
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
Maxpath= 128,
|
Maxpath= 128,
|
||||||
Maxerr= 256,
|
|
||||||
|
|
||||||
Debug= 0,
|
Debug= 0,
|
||||||
|
|
||||||
|
@ -561,7 +560,7 @@ sendfile(int fd, char *name, char *mode, int opts)
|
||||||
{
|
{
|
||||||
int file, block, ret, rexmit, n, txtry;
|
int file, block, ret, rexmit, n, txtry;
|
||||||
uchar buf[Maxsegsize+Hdrsize];
|
uchar buf[Maxsegsize+Hdrsize];
|
||||||
char errbuf[Maxerr];
|
char errbuf[ERRMAX];
|
||||||
|
|
||||||
file = -1;
|
file = -1;
|
||||||
syslog(dbg, flog, "tftpd %d send file '%s' %s to %s",
|
syslog(dbg, flog, "tftpd %d send file '%s' %s to %s",
|
||||||
|
@ -642,7 +641,7 @@ recvfile(int fd, char *name, char *mode)
|
||||||
{
|
{
|
||||||
ushort op, block, inblock;
|
ushort op, block, inblock;
|
||||||
uchar buf[Maxsegsize+8];
|
uchar buf[Maxsegsize+8];
|
||||||
char errbuf[Maxerr];
|
char errbuf[ERRMAX];
|
||||||
int n, ret, file;
|
int n, ret, file;
|
||||||
|
|
||||||
syslog(dbg, flog, "receive file '%s' %s from %s", name, mode, raddr);
|
syslog(dbg, flog, "receive file '%s' %s from %s", name, mode, raddr);
|
||||||
|
@ -651,7 +650,7 @@ recvfile(int fd, char *name, char *mode)
|
||||||
if(file < 0) {
|
if(file < 0) {
|
||||||
errstr(errbuf, sizeof errbuf);
|
errstr(errbuf, sizeof errbuf);
|
||||||
nak(fd, 0, errbuf);
|
nak(fd, 0, errbuf);
|
||||||
syslog(dbg, flog, "can't create %s: %r", name);
|
syslog(dbg, flog, "can't create %s: %s", name, errbuf);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -729,13 +728,16 @@ nak(int fd, int code, char *msg)
|
||||||
char buf[128];
|
char buf[128];
|
||||||
int n;
|
int n;
|
||||||
|
|
||||||
|
n = 5 + strlen(msg);
|
||||||
|
if(n > sizeof(buf))
|
||||||
|
n = sizeof(buf);
|
||||||
buf[0] = 0;
|
buf[0] = 0;
|
||||||
buf[1] = Tftp_ERROR;
|
buf[1] = Tftp_ERROR;
|
||||||
buf[2] = 0;
|
buf[2] = 0;
|
||||||
buf[3] = code;
|
buf[3] = code;
|
||||||
strcpy(buf+4, msg);
|
memmove(buf+4, msg, n - 5);
|
||||||
n = strlen(msg) + 4 + 1;
|
buf[n-1] = 0;
|
||||||
if(write(fd, buf, n) < n)
|
if(write(fd, buf, n) != n)
|
||||||
sysfatal("write nak: %r");
|
sysfatal("write nak: %r");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue