Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 2 Feb 2002 07:10:02 -0800 (PST)
From:      Peter Pentchev <roam@ringlet.net>
To:        freebsd-bugs@FreeBSD.org
Subject:   Re: bin/34483: wrong execv() call in amd for ${mount} and ${unmount} if mount type:=program in amd.map
Message-ID:  <200202021510.g12FA2n72257@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help
The following reply was made to PR bin/34483; it has been noted by GNATS.

From: Peter Pentchev <roam@ringlet.net>
To: Artem 'Zazoobr' Ignatjev <timon@memphis.mephi.ru>
Cc: bug-followup@FreeBSD.org
Subject: Re: bin/34483: wrong execv() call in amd for ${mount} and ${unmount} if mount type:=program in amd.map
Date: Sat, 2 Feb 2002 17:00:18 +0200

 On Sat, Feb 02, 2002 at 02:40:02AM -0800, Artem 'Zazoobr' Ignatjev wrote:
 >  Hi.
 >  Here is reply from author, Erez Zadok (from amd-dev <amd-dev@cs.columbia.edu> mailing list):
 >  
 [snip]
 >  > 	type:=program;mount:="/etc/mount mount /this /here"
 [snip]
 >  > It's a
 >  > source of unfortunate confusion to programmers who are used to think that
 >  > it's just an argv[] list.  It's not.
 >  
 >  But I still think, that in case of hardlinks, this patch will work, and all man have to do 
 >  is to write the correct path in map; in other cases there could be no possibility to mount
 >  filesystem "by hands", without writing shell script/tiny program, which will call exec...() on
 >  one path, giving argv[0] with other prog's name.
 
 Actually, I now believe Erez to be correct - I no longer think this is a bug.
 What he is trying to say is that you should provide argv[0] along with
 the other arguments, *after* the path to the program.  This allows you
 to execute a program, giving it an argv[0] different from the filename
 of the executable file - exactly the same way that inetd.conf's syntax
 allows you to do the same.  This is done to minimize the need for
 hardlinks, as you say; even without a hardlink, you are able to invoke,
 say, /sbin/mount as either 'mount' or 'mount_ffs' or 'mount_msdosfs' or
 whatever else you like.
 
 Just take a look at inetd.conf: it will illustrate this perfectly:
 
 ftp	stream	tcp	nowait	root	/usr/libexec/ftpd	ftpd -l
 
 This is equivalent to amd's syntax of:
 
 type:=program;mount:="/usr/libexec/ftpd ftpd -l"
 
 IOW, invoke the program executable file /usr/libexec/ftpd, and pass
 it an argv[] list of argv[0]="ftpd", argv[1]="-l", argv[2]=NULL.
 
 If you do not wish to invoke programs with names other than their
 executable files' names, you just have to provide the program name
 twice, as in:
 
 type:=program;mount:="mount mount blah"
 
 ..though this is both unusable and insecure (think PATH).  In an ideal
 case, you would provide a full path to the executable and just a name
 for the program, as in:
 
 type:=program;mount:="/sbin/mount mount blah"
 
 Can you provide an example of an executable/program name, which can NOT
 be handled by this scheme?  If not, I think this PR should be closed..
 Still, thanks for your effort to improve FreeBSD by filing a report on
 what you believed was a genuine problem!
 
 G'luck,
 Peter
 
 -- 
 Peter Pentchev		roam@ringlet.net	roam@FreeBSD.org
 Hey, out there - is it *you* reading me, or is it someone else?

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200202021510.g12FA2n72257>