12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- #!/bin/sh
- #
- # Closely (not perfectly) emulate the behavior of glibc's getent utility
- #
- #passwd|shadow|group|aliases|hosts|networks|ethers|netgroup|protocols|services|rpc
- # only returns the first match (by design)
- # dns based search is not supported (hosts,networks)
- # case-insensitive matches not supported (ethers; others?)
- # may return false-positives (hosts,protocols,rpc,services,ethers)
- [ -z "$PATH" ] && PATH="/bin:/usr/bin" || PATH="${PATH}:/bin:/usr/bin"
- export PATH
- file="/etc/$1"
- case $1 in
- passwd|group)
- match="^$2:\|^[^:]*:[^:]*:$2:" ;;
- shadow)
- match="^$2:" ;;
- networks|netgroup)
- match="^[[:space:]]*$2\>" ;;
- hosts|protocols|rpc|services|ethers)
- match="\<$2\>" ;;
- aliases)
- match="^[[:space:]]*$2[[:space:]]*:" ;;
- ""|-h|--help)
- echo "USAGE: $0 database [key]"
- exit 0 ;;
- *)
- echo "$0: Unknown database: $1" 1>&2
- exit 1 ;;
- esac
- if [ ! -f "$file" ] ; then
- echo "$0: Could not find database file for $1" 1>&2
- exit 1
- fi
- if [ $# -eq 1 ] ; then
- exec cat "$file"
- else
- sed "s/#.*//; /$match/q; d" "$file" | grep . || exit 2
- fi
|