diff -r 71503088f51b -r f880f219c566 openpkg/etc.usrgrp.sh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/openpkg/etc.usrgrp.sh Tue Jul 31 12:23:42 2012 +0200 @@ -0,0 +1,221 @@ +#!/bin/sh +## +## etc.usrgrp.sh -- user/group name/id determination +## Copyright (c) 2000-2012 OpenPKG GmbH +## +## This software is property of the OpenPKG GmbH, DE MUC HRB 160208. +## All rights reserved. Licenses which grant limited permission to use, +## copy, modify and distribute this software are available from the +## OpenPKG GmbH. +## +## THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED +## WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +## MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +## IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR +## CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF +## USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +## ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +## OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +## OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +## SUCH DAMAGE. +## + +# command line parameters (defaults) +help=0 +usr=''; grp='' +susr=''; sgrp='' +musr=''; mgrp='' +rusr=''; rgrp='' +nusr=''; ngrp='' +suid=''; sgid='' +muid=''; mgid='' +ruid=''; rgid='' +nuid=''; ngid='' + +# parse command line options +for opt +do + case $opt in + -*=*) arg=`echo "$opt" | sed 's/^[-_a-zA-Z0-9]*=//'` ;; + *) arg='' ;; + esac + case $opt in + -h | --help ) help=1 ;; + --usr=* | --user=* ) usr=$arg ;; + --grp=* | --group=* ) grp=$arg ;; + --susr=* ) susr=$arg ;; + --sgrp=* ) sgrp=$arg ;; + --musr=* ) musr=$arg ;; + --mgrp=* ) mgrp=$arg ;; + --rusr=* ) rusr=$arg ;; + --rgrp=* ) rgrp=$arg ;; + --nusr=* ) nusr=$arg ;; + --ngrp=* ) ngrp=$arg ;; + --suid=* ) suid=$arg ;; + --sgid=* ) sgid=$arg ;; + --muid=* ) muid=$arg ;; + --mgid=* ) mgid=$arg ;; + --ruid=* ) ruid=$arg ;; + --rgid=* ) rgid=$arg ;; + --nuid=* ) nuid=$arg ;; + --ngid=* ) ngid=$arg ;; + * ) help=1 ;; + esac +done +if [ ".$help" = .1 ]; then + echo "Usage: sh $0 [-h|--help]" 2>&1 + echo " [--[smrn]?usr=] [--[smrn]?grp=]" 2>&1 + echo " [--[smrn]uid=] [--[smrn]gid=]" 2>&1 + exit 1 +fi + +# determine cusr/cgrp +cusr=`(id -un) 2>/dev/null ||\ + (id | sed -e 's;^[^(]*(\([^)]*\)).*;\1;') 2>/dev/null ||\ + (whoami) 2>/dev/null ||\ + (who am i | cut "-d " -f1) 2>/dev/null ||\ + echo $LOGNAME` +cgid=`(id -g $cusr) 2>/dev/null ||\ + ((getent passwd "${cusr}"; grep "^${cusr}:" /etc/passwd; ypmatch "${cusr}" passwd; nismatch "${cusr}" passwd; nidump passwd . | grep "^${cusr}:") 2>/dev/null |\ + sed -n -e '1p' | awk -F: '{ print $4; }')` +cgrp=`(id -gn $cusr) 2>/dev/null ||\ + ((getent group; cat /etc/group; ypcat group; niscat group; nidump group .) 2>/dev/null | grep "^[^:]*:[^:]*:${cgid}:" |\ + sed -n -e '1p' | awk -F: '{ print $1; }')` +[ ".$cgrp" = . ] && cgrp="$cusr" + +# determine OpenPKG susr/sgrp +if [ ".$susr" = . ]; then + if [ ".$usr" = . ]; then + susr="$cusr" + else + susr="root" + fi +fi +if [ ".$sgrp" = . ]; then + sgrp=`(id -gn $susr) 2>/dev/null` + if [ ".$sgrp" = . ]; then + tgid=`(getent passwd "${susr}"; grep "^${susr}:" /etc/passwd; ypmatch "${susr}" passwd; nismatch "${susr}" passwd; nidump passwd . | grep "^${susr}:") 2>/dev/null |\ + sed -n -e '1p' | awk -F: '{ print $4; }'` + if [ ".$tgid" != . ]; then + sgid="${tgid}" + sgrp=`(getent group; cat /etc/group; ypcat group; niscat group; nidump group .) 2>/dev/null |\ + grep "^[^:]*:[^:]*:${sgid}:" | sed -n -e '1p' | awk -F: '{ print $1; }'` + fi + if [ ".$sgrp" = . ]; then + sgrp="wheel" + fi + fi +fi + +# determine OpenPKG musr/mgrp +if [ ".$musr" = . ]; then + musr="$usr" +fi +if [ ".$musr" = . ]; then + musr="$cusr" +fi +if [ ".$mgrp" = . ]; then + mgrp=`(id -gn $musr) 2>/dev/null` + if [ ".$mgrp" = . ]; then + tgid=`(getent passwd "${musr}"; grep "^${musr}:" /etc/passwd; ypmatch "${musr}" passwd; nismatch "${musr}" passwd; nidump passwd . | grep "^${musr}:") 2>/dev/null |\ + sed -n -e '1p' | awk -F: '{ print $4; }'` + if [ ".$tgid" != . ]; then + mgid="${tgid}" + mgrp=`(getent group; cat /etc/group; ypcat group; niscat group; nidump group .) 2>/dev/null |\ + grep "^[^:]*:[^:]*:${mgid}:" | sed -n -e '1p' | awk -F: '{ print $1; }'` + fi + if [ ".$mgrp" = . ]; then + mgrp="$grp" + fi + if [ ".$mgrp" = . ]; then + mgrp="$cgrp" + fi + fi +fi + +# determine OpenPKG rusr/rgrp +if [ ".$rusr" = . ]; then + rusr="${usr}-r" +fi +if [ ".$rusr" = ".-r" ]; then + rusr="$cusr" +fi +if [ ".$rgrp" = . ]; then + rgrp=`(id -gn $rusr) 2>/dev/null` + if [ ".$rgrp" = . ]; then + tgid=`(getent passwd "${rusr}"; grep "^${rusr}:" /etc/passwd; ypmatch "${rusr}" passwd; nismatch "${rusr}" passwd; nidump passwd . | grep "^${rusr}:") 2>/dev/null |\ + sed -n -e '1p' | awk -F: '{ print $4; }'` + if [ ".$tgid" != . ]; then + rgid="${tgid}" + rgrp=`(getent group; cat /etc/group; ypcat group; nismatch group; nidump group .) 2>/dev/null |\ + grep "^[^:]*:[^:]*:${rgid}:" | sed -n -e '1p' | awk -F: '{ print $1; }'` + fi + if [ ".$rgrp" = . ]; then + rgrp="${grp}-r" + fi + if [ ".$rgrp" = ".-r" ]; then + rgrp="$cgrp" + fi + fi +fi + +# determine OpenPKG nusr/ngrp +if [ ".$nusr" = . ]; then + nusr="${usr}-n" +fi +if [ ".$nusr" = ".-n" ]; then + nusr="$cusr" +fi +if [ ".$ngrp" = . ]; then + ngrp=`(id -gn $nusr) 2>/dev/null` + if [ ".$ngrp" = . ]; then + tgid=`(getent passwd "${nusr}"; grep "^${nusr}:" /etc/passwd; ypmatch "${nusr}" passwd; nismatch "${nusr}" passwd; nidump passwd . | grep "^${nusr}:") 2>/dev/null |\ + sed -n -e '1p' | awk -F: '{ print $4; }'` + if [ ".$tgid" != . ]; then + ngid="${tgid}" + ngrp=`(getent group; cat /etc/group; ypcat group; niscat group; nidump group .) 2>/dev/null |\ + grep "^[^:]*:[^:]*:${ngid}:" | sed -n -e '1p' | awk -F: '{ print $1; }'` + fi + if [ ".$ngrp" = . ]; then + ngrp="${grp}-n" + fi + if [ ".$ngrp" = ".-n" ]; then + ngrp="$cgrp" + fi + fi +fi + +# determine OpenPKG suid/sgid +# (currently not necessary) + +# determine OpenPKG muid/mgid +# (currently not necessary) + +# determine OpenPKG ruid/rgid +# (currently not necessary) + +# determine OpenPKG nuid/ngid +# (currently not necessary) + +# print results +output="" +for var in \ + susr sgrp \ + musr mgrp \ + rusr rgrp \ + nusr ngrp \ + suid sgid \ + muid mgid \ + ruid rgid \ + nuid ngid; do + eval "val=\"\$$var\"" + if [ ".$output" = . ]; then + output="$var=\"$val\"" + else + output="$output; $var=\"$val\"" + fi +done +echo $output +