diff options
Diffstat (limited to 'initramfs/uclib-rootfs/usr/bin/getent')
-rwxr-xr-x | initramfs/uclib-rootfs/usr/bin/getent | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/initramfs/uclib-rootfs/usr/bin/getent b/initramfs/uclib-rootfs/usr/bin/getent new file mode 100755 index 00000000..acb01403 --- /dev/null +++ b/initramfs/uclib-rootfs/usr/bin/getent @@ -0,0 +1,67 @@ +#!/bin/sh +# $Header: /var/cvs/uClibc/extra/scripts/getent,v 1.2 2005/02/02 14:18:01 solar Exp $ + +search_entry() { + if [ -e "$1" ] ; then + /bin/egrep -v "^#" $1 | /bin/sed 's/#.*$//' | /bin/egrep "${string}" | /bin/sed -n 1p + retval=$? + [ "$retval" = 0 ] || retval=2 + else + retval=2 + fi +} + +if [ -z "$1" ] ; then + echo "getent: wrong number of arguments" 1>&2 + exit 1 +fi + +file="/etc/$1" +string="dummy" + +if [ ! -f "$file" ] ; then + echo "Unknown database: $1" 1>&2 + exit 1 +fi + +#aliases|ethers|group|hosts|netgroup|networks|passwd|protocols|rpc|services|shadow) +# dns based search is not supported for hosts|networks +# ethers|netgroup (not done, needed)? +# it returns only the first match +case $1 in + passwd) + string="(^\<$2\>:|^.*:.*:\<$2\>:.*:.*:.*:.*)" + ;; + group) + string="(^|:)\<$2\>:" + ;; + shadow) + string="^\<$2\>:" + ;; + aliases) + if [ -f /etc/postfix/aliases ] ; then + file="/etc/postfix/aliases" + elif [ -f /etc/mail/aliases ] ; then + file="/etc/mail/aliases" + fi + string="^\<$2\>:" + ;; + networks) + string="^\<$2\>" + ;; + hosts|protocols|rpc|services) + string="\<$2\>" + ;; + *) + echo "Unknown database: $1" + exit 1 + ;; +esac + +if [ -z "$2" ] ; then + exec cat $file +else + search_entry "$file" "$2" +fi + +exit $retval |