Tout comme les anciennes entrées, les nouvelles sont détectées en excluant l'ensemble
des utilisateurs existants à celui contenant l'ensemble des utilisateurs à créer. L'opération
se schématise comme suit.
Le principe adopté repose sur le même principe que celui décrit à la section adv-programming-ex3-devlext. À partir de la liste des nouveaux utilisateurs, seuls ceux qui disposent d'une entrée dans "USERS_INFO_FILE" sont traités, c'est-à-dire ceux dont le second champ de ce fichier est égal à l'entrée traitée du fichier "LIST". Nous utiliserons "awk(1)". La condition du sélecteur du programme associé sera l'identité entre le second champ de "USERS_INFO_FILE" et le contenu de la variable "username". Le résultat de "awk(1)" sera stocké dans la variable "is_defined". Si cette variable est non vide, il faudra passé à l'enregistrement suivant. Sinon, le traitement devra se poursuivre. Nous aurons donc :
cat $LIST |\
while
read username
do
is_defined=`$AWK -v username="$username" -F: '
$2 == username { print $0 }
' $USERS_INFO_FILE `
[ "$is_defined" != "" ] && continue
done
Le "logname" UNIX obéira au format suivant :
login=`echo $username | tr '[A-Z]' '[a-z]' | cut -d_ -f1`
new_who=`grep $username $WHO | cut -d! -f2 | cut -c2-`
login=`echo $login | cut -c-8`
status=0
while
is_allocated=`grep "^${login}:" $PASSWD_NEW`
[ "$is_allocated" != "" ]
do
echo "" >&2
echo "`basename $0`: login $login deja alloue pour $username" >&2
$ECHO "`basename $0`: Quel login : \c" >&2
read login < /dev/tty
status=1
done
[ $status -eq 1 ] && $ECHO "Creation des nouvelles entrees dans passwd : \c"
project="p`grep $username $LCLUAF | cut -d: -f1 | tr '[A-Z]' '[a-z]'`"
new_passwd=`echo $login | cut -c-4``date +%M%S`
crypt_passwd="`$BUILDPASSWD $new_passwd`"
uid=`$SEARCHID -u`
gid=$STUDENT_GID
student_home=${HOME_STUDENT}/$login
output="${login}:${crypt_passwd}:${uid}:${gid}"
echo "${output}:${new_who}:${student_home}:${LOGIN_SHELL}" >> $PASSWD_NEW
echo "${login} ${FS_SERVER}:${FS_STUDENTS}/${login}" >> $AUTO_USERS
output="${login}:${crypt_passwd}:0:${PASSWD_WILL_CHANGE}"
echo "${output}:${PASSWD_EXPIRATION_TIME}:${PASSWD_WILL_EXPIRE}::" \
>> $SHADOW_NEW
echo "${login}:${username}:${new_passwd}:${uid}:${project}" >> $USERS_INFO_FILE