next up previous contents index
suivant: Suppression des répertoires inutiles monter: Développement précédent: Extraction des anciennes entrées   Table des matières   Index


Création des nouvelles entrées utilisateur

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.

\begin{displaymath}
\begin{array}{l@{\quad}l@{\;=\;}l}
\mbox{Soit} &
\mathcal{...
...s{\'e}der un compte sous {\textsc{Unix}}.} \\ [2ex]
\end{array}\end{displaymath}



\begin{displaymath}
\begin{array}{l@{\;=\;}l}
\mathcal{E}_{ancien} &
\left\{ \...
...ncien} \cap \mathcal{E}_{nouveau} \right)
\\ [2ex]
\end{array}\end{displaymath}

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
$\cdots$
done

Le "logname" UNIX obéira au format suivant :

Il ne restera plus qu'à générer les informations complémentaires. Nous obtenons :
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


next up previous contents index
suivant: Suppression des répertoires inutiles monter: Développement précédent: Extraction des anciennes entrées   Table des matières   Index
baudry@esme.fr