From d55cf59d40192e68ce76e8d850e53a18a8bfaa8f Mon Sep 17 00:00:00 2001 From: Stefan Rijnhart Date: Wed, 8 Jun 2011 11:35:06 +0200 Subject: [PATCH 1/3] [IMP] allows anonymous bind to LDAP lp bug: https://launchpad.net/bugs/794450 fixed bzr revid: stefan@therp.nl-20110608093506-c035lvr168jruz9f --- addons/users_ldap/users_ldap.py | 17 ++++++++++------- addons/users_ldap/users_ldap_view.xml | 12 ++++++++++-- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/addons/users_ldap/users_ldap.py b/addons/users_ldap/users_ldap.py index e4fec6a391f..eb1be3b85f1 100644 --- a/addons/users_ldap/users_ldap.py +++ b/addons/users_ldap/users_ldap.py @@ -37,14 +37,15 @@ class CompanyLDAP(osv.osv): ondelete='cascade'), 'ldap_server': fields.char('LDAP Server address', size=64, required=True), 'ldap_server_port': fields.integer('LDAP Server port', required=True), - 'ldap_binddn': fields.char('LDAP binddn', size=64, required=True), - 'ldap_password': fields.char('LDAP password', size=64, required=True), + 'ldap_binddn': fields.char('LDAP binddn', size=64), + 'ldap_password': fields.char('LDAP password', size=64), 'ldap_filter': fields.char('LDAP filter', size=64, required=True), 'ldap_base': fields.char('LDAP base', size=64, required=True), 'user': fields.many2one('res.users', 'Model User', help="Model used for user creation"), 'create_user': fields.boolean('Create user', help="Create the user if not in database"), + 'anonymous': fields.boolean('Anonymous bind'), } _defaults = { 'ldap_server': lambda *a: '127.0.0.1', @@ -75,14 +76,15 @@ class users(osv.osv): action_obj = pool.get('ir.actions.actions') cr.execute(""" SELECT id, company, ldap_server, ldap_server_port, ldap_binddn, ldap_password, - ldap_filter, ldap_base, "user", create_user + ldap_filter, ldap_base, "user", create_user, anonymous FROM res_company_ldap - WHERE ldap_server != '' and ldap_binddn != '' ORDER BY sequence""") + WHERE ldap_server != '' and anonymous = TRUE or ldap_binddn != '' ORDER BY sequence""") for res_company_ldap in cr.dictfetchall(): logger.debug(res_company_ldap) try: l = ldap.open(res_company_ldap['ldap_server'], res_company_ldap['ldap_server_port']) - if l.simple_bind_s(res_company_ldap['ldap_binddn'], res_company_ldap['ldap_password']): + if (res_company_ldap['anonymous'] or + l.simple_bind_s(res_company_ldap['ldap_binddn'], res_company_ldap['ldap_password'])): base = res_company_ldap['ldap_base'] scope = ldap.SCOPE_SUBTREE filter = filter_format(res_company_ldap['ldap_filter'], (login,)) @@ -150,8 +152,9 @@ class users(osv.osv): for res_company_ldap in user.company_id.ldaps: try: l = ldap.open(res_company_ldap.ldap_server, res_company_ldap.ldap_server_port) - if l.simple_bind_s(res_company_ldap.ldap_binddn, - res_company_ldap.ldap_password): + if (res_company_ldap.anonymous or + l.simple_bind_s(res_company_ldap.ldap_binddn, + res_company_ldap.ldap_password)): base = res_company_ldap.ldap_base scope = ldap.SCOPE_SUBTREE filter = filter_format(res_company_ldap.ldap_filter, (user.login,)) diff --git a/addons/users_ldap/users_ldap_view.xml b/addons/users_ldap/users_ldap_view.xml index b055ef2938d..47d5f41fd75 100644 --- a/addons/users_ldap/users_ldap_view.xml +++ b/addons/users_ldap/users_ldap_view.xml @@ -12,8 +12,16 @@
- - + + + + From 6278811551a3d425396a48f6bfb9f19eaeb420e2 Mon Sep 17 00:00:00 2001 From: Stefan Rijnhart Date: Fri, 10 Jun 2011 23:42:23 +0200 Subject: [PATCH 2/3] [FIX] Field label implied anonymous bind instead of anonymous connection bzr revid: stefan@therp.nl-20110610214223-jg9qf6uhiirl1154 --- addons/users_ldap/users_ldap.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/users_ldap/users_ldap.py b/addons/users_ldap/users_ldap.py index eb1be3b85f1..a139f088cc9 100644 --- a/addons/users_ldap/users_ldap.py +++ b/addons/users_ldap/users_ldap.py @@ -45,7 +45,7 @@ class CompanyLDAP(osv.osv): help="Model used for user creation"), 'create_user': fields.boolean('Create user', help="Create the user if not in database"), - 'anonymous': fields.boolean('Anonymous bind'), + 'anonymous': fields.boolean('Anonymous connection'), } _defaults = { 'ldap_server': lambda *a: '127.0.0.1', From 1960be5281a6c265cf99481ee874504c4545647c Mon Sep 17 00:00:00 2001 From: Stefan Rijnhart Date: Sat, 11 Jun 2011 17:18:53 +0200 Subject: [PATCH 3/3] [IMP] Anonymous bind now triggered by empty bind dn instead of redundant 'anonymous' checkbox bzr revid: stefan@therp.nl-20110611151853-brr3nnp427wq40i7 --- addons/users_ldap/users_ldap.py | 22 ++++++++++++---------- addons/users_ldap/users_ldap_view.xml | 12 ++---------- 2 files changed, 14 insertions(+), 20 deletions(-) diff --git a/addons/users_ldap/users_ldap.py b/addons/users_ldap/users_ldap.py index a139f088cc9..06daa48c045 100644 --- a/addons/users_ldap/users_ldap.py +++ b/addons/users_ldap/users_ldap.py @@ -37,15 +37,18 @@ class CompanyLDAP(osv.osv): ondelete='cascade'), 'ldap_server': fields.char('LDAP Server address', size=64, required=True), 'ldap_server_port': fields.integer('LDAP Server port', required=True), - 'ldap_binddn': fields.char('LDAP binddn', size=64), - 'ldap_password': fields.char('LDAP password', size=64), + 'ldap_binddn': fields.char('LDAP binddn', size=64, + help=("The user account on the LDAP server that is used to query " + "the directory. Leave empty to connect anonymously.")), + 'ldap_password': fields.char('LDAP password', size=64, + help=("The password of the user account on the LDAP server that is" + " used to query the directory.")), 'ldap_filter': fields.char('LDAP filter', size=64, required=True), 'ldap_base': fields.char('LDAP base', size=64, required=True), 'user': fields.many2one('res.users', 'Model User', help="Model used for user creation"), 'create_user': fields.boolean('Create user', help="Create the user if not in database"), - 'anonymous': fields.boolean('Anonymous connection'), } _defaults = { 'ldap_server': lambda *a: '127.0.0.1', @@ -76,15 +79,15 @@ class users(osv.osv): action_obj = pool.get('ir.actions.actions') cr.execute(""" SELECT id, company, ldap_server, ldap_server_port, ldap_binddn, ldap_password, - ldap_filter, ldap_base, "user", create_user, anonymous + ldap_filter, ldap_base, "user", create_user FROM res_company_ldap - WHERE ldap_server != '' and anonymous = TRUE or ldap_binddn != '' ORDER BY sequence""") + WHERE ldap_server != '' ORDER BY sequence""") for res_company_ldap in cr.dictfetchall(): logger.debug(res_company_ldap) try: l = ldap.open(res_company_ldap['ldap_server'], res_company_ldap['ldap_server_port']) - if (res_company_ldap['anonymous'] or - l.simple_bind_s(res_company_ldap['ldap_binddn'], res_company_ldap['ldap_password'])): + if l.simple_bind_s(res_company_ldap['ldap_binddn'] or '', + res_company_ldap['ldap_password'] or ''): base = res_company_ldap['ldap_base'] scope = ldap.SCOPE_SUBTREE filter = filter_format(res_company_ldap['ldap_filter'], (login,)) @@ -152,9 +155,8 @@ class users(osv.osv): for res_company_ldap in user.company_id.ldaps: try: l = ldap.open(res_company_ldap.ldap_server, res_company_ldap.ldap_server_port) - if (res_company_ldap.anonymous or - l.simple_bind_s(res_company_ldap.ldap_binddn, - res_company_ldap.ldap_password)): + if l.simple_bind_s(res_company_ldap.ldap_binddn or '', + res_company_ldap.ldap_password or ''): base = res_company_ldap.ldap_base scope = ldap.SCOPE_SUBTREE filter = filter_format(res_company_ldap.ldap_filter, (user.login,)) diff --git a/addons/users_ldap/users_ldap_view.xml b/addons/users_ldap/users_ldap_view.xml index 47d5f41fd75..b055ef2938d 100644 --- a/addons/users_ldap/users_ldap_view.xml +++ b/addons/users_ldap/users_ldap_view.xml @@ -12,16 +12,8 @@ - - - - + +