Я уже опубликовал ту же статью по вине сервера.
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?