#!/bin/bash # VĂ©rifier si ces valeurs existent dans smb.conf # idmap config REALM:range = min-max rangeMin=100000 rangeMax=999999 sam=/var/lib/samba/private/sam.ldb createTmpDir() { tmpDir=$(mktemp -d --tmpdir addGid.XXXXXX) || exit 1 tmpRecord=$tmpDir/record_ tmpLdif=$tmpDir/ldif } cleanTmpDir() { rm $tmpDir/* } removeTmpDir() { rm -r $tmpDir } findMaxId() { ldbsearch -H $sam "$regexp" $field | sed '/^# Referral/ { :loop; N; $! b loop; d; }; s/^\([a-zA-Z0-9]*\): \(.*\)$/\1="\2"/g; /^$/d;' | awk '/^# record/{n++}{print > f n}' f=$tmpRecord maxID=$rangeMin for file in `grep -l -E "^$field=" ${tmpRecord}*` do source $file if [ ${!field} -gt $rangeMax ] then echo "Warning: $field ${!field} for $dn is bigger than max id $rangeMax" 1>&2 elif [ ${!field} -lt $rangeMin ] then echo "Warning: $field ${!field} for $dn is lower than min id $rangeMin" 1>&2 else [ ${!field} -gt $maxID ] && maxID=${!field} fi done echo "Max ID found for $field: $maxID" } addIdNumber() { for file in `grep -L -E "^$field=" ${tmpRecord}*` do ((maxID++)) source $file echo "Adding $field: $maxID for dn: $dn" echo "dn: $dn changetype: modify add: $field $field: $maxID" > $tmpLdif ldbmodify -H $sam $tmpLdif done } umask 0077 createTmpDir field=uidNumber regexp="(&(objectclass=user)(!(objectclass=computer)))" findMaxId addIdNumber cleanTmpDir field=gidNumber regexp="(objectclass=group)" findMaxId addIdNumber cleanTmpDir removeTmpDir exit 0