On Wed, 2006-06-14 at 09:37 +0200, Grobian wrote: > On 14-06-2006 08:57:18 +0200, Michael Haubenwallner wrote: > > On Tue, 2006-06-13 at 12:36 -0600, m h wrote: > > > Michael- > > > > > > Thanks for your response. I'd like to have a look at your solution > > > but didn't see any attachment. > > > > Even not in the second mail I sent 4 minutes later, imo with > > attachment ? > > I've seen no second mail... maybe the mailing list software doesn't like > attachments. *sigh*
hmm, it was 'eutils.eclass.bz2' with ~15kB, have extracted the relevant bits, trying as plaintext attachment... -- Michael Haubenwallner SALOMON Automation GmbH Forschung & Entwicklung A-8114 Friesach bei Graz mailto:[EMAIL PROTECTED] http://www.salomon.at No HTML/MIME please, see http://expita.com/nomime.html
# Small wrapper for getent (Linux), nidump (Mac OS X), # and pw (FreeBSD) used in enewuser()/enewgroup() # Joe Jezak <[EMAIL PROTECTED]> and [EMAIL PROTECTED] # FBSD stuff: Aaron Walker <[EMAIL PROTECTED]> # # egetent(database, key) egetent() { local euser= euid= egroup= egid= eentry= while read line do case "$1:${line}" in 'passwd:# enewuser:'*) eval $(echo "${line}" \ | awk -F":" "{ print \"euser='\"\$2\"'\"; print \"euid='\"\$3\"'\"; print \"eentry='\"\$2\":x:\"\$3\":\"\$4\":\"\$5\":\"\$6\":\"\$7\"'\"; }") if [[ ${euser} = $2 ]] || [[ ${euid} = $2 ]] then echo "${eentry}" return 0 fi ;; 'group:# enewgroup:'*) eval $(echo "${line}" \ | awk -F":" "{ print \"egroup='\"\$2\"'\"; print \"egid='\"\$3\"'\"; print \"eentry='\"\$2\":x:\"\$3\":'\"; }") if [[ ${egroup} = $2 ]] || [[ ${egid} = $2 ]] then echo "${eentry}" return 0 fi ;; esac done <<-EOE $(cat "${ROOT}${AFFIX}"var/spool/emerge/doasroot) EOE if [[ "${USERLAND}" == "Darwin" ]] ; then case "$2" in *[!0-9]*) # Non numeric nidump $1 . | awk -F":" "{ if (\$1 ~ /^$2$/) {print \$0;exit;} }" ;; *) # Numeric nidump $1 . | awk -F":" "{ if (\$3 == $2) {print \$0;exit;} }" ;; esac elif [[ "${USERLAND}" == "BSD" ]] ; then local action if [ "$1" == "passwd" ] then action="user" else action="group" fi pw show "${action}" "$2" -q else which nscd >& /dev/null && nscd -i "$1" getent "$1" "$2" fi } edoasroot() { if [[ ${ROOT} != / ]] || ( use secondary && [[ $(id -un) != root ]] ) then touch "${ROOT}${AFFIX}"var/spool/emerge/doasroot [ -n "$1" ] && echo "$1" >> "${ROOT}${AFFIX}"var/spool/emerge/doasroot shift [ -n "$*" ] && echo "$( for arg in "$@" do echo -n "'${arg}' " done )" >> "${ROOT}${AFFIX}"var/spool/emerge/doasroot return 0 fi shift eval "$@" } # Simplify/standardize adding users to the system # [EMAIL PROTECTED] # # enewuser(username, uid, shell, homedir, groups, extra options) # # Default values if you do not specify any: # username: REQUIRED ! # uid: next available (see useradd(8)) # note: pass -1 to get default behavior # shell: /bin/false # homedir: /dev/null # groups: none # extra: comment of 'added by portage for ${PN}' enewuser() { # get the username local euser=$1; shift if [[ -z ${euser} ]] ; then eerror "No username specified !" die "Cannot call enewuser without a username" fi # lets see if the username already exists if [[ ${euser} == $(egetent passwd "${euser}" | cut -d: -f1) ]] ; then return 0 fi einfo "Adding user '${euser}' to your system ..." # options to pass to useradd local opts= # handle uid local euid=$1; shift if [[ ! -z ${euid} ]] && [[ ${euid} != "-1" ]] ; then if [[ ${euid} -gt 0 ]] ; then if [[ ! -z $(egetent passwd ${euid}) ]] ; then euid="next" fi else eerror "Userid given but is not greater than 0 !" die "${euid} is not a valid UID" fi else euid="next" fi if [[ ${euid} == "next" ]] ; then local pwrange if [[ ${USERLAND} == "BSD" ]] ; then pwrange=$(jot 898 101) else pwrange=$(seq 101 999) fi for euid in ${pwrange} ; do [[ -z $(egetent passwd ${euid}) ]] && break done fi opts="${opts} -u ${euid}" einfo " - Userid: ${euid}" # handle shell local eshell=$1; shift if [[ ! -z ${eshell} ]] && [[ ${eshell} != "-1" ]] ; then if [[ ! -e ${eshell} ]] ; then eerror "A shell was specified but it does not exist !" die "${eshell} does not exist" fi else case ${USERLAND} in Darwin) eshell="/usr/bin/false";; BSD) eshell="/usr/sbin/nologin";; *) eshell="/bin/false";; esac fi einfo " - Shell: ${eshell}" opts="${opts} -s ${eshell}" # handle homedir local ehome=$1; shift if [[ -z ${ehome} ]] || [[ ${ehome} == "-1" ]] ; then ehome="/dev/null" fi einfo " - Home: ${ehome}" opts="${opts} -d ${ehome}" # handle groups local egroups=$1; shift local defgroup="" exgroups="" if [[ ! -z ${egroups} ]] ; then local oldifs=${IFS} export IFS="," for g in ${egroups} ; do export IFS=${oldifs} if [[ -z $(egetent group "${g}") ]] ; then eerror "You must add group ${g} to the system first" die "${g} is not a valid GID" fi if [[ -z ${defgroup} ]] ; then defgroup=${g} else exgroups="${exgroups},${g}" fi export IFS="," done export IFS=${oldifs} opts="${opts} -g ${defgroup}" if [[ ! -z ${exgroups} ]] ; then opts="${opts} -G ${exgroups:1}" fi else egroups="(none)" fi einfo " - Groups: ${egroups}" # handle extra and add the user local oldsandbox=${SANDBOX_ON} export SANDBOX_ON="0" edoasroot "# enewuser:${euser}:${euid}:${defgroup}:added by portage for ${PN}:${ehome}:${eshell}" case ${USERLAND} in Darwin) ### Make the user if [[ -z $@ ]] ; then edoasroot '' dscl . create /users/${euser} uid ${euid} edoasroot '' dscl . create /users/${euser} shell ${eshell} edoasroot '' dscl . create /users/${euser} home ${ehome} edoasroot '' dscl . create /users/${euser} realname "added by portage for ${PN}" ### Add the user to the groups specified local oldifs=${IFS} export IFS="," for g in ${egroups} ; do edoasroot '' dscl . merge /groups/${g} users ${euser} done export IFS=${oldifs} else einfo "Extra options are not supported on Darwin yet" einfo "Please report the ebuild along with the info below" einfo "eextra: $@" die "Required function missing" fi ;; BSD) if [[ -z $@ ]] ; then edoasroot '' pw useradd ${euser} ${opts} \ -c "added by portage for ${PN}" \ die "enewuser failed" else einfo " - Extra: $@" edoasroot '' pw useradd ${euser} ${opts} \ "$@" || die "enewuser failed" fi ;; *) if [[ -z $@ ]] ; then edoasroot '' useradd ${opts} ${euser} \ -c "added by portage for ${PN}" \ || die "enewuser failed" else einfo " - Extra: $@" edoasroot '' useradd ${opts} ${euser} "$@" \ || die "enewuser failed" fi ;; esac export SANDBOX_ON=${oldsandbox} if [ ! -e "${ehome}" ] && [ ! -e "${D}/${ehome}" ] then einfo " - Creating ${ehome} in ${D}" dodir ${ehome} edoasroot '' fowners ${euser} ${ehome} edoasroot '' fperms 755 ${ehome} fi } # Simplify/standardize adding groups to the system # [EMAIL PROTECTED] # # enewgroup(group, gid) # # Default values if you do not specify any: # groupname: REQUIRED ! # gid: next available (see groupadd(8)) # extra: none enewgroup() { # get the group local egroup="$1"; shift if [ -z "${egroup}" ] then eerror "No group specified !" die "Cannot call enewgroup without a group" fi # see if group already exists if [ "${egroup}" == "`egetent group \"${egroup}\" | cut -d: -f1`" ] then return 0 fi einfo "Adding group '${egroup}' to your system ..." # options to pass to useradd local opts= # handle gid local egid="$1"; shift if [ ! -z "${egid}" ] then if [ "${egid}" -gt 0 ] then if [ -z "`egetent group ${egid}`" ] then if [[ "${USERLAND}" == "Darwin" ]]; then opts="${opts} ${egid}" else opts="${opts} -g ${egid}" fi else egid="next available; requested gid taken" fi else eerror "Groupid given but is not greater than 0 !" die "${egid} is not a valid GID" fi else egid="next available" fi einfo " - Groupid: ${egid}" # handle extra local eextra="$@" opts="${opts} ${eextra}" # add the group local oldsandbox="${SANDBOX_ON}" export SANDBOX_ON="0" edoasroot "# enewgroup:${egroup}:${egid}" if [[ "${USERLAND}" == "Darwin" ]]; then if [ ! -z "${eextra}" ]; then einfo "Extra options are not supported on Darwin/OS X yet" einfo "Please report the ebuild along with the info below" einfo "eextra: ${eextra}" die "Required function missing" fi # If we need the next available case ${egid} in *[!0-9]*) # Non numeric for egid in `jot 898 101`; do [ -z "`egetent group ${egid}`" ] && break done esac edoasroot '' dscl . create /groups/${egroup} gid ${egid} edoasroot '' dscl . create /groups/${egroup} passwd '*' elif [[ "${USERLAND}" == "BSD" ]] ; then case ${egid} in *[!0-9]*) # Non numeric for egid in `jot 898 101`; do [ -z "`egetent group ${egid}`" ] && break done esac edoasroot '' pw groupadd ${egroup} -g ${egid} || die "enewgroup failed" else edoasroot '' groupadd ${opts} ${egroup} || die "enewgroup failed" fi export SANDBOX_ON="${oldsandbox}" }