Slapd генерирует SQL с помощью синтаксиса на основе PostgreSQL - PullRequest
0 голосов
/ 06 сентября 2018

Я уже опубликовал ту же статью по вине сервера. https://serverfault.com/q/926093/161067

Я использую openldap slapd 2.4.40 + MySQL5.5 в качестве back-sql на CentoS 6.9

Slapd генерирует синтаксис SQL на основе PostgreSQL

Вот сообщение об ошибке для ldapsearch -x -b "dc=example,dc=com" '(objectClass=*)'

5b70e25c <==backsql_srch_query() returns SELECT DISTINCT ldap_entries.id,eduperson.id,text('inetOrgPerson') AS objectClass,ldap_entries.dn AS dn FROM ldap_entries,eduperson WHERE eduperson.id=ldap_entries.keyval AND ldap_entries.oc_map_id=? AND 9=9 AND 3=3
5b70e25c Constructed query: SELECT DISTINCT ldap_entries.id,eduperson.id,text('inetOrgPerson') AS objectClass,ldap_entries.dn AS dn FROM ldap_entries,eduperson WHERE eduperson.id=ldap_entries.keyval AND ldap_entries.oc_map_id=? AND 9=9 AND 3=3
5b70e25c id: '3'
5b70e25c backsql_oc_get_candidates(): error executing query
5b70e25c Return code: -1
5b70e25c    nativeErrCode=1064 SQLengineState=37000 msg="[unixODBC][MySQL][ODBC 5.1 Driver][mysqld-5.5.57]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '('inetOrgPerson') AS objectClass,ldap_entries.dn AS dn FROM ldap_entries,edupers' at line 1"
5b70e25c send_ldap_result: conn=1000 op=1 p=3
5b70e25c send_ldap_result: err=80 matched="" text=""
5b70e25c send_ldap_response: msgid=2 tag=101 err=80

Я вижу text('inetOrgPerson') в SQL, который был сгенерирован slapd, однако MySQL не поддерживает text() function в SQL.

Я получаю то же сообщение, что и ниже, с консоли MySQL.

SELECT DISTINCT 
 ldap_entries.id,
 eduperson.id,
 text('inetOrgPerson') AS objectClass,
 ldap_entries.dn AS dn 
FROM ldap_entries,eduperson 
WHERE eduperson.id=ldap_entries.keyval
 AND ldap_entries.oc_map_id=3 
 AND 9=9 
 AND 3=3

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '('inetOrgPerson') AS objectClass,
 ldap_entries.dn AS dn 
FROM ldap_entries,edup' at line 4

Можно использовать postgresql в качестве back-sql, я имею в виду, ldapsearch возвращает соответствующий ответ, и psql консольная отладка тоже.

SELECT DISTINCT ldap_entries.id,persons.id,text('inetOrgPerson') AS objectClass,ldap_entries.dn AS dn
 FROM ldap_entries,persons 
 WHERE persons.id=ldap_entries.keyval 
 AND ldap_entries.oc_map_id=1 
 AND 9=9 
 AND 3=3;




 id | id |  objectclass  |                   dn                    
----+----+---------------+-----------------------------------------
  3 |  2 | inetOrgPerson | cn=Torvlobnor Puzdoy,dc=example,dc=com
  2 |  1 | inetOrgPerson | cn=Mitya Kovalev,dc=example,dc=com
  4 |  3 | inetOrgPerson | cn=Akakiy Zinberstein,dc=example,dc=com

Кто-нибудь знает, как заставить Slapd генерировать синтаксис SQL на основе MySQL?

...