ftpd: dont skip unmountnet() and return proper error string from dialdata()

This commit is contained in:
cinap_lenrek 2014-07-13 01:03:17 +02:00
parent e14eaacce6
commit 4b7b1218bf

View file

@ -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;
} }