2010-03-27 4 views
1

정보를 수집하여 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 명령은 문자열을 stdout (또는 파일)로 보내고 나중에 처리하기 위해 저장하지 않습니다.
  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

+0

나는 변화를 만들었지 만 나는 아직도 어떤 문제를 겪고있다. 그러나 나는 지금 내가 잘못하고있는 것을 이해하고있다. 코드를 수정 한 후 다음 라인을 삽입 했으므로 명령이 올바르게 작성되었는지 확인하십시오. puts $ formValues ​​ 적절한 정보가 누출되어 올바른지 확인하기 위해 철저히 검사했습니다. 형식을 사용하지만 어떤 이유로 입력 항목이 삽입되지 않습니다. 도와 줘서 고마워! – musashiXXX

+0

설명에서 지금 알 수 없습니다. freenode에서 #tcl에 들려보십시오. 많은 지식을 가진 사람들이 도움을 줄 수있을 것이며, 어떤 것들은 더 직접적인 상호 작용으로 디버깅하기가 더 쉽습니다 ... –

관련 문제