From c18a3a39bf6b8a2a2cff907bd541d0650810db7f Mon Sep 17 00:00:00 2001 From: millert Date: Mon, 28 Apr 1997 21:10:06 +0000 Subject: [PATCH] From NetBSD (lukem): Cleanup parser of ftp://[user:pass@]host[:port]/[dir/][file Should be more robust now. Fixes NetBSD PR #3520. --- usr.bin/ftp/fetch.c | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/usr.bin/ftp/fetch.c b/usr.bin/ftp/fetch.c index e80f2c0e702..c333d905153 100644 --- a/usr.bin/ftp/fetch.c +++ b/usr.bin/ftp/fetch.c @@ -1,5 +1,5 @@ -/* $OpenBSD: fetch.c,v 1.10 1997/04/23 20:33:06 deraadt Exp $ */ -/* $NetBSD: fetch.c,v 1.6 1997/04/14 09:09:19 lukem Exp $ */ +/* $OpenBSD: fetch.c,v 1.11 1997/04/28 21:10:06 millert Exp $ */ +/* $NetBSD: fetch.c,v 1.8 1997/04/21 18:45:47 lukem Exp $ */ /*- * Copyright (c) 1997 The NetBSD Foundation, Inc. @@ -38,7 +38,7 @@ */ #ifndef lint -static char rcsid[] = "$OpenBSD: fetch.c,v 1.10 1997/04/23 20:33:06 deraadt Exp $"; +static char rcsid[] = "$OpenBSD: fetch.c,v 1.11 1997/04/28 21:10:06 millert Exp $"; #endif /* not lint */ /* @@ -436,13 +436,13 @@ auto_fetch(argc, argv, fd) dir = strchr(host, '/'); /* Look for [user:pass@]host[:port] */ - user = host; - pass = strpbrk(user, ":@/"); + pass = strpbrk(host, ":@/"); if (pass == NULL || *pass == '/') { - user = pass = NULL; + pass = NULL; goto parsed_url; } - if (*pass == '@') { + if (pass == host || *pass == '@') { +bad_ftp_url: warnx("Bad ftp URL: %s", argv[argpos]); rval = argpos + 1; continue; @@ -451,15 +451,15 @@ auto_fetch(argc, argv, fd) cp = strpbrk(pass, ":@/"); if (cp == NULL || *cp == '/') { portnum = pass; - user = pass = NULL; + pass = NULL; goto parsed_url; } - if (*cp == ':') { - warnx("Bad ftp URL: %s", argv[argpos]); - rval = argpos + 1; - continue; - } + if (EMPTYSTRING(cp) || *cp == ':') + goto bad_ftp_url; *cp++ = '\0'; + user = host; + if (EMPTYSTRING(user)) + goto bad_ftp_url; host = cp; portnum = strchr(host, ':'); if (portnum != NULL) -- 2.20.1