PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [SAMBA] Account login + unix script aber kein preexec...



Bloggy
09.08.09, 05:02
Hi

NNun ich hätte zwar auf anhieb eine Idee wie ich es mache... eigentlich etwas sehr rudimentäres indem ich den output von smbstatus -b beobachten lasse von einem programm und ein script ausführe wenn ein neuer Benutzer auftaucht, aber elegant finde ich das nun nicht...

Beim durchlesen der samba manuals bin ich zwar über preexec und root preexec gestolpert nur die führen sich ja immer aus wenn der nutzer auf die Freigabe geht...

Es muss doch einen "eleganten" weg geben wenn sich ein benutzer Anmeldet ein script auf dem server auszuführen, und zwar nur einmal pro anmeldung oder "nicht"? jedenfalls in den manuals stand nichts brauchbares drin... jedenfalls nichts das ich um die uhrzeit gefunden habe :ugly:

Kennt jemand eine gute lösung?

Aqualung
09.08.09, 07:08
http://lug.krems.cc/docu/samba/ch06_06.html

AmatorPhasma
16.08.09, 22:02
Hier ein kleines Script.. ist jetzt nicht die Welt, nicht wirklich "sauber" und geht 100% besser, aber auf die schnelle....:ugly:


pidPath="/var/cache/logon"

while :
do
smbstatus -b|cat -n|while read line
do
linenumber=`echo "$line"|awk 'BEGIN {FS = " "} {print $1}'`;
testlinenumber=`echo "$linenumber > 4"|bc -qi`;
if [ "$testlinenumber" == "1" ];then
pid=`echo "$line"|awk 'BEGIN {FS = " "} {print $2}'`;
username=`echo "$line"|awk 'BEGIN {FS = " "} {print $3}'`;
position=`echo "$line"|awk 'BEGIN {FS = " "} {print $5}'`;
if [ "$position" == "Admins" ];then
machine=`echo "$line"|awk 'BEGIN {FS = " "} {print $6}'`;
elif [ "$position" == "Users" ];then
machine=`echo "$line"|awk 'BEGIN {FS = " "} {print $6}'`;
else
machine=`echo "$line"|awk 'BEGIN {FS = " "} {print $5}'`;
fi
if [ -f $pidPath/$pid-$machine-$username ];then
echo "NOTHING">/dev/nul;
else
echo "PID-File">$pidPath/$pid-$machine-$username;
echo "smb_logon $username $machine">/var/log/smb.logon;
fi
fi
done
ls -l $pidPath|cat -n|while read line
do
linenumber=`echo "$line"|awk 'BEGIN {FS = " "} {print $1}'`;
testlinenumber=`echo "$linenumber > 1"|bc -qi`;
if [ "$testlinenumber" == "1" ];then
file=`echo "$line"|awk 'BEGIN {FS = " "} {print $10}'`;
pid=`echo "$file"|awk 'BEGIN {FS = "-"} {print $1}'`;
machine=`echo "$file"|awk 'BEGIN {FS = "-"} {print $2}'`;
username=`echo "$file"|awk 'BEGIN {FS = "-"} {print $3}'`;
smbstatus -b|grep $pid|grep $machine|grep $username>/dev/nul&&test="1"||test="0"
if [ "$test" == "0" ];then
echo"smb_logoff $username $machine">/var/log/smb.logon;
rm -f $pidPath/$pid-$machine-$username;
fi
fi
done
sleep 5;
done

jedenfalls läuft es und du hast nicht dass Problem wie bei einem "preexec" das es jedes mal ausgeführt wird wenn der Benutzer auf das share zugreift... bei mir macht das mittlerweile eine eigenes C Programm.. kann ich dir gerne bei Gelegenheit mal zu senden, send mir einfach mal deine email per PM dann kommt es mit Beschreibung und source rüber!