2010-03-27 189 views
1

我有一個Web表單,它收集信息並將其提交給試圖將數據插入LDAP的cgi。問題是,我試圖使用:: ldap :: add的變量,它只是不工作。下面的代碼:通過CGI向LDAP添加對象

if {[string length env(QUERY_STRING)] != 0} { 
    set handle [::ldap::connect localhost] 
    set dn "cn=admin,dc=mycompany,dc=com" 
    set pw "myPassword" 

    ::ldap::bind $handle $dn $pw 

    set dn "cn=[ncgi::value givenName] [ncgi::value sn],ou=people,dc=mycompany,dc=com" 

    set formValues [ 
      puts "cn  {{[ncgi::value givenName] [ncgi::value sn]}}" 
      puts "displayName  [ncgi::value givenName] [ncgi::value sn]" 
      foreach {key value} [ncgi::nvlist] { 
        if {[string length $value] != 0} { 
          puts "$key  $value" 
        } 
      } 
      puts "objectClass  top" 
      puts "objectClass  person" 
      puts "objectClass  organizationalPerson" 
      puts "objectClass  inetOrgPerson" 
    ] 

    ::ldap::add $handle $dn { 
      $formValues 
    } 

    ldap::unbind $handle 

}

但是,如果我更換$與我想要插入到LDAP中的實際項formValues,他們得到補充就好了。

我是TCL新手,所以如果在這段代碼中有一些明顯的錯誤,我不會感到驚訝。

在此先感謝!

回答

3

的大錯誤:

  1. 方括號替代結果裏面的腳本,而不是它的輸出。
  2. puts命令將字符串發送到標準輸出(或文件),並不保存它們以供日後處理。
  3. 花括號完全消除了它們內部的所有替換。

修復程序是使用列表命令構建描述以與ldap::add一起使用。例如:

set formValues {} 
lappend formValues cn   "[ncgi::value givenName] [ncgi::value sn]" 
### Might need this instead; it depends on how you want to do the construction 
# lappend formValues cn  [list [ncgi::value givenName] [ncgi::value sn]] 
lappend formValues displayName "[ncgi::value givenName] [ncgi::value sn]" 
foreach {key value} [ncgi::nvlist] { 
    ### Could also use {$value ne ""} here 
    if {[string length $value] != 0} { 
     lappend formValues $key $value 
    } 
} 
lappend formValues objectClass top 
lappend formValues objectClass person 
lappend formValues objectClass organizationalPerson 
lappend formValues objectClass inetOrgPerson 

::ldap::add $handle $dn $formValues 

而且,如果這些鍵是從表單來的,你應該增加更多的驗證,以從意外增加等額外附加objectClass ES阻止惡意用戶。一盎司的預防值得治癒百分之一。

+0

非常感謝!我確實計劃驗證投入;我沒有在這個例子中包含這個代碼,因爲我認爲它會消除我試圖解決的問題。再次感謝!! – musashiXXX 2010-03-29 13:46:46

+0

我已經做出了更改,但仍然存在一些問題,但是現在我明白我做錯了什麼。修復代碼後,我插入了以下代碼行,以查看指令是否正確構建: puts $ formValues 它提供了相應的信息,並且已經徹底檢查了它,以確保它處於正確的狀態格式,但由於某種原因沒有插入條目。我感謝您的幫助! – musashiXXX 2010-03-29 14:46:30

+0

現在無法從描述中知道。嘗試在freenode上停止#tcl。有很多知識淵博的人可以幫助解決問題,有些東西更容易通過更直接的互動進行調試...... – 2010-03-29 15:34:15