Martin Simmons wrote:
>>>>>>On Sat, 8 Jul 2006 10:09:02 +0200, Kern Sibbald said:
>>
>>Hello,
>>
>>Well Martin turned out to be right.  The order of the code in the previous 
>>patch that I send did not at all work on Linux.  I still think this must be 
>>Linux bug, but I also don't think that Linus is going to agree :-)

Well all OSes I know of (FreeBSD, SunOS, Linux, IRIX) require root for this
call to succeed. I'm pretty sure this is an posix requirement.

>>This time I have tested the patch here. I don't know why such simple things 
>>should be so complicated, because it is virtually impossible to guarantee 
>>that it works correctly.  
>>
>>However, I am fairly confident that this new code will solve (or at least 
>>begin solving) the access problems we have been seeing when users run the Dir 
>>and SD as less privileged users/groups.
>>
>>Feedback would be welcome.
> 
> 
> It doesn't quite work (on FreeBSD 4.9 at least).  The problem is that the
> static pointer returned by getgrnam() is corrupted by the call to initgroups()
> and hence the call to setgid() sets the wrong group.

Same is true for 5.4, not sure about 6.x

At least this is documented in initgroups(3):

BUGS
      The getgrouplist() function called by initgroups() uses the routines
      based on getgrent(3).  If the invoking program uses any of these rou-
      tines, the group structure will be overwritten in the call to
      initgroups().


> Maybe you want to use the variable gid? :-)
> 
> Index: src/lib/bsys.c
> ===================================================================
> RCS file: /cvsroot/bacula/bacula/src/lib/bsys.c,v
> retrieving revision 1.54
> diff -u -r1.54 bsys.c
> --- src/lib/bsys.c    8 Jul 2006 07:57:45 -0000       1.54
> +++ src/lib/bsys.c    10 Jul 2006 17:00:00 -0000
> @@ -652,7 +652,7 @@
>     } else {
>        gid = passw->pw_gid;
>     }
> -   if (initgroups(passw->pw_name, passw->pw_gid)) {
> +   if (initgroups(passw->pw_name, gid)) {
>        berrno be;
>        if (gname) {
>           Emsg3(M_ERROR_TERM, 0, _("Could not initgroups for group=%s, 
> userid=%s: ERR=%s\n"),         
> @@ -663,7 +663,7 @@
>        }
>     }
>     if (gname) {
> -      if (setgid(group->gr_gid)) {
> +      if (setgid(gid)) {
>           berrno be;
>           Emsg2(M_ERROR_TERM, 0, _("Could not set group=%s: ERR=%s\n"), gname,
>              be.strerror());
> 
> 
> __Martin
> 
> 
> -------------------------------------------------------------------------
> Using Tomcat but need to do more? Need to support web services, security?
> Get stuff done quickly with pre-integrated technology to make your job easier
> Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
> http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
> _______________________________________________
> Bacula-devel mailing list
> [EMAIL PROTECTED]
> https://lists.sourceforge.net/lists/listinfo/bacula-devel
> 
> 



-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
Bacula-users mailing list
Bacula-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bacula-users

Reply via email to