2010-03-27 85 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