How does Sendmail know how it was invoked?

Don Hinton don.hinton at vanderbilt.edu
Sat Aug 4 13:48:25 PDT 2007


On Saturday 04 August 2007 15:13:34 RW wrote:
> On Sat, 4 Aug 2007 13:23:07 -0500
>
> Dan Nelson <dnelson at allantgroup.com> wrote:
> > In the last episode (Aug 04), RW said:
> > > mailwrapper checks to see how it was invoked and then looks up the
> > > appropriate command in mailer.conf.  All of the entries in
> > > mailer.conf point to /usr/libexec/sendmail/sendmail, so how does
> > > that binary know what it's supposed to do.
> >
> > The kernel passes the executable name to the running process along
> > with the rest of the commandline arguments.  If you run "ls -l /tmp",
> > for example, the ls binary gets "ls", "-l", and "/tmp" as its
> > arguments. See around line 360 of src/contrib/sendmail/src/main.c.
>
> Yes, I understand that. When you type mailq, mailwrapper's argv[0] will
> contain "mailq". but then mailwrapper looks-up mailq in mailer.conf
> and runs /usr/libexec/sendmail/sendmail. So when sendmail checks it's
> argv[0] I was assuming that it would see "sendmail".
>
> What I didn't get was that when a binary is executed from execve(), it's
> the parent program that sets the argv[0] seen by the child, and not
> the kernel.

Sorry, I should have paid closer attention to your question and actually 
looked at the code to see what they were doing in this specific case.

They original args, including argv[0], are passed as args parameter to execve.  
So from the perspective of the called application, the original argv[0] is 
now argv[1].  

Take a look at how mailwrapper.c uses the arglist structure.

http://www.freebsd.org/cgi/cvsweb.cgi/src/usr.sbin/mailwrapper/mailwrapper.c?rev=1.11;content-type=text%2Fplain

hth...
don

>
>
> _______________________________________________
> freebsd-questions at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-questions
> To unsubscribe, send any mail to
> "freebsd-questions-unsubscribe at freebsd.org"



-- 
Don Hinton <don.hinton at vanderbilt.edu> or <hintonda at gmail.com>
Institute for Software Integrated Systems (ISIS), Vanderbilt University
tel: 615.480.5667 or 615.870.9728


More information about the freebsd-questions mailing list