SCCS-vsn: libexec/ftpd/ftpd.c 5.24
#endif /* not lint */
#ifndef lint
#endif /* not lint */
#ifndef lint
-static char sccsid[] = "@(#)ftpd.c 5.23 (Berkeley) %G%";
+static char sccsid[] = "@(#)ftpd.c 5.24 (Berkeley) %G%";
extern int ftpd_pclose(), fclose();
extern char *getline();
extern char cbuf[];
extern int ftpd_pclose(), fclose();
extern char *getline();
extern char cbuf[];
+extern off_t restart_point;
struct sockaddr_in ctrl_addr;
struct sockaddr_in data_source;
struct sockaddr_in ctrl_addr;
struct sockaddr_in data_source;
register char *cp;
FILE *fd;
char *shell;
register char *cp;
FILE *fd;
char *shell;
- char line[BUFSIZ], *index(), *getusershell();
+ char line[BUFSIZ], *getusershell();
if (logged_in) {
if (guest) {
if (logged_in) {
if (guest) {
guest = 1;
askpasswd = 1;
reply(331, "Guest login ok, send ident as password.");
guest = 1;
askpasswd = 1;
reply(331, "Guest login ok, send ident as password.");
reply(530, "User %s unknown.", name);
return;
}
reply(530, "User %s unknown.", name);
return;
}
reply(230, "Guest login ok, access restrictions apply.");
syslog(LOG_INFO, "ANONYMOUS FTP LOGIN FROM %s, %s",
remotehost, passwd);
reply(230, "Guest login ok, access restrictions apply.");
syslog(LOG_INFO, "ANONYMOUS FTP LOGIN FROM %s, %s",
remotehost, passwd);
reply(230, "User %s logged in.", pw->pw_name);
syslog(LOG_INFO, "FTP LOGIN FROM %s, %s",
remotehost, pw->pw_name);
reply(230, "User %s logged in.", pw->pw_name);
syslog(LOG_INFO, "FTP LOGIN FROM %s, %s",
remotehost, pw->pw_name);
reply(550, "%s: not a plain file.", name);
goto done;
}
reply(550, "%s: not a plain file.", name);
goto done;
}
+ if (restart_point)
+ if (type == TYPE_A) {
+ if (fseek(fin, restart_point, L_SET) < 0)
+ perror_reply(550, name);
+ }
+ else if (lseek(fileno(fin), restart_point, L_SET) < 0)
+ perror_reply(550, name);
dout = dataconn(name, st.st_size, "w");
if (dout == NULL)
goto done;
if ((tmp = send_data(fin, dout, st.st_blksize)) > 0 ||
dout = dataconn(name, st.st_size, "w");
if (dout == NULL)
goto done;
if ((tmp = send_data(fin, dout, st.st_blksize)) > 0 ||
- }
- else if (tmp == 0) {
reply(226, "Transfer complete.");
reply(226, "Transfer complete.");
(void) fclose(dout);
data = -1;
pdata = -1;
(void) fclose(dout);
data = -1;
pdata = -1;
perror_reply(553, name);
return;
}
perror_reply(553, name);
return;
}
+ if (restart_point)
+ if (type == TYPE_A) {
+ if (fseek(fout, restart_point, L_SET) < 0)
+ perror_reply(550, name);
+ }
+ else if (lseek(fileno(fout), restart_point, L_SET) < 0)
+ perror_reply(550, name);
din = dataconn(name, (off_t)-1, "r");
if (din == NULL)
goto done;
din = dataconn(name, (off_t)-1, "r");
if (din == NULL)
goto done;
- cp = index(cbuf,'\n');
- *cp = '\0';
+ if (cp = index(cbuf,'\n'))
+ *cp = '\0';
reply(500, "'%s': command not understood.",cbuf);
}
reply(500, "'%s': command not understood.",cbuf);
}