X-Git-Url: http://sjero.net/git/?a=blobdiff_plain;f=src%2Fftp-basic.c;h=993834edc0ba3c9814c994ee7bcb7ae0eff72789;hb=37dd65621c2b19c68a8852444347f1fc0ffba58e;hp=8d763ebb5d4e4b23e948a96f8152ae2ee78542df;hpb=7ec83a1b2a616195766011f44cb03a01c711275e;p=wget diff --git a/src/ftp-basic.c b/src/ftp-basic.c index 8d763ebb..993834ed 100644 --- a/src/ftp-basic.c +++ b/src/ftp-basic.c @@ -134,10 +134,6 @@ ftp_request (const char *command, const char *value) return res; } -#ifdef USE_OPIE -const char *calculate_skey_response PARAMS ((int, const char *, const char *)); -#endif - /* Sends the USER and PASS commands to the server, to control connection socket csock. */ uerr_t @@ -195,34 +191,35 @@ ftp_login (struct rbuf *rbuf, const char *acc, const char *pass) "331 opiekey " }; int i; + const char *seed = NULL; for (i = 0; i < countof (skey_head); i++) { - if (strncasecmp (skey_head[i], respline, strlen (skey_head[i])) == 0) - break; + int l = strlen (skey_head[i]); + if (0 == strncasecmp (skey_head[i], respline, l)) + { + seed = respline + l; + break; + } } - if (i < countof (skey_head)) + if (seed) { - const char *cp; + const char *seed; int skey_sequence = 0; - for (cp = respline + strlen (skey_head[i]); - '0' <= *cp && *cp <= '9'; - cp++) - { - skey_sequence = skey_sequence * 10 + *cp - '0'; - } - if (*cp == ' ') - cp++; + /* Extract the sequence from SEED. */ + for (; ISDIGIT (*seed); seed++) + skey_sequence = 10 * skey_sequence + *seed - '0'; + if (*seed == ' ') + ++seed; else { - bad: xfree (respline); return FTPLOGREFUSED; } - if ((cp = calculate_skey_response (skey_sequence, cp, pass)) == 0) - goto bad; - pass = cp; + /* Replace the password with the SKEY response to the + challenge. */ + pass = skey_response (skey_sequence, seed, pass); } } #endif /* USE_OPIE */