1*4882a593Smuzhiyun#!/bin/sh 2*4882a593Smuzhiyun# $Header: /var/cvs/uClibc/extra/scripts/getent,v 1.2 2005/02/02 14:18:01 solar Exp $ 3*4882a593Smuzhiyun# 4*4882a593Smuzhiyun# Closely (not perfectly) emulate the behavior of glibc's getent utility 5*4882a593Smuzhiyun# 6*4882a593Smuzhiyun#passwd|shadow|group|aliases|hosts|networks|ethers|netgroup|protocols|services|rpc 7*4882a593Smuzhiyun# only returns the first match (by design) 8*4882a593Smuzhiyun# dns based search is not supported (hosts,networks) 9*4882a593Smuzhiyun# case-insensitive matches not supported (ethers; others?) 10*4882a593Smuzhiyun# may return false-positives (hosts,protocols,rpc,services,ethers) 11*4882a593Smuzhiyun# 12*4882a593Smuzhiyun# Taken from uClibc 0.9.33. 13*4882a593Smuzhiyun 14*4882a593Smuzhiyunexport PATH="${PATH}:/bin:/usr/bin" 15*4882a593Smuzhiyun 16*4882a593Smuzhiyunfile="/etc/$1" 17*4882a593Smuzhiyuncase $1 in 18*4882a593Smuzhiyun passwd|group) 19*4882a593Smuzhiyun match="^$2:\|^[^:]*:[^:]*:$2:" ;; 20*4882a593Smuzhiyun shadow) 21*4882a593Smuzhiyun match="^$2:" ;; 22*4882a593Smuzhiyun networks|netgroup) 23*4882a593Smuzhiyun match="^[[:space:]]*$2\>" ;; 24*4882a593Smuzhiyun hosts|protocols|rpc|services|ethers) 25*4882a593Smuzhiyun match="\<$2\>" ;; 26*4882a593Smuzhiyun aliases) 27*4882a593Smuzhiyun match="^[[:space:]]*$2[[:space:]]*:" ;; 28*4882a593Smuzhiyun ""|-h|--help) 29*4882a593Smuzhiyun echo "USAGE: $0 database [key]" 30*4882a593Smuzhiyun exit 0 ;; 31*4882a593Smuzhiyun *) 32*4882a593Smuzhiyun echo "$0: Unknown database: $1" 1>&2 33*4882a593Smuzhiyun exit 1 ;; 34*4882a593Smuzhiyunesac 35*4882a593Smuzhiyun 36*4882a593Smuzhiyunif [ ! -f "$file" ] ; then 37*4882a593Smuzhiyun echo "$0: Could not find database file for $1" 1>&2 38*4882a593Smuzhiyun exit 1 39*4882a593Smuzhiyunfi 40*4882a593Smuzhiyun 41*4882a593Smuzhiyunif [ $# -eq 1 ] ; then 42*4882a593Smuzhiyun exec cat "$file" 43*4882a593Smuzhiyunelse 44*4882a593Smuzhiyun sed "s/#.*//; /$match/q; d" "$file" | grep . || exit 2 45*4882a593Smuzhiyunfi 46