Skip site navigation (1)Skip section navigation (2)
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>