1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- #!/bin/sh
- # Script to replicate the `getent` binary that comes with glibc
- 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
- cat $file
- retval=$?
- else
- search_entry "$file" "$2"
- fi
- exit $retval
|