package require opt package require Ldap package require BWidget proc openNode {tree node } { puts "findChildren $node" $tree delete [$tree nodes $node] set pfad [$tree itemcget $node -data] puts $pfad set suche [ LdapSearch $::con one never \ $pfad 0 $::filter \ [list dc cn o ou] ] if {[string match "Search failed to find anything!" $suche]} { puts "nichts gefunden" return; } puts $suche set benutzt 0 foreach i $suche { if {! $benutzt } { set kinderpfad "[escapeSearch $i], $pfad" $tree insert end $node #auto -drawcross allways -data $kinderpfad \ -text $i set benutzt 1 } elseif { [string length $i] == 0 } { set benutzt 0 } } } proc escapeSearch {string} { regsub "," $string "%2C" $string return $string } proc splitResult {attributes} { puts "splitResult $attributes" set retval [list] set subretval [list] foreach i $attributes { if { [string length $i] > 0} { lappend subretval $i } else { lappend retval $subretval set subretval [list] } } puts $retval return $retval } set filter "objectclass=top" tcl::OptProc main { {host "LDAP server"} {port -int "LDAP port"} {baseDN "Start DN" } {?userDN? "voll qualifizierter Benutzer-DN"} {?passwort? "Passwort"} } { LdapInit #Einwahl if {[catch {LdapBind $host $port $userDN $passwort } ::con]} { puts stderr "Keine Verbindung mit diesen Angaben möglich: $con" exit 1 } set sw [ScrolledWindow .sw \ -relief sunken -borderwidth 2] pack $sw -expand 1 -fill both set tree [Tree $sw.tree -opencmd "openNode $sw.tree" -bg white ] $tree insert end root $baseDN -drawcross allways -data $baseDN \ -text $baseDN $sw setwidget $tree } if {[catch {eval main $argv} err]} { puts stderr $err exit 1 }