#!/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