fixes from Albert Lee
- Support the Sun LDAP library as an alternative to OpenLDAP (Novell/Mozilla use the same API and will be supported later). - Support the Solaris variants of the re-entrant pwd.h functions. - Add example SMF manifest and method files for Bongo.
This commit is contained in:
@@ -52,6 +52,8 @@ EXTRA_DIST := \
|
||||
init/bongo.init.fc4.in \
|
||||
init/bongo.init.sles9.in \
|
||||
init/bongo.init.suse10.in \
|
||||
init/svc-bongo.solaris-smf.in \
|
||||
init/network-bongo.xml.solaris-smf \
|
||||
mkinstalldirs
|
||||
|
||||
pkgconfigdir = $(libdir)/pkgconfig
|
||||
|
||||
@@ -608,6 +608,7 @@ include/Makefile
|
||||
init/bongo.init.fc4
|
||||
init/bongo.init.sles9
|
||||
init/bongo.init.suse10
|
||||
init/svc-bongo.solaris-smf
|
||||
po/Makefile.in
|
||||
src/agents/alarm/Makefile
|
||||
src/agents/antispam/Makefile
|
||||
|
||||
@@ -50,7 +50,11 @@ LookupUser(uid_t uid)
|
||||
|
||||
buflen = sysconf(_SC_GETPW_R_SIZE_MAX);
|
||||
buf = MemMalloc(buflen + 1);
|
||||
#if defined(__SVR4) && defined(__sun) && !defined(_POSIX_PTHREAD_SEMANTICS)
|
||||
pw = getpwuid_r(uid, &pwbuf, buf, buflen);
|
||||
#else
|
||||
getpwuid_r(uid, &pwbuf, buf, buflen, &pw);
|
||||
#endif
|
||||
|
||||
if (!pw) {
|
||||
MemFree(buf);
|
||||
|
||||
@@ -1015,39 +1015,57 @@ static BOOL
|
||||
LdapVerify(const char *Base, const char *Password)
|
||||
{
|
||||
LDAP *ldap;
|
||||
int err;
|
||||
int err, tries;
|
||||
BOOL result = FALSE;
|
||||
char *url;
|
||||
|
||||
#ifdef _SOLARIS_SDK
|
||||
if (MdbLdap.LdapTls) {
|
||||
url = malloc(32 + strlen(MdbLdap.LdapHostAddress));
|
||||
|
||||
if (url) {
|
||||
sprintf(url, "ldap://%s:%d", MdbLdap.LdapHostAddress,
|
||||
MdbLdap.LdapHostPort);
|
||||
ldap_initialize(&ldap, url);
|
||||
|
||||
if (ldap) {
|
||||
err = ldap_start_tls_s(ldap, NULL, NULL);
|
||||
if (err != LDAP_SUCCESS) {
|
||||
Log(LOG_ERROR, "ldap_start_tls_s() failed: %s",
|
||||
ldap_err2string(err));
|
||||
ldap_unbind_s(ldap);
|
||||
ldap = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
free(url);
|
||||
}
|
||||
} else {
|
||||
err = ldapssl_client_init(NULL, NULL);
|
||||
ldap = ldap_init(MdbLdap.LdapHostAddress, MdbLdap.LdapHostPort);
|
||||
}
|
||||
|
||||
if (ldap) {
|
||||
if (err == LDAP_SUCCESS) {
|
||||
err = ldapssl_install_routines(ldap);
|
||||
}
|
||||
if (err == LDAP_SUCCESS) {
|
||||
#ifdef LDAP_OPT_SSL
|
||||
err = ldap_set_option(ldap, LDAP_OPT_SSL, LDAP_OPT_ON);
|
||||
#endif
|
||||
ldap_set_option(ldap, LDAP_OPT_RECONNECT, LDAP_OPT_ON);
|
||||
}
|
||||
if (err != LDAP_SUCCESS) {
|
||||
Log(LOG_ERROR, "Enabling TLS failed: %s",
|
||||
ldap_err2string(err));
|
||||
ldap_unbind_ext(ldap, NULL, NULL);
|
||||
ldap = NULL;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
ldap = ldap_init(MdbLdap.LdapHostAddress, MdbLdap.LdapHostPort);
|
||||
}
|
||||
#else
|
||||
ldap = ldap_init(MdbLdap.LdapHostAddress, MdbLdap.LdapHostPort);
|
||||
if (ldap) {
|
||||
err = ldap_simple_bind_s(ldap, Base, Password);
|
||||
if (MdbLdap.LdapTls) {
|
||||
err = ldap_start_tls_s(ldap, NULL, NULL);
|
||||
if (err != LDAP_SUCCESS) {
|
||||
Log(LOG_ERROR, "ldap_start_tls_s() failed: %s",
|
||||
ldap_err2string(err));
|
||||
ldap_unbind_ext(ldap, NULL, NULL);
|
||||
ldap = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
if (err == LDAP_SUCCESS) {
|
||||
result = TRUE;
|
||||
if (ldap) {
|
||||
|
||||
for (tries = 0; tries < 3; tries++) {
|
||||
err = ldap_simple_bind_s(ldap, Base, Password);
|
||||
|
||||
if (err == LDAP_SUCCESS) {
|
||||
result = TRUE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
ldap_unbind_s(ldap);
|
||||
@@ -1203,39 +1221,55 @@ static LDAP *
|
||||
InitLdapConnection(char *BindDn, char *Passwd, void *rebind_proc,
|
||||
MDBLDAPContextStruct *Context)
|
||||
{
|
||||
char *url;
|
||||
LDAP *ldap = NULL;
|
||||
int err;
|
||||
int err, tries;
|
||||
|
||||
#ifdef _SOLARIS_SDK
|
||||
if (MdbLdap.LdapTls) {
|
||||
url = malloc(32 + strlen(MdbLdap.LdapHostAddress));
|
||||
|
||||
if (url) {
|
||||
sprintf(url, "ldap://%s:%d", MdbLdap.LdapHostAddress,
|
||||
MdbLdap.LdapHostPort);
|
||||
ldap_initialize(&ldap, url);
|
||||
|
||||
if (ldap) {
|
||||
err = ldap_start_tls_s(ldap, NULL, NULL);
|
||||
/* does ldap_start_tls_s() not return
|
||||
LDAP_SUCCESS on success?
|
||||
*/
|
||||
if (err != LDAP_SUCCESS) {
|
||||
Log(LOG_ERROR, "ldap_start_tls_s() failed: %s",
|
||||
ldap_err2string(err));
|
||||
ldap_unbind_s(ldap);
|
||||
ldap = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
free(url);
|
||||
}
|
||||
} else {
|
||||
err = ldapssl_client_init(NULL, NULL);
|
||||
ldap = ldap_init(MdbLdap.LdapHostAddress, MdbLdap.LdapHostPort);
|
||||
}
|
||||
|
||||
if (ldap) {
|
||||
if (err == LDAP_SUCCESS) {
|
||||
err = ldapssl_install_routines(ldap);
|
||||
}
|
||||
if (err == LDAP_SUCCESS) {
|
||||
#ifdef LDAP_OPT_SSL
|
||||
err = ldap_set_option(ldap, LDAP_OPT_SSL, LDAP_OPT_ON);
|
||||
#endif
|
||||
ldap_set_option(ldap, LDAP_OPT_RECONNECT, LDAP_OPT_ON);
|
||||
}
|
||||
if (err != LDAP_SUCCESS) {
|
||||
Log(LOG_ERROR, "Enabling TLS failed: %s",
|
||||
ldap_err2string(err));
|
||||
ldap_unbind_ext(ldap, NULL, NULL);
|
||||
ldap = NULL;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
ldap = ldap_init(MdbLdap.LdapHostAddress, MdbLdap.LdapHostPort);
|
||||
}
|
||||
#else
|
||||
ldap = ldap_init(MdbLdap.LdapHostAddress, MdbLdap.LdapHostPort);
|
||||
if (ldap) {
|
||||
err = ldap_simple_bind_s(ldap, BindDn, Passwd);
|
||||
if (MdbLdap.LdapTls) {
|
||||
err = ldap_start_tls_s(ldap, NULL, NULL);
|
||||
if (err != LDAP_SUCCESS) {
|
||||
Log(LOG_ERROR, "ldap_start_tls_s() failed: %s",
|
||||
ldap_err2string(err));
|
||||
ldap_unbind_ext(ldap, NULL, NULL);
|
||||
ldap = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
if (ldap) {
|
||||
for (tries = 0; tries < 3; tries++) {
|
||||
err = ldap_simple_bind_s(ldap, BindDn, Passwd);
|
||||
|
||||
if (err == LDAP_SUCCESS) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (err == LDAP_SUCCESS) {
|
||||
ldap_set_rebind_proc(ldap, rebind_proc, Context);
|
||||
@@ -1250,7 +1284,6 @@ InitLdapConnection(char *BindDn, char *Passwd, void *rebind_proc,
|
||||
Log(LOG_ERROR, "ldap_init() failed: %s", ldap_err2string(errno));
|
||||
Log(LOG_ERROR, "host: %s:%d", MdbLdap.LdapHostAddress,
|
||||
MdbLdap.LdapHostPort);
|
||||
ldap = NULL;
|
||||
}
|
||||
|
||||
return ldap;
|
||||
|
||||
@@ -3,6 +3,29 @@
|
||||
#include <config.h>
|
||||
#include <xpl.h>
|
||||
|
||||
/* compatibility with different client libraries */
|
||||
#ifndef LDAP_CONST
|
||||
#define LDAP_CONST const
|
||||
#endif
|
||||
#ifndef LDAP_OPT_SUCCESS
|
||||
#define LDAP_OPT_SUCCESS 0
|
||||
#endif
|
||||
#ifndef LDAP_EXOP_MODIFY_PASSWD
|
||||
#define LDAP_EXOP_MODIFY_PASSWD "1.3.6.1.4.1.4203.1.11.1"
|
||||
#endif
|
||||
#ifndef LDAP_TAG_EXOP_MODIFY_PASSWD_ID
|
||||
#define LDAP_TAG_EXOP_MODIFY_PASSWD_ID ((ber_tag_t) 0x80U)
|
||||
#endif
|
||||
#ifndef LDAP_TAG_EXOP_MODIFY_PASSWD_OLD
|
||||
#define LDAP_TAG_EXOP_MODIFY_PASSWD_OLD ((ber_tag_t) 0x81U)
|
||||
#endif
|
||||
#ifndef LDAP_TAG_EXOP_MODIFY_PASSWD_NEW
|
||||
#define LDAP_TAG_EXOP_MODIFY_PASSWD_NEW ((ber_tag_t) 0x82U)
|
||||
#endif
|
||||
#ifndef LBER_USE_DER
|
||||
#define LBER_USE_DER 0x01
|
||||
#endif
|
||||
|
||||
#define MDBLDAP_FLAGS_ALLOCATED_HANDLE (unsigned long)(1 << 0)
|
||||
#define MDBLDAP_FLAGS_CONTEXT_VALID (unsigned long)(1 << 1)
|
||||
#define MDBLDAP_FLAGS_CONTEXT_DUPLICATE (unsigned long)(1 << 2)
|
||||
|
||||
@@ -59,9 +59,16 @@ XplLookupUser(const char *username, uid_t *uid, gid_t *gid)
|
||||
|
||||
char buffer[2048];
|
||||
|
||||
#if defined(__SVR4) && defined(__sun) && !defined(_POSIX_PTHREAD_SEMANTICS)
|
||||
errno = 0;
|
||||
pw = getpwnam_r(username, &pwBuf, buffer, sizeof(buffer));
|
||||
if (errno != 0 || pw == NULL) {
|
||||
printf ("errno: %d, pw: %p\n", errno, pw);
|
||||
#else
|
||||
ret = getpwnam_r(username, &pwBuf, buffer, sizeof(buffer), &pw);
|
||||
if (ret != 0 || pw == NULL) {
|
||||
printf ("ret: %d, pw: %p\n", ret, pw);
|
||||
#endif
|
||||
return -1;
|
||||
}
|
||||
#else
|
||||
|
||||
Reference in New Issue
Block a user