#!/bin/sh
#
#
# SERVICE DES ADMINISTRATEURS:
# Administration des utilisateurs
# Recherche pour l'affectation d'un UID ou d'un GID
#
# Programme: $DIR_USERS_BIN/searchid
#
# Codes de retour:
# OK 0
# ERREUR 1
# Autre 2,...
#
# Exemples: searchid -u Retourne le prochaine uid libre
# searchid -g Retourne le prochaine gid libre
#
# Creation: S. Baudry
#
# Modifications:
#
#-----------------------------------------------------------
# Initialisation
#
TMP_DIR=${TMP_DIR:=/home/adm/tmp}
START_UID=${START_UID:=1000}
START_GID=${START_GID:=1000}
PASSWD=${PASSWD:=/etc/passwd}
GROUP=${GROUP:=/etc/group}
AWK=${AWK:=/usr/ucb/gawk}
export TMP_DIR START_UID START_GID PASSWD GROUP AWK
#-----------------------------------------------------------
# Fonctions locales
#
_usage()
{
echo "Usage: `basename $0` -u|-g" >&2
exit 1
}
#-----------------------------------------------------------
# Analyse de la ligne de commande
#
#
# Teste le passage de parametre
#
if [ $# -lt 1 ]; then
_usage
exit 1
fi
case $1 in
-u)
map=$PASSWD
start_id=$START_STUDENT_UID
;;
-g)
map=$GROUP
start_id=$START_PROJECT_GID
;;
*)
_usage
exit 1
;;
esac
#-----------------------------------------------------------
# Corps du programme
#
if [ ! -f $map ]; then
echo $start_id
exit 0
fi
#
# Calcul du numero a creer
#
no_id=` cut -f3 -d: $map |\
sort -n -u |\
$AWK -v min_id=$start_id '$1 >= min_id { print $0}' |\
$AWK -v min_id=$start_id '
BEGIN {
affected_id=min_id
}
{
if ( $1 == affected_id )
affected_id ++
}
END {
print affected_id
}'`
#-----------------------------------------------------------
# Fin du programme
#
echo $no_id
exit 0