Re: How does Sendmail know how it was invoked?
> I don't think that's right. As I understand it, the argv argument to > execve() is passed-on directly as the child processes arguments, and > the parent can write whatever it likes into argv[0] - it's only > convention that it's a filename. So mailwrapper passes its own > argv[0] as sendmail's argv[0]. And so sendmail behaves as if it had been > invoked as mailq or whatever. You're exactly right. I misread the man file and did a little test to confirm it. thanks... don -- Don Hinton or Institute for Software Integrated Systems (ISIS), Vanderbilt University tel: 615.480.5667 or 615.870.9728 ___ freebsd-questions@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-questions To unsubscribe, send any mail to "[EMAIL PROTECTED]"
Re: How does Sendmail know how it was invoked?
On Sat, 4 Aug 2007 15:48:11 -0500 Don Hinton <[EMAIL PROTECTED]> wrote: > On Saturday 04 August 2007 15:13:34 RW wrote: > > On Sat, 4 Aug 2007 13:23:07 -0500 > > > > 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]. I don't think that's right. As I understand it, the argv argument to execve() is passed-on directly as the child processes arguments, and the parent can write whatever it likes into argv[0] - it's only convention that it's a filename. So mailwrapper passes its own argv[0] as sendmail's argv[0]. And so sendmail behaves as if it had been invoked as mailq or whatever. ___ freebsd-questions@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-questions To unsubscribe, send any mail to "[EMAIL PROTECTED]"
Re: How does Sendmail know how it was invoked?
On Saturday 04 August 2007 15:13:34 RW wrote: > On Sat, 4 Aug 2007 13:23:07 -0500 > > Dan Nelson <[EMAIL PROTECTED]> 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@freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/freebsd-questions > To unsubscribe, send any mail to > "[EMAIL PROTECTED]" -- Don Hinton or Institute for Software Integrated Systems (ISIS), Vanderbilt University tel: 615.480.5667 or 615.870.9728 ___ freebsd-questions@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-questions To unsubscribe, send any mail to "[EMAIL PROTECTED]"
Re: How does Sendmail know how it was invoked?
On Sat, 4 Aug 2007 13:23:07 -0500 Dan Nelson <[EMAIL PROTECTED]> 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. ___ freebsd-questions@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-questions To unsubscribe, send any mail to "[EMAIL PROTECTED]"
Re: How does Sendmail know how it was invoked?
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. http://www.freebsd.org/cgi/cvsweb.cgi/src/contrib/sendmail/src/main.c?annotate=HEAD -- Dan Nelson [EMAIL PROTECTED] ___ freebsd-questions@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-questions To unsubscribe, send any mail to "[EMAIL PROTECTED]"
Re: How does Sendmail know how it was invoked?
On Saturday 04 August 2007 13:06:34 RW wrote: > 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. It checks argv[0], i.e., the name used to invoke it. Here's a simple program demostrating it: #include int main (int argc, char* argv[]) { std::cout << "my name is: " << argv[0] << std::endl; return 0; } Save it to a file and do the following: $ c++ -o foo file.cxx $ ./foo my name is: ./foo $ mv foo bar $ ./bar my name is: ./bar hth... don > > I'm just curious. > ___ > freebsd-questions@freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/freebsd-questions > To unsubscribe, send any mail to > "[EMAIL PROTECTED]" -- Don Hinton or Institute for Software Integrated Systems (ISIS), Vanderbilt University tel: 615.480.5667 or 615.870.9728 ___ freebsd-questions@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-questions To unsubscribe, send any mail to "[EMAIL PROTECTED]"
How does Sendmail know how it was invoked?
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. I'm just curious. ___ freebsd-questions@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-questions To unsubscribe, send any mail to "[EMAIL PROTECTED]"