Skip to content
Snippets Groups Projects
Select Git revision
  • master default protected
1 result

create_primtux_user.sh

Blame
  • create_primtux_user.sh 3.56 KiB
    #!/bin/bash
    LEVELS="cycle1 cycle2 cycle3 prof direction"
    declare -A SKELS
    SKELS[cycle1]="01-mini"
    SKELS[cycle2]="02-super"
    SKELS[cycle3]="03-maxi"
    SKELS[prof]="prof"
    SKELS[direction]="direction"
    
    declare -A GRPS
    GRPS[cycle1]="Cycle1"
    GRPS[cycle2]="Cycle2"
    GRPS[cycle3]="Cycle3"
    GRPS[prof]="Profs"
    GRPS[direction]="Administratifs"
    
    user="$1"
    level="$2"
    TEMPF="$$_temp"
    DIR=`dirname $0`
    DIST="$DIR/dist"
    abort(){
        rm $TEMPF*
        exit 1
    }
    usage(){
        echo "Usage $0 username level"
        echo "Transform an existing LDAP user into a Primtux LDAP user"
        echo "Options"
        echo "Level :  {${LEVELS// /|}}"
    }
    
    if [ -z "$2" ]
    then
        usage
        abort
    fi
    if [ "`echo $LEVELS | tr ' ' '\n' | grep $level`" != "$level" ]
    then
        echo "Level should be one of $LEVELS"
        abort
    fi
    . /etc/slis/slis.conf
    # set -x
    # Check for LDAP group Primtux
    for f in dist/*.ldiff
    do
        echo $f
        group=`head -n 1 $f | sed 's/^[^ ]* \([^,]*\),.*$/\1/'`
        if [ -z "`ldapsearch -x $group | grep numEntries`" ]
        then
            echo "adding group"
            # insert primtux group
            sed -e "s/BASE/$LDAP_BASE_DN/" $f > $TEMPF.ldiff
            ldapadd -x -D "cn=$LDAP_ADMIN_RDN,$LDAP_BASE_DN" -w $LDAP_ADMIN_PW -f $TEMPF.ldiff
        fi
    done
    ldapsearch -x -LLL uid=$user > $TEMPF.ldiff
    if [ ! -s $TEMPF.ldiff ]
    then
        echo "Unknown user $user"
        abort
    fi
    # Check for UID => 1000 and update if required
    uid=`grep uidNumber $TEMPF.ldiff | cut -d ' ' -f 2`
    if [ $uid -eq 1000 ]
    then
        # Change UID
        newuid=$(( `slapcat | grep "uidNumber: 10.." | cut -d ' ' -f 2 | sort -nu | tail -n 1`+1))
        # prepare ldiff file
        grep "^dn" $TEMPF.ldiff > $TEMPF.1.ldiff
        echo -e "changetype: modify\nreplace: uidNumber\nuidNumber: $newuid" >> $TEMPF.1.ldiff
        # run ldapmodify
        ldapmodify -x -D "cn=$LDAP_ADMIN_RDN,$LDAP_BASE_DN" -w $LDAP_ADMIN_PW -f $TEMPF.1.ldiff
        uid=$newuid
    fi
    # Add Primtux to user group
    echo -e "dn: cn=Primtux,ou=Groups,$LDAP_BASE_DN\nchangetype: modify\nadd: memberUid\nmemberUid: $user" > $TEMPF.1.ldiff
    ldapmodify -x -D "cn=$LDAP_ADMIN_RDN,$LDAP_BASE_DN" -w $LDAP_ADMIN_PW -f $TEMPF.1.ldiff
    echo -e "dn: cn=${GRPS[$level]},ou=Groups,$LDAP_BASE_DN\nchangetype: modify\nadd: memberUid\nmemberUid: $user" > $TEMPF.1.ldiff
    ldapmodify -x -D "cn=$LDAP_ADMIN_RDN,$LDAP_BASE_DN" -w $LDAP_ADMIN_PW -f $TEMPF.1.ldiff
    # Retrieve files from skels
    skel="$DIR/skels/${SKELS[$level]}"
    home=`grep home $TEMPF.ldiff | cut -d ' ' -f 2`
    mv $home $home.bak
    cp -r $skel $home
    cp -r $home.bak/* $home/
    rm -rf $home.bak
    # fix links
    find $home/.wine/drive_c/ -type l ! -exec test -e {} \; -print | while read f
    do
        ln -sf "$home/`basename \"$f\" | sed 's/.* \(.*\)/\u\1/'`" "$f"
    done
    sed -i "s@${SKELS[$level]}@$user@g" $home/.config/xfce4/panel/launcher-4/14504679941.desktop
    sed -i "s@/home/${SKELS[$level]}/Documents@/home/$user/Documents @g" $home/.handymenu.conf
    sed -i "s@${SKELS[$level]}@$user@g" $home/.handymenu.conf
    # Add bookmarks files that are no in skel
    mkdir -p $home/.config/gtk-3.0
    cp dist/bookmarks/$level $home/.config/gtk-3.0/bookmarks
    # Fix proxy issue
    sed -i '/^export =/d' /home/$user/.profile
    for PROTO in HTTP HTTPS FTP
    do
        echo "export ${PROTO}_PROXY=slis:3128" >> /home/$user/.profile
    done
    # Fix evince as pdf reader
    echo '[Default Applications]' >> /home/$user/.local/share/applications/defaults.list
    echo 'application/pdf=evince.desktop' >> /home/$user/.local/share/applications/defaults.list
    # fix samba passwd
    # echo "You will  be prompted twice for samba password, please enter the same as for LDAP"
    # smbpasswd -U $user
    # fix Rights
    chown -R $uid:lcs-users $home
    rm $TEMPF*
    echo "Correctly set up $user for $level"