openpkg/aux.usrgrp.sh

Tue, 06 Jan 2009 23:45:10 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Tue, 06 Jan 2009 23:45:10 +0100
changeset 16
01c515740aeb
permissions
-rw-r--r--

Include well tested and long contributed C++ version logic as a patch.

     1 #!/bin/sh
     2 ##
     3 ##  usrgrp.sh -- user/group name/id determination
     4 ##  Copyright (c) 2000-2007 OpenPKG Foundation e.V. <http://openpkg.net/>
     5 ##  Copyright (c) 2000-2007 Ralf S. Engelschall <http://engelschall.com/>
     6 ##
     7 ##  Permission to use, copy, modify, and distribute this software for
     8 ##  any purpose with or without fee is hereby granted, provided that
     9 ##  the above copyright notice and this permission notice appear in all
    10 ##  copies.
    11 ##
    12 ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
    13 ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
    14 ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
    15 ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
    16 ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    17 ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    18 ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
    19 ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    20 ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
    21 ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
    22 ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    23 ##  SUCH DAMAGE.
    24 ##
    26 #   command line parameters (defaults)
    27 help=0
    28 usr='';  grp=''
    29 susr=''; sgrp=''
    30 musr=''; mgrp=''
    31 rusr=''; rgrp=''
    32 nusr=''; ngrp=''
    33 suid=''; sgid=''
    34 muid=''; mgid=''
    35 ruid=''; rgid=''
    36 nuid=''; ngid=''
    38 #   parse command line options
    39 for opt
    40 do
    41     case $opt in
    42         -*=*) arg=`echo "$opt" | sed 's/^[-_a-zA-Z0-9]*=//'` ;;
    43            *) arg='' ;;
    44     esac
    45     case $opt in
    46         -h | --help          ) help=1      ;;
    47         --usr=* | --user=*   ) usr=$arg    ;;
    48         --grp=* | --group=*  ) grp=$arg    ;;
    49         --susr=*             ) susr=$arg   ;;
    50         --sgrp=*             ) sgrp=$arg   ;;
    51         --musr=*             ) musr=$arg   ;;
    52         --mgrp=*             ) mgrp=$arg   ;;
    53         --rusr=*             ) rusr=$arg   ;;
    54         --rgrp=*             ) rgrp=$arg   ;;
    55         --nusr=*             ) nusr=$arg   ;;
    56         --ngrp=*             ) ngrp=$arg   ;;
    57         --suid=*             ) suid=$arg   ;;
    58         --sgid=*             ) sgid=$arg   ;;
    59         --muid=*             ) muid=$arg   ;;
    60         --mgid=*             ) mgid=$arg   ;;
    61         --ruid=*             ) ruid=$arg   ;;
    62         --rgid=*             ) rgid=$arg   ;;
    63         --nuid=*             ) nuid=$arg   ;;
    64         --ngid=*             ) ngid=$arg   ;;
    65         *                    ) help=1      ;;
    66     esac
    67 done
    68 if [ ".$help" = .1 ]; then
    69     echo "Usage: sh $0 [-h|--help]" 2>&1
    70     echo "             [--[smrn]?usr=<usr>] [--[smrn]?grp=<usr>]" 2>&1
    71     echo "             [--[smrn]uid=<uid>] [--[smrn]gid=<gid>]" 2>&1
    72     exit 1
    73 fi
    75 #   determine cusr/cgrp
    76 cusr=`(id -un) 2>/dev/null ||\
    77       (id | sed -e 's;^[^(]*(\([^)]*\)).*;\1;') 2>/dev/null ||\
    78       (whoami) 2>/dev/null ||\
    79       (who am i | cut "-d " -f1) 2>/dev/null ||\
    80       echo $LOGNAME`
    81 cgid=`(id -g $cusr) 2>/dev/null ||\
    82       ((getent passwd "${cusr}"; grep "^${cusr}:" /etc/passwd; ypmatch "${cusr}" passwd; nismatch "${cusr}" passwd; nidump passwd . | grep "^${cusr}:") 2>/dev/null |\
    83        sed -n -e '1p' | awk -F: '{ print $4; }')`
    84 cgrp=`(id -gn $cusr) 2>/dev/null ||\
    85       ((getent group; cat /etc/group; ypcat group; niscat group; nidump group .) 2>/dev/null | grep "^[^:]*:[^:]*:${cgid}:" |\
    86        sed -n -e '1p' | awk -F: '{ print $1; }')`
    87 [ ".$cgrp" = . ] && cgrp="$cusr"
    89 #   determine OpenPKG susr/sgrp
    90 if [ ".$susr" = . ]; then
    91     if [ ".$usr" = . ]; then
    92         susr="$cusr"
    93     else
    94         susr="root"
    95     fi
    96 fi
    97 if [ ".$sgrp" = . ]; then
    98     sgrp=`(id -gn $susr) 2>/dev/null`
    99     if [ ".$sgrp" = . ]; then
   100         tgid=`(getent passwd "${susr}"; grep "^${susr}:" /etc/passwd; ypmatch "${susr}" passwd; nismatch "${susr}" passwd; nidump passwd . | grep "^${susr}:") 2>/dev/null |\
   101               sed -n -e '1p' | awk -F: '{ print $4; }'`
   102         if [ ".$tgid" != . ]; then
   103             sgid="${tgid}"
   104             sgrp=`(getent group; cat /etc/group; ypcat group; niscat group; nidump group .) 2>/dev/null |\
   105                   grep "^[^:]*:[^:]*:${sgid}:" | sed -n -e '1p' | awk -F: '{ print $1; }'`
   106         fi
   107         if [ ".$sgrp" = . ]; then
   108             sgrp="wheel"
   109         fi
   110     fi
   111 fi
   113 #   determine OpenPKG musr/mgrp
   114 if [ ".$musr" = . ]; then
   115     musr="$usr"
   116 fi
   117 if [ ".$musr" = . ]; then
   118     musr="$cusr"
   119 fi
   120 if [ ".$mgrp" = . ]; then
   121     mgrp=`(id -gn $musr) 2>/dev/null`
   122     if [ ".$mgrp" = . ]; then
   123         tgid=`(getent passwd "${musr}"; grep "^${musr}:" /etc/passwd; ypmatch "${musr}" passwd; nismatch "${musr}" passwd; nidump passwd . | grep "^${musr}:") 2>/dev/null |\
   124               sed -n -e '1p' | awk -F: '{ print $4; }'`
   125         if [ ".$tgid" != . ]; then
   126             mgid="${tgid}"
   127             mgrp=`(getent group; cat /etc/group; ypcat group; niscat group; nidump group .) 2>/dev/null |\
   128                   grep "^[^:]*:[^:]*:${mgid}:" | sed -n -e '1p' | awk -F: '{ print $1; }'`
   129         fi
   130         if [ ".$mgrp" = . ]; then
   131             mgrp="$grp"
   132         fi
   133         if [ ".$mgrp" = . ]; then
   134             mgrp="$cgrp"
   135         fi
   136     fi
   137 fi
   139 #   determine OpenPKG rusr/rgrp
   140 if [ ".$rusr" = . ]; then
   141     rusr="${usr}-r"
   142 fi
   143 if [ ".$rusr" = ".-r" ]; then
   144     rusr="$cusr"
   145 fi
   146 if [ ".$rgrp" = . ]; then
   147     rgrp=`(id -gn $rusr) 2>/dev/null`
   148     if [ ".$rgrp" = . ]; then
   149         tgid=`(getent passwd "${rusr}"; grep "^${rusr}:" /etc/passwd; ypmatch "${rusr}" passwd; nismatch "${rusr}" passwd; nidump passwd . | grep "^${rusr}:") 2>/dev/null |\
   150               sed -n -e '1p' | awk -F: '{ print $4; }'`
   151         if [ ".$tgid" != . ]; then
   152             rgid="${tgid}"
   153             rgrp=`(getent group; cat /etc/group; ypcat group; nismatch group; nidump group .) 2>/dev/null |\
   154                   grep "^[^:]*:[^:]*:${rgid}:" | sed -n -e '1p' | awk -F: '{ print $1; }'`
   155         fi
   156         if [ ".$rgrp" = . ]; then
   157             rgrp="${grp}-r"
   158         fi
   159         if [ ".$rgrp" = ".-r" ]; then
   160             rgrp="$cgrp"
   161         fi
   162     fi
   163 fi
   165 #   determine OpenPKG nusr/ngrp
   166 if [ ".$nusr" = . ]; then
   167     nusr="${usr}-n"
   168 fi
   169 if [ ".$nusr" = ".-n" ]; then
   170     nusr="$cusr"
   171 fi
   172 if [ ".$ngrp" = . ]; then
   173     ngrp=`(id -gn $nusr) 2>/dev/null`
   174     if [ ".$ngrp" = . ]; then
   175         tgid=`(getent passwd "${nusr}"; grep "^${nusr}:" /etc/passwd; ypmatch "${nusr}" passwd; nismatch "${nusr}" passwd; nidump passwd . | grep "^${nusr}:") 2>/dev/null |\
   176               sed -n -e '1p' | awk -F: '{ print $4; }'`
   177         if [ ".$tgid" != . ]; then
   178             ngid="${tgid}"
   179             ngrp=`(getent group; cat /etc/group; ypcat group; niscat group; nidump group .) 2>/dev/null |\
   180                   grep "^[^:]*:[^:]*:${ngid}:" | sed -n -e '1p' | awk -F: '{ print $1; }'`
   181         fi
   182         if [ ".$ngrp" = . ]; then
   183             ngrp="${grp}-n"
   184         fi
   185         if [ ".$ngrp" = ".-n" ]; then
   186             ngrp="$cgrp"
   187         fi
   188     fi
   189 fi
   191 #   determine OpenPKG suid/sgid
   192 #   (currently not necessary)
   194 #   determine OpenPKG muid/mgid
   195 #   (currently not necessary)
   197 #   determine OpenPKG ruid/rgid
   198 #   (currently not necessary)
   200 #   determine OpenPKG nuid/ngid
   201 #   (currently not necessary)
   203 #   print results
   204 output=""
   205 for var in \
   206     susr sgrp \
   207     musr mgrp \
   208     rusr rgrp \
   209     nusr ngrp \
   210     suid sgid \
   211     muid mgid \
   212     ruid rgid \
   213     nuid ngid; do
   214     eval "val=\"\$$var\""
   215     if [ ".$output" = . ]; then
   216         output="$var=\"$val\""
   217     else
   218         output="$output; $var=\"$val\""
   219     fi
   220 done
   221 echo $output

mercurial