bsw@1071: -- check if the corresponding LDAP entry for an LiquidFeedback member bsw@1071: -- object is still existent and updates changed attributes bsw@1071: -- -------------------------------------------------------------------------- bsw@1071: -- bsw@1071: -- arguments: bsw@1071: -- member: a LiquidFeedback Member object (required) bsw@1071: -- ldap_conn: a ldap connection handle (optional) bsw@1071: -- uid: the uid of the member (optional, required when creating members) bsw@1071: -- bsw@1071: -- returns: bsw@1071: -- ldap_conn: an LDAP connection bsw@1071: -- ldap_entry: the found LDAP entry (if any) bsw@1071: -- err: error code in case of an error (string) bsw@1071: -- err2: error dependent extra error information bsw@1071: -- err3: error dependent extra error information bsw@1071: bsw@1071: function ldap.update_member_attr(member, ldap_conn, uid) bsw@1071: bsw@1071: -- do this only for members with ldap authentication bsw@1071: if member.authority ~= "ldap" then bsw@1071: return nil, nil, "member_is_not_authenticated_by_ldap" bsw@1071: end bsw@1071: bsw@1074: local filter = config.ldap.member.uid_filter_map(member.authority_uid or uid) bsw@1071: local ldap_entry, err, err2 = ldap.get_member_entry(filter, ldap_conn) bsw@1071: bsw@1071: if err then bsw@1071: return ldap_conn, nil, "ldap_error", err, err2 bsw@1071: end bsw@1071: bsw@1071: -- If no corresponding entry found, lock the member bsw@1071: if not ldap_entry then bsw@1071: member.locked = true bsw@1071: member.active = false bsw@1071: return ldap_conn bsw@1071: end bsw@1071: bsw@1071: -- If exactly one corresponding entry found, update the attributes bsw@1071: local err = config.ldap.member.attr_map(ldap_entry, member) bsw@1071: bsw@1074: member.authority_uid = member.authority_uid or uid bsw@1074: member.authority_login = config.ldap.member.login_map(ldap_entry) bsw@1071: bsw@1071: if err then bsw@1071: return ldap_conn, ldap_entry, "attr_map_error", err bsw@1071: end bsw@1071: bsw@1071: return ldap_conn, ldap_entry bsw@1071: bsw@1071: end