summaryrefslogtreecommitdiffstats
path: root/crypto/heimdal/appl/ftp/ftp/ftp.c
diff options
context:
space:
mode:
Diffstat (limited to 'crypto/heimdal/appl/ftp/ftp/ftp.c')
-rw-r--r--crypto/heimdal/appl/ftp/ftp/ftp.c85
1 files changed, 45 insertions, 40 deletions
diff --git a/crypto/heimdal/appl/ftp/ftp/ftp.c b/crypto/heimdal/appl/ftp/ftp/ftp.c
index a6cb90e..0a00bd2 100644
--- a/crypto/heimdal/appl/ftp/ftp/ftp.c
+++ b/crypto/heimdal/appl/ftp/ftp/ftp.c
@@ -32,7 +32,7 @@
*/
#include "ftp_locl.h"
-RCSID ("$Id: ftp.c,v 1.75.2.1 2004/08/20 14:59:06 lha Exp $");
+RCSID ("$Id: ftp.c 16650 2006-01-24 08:16:08Z lha $");
struct sockaddr_storage hisctladdr_ss;
struct sockaddr *hisctladdr = (struct sockaddr *)&hisctladdr_ss;
@@ -79,6 +79,7 @@ hookup (const char *host, int port)
strlcpy (hostnamebuf, host, sizeof(hostnamebuf));
hostname = hostnamebuf;
+ s = -1;
for (a = ai; a != NULL; a = a->ai_next) {
s = socket (a->ai_family, a->ai_socktype, a->ai_protocol);
if (s < 0)
@@ -100,12 +101,13 @@ hookup (const char *host, int port)
warn ("connect %s", addrstr);
close (s);
+ s = -1;
continue;
}
break;
}
freeaddrinfo (ai);
- if (error < 0) {
+ if (s < 0) {
warnx ("failed to contact %s", host);
code = -1;
return NULL;
@@ -164,7 +166,7 @@ login (char *host)
{
char tmp[80];
char defaultpass[128];
- char *user, *pass, *acct;
+ char *userstr, *pass, *acctstr;
int n, aflag = 0;
char *myname = NULL;
@@ -173,7 +175,7 @@ login (char *host)
if (pw != NULL)
myname = pw->pw_name;
- user = pass = acct = 0;
+ userstr = pass = acctstr = 0;
if(sec_login(host))
printf("\n*** Using plaintext user and password ***\n\n");
@@ -181,11 +183,11 @@ login (char *host)
printf("Authentication successful.\n\n");
}
- if (ruserpass (host, &user, &pass, &acct) < 0) {
+ if (ruserpass (host, &userstr, &pass, &acctstr) < 0) {
code = -1;
return (0);
}
- while (user == NULL) {
+ while (userstr == NULL) {
if (myname)
printf ("Name (%s:%s): ", host, myname);
else
@@ -194,19 +196,19 @@ login (char *host)
if (fgets (tmp, sizeof (tmp) - 1, stdin) != NULL)
tmp[strlen (tmp) - 1] = '\0';
if (*tmp == '\0')
- user = myname;
+ userstr = myname;
else
- user = tmp;
+ userstr = tmp;
}
- strlcpy(username, user, sizeof(username));
- n = command("USER %s", user);
+ strlcpy(username, userstr, sizeof(username));
+ n = command("USER %s", userstr);
if (n == COMPLETE)
n = command("PASS dummy"); /* DK: Compatibility with gssftp daemon */
else if(n == CONTINUE) {
if (pass == NULL) {
char prompt[128];
if(myname &&
- (!strcmp(user, "ftp") || !strcmp(user, "anonymous"))) {
+ (!strcmp(userstr, "ftp") || !strcmp(userstr, "anonymous"))) {
snprintf(defaultpass, sizeof(defaultpass),
"%s@%s", myname, mydomain);
snprintf(prompt, sizeof(prompt),
@@ -219,7 +221,7 @@ login (char *host)
}
if (pass == NULL) {
pass = defaultpass;
- des_read_pw_string (tmp, sizeof (tmp), prompt, 0);
+ UI_UTIL_read_pw_string (tmp, sizeof (tmp), prompt, 0);
if (tmp[0])
pass = tmp;
}
@@ -228,16 +230,16 @@ login (char *host)
}
if (n == CONTINUE) {
aflag++;
- acct = tmp;
- des_read_pw_string (acct, 128, "Account:", 0);
- n = command ("ACCT %s", acct);
+ acctstr = tmp;
+ UI_UTIL_read_pw_string (acctstr, 128, "Account:", 0);
+ n = command ("ACCT %s", acctstr);
}
if (n != COMPLETE) {
warnx ("Login failed.");
return (0);
}
- if (!aflag && acct != NULL)
- command ("ACCT %s", acct);
+ if (!aflag && acctstr != NULL)
+ command ("ACCT %s", acctstr);
if (proxy)
return (1);
for (n = 0; n < macnum; ++n) {
@@ -351,7 +353,7 @@ getreply (int expecteof)
continue;
case '\n':
*p++ = '\0';
- if(isdigit(buf[0])){
+ if(isdigit((unsigned char)buf[0])){
sscanf(buf, "%d", &code);
if(code == 631){
code = 0;
@@ -390,15 +392,15 @@ getreply (int expecteof)
osa.sa_handler (SIGINT);
#endif
if (code == 227 || code == 229) {
- char *p;
-
- p = strchr (reply_string, '(');
- if (p) {
- p++;
- strlcpy(pasv, p, sizeof(pasv));
- p = strrchr(pasv, ')');
- if (p)
- *p = '\0';
+ char *q;
+
+ q = strchr (reply_string, '(');
+ if (q) {
+ q++;
+ strlcpy(pasv, q, sizeof(pasv));
+ q = strrchr(pasv, ')');
+ if (q)
+ *q = '\0';
}
}
return code / 100;
@@ -727,6 +729,8 @@ sendrequest (char *cmd, char *local, char *remote, char *lmode, int printnames)
case TYPE_L:
rc = lseek (fileno (fin), restart_point, SEEK_SET);
break;
+ default:
+ abort();
}
if (rc < 0) {
warn ("local: %s", local);
@@ -859,7 +863,7 @@ void
recvrequest (char *cmd, char *local, char *remote,
char *lmode, int printnames, int local_given)
{
- FILE *fout, *din = 0;
+ FILE *fout = NULL, *din = NULL;
int (*closefunc) (FILE *);
sighand oldintr, oldintp;
int c, d, is_retr, tcrflag, bare_lfs = 0;
@@ -1166,7 +1170,7 @@ parse_epsv (const char *str)
}
static int
-parse_pasv (struct sockaddr_in *sin, const char *str)
+parse_pasv (struct sockaddr_in *sin4, const char *str)
{
int a0, a1, a2, a3, p0, p1;
@@ -1192,11 +1196,11 @@ parse_pasv (struct sockaddr_in *sin, const char *str)
printf ("Can't parse passive mode string.\n");
return -1;
}
- memset (sin, 0, sizeof(*sin));
- sin->sin_family = AF_INET;
- sin->sin_addr.s_addr = htonl ((a0 << 24) | (a1 << 16) |
+ memset (sin4, 0, sizeof(*sin4));
+ sin4->sin_family = AF_INET;
+ sin4->sin_addr.s_addr = htonl ((a0 << 24) | (a1 << 16) |
(a2 << 8) | a3);
- sin->sin_port = htons ((p0 << 8) | p1);
+ sin4->sin_port = htons ((p0 << 8) | p1);
return 0;
}
@@ -1318,10 +1322,10 @@ noport:
verbose = overbose;
if (result == ERROR) {
- struct sockaddr_in *sin = (struct sockaddr_in *)data_addr;
+ struct sockaddr_in *sin4 = (struct sockaddr_in *)data_addr;
- unsigned int a = ntohl(sin->sin_addr.s_addr);
- unsigned int p = ntohs(sin->sin_port);
+ unsigned int a = ntohl(sin4->sin_addr.s_addr);
+ unsigned int p = ntohs(sin4->sin_port);
if (data_addr->sa_family != AF_INET) {
warnx ("remote server doesn't support EPRT");
@@ -1544,7 +1548,7 @@ abortpt (int sig)
void
proxtrans (char *cmd, char *local, char *remote)
{
- sighand oldintr;
+ sighand oldintr = NULL;
int secndflag = 0, prox_type, nfnd;
char *cmd2;
fd_set mask;
@@ -1616,7 +1620,8 @@ abort:
pswitch (1);
if (ptabflg)
code = -1;
- signal (SIGINT, oldintr);
+ if (oldintr)
+ signal (SIGINT, oldintr);
return;
}
if (cpend)
@@ -1751,8 +1756,8 @@ abort_remote (FILE * din)
errx (1, "fd too large");
FD_SET (fileno (cin), &mask);
if (din) {
- if (fileno (din) >= FD_SETSIZE)
- errx (1, "fd too large");
+ if (fileno (din) >= FD_SETSIZE)
+ errx (1, "fd too large");
FD_SET (fileno (din), &mask);
}
if ((nfnd = empty (&mask, 10)) <= 0) {
OpenPOWER on IntegriCloud