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