#!/bin/sh # # # SERVICE DES ADMINISTRATEURS: # Traduction des bases OpenVMS vers Unix. # # Fichier: $BIN_DIR/mkpasswd # # Creation: S. Baudry # # Modifications: # #----------------------------------------------------------- $ECHO "`basename $0`: chargement en cours ...\c" #----------------------------------------------------------- # # Repertoires par defaut # #----------------------------------------------------------- MKPASSD_DIR=${MKPASSD_DIR:=/home/adm/users/convert} export MKPASSD_DIR BIN_DIR=${BIN_DIR:=$MKPASSD_DIR/bin} export BIN_DIR #----------------------------------------------------------- # # Chargement des definitions # #----------------------------------------------------------- if [ ! -f $BIN_DIR/`basename $0`.define ]; then message="impossible de trouver le fichier de definition" echo "`basename $0`: $message $BIN_DIR/`basename $0`.define" >&2 echo "`basename $0`: execution avortee" >&2 exit fi . $BIN_DIR/`basename $0`.define #----------------------------------------------------------- # # Chargement des fonctions # #----------------------------------------------------------- if [ ! -f $BIN_DIR/`basename $0`.functions ]; then message="impossible de trouver le fichier de definition" echo "`basename $0`: $message $BIN_DIR/`basename $0`.functions" >&2 echo "`basename $0`: execution avortee" >&2 exit fi . $BIN_DIR/`basename $0`.functions $ECHO " Ok." #----------------------------------------------------------- # # Verification du contexte # #----------------------------------------------------------- $ECHO "`basename $0`: Verifications ..." if [ ! -x $BIN_DIR/`basename $0`.check ]; then message="impossible d'executer le fichier de controle" echo "`basename $0`: $message $BIN_DIR/`basename $0`.check" >&2 echo "`basename $0`: execution avortee" >&2 exit fi $BIN_DIR/`basename $0`.check `basename $0` [ $? -ne 0 ] && exit $ECHO "`basename $0`: verifications Ok." trap "_stop_exec; exit" 1 9 15 #----------------------------------------------------------- # # Creation du fichier temporaire PASSWD_REF # #----------------------------------------------------------- $ECHO "`basename $0`: creation de l'espace de travail ...\c" $AWK ' BEGIN { FS=":"} { field = substr ($5, 1, length($5) - 5) printf ("%s:%s:%s:%s:%s:%s:%s\n", $1, $2, $3, $4, field, $6, $7) } ' $PASSWD > $PASSWD_REF #----------------------------------------------------------- # # Creation du fichier temporaire WHO_REF # #----------------------------------------------------------- sed -e 's/ - [0-9][ABC].*$//' $WHO > $WHO_REF $ECHO " Ok." #----------------------------------------------------------- # # Extraction des anciennes entrees # #----------------------------------------------------------- $ECHO "Extraction des anciennes entrees dans passwd : \c" index=1 cat $LIST |\ while read username do _waiting_chars $index name=`grep $username $WHO_REF | cut -d! -f2 | cut -c2-` is_user=`$AWK -v name="$name" ' BEGIN { FS=":" } $5 == name { print $0 } ' $PASSWD_REF` if [ "$is_user" != "" ]; then new_who=`grep $username $WHO` login=`echo $is_user | cut -d: -f1` new_who=`echo $new_who | cut -d! -f2 | cut -c2-` project="p`grep $username $LCLUAF | cut -d: -f1 | tr '[A-Z]' '[a-z]'`" uid=`echo $is_user | cut -d: -f3` gid=`echo $is_user | cut -d: -f4` part2=`echo $is_user | cut -d: -f6-` new_passwd=`echo $login | cut -c-4``date +%M%S` crypt_passwd="`$BUILDPASSWD $new_passwd`" echo "${login}:${crypt_passwd}:${uid}:${gid}:${new_who}:$part2" \ >> $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 fi index=`expr $index + 1` done echo " Ok." #----------------------------------------------------------- # # Creation des nouvelles entrees dans passwd # #----------------------------------------------------------- $ECHO "Creation des nouvelles entrees dans passwd : \c" index=1 cat $LIST |\ while read username do _waiting_chars $index is_defined=`$AWK -v username="$username" -F: ' $2 == username { print $0 } ' $USERS_INFO_FILE ` [ "$is_defined" != "" ] && continue 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 index=`expr $index + 1` done echo " Ok." #----------------------------------------------------------- # # Suppression des anciens repertoires # #----------------------------------------------------------- $ECHO "Suppression des anciens repertoires: \c" index=1 cat $PASSWD_REF |\ while read line do old_login=`echo $line | cut -d: -f1` is_present=`$AWK -F: -v old_login="$old_login" ' $1 == old_login { print $1 } ' $USERS_INFO_FILE` if [ "$is_present" = "" ]; then [ -d $FS_STUDENTS/$old_login ] && \ rm -rf $FS_STUDENTS/$old_login 2>&/dev/null fi index=`expr $index + 1` done echo " Ok." #----------------------------------------------------------- # # Creation des nouvelles entrees dans group # #----------------------------------------------------------- $ECHO "Creation des nouvelles entrees dans group : \c" index=1 cat $LCLUAF |\ while read line do _waiting_chars $index vms_project="`echo $line | cut -d: -f1 | tr '[A-Z]' '[a-z]'`" unix_project="p${vms_project}" project_gid=`$SEARCHID -g` $ECHO "${unix_project}:*:${project_gid}:\c" >> $GROUP_NEW members="`echo $line | cut -d: -f2 | sed -e 's/,/ /g'`" group_members=`for this_member in $members do awk -F: -v this_member=$this_member ' $2 == this_member { printf ("%s,",$1) } ' $USERS_INFO_FILE done` echo "$group_members" | sed -e 's/,$//' >> $GROUP_NEW echo "${unix_project} ${FS_SERVER}:${FS_PROJECTS}/${unix_project}" \ >> $AUTO_PROJECTS index=`expr $index + 1` done echo " Ok." #----------------------------------------------------------- # # Creation des repertoires # #----------------------------------------------------------- $ECHO "Creation des repertoires : \c" index=1 cat $AUTO_USERS | cut -d: -f2 |\ while read directory do _waiting_chars $index owner=`basename $directory` uid=`awk -F: -v owner=$owner ' $1 == owner { print $3 } ' $PASSWD_NEW` if [ ! -d $directory ]; then mkdir -p $directory cp $HOME_PROTOTYPE/.[a-z]* $HOME_PROTOTYPE/.[A-Z]* \ $HOME_PROTOTYPE/* $FS_STUDENTS/$newname 2>/dev/null chown -R ${uid}.${STUDENT_GID} $directory fi index=`expr $index + 1` done cat $AUTO_PROJECTS | cut -d: -f2 |\ while read directory do _waiting_chars $index group=`basename $directory` gid=`awk -F: -v group=$group ' $1 == group { print $3 } ' $GROUP_NEW` if [ ! -d $directory ]; then mkdir -p $directory chown -R root.${gid} $directory fi index=`expr $index + 1` done echo " Ok." #----------------------------------------------------------- # # Fin du programme # #----------------------------------------------------------- trap '' 1 9 15 [ -f $PASSWD_REF ] && rm $PASSWD_REF [ -f $WHO_REF ] && rm $WHO_REF