[quote=“ahrnke”]Hallo,
wenn ich mir die Doku zu userAccountControl (z.B. How to use the UserAccountControl flags to manipulate user account properties so ansehe, wird dort sowieso nur der Zustand des Kontos als Bitmap, nicht aber die Gültigkeitsdauer des Kennwortes gespeichert.
Insofern denke ich schon, dass das, was univention-s4search oder auch ldbsearch liefert, dem im AD Üblichen entspricht. Wobei ich jetzt keine Versuche unternommen habe, hier gezielte Werte mit Windows-Methoden zu setzen und dann das Resultat zu prüfen. Das, was ich bei einer kurzen Recherche gefunden habe, sieht erstmal nicht nach einer Einschränkung im Samba aus.
Viele Grüße,
Dirk Ahrnke[/quote]
Guten Tag,
Danke erstmal für die Antwort.
Ich habe mich hier möglicherweise falsch ausgedrückt. Es geht mir nicht darum heraus zu finden wie lange das Passwort Gültig ist sondern den Zustand (NORMAL_USER oder DONT_EXPIRE_PASSWORD)wie von Ihnen beschrieben.
Hintergrund ist folgender:
Wir wollen zukünftig auf unseren OS X Systemen ein Tool verwenden, welches im Hintergrund die verbleibenden Tage anzeigt die einem User bleiben bevor sein Passwort geändert werden muss.
Das Tool funktioniert soweit Problemlos, ist jedoch auf ein Windows AD zugeschnitten.
Wir haben hier jedoch bestimmte Nutzer, dessen Passwort nicht abläuft, das führt in diesem Tool dazu, dass einem als Wert “10523598 Tage” zurück gibt - Eigentlich sollte das Tool jedoch bei dem Zustand “DONT_EXPIRE_PASSWORD” einen String bspw: “Nie” ausgeben.
Das Script was diese Abfrage macht sieht in etwa so aus:
[code]#!/bin/bash
Try & get the AD Node
userNode=$(dscl . -read /Users/$USER | awk ‘/OriginalNodeName:/{ getline; print substr($0,2,length()-1); }’)
If the above does not return anything, then presuming local account
if [[ -z $userNode ]];then
# Set userNode to localhost
userNode=“localhost”
fi
Get domain mac bound to
myDomain=$(dsconfigad -show | awk ‘/Active Directory Domain/{ print $NF }’)
Return 1st LDAP server from dig result
myLDAP=$(dig -t srv _ldap._tcp.${myDomain} | awk ‘/^_ldap/{ print $NF; exit }’)
Return the LDAP search base
mySearchBase=$(ldapsearch -LLL -Q -s base -H ldap://${myLDAP} defaultNamingContext | awk ‘/defaultNamingContext/{print $2}’)
#Get userAccountControl value from AD
uAC=$(dscl “$userNode” -read /Users/$USER dsAttrTypeNative:userAccountControl | awk ‘{ print $NF }’)
Check value of uAC & make sure that the account expires
if [[ $uAC =~ ^6 ]]; then
passExpires=“no”
else
passExpires=“yes”
fi
Get domains password expiry
expireAgeDays=$(ldapsearch -LLL -Q -s base -H ldap://${myLDAP} -b $mySearchBase maxPwdAge | awk -F- ‘/maxPwdAge/{print $2/10000000/86400}’)
Get date when local accounts password was last set
pwdSetDateRaw=$(dscl “$userNode” -read /Users/$USER SMBPasswordLastSet | awk ‘{ print $NF }’)
Convert to a UNIX epoch time stamp
pwdSetDateUnix=$(echo “$pwdSetDateRaw / 10000000 - 11644473600” | bc -l)
Convert to seconds
pwdSetDate=$(echo “$pwdSetDateUnix / 86400” | bc -l)
Get todays date
todayUnix=$(date +%s)
Convert to seconds
today=$(echo “$todayUnix / 86400” | bc -l)
Calculate days until expiry
daysUntilExp=$(echo “$expireAgeDays - ($today - $pwdSetDate)” | bc -l)
Get days until expiry in days
daysUntilExpNice=$(echo “$daysUntilExp” | awk -F. ‘{print $1}’)
Summary
echo “userNode: $userNode”
echo “myDomain: $myDomain”
echo “myLDAP: $myLDAP”
echo “mySearchBase: $mySearchBase”
echo “uAC: $uAC”
echo “passExpires: $passExpires”
echo “expireAgeDays: $expireAgeDays”
echo “pwdSetDateRaw: $pwdSetDateRaw”
echo “pwdSetDateUnix: $pwdSetDateUnix”
echo “pwdSetDate: $pwdSetDate”
echo “todayUnix: $todayUnix”
echo “today: $today”
echo “daysUntilExp: $daysUntilExp”
echo “daysUntilExpNice: $daysUntilExpNice”[/code]
Ich stehe bereits mit dem Entwickler dieses Tools in Kontakt, er würde das Gerne für Univention anpassen, findet jedoch genau so wie ich in der Dokumentation keinen Anhaltspunkt, welches Attribut den Zustand des Kontos liefert.
Viele Grüße.