SCCS-vsn: libexec/ftpd/ftpd.c 4.6
int form;
int stru; /* avoid C keyword */
int mode;
int form;
int stru; /* avoid C keyword */
int mode;
+int usedefault = 1; /* for data transfers */
char hostname[32];
char *remotehost;
char hostname[32];
char *remotehost;
int lostconn();
FILE *getdatasock(), *dataconn();
int lostconn();
FILE *getdatasock(), *dataconn();
char *argv[];
{
int ctrl, s, options = 0;
char *argv[];
{
int ctrl, s, options = 0;
union wait status;
char *cp;
union wait status;
char *cp;
if (fork() == 0) {
if (logging)
dolog(&his_addr);
if (fork() == 0) {
if (logging)
dolog(&his_addr);
if (data >= 0) {
reply(125, "Using existing data connection for %s%s.",
name, sizebuf);
if (data >= 0) {
reply(125, "Using existing data connection for %s%s.",
name, sizebuf);
return (fdopen(data, mode));
}
reply(150, "Opening data connection for %s (%s,%d)%s.",
return (fdopen(data, mode));
}
reply(150, "Opening data connection for %s (%s,%d)%s.",
ntoa(data_source.sin_addr),
ntohs(data_source.sin_port),
sys_errlist[errno]);
ntoa(data_source.sin_addr),
ntohs(data_source.sin_port),
sys_errlist[errno]);
return (NULL);
}
data = fileno(file);
return (NULL);
}
data = fileno(file);
+ /*
+ * If no PORT command was specified,
+ * use the default address.
+ */
+ if (usedefault) {
+ data_dest = his_addr;
+ data_dest.sin_port = htons(ntohs(sp->s_port) - 1);
+ }
+ usedefault = 0;
if (connect(data, &data_dest, sizeof (data_dest), 0) < 0) {
reply(425, "Can't build data connection: %s.",
sys_errlist[errno]);
if (connect(data, &data_dest, sizeof (data_dest), 0) < 0) {
reply(425, "Can't build data connection: %s.",
sys_errlist[errno]);