From 82010e23099d70b6b2b1fc04b301259a04269e39 Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Tue, 1 Jan 2013 13:12:29 +0000 Subject: log and return a diagnostic message instead of just the LDAP error on password change failure git-svn-id: http://arthurdejong.org/svn/nss-pam-ldapd/nss-pam-ldapd@1895 ef36b2f9-881f-0410-afb5-c4e39611909c --- nslcd/myldap.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'nslcd/myldap.c') diff --git a/nslcd/myldap.c b/nslcd/myldap.c index bacfb4f..883fbc7 100644 --- a/nslcd/myldap.c +++ b/nslcd/myldap.c @@ -1977,3 +1977,29 @@ int myldap_modify(MYLDAP_SESSION *session, const char *dn, LDAPMod * mods[]) } return ldap_modify_ext_s(session->ld, dn, mods, NULL, NULL); } + +int myldap_error_message(MYLDAP_SESSION *session, int rc, + char *buffer, size_t buflen) +{ + char *msg_diag = NULL; + if (!is_valid_session(session) || (buffer == NULL) || (buflen <= 0)) + { + log_log(LOG_ERR, "myldap_error_message(): invalid parameter passed"); + errno = EINVAL; + return LDAP_OTHER; + } + /* clear buffer */ + buffer[0] = '\0'; +#ifdef LDAP_OPT_DIAGNOSTIC_MESSAGE + if (session->ld != NULL) + ldap_get_option(session->ld, LDAP_OPT_DIAGNOSTIC_MESSAGE, &msg_diag); +#endif /* LDAP_OPT_DIAGNOSTIC_MESSAGE */ + /* return msg_diag or generic error message */ + mysnprintf(buffer, buflen - 1, "%s", + ((msg_diag != NULL) && (msg_diag[0]!='\0')) ? + msg_diag : ldap_err2string(rc)); + /* free diagnostic message */ + if (msg_diag != NULL) + ldap_memfree(msg_diag); + return LDAP_SUCCESS; +} -- cgit v1.2.3