package require Ldap package require opt LdapInit source listing2.tcl proc säubern {con nutzerBase} { set res [LdapSearch $con one never $nutzerBase 0 "objectclass=posixAccount" [list uid uidNumber] ] if {[regexp "Search failed" $res]} { puts stderr "Nutzer-Basis \u00AB$nutzerBase\u00BB enthält keine Posix-Accounts: $res" return } inArray $res accounts parray accounts for {set i 0 } {$i < $accounts(length)} {incr i} { if {$accounts($i,uidNumber) >= 500} { continue } puts "Lösche uid $accounts($i,uid), uidNumber $accounts($i,uidNumber)" LdapDelete $con "uid=$accounts($i,uid),$nutzerBase" } } proc userIdVergrößern {con nutzerBase} { set res [LdapSearch $con one never $nutzerBase 0 "objectclass=posixAccount" [list uid uidNumber] ] if {[regexp "Search failed" $res]} { puts stderr "Nutzer-Basis \u00AB$nutzerBase\u00BB enthält keine Posix-Accounts: $res" return } inArray $res accounts for {set i 0 } { $i < $accounts(length)} {incr i } { puts "Wandle uid $accounts($i,uid), uidNumber $accounts($i,uidNumber)" set attribute [list "uidNumber=[expr {500+$accounts($i,uidNumber)}]"] LdapModify $con "uid=$accounts($i,uid),$nutzerBase" $attribute } } tcl::OptProc main { {host "LDAP-Server"} {port -int "LDAP-Port"} {nutzerBase "Basis-DN für Benutzereinträge"} {?userDN? "Voll qualifizierter Benutzer-DN"} {?passwort? "Passwort"} } { # Einwahl if {[catch {LdapBind $host $port $userDN $passwort } con]} { puts stderr "Keine Verbindung mit diesen Angaben möglich: $con" exit 1 } # Basis überprüfen set res [LdapSearch $con one never $nutzerBase 1 "objectclass=top"] if {[regexp "Search failed" $res]} { puts stderr "Nutzer-Basis \u00AB$nutzerBase\u00BB scheint keine gültige DN zu sein: $res" exit 1 } userIdVergrößern $con $nutzerBase säubern $con $nutzerBase } if {[catch {eval main $argv} err]} { puts stderr $err }