package require Ldap package require opt LdapInit proc importPasswd {con baseDN } { set fd [open "/etc/passwd" r] while { [gets $fd line] >= 0 } { set attribute [list objectclass=top objectclass=posixAccount] foreach {uid pw uidNumber gidNumber cn homeDirectory loginShell} [split $line :] { if {$uidNumber < 500} continue # Eintrag schon vorhanden? if {![catch {LdapSearch $con one never 1 \ "(&(objectclass=posixAccount)(uid=$uid))"} err]} { puts stderr "Eintrag für UID $uid schon vorhanden" continue } lappend attribute "uid=$uid" lappend attribute "uidNumber=$uidNumber" lappend attribute "gidNumber=$gidNumber" lappend attribute "cn=$cn" lappend attribute "homeDirectory=$homeDirectory" lappend attribute "loginShell=$loginShell" # Eintrag anlegen if {[catch {LdapAdd $con "uid=$uid,$baseDN" $attribute} err]} { puts stderr "Es trat ein Fehler beim Eintrag von $attribute auf, Grund $err" } } } close $fd } 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 } importPasswd $con $nutzerBase } if {[catch {eval main $argv} err]} { puts stderr $err }