Dan Langille schrieb: >> Folks: If you happen to upgrade to 1.38.6 and you start getting >> permission >> errors on your tape drive, when it worked in previous versions, a >> work around >> may be changing the group for bacula-sd. >> >> For me, in FreeBSD, I add this to /etc/rc.conf: >> >> bacula_sd_flags=" -u bacula -g operator -v -c /usr/local/etc/bacula- >> sd.conf" >> >> In short, I'm running as the group specified on /dev/sa0 >> >> # ls -l /dev/sa0 >> crw-rw---- 4 root operator 14, 0 Mar 13 2005 /dev/sa0 >> >> And not as the group bacula, of which bacula is a member: >> >> # id bacula >> uid=910(bacula) gid=910(bacula) groups=910(bacula), 5(operator) >> >> I'm trying to find the cause of this problem.
Hi, I've had similar problem a while ago and submitted a possible solution (patch attached) but Kerns wasn't quite satisfied with it. The followup is here: http://sourceforge.net/mailarchive/forum.php?thread_id=9644823&forum_id=8650 It was made for the 1.38.5 but should apply to the the 1.38.6 as well. I haven't got around yet to check it against the current release, but I think it should go without problems. If you get time to apply it, share your results. The current state is WorksForMe (tm). Regards, -Dimitri aka Tristan-777
--- bacula-1.38.5/src/lib/bsys.c 2005-12-22 22:35:24.000000000 +0100 +++ bacula-1.38.5-mod/src/lib/bsys.c 2006-02-05 23:37:03.000000000 +0100 @@ -602,30 +602,36 @@ */ void drop(char *uid, char *gid) { -#ifdef HAVE_GRP_H - if (gid) { - struct group *group; - gid_t gr_list[1]; - - if ((group = getgrnam(gid)) == NULL) { - Emsg1(M_ERROR_TERM, 0, _("Could not find specified group: %s\n"), gid); - } - if (setgid(group->gr_gid)) { - Emsg1(M_ERROR_TERM, 0, _("Could not set specified group: %s\n"), gid); - } - gr_list[0] = group->gr_gid; - if (setgroups(1, gr_list)) { - Emsg1(M_ERROR_TERM, 0, _("Could not set specified group: %s\n"), gid); - } - } -#endif #ifdef HAVE_PWD_H if (uid) { struct passwd *passw; + struct group *group; + gid_t gr_gid; + if ((passw = getpwnam(uid)) == NULL) { Emsg1(M_ERROR_TERM, 0, _("Could not find specified userid: %s\n"), uid); } + +#ifdef HAVE_GRP_H + gr_gid = passw->pw_gid; + + if (gid) { + if ((group = getgrnam(gid)) == NULL) { + Emsg1(M_ERROR_TERM, 0, _("Could not find specified group: %s\n"), gid); + } + gr_gid = group->gr_gid; + } + + if (setgid(gr_gid)) { + Emsg1(M_ERROR_TERM, 0, _("Could not set specified group: %s\n"), gid); + } + + if (initgroups(passw->pw_name, gr_gid)) { + Emsg1(M_ERROR_TERM, 0, _("Could not setup group access for user: %s\n"), uid); + } +#endif + if (setuid(passw->pw_uid)) { Emsg1(M_ERROR_TERM, 0, _("Could not set specified userid: %s\n"), uid); }
signature.asc
Description: OpenPGP digital signature