[net.bugs.4bsd] ftp user mls/mdir commands don't work right

Jeff@decwrl.UUCP (03/21/84)

Description:
	The syntax for the mls and mdir commands is
		mdir remote-pathname local-filename
	Unless local-filename is "-", ftp (cryptically and 
	uncharacteristicly) asks for confirmation (presumably,
	meaning "do you really want to write on this file?"
	
	However, if you type "n" or "N", it goes ahead and
	writes the file, while if you type anything else (a positive
	response) it gives up.
	
	Essentially the same bug causes a problem with a "globbed"
	local-filename that doesn't match any extant file; ftp will
	instead create a file with the metacharacters in the filename.

Repeat-By:
	% ftp localhost
	... login ...
	ftp> mls /etc /tmp/foo
	local-file /tmp/foo? y
	ftp>
	ftp> mls /etc /tmp/foo
	local-file /tmp/foo? n
	mls ac? ...
	 .
	 .
	 .
	ftp> mls /etc/ /tmp/This*does*not*exist
	local-file /tmp/This*does*not*exist? n
	 .
	 .
	 .
	ftp> bye
	% ls /tmp/This*does*not*exist
	This*does*not*exist
	%
Fix:
*** cmds.c	Tue Mar 20 16:40:02 1984
--- cmds.c.old	Tue Jul 26 21:34:47 1983
***************
*** 703,709
  	dest = argv[argc - 1];
  	argv[argc - 1] = NULL;
  	if (strcmp(dest, "-"))
! 		if (!globulize(&dest) || !confirm("local-file", dest))
  			return;
  	cmd = argv[0][1] == 'l' ? "NLST" : "LIST";
  	for (mode = "w"; cp = remglob(argc, argv); mode = "a")

--- 703,709 -----
  	dest = argv[argc - 1];
  	argv[argc - 1] = NULL;
  	if (strcmp(dest, "-"))
! 		if (globulize(&dest) && confirm("local-file", dest))
  			return;
  	cmd = argv[0][1] == 'l' ? "NLST" : "LIST";
  	for (mode = "w"; cp = remglob(argc, argv); mode = "a")

Comment:
	All the m* commands are next to worthless unless you've
	read the code and understand how they are implemented; all
	sorts of things are counter-intuitive.

	For example, try this:
	
	ftp> cd /usr
	ftp> mls * -

	or this:
	
	ftp> cd /usr
	ftp> mls /bin -