fix for PR#26135, smbmount doesnt return exit codes after daemonizing (v2.2.7)

Scott Hammond sehammond at yahoo.com
Tue Dec 10 00:13:00 GMT 2002


Hi,
I went ahead and fixed my own bug report, #26135. 
smbmount.c doesnt return exit codes correctly after it
daemonizes.  Most errors occur from simple things,
wrong password, cant connect, etc, so "echo $?" after
the smbmount command returns 1.  However if smbmnt
fails (which is called after smbmount daemonizes),
then the exit code is lost, and "echo $?" returns 0. 
e.g. if the target directory is not owned by the user,
smbmnt fails, but the exit code is lost.

from smbmount.c, daemonize():

if (child_pid > 0) {
     while( 1 ) {
          j = waitpid( child_pid, &status, 0 );
          if( j < 0 ) {
               if( EINTR == errno ) {
                    continue;
               }
               status = errno;
          }
#         if (WIFEXITED(status)) {
#              status = WEXITSTATUS(status);
#         }
          break;
     }
     /* If we get here - the child exited with some
error status */
     exit(status);
}

I added the part with the #'s.  Apparently exit()
doesnt like status until its been fixed up by the
WEXITSTATUS() macro (man page for waitpid says
WEXITSTATUS() is invalid if WIFEXITED is 0, so I added
that as well).  Now the error code from smbmnt should
be returned correctly by smbmount.

here's the diff for smbmount.c:
82,84d81
<                       if (WIFEXITED(status)) {
<                               status =
WEXITSTATUS(status);
<                               }


fyi, Im running linux slackware 8.1 with gcc 3.2.


Scott

__________________________________________________
Do you Yahoo!?
Yahoo! Mail Plus - Powerful. Affordable. Sign up now.
http://mailplus.yahoo.com



More information about the samba-technical mailing list