Date: Sun, 7 Nov 2010 18:40:12 GMT From: Max Khon <fjoe@FreeBSD.org> To: FreeBSD-gnats-submit@FreeBSD.org Subject: ports/152024: skip non-existent users in GIDs Message-ID: <201011071840.oA7IeCO2038461@freefall.freebsd.org> Resent-Message-ID: <201011071850.oA7Io7DD064341@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 152024 >Category: ports >Synopsis: skip non-existent users in GIDs >Confidential: no >Severity: non-critical >Priority: medium >Responsible: freebsd-ports-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: change-request >Submitter-Id: current-users >Arrival-Date: Sun Nov 07 18:50:07 UTC 2010 >Closed-Date: >Last-Modified: >Originator: Max Khon >Release: FreeBSD 8.1-PRERELEASE i386 >Organization: FreeBSD.org >Environment: >Description: Use-case: port A creates group "portA" port B creates user "portB" and group "portB", user "portB" should be in group "portA" port C creates user "portC" and grouop "portC", user "portC" should be in group "portA" too It can be implemented using the following: GIDs: portA:*:XX:portB,portC portA: GROUPS= portA portB: USERS= portB GROUPS= portB portA portC: USERS= portC GROUPS= portC portA However, if portC is not installed (and there is not user portC), the installation of portB fails because of missing user portC. Example: freeswitch and asterisk ports (each uses own user/group) and dahdi port (freeswitch and asterisk users should be in "dahdi" group). >How-To-Repeat: >Fix: Index: Mk/bsd.port.mk =================================================================== RCS file: /home/pcvs/ports/Mk/bsd.port.mk,v retrieving revision 1.653 diff -u -p -r1.653 bsd.port.mk --- Mk/bsd.port.mk 29 Oct 2010 12:41:29 -0000 1.653 +++ Mk/bsd.port.mk 7 Nov 2010 18:22:16 -0000 @@ -4164,10 +4164,12 @@ create-users-groups: @IFS=":"; ${GREP} -h ^${_group}: ${GID_FILES} | head -n 1 | while read group foo gid members; do \ gid=$$(($$gid+${GID_OFFSET})); \ IFS=","; for _login in $$members; do \ - list=`${PW} usershow $${_login} -P | ${SED} -ne 's/.*Groups: //p'`; \ - ${ECHO_MSG} "Setting \`$${_login}' groups to \`$$list$${list:+,}${_group}'."; \ - ${PW} usermod $${_login} -G $$list$${list:+,}${_group}; \ - ${ECHO_CMD} "@exec list=\`${PW} usershow $${_login} -P | ${SED} -ne 's/.*Groups: //p'\`; ${PW} usermod $${_login} -G \$${list},${_group}" >> ${TMPPLIST}; \ + if ${PW} usershow $$_login >/dev/null 2>&1; then \ + list=`${PW} usershow $${_login} -P | ${SED} -ne 's/.*Groups: //p'`; \ + ${ECHO_MSG} "Setting \`$${_login}' groups to \`$$list$${list:+,}${_group}'."; \ + ${PW} usermod $${_login} -G $$list$${list:+,}${_group}; \ + ${ECHO_CMD} "@exec list=\`${PW} usershow $${_login} -P | ${SED} -ne 's/.*Groups: //p'\`; ${PW} usermod $${_login} -G \$${list},${_group}" >> ${TMPPLIST}; \ + fi \ done; \ done .endfor >Release-Note: >Audit-Trail: >Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201011071840.oA7IeCO2038461>