|
Patrick Monnerat |
94d50ff |
diff -Naur openca-ocspd-1.7.0.orig/src/hash-db.c openca-ocspd-1.7.0.new/src/hash-db.c
|
|
Patrick Monnerat |
94d50ff |
--- openca-ocspd-1.7.0.orig/src/hash-db.c 2013-02-20 14:08:37.959103608 +0100
|
|
Patrick Monnerat |
94d50ff |
+++ openca-ocspd-1.7.0.new/src/hash-db.c 2013-02-20 16:36:05.511726770 +0100
|
|
Patrick Monnerat |
94d50ff |
@@ -127,6 +127,8 @@
|
|
Patrick Monnerat |
94d50ff |
LDAP *ld = NULL;
|
|
Patrick Monnerat |
94d50ff |
int protocol = -1;
|
|
Patrick Monnerat |
94d50ff |
int ret = 0;
|
|
Patrick Monnerat |
94d50ff |
+ char * cp = NULL;
|
|
Patrick Monnerat |
94d50ff |
+ struct berval bv;
|
|
Patrick Monnerat |
94d50ff |
|
|
Patrick Monnerat |
94d50ff |
|
|
Patrick Monnerat |
94d50ff |
(void) signal( SIGPIPE, SIG_IGN );
|
|
Patrick Monnerat |
94d50ff |
@@ -144,11 +146,23 @@
|
|
Patrick Monnerat |
94d50ff |
if(ocspd_conf->verbose)
|
|
Patrick Monnerat |
94d50ff |
syslog( LOG_INFO, "INFO::Connecting to LDAP (%s)", url->addr );
|
|
Patrick Monnerat |
94d50ff |
|
|
Patrick Monnerat |
94d50ff |
- if (( ld = ldap_init( url->addr, url->port )) == NULL ) {
|
|
Patrick Monnerat |
94d50ff |
- syslog( LOG_ERR, "ERROR::ldap_init failure!");
|
|
Patrick Monnerat |
94d50ff |
+ cp = malloc(strlen(url->addr) + 14);
|
|
Patrick Monnerat |
94d50ff |
+
|
|
Patrick Monnerat |
94d50ff |
+ if (!cp) {
|
|
Patrick Monnerat |
94d50ff |
+ syslog( LOG_ERR, "ERROR::No memory for LDAP url");
|
|
Patrick Monnerat |
94d50ff |
+ return NULL;
|
|
Patrick Monnerat |
94d50ff |
+ }
|
|
Patrick Monnerat |
94d50ff |
+
|
|
Patrick Monnerat |
94d50ff |
+ sprintf(cp, "ldap://%s:%d", url->addr, url->port);
|
|
Patrick Monnerat |
94d50ff |
+
|
|
Patrick Monnerat |
94d50ff |
+ if (ldap_initialize(&ld, cp) != LDAP_SUCCESS) {
|
|
Patrick Monnerat |
94d50ff |
+ free(cp);
|
|
Patrick Monnerat |
94d50ff |
+ syslog( LOG_ERR, "ERROR::ldap_initialize failure!");
|
|
Patrick Monnerat |
94d50ff |
return NULL;
|
|
Patrick Monnerat |
94d50ff |
}
|
|
Patrick Monnerat |
94d50ff |
|
|
Patrick Monnerat |
94d50ff |
+ free(cp);
|
|
Patrick Monnerat |
94d50ff |
+
|
|
Patrick Monnerat |
94d50ff |
if(ocspd_conf->verbose)
|
|
Patrick Monnerat |
94d50ff |
syslog( LOG_INFO, "INFO::Connection established (%s)",
|
|
Patrick Monnerat |
94d50ff |
url->addr );
|
|
Patrick Monnerat |
94d50ff |
@@ -159,13 +173,16 @@
|
|
Patrick Monnerat |
94d50ff |
!= LDAP_OPT_SUCCESS ) {
|
|
Patrick Monnerat |
94d50ff |
syslog( LOG_ERR, "ERROR::Could not set LDAP_OPT_PROTOCOL_VERSION %d\n",
|
|
Patrick Monnerat |
94d50ff |
protocol );
|
|
Patrick Monnerat |
94d50ff |
- ldap_unbind(ld);
|
|
Patrick Monnerat |
94d50ff |
+ ldap_unbind_ext(ld, NULL, NULL);
|
|
Patrick Monnerat |
94d50ff |
return(NULL);
|
|
Patrick Monnerat |
94d50ff |
}
|
|
Patrick Monnerat |
94d50ff |
|
|
Patrick Monnerat |
94d50ff |
- if ( (ret = ldap_bind_s( ld, url->usr, url->pwd, LDAP_AUTH_SIMPLE ))
|
|
Patrick Monnerat |
94d50ff |
- != LDAP_SUCCESS ) {
|
|
Patrick Monnerat |
94d50ff |
- syslog( LOG_ERR, "ERROR::ldap_bind_s failure (%s:%d) [%d]",
|
|
Patrick Monnerat |
94d50ff |
+ bv.bv_len = strlen(url->pwd);
|
|
Patrick Monnerat |
94d50ff |
+ bv.bv_val = url->pwd;
|
|
Patrick Monnerat |
94d50ff |
+
|
|
Patrick Monnerat |
94d50ff |
+ if ((ret = ldap_sasl_bind_s(ld, url->usr, LDAP_SASL_SIMPLE, &bv,
|
|
Patrick Monnerat |
94d50ff |
+ NULL, NULL, NULL)) != LDAP_SUCCESS) {
|
|
Patrick Monnerat |
94d50ff |
+ syslog( LOG_ERR, "ERROR::ldap_sasl_bind_s failure (%s:%d) [%d]",
|
|
Patrick Monnerat |
94d50ff |
url->addr, url->port, ret );
|
|
Patrick Monnerat |
94d50ff |
return NULL;
|
|
Patrick Monnerat |
94d50ff |
}
|
|
Patrick Monnerat |
94d50ff |
@@ -199,9 +216,8 @@
|
|
Patrick Monnerat |
94d50ff |
}
|
|
Patrick Monnerat |
94d50ff |
|
|
Patrick Monnerat |
94d50ff |
/* We search for the exact match, so LDAP_SCOPE_BASE is used here */
|
|
Patrick Monnerat |
94d50ff |
- if (( rc = ldap_search_s( ld, url->dn, LDAP_SCOPE_BASE,
|
|
Patrick Monnerat |
94d50ff |
- filter, attrs, 0, &res )) != LDAP_SUCCESS ) {
|
|
Patrick Monnerat |
94d50ff |
-
|
|
Patrick Monnerat |
94d50ff |
+ if ((rc = ldap_search_ext_s(ld, url->dn, LDAP_SCOPE_BASE, filter,
|
|
Patrick Monnerat |
94d50ff |
+ attrs, 0, NULL, NULL, NULL, LDAP_NO_LIMIT, &res)) != LDAP_SUCCESS) {
|
|
Patrick Monnerat |
94d50ff |
if ( rc != LDAP_NO_SUCH_OBJECT ) {
|
|
Patrick Monnerat |
94d50ff |
syslog( LOG_ERR,
|
|
Patrick Monnerat |
94d50ff |
"LDAP: [%s] object not found", url->dn );
|
|
Patrick Monnerat |
94d50ff |
@@ -282,7 +298,7 @@
|
|
Patrick Monnerat |
94d50ff |
|
|
Patrick Monnerat |
94d50ff |
end:
|
|
Patrick Monnerat |
94d50ff |
if(res) ldap_msgfree( res );
|
|
Patrick Monnerat |
94d50ff |
- if(ld) ldap_unbind( ld );
|
|
Patrick Monnerat |
94d50ff |
+ if(ld) ldap_unbind_ext(ld, NULL, NULL);
|
|
Patrick Monnerat |
94d50ff |
|
|
Patrick Monnerat |
94d50ff |
if( ocspd_conf->verbose )
|
|
Patrick Monnerat |
94d50ff |
syslog( LOG_INFO, "INFO::LDAP::Successfully unbinded");
|
|
Patrick Monnerat |
94d50ff |
@@ -300,6 +316,7 @@
|
|
Patrick Monnerat |
94d50ff |
struct berval **vals = NULL;
|
|
Patrick Monnerat |
94d50ff |
LDAPMessage *res = NULL;
|
|
Patrick Monnerat |
94d50ff |
BIO *membio = NULL;
|
|
Patrick Monnerat |
94d50ff |
+ struct berval bv;
|
|
Patrick Monnerat |
94d50ff |
|
|
Patrick Monnerat |
94d50ff |
X509_CRL *crl = NULL;
|
|
Patrick Monnerat |
94d50ff |
|
|
Patrick Monnerat |
94d50ff |
@@ -307,11 +324,14 @@
|
|
Patrick Monnerat |
94d50ff |
return NULL;
|
|
Patrick Monnerat |
94d50ff |
}
|
|
Patrick Monnerat |
94d50ff |
|
|
Patrick Monnerat |
94d50ff |
- if ( (ret = ldap_bind_s( ld, url->usr, url->pwd, LDAP_AUTH_SIMPLE ))
|
|
Patrick Monnerat |
94d50ff |
- != LDAP_SUCCESS ) {
|
|
Patrick Monnerat |
94d50ff |
- syslog( LOG_ERR, "LDAP: ldap_bind_s failure (%s:%d) [%d]",
|
|
Patrick Monnerat |
94d50ff |
+ bv.bv_len = strlen(url->pwd);
|
|
Patrick Monnerat |
94d50ff |
+ bv.bv_val = url->pwd;
|
|
Patrick Monnerat |
94d50ff |
+
|
|
Patrick Monnerat |
94d50ff |
+ if ((ret = ldap_sasl_bind_s(ld, url->usr, LDAP_SASL_SIMPLE, &bv,
|
|
Patrick Monnerat |
94d50ff |
+ NULL, NULL, NULL)) != LDAP_SUCCESS) {
|
|
Patrick Monnerat |
94d50ff |
+ syslog( LOG_ERR, "LDAP: ldap_sasl_bind_s failure (%s:%d) [%d]",
|
|
Patrick Monnerat |
94d50ff |
url->addr, url->port, ret );
|
|
Patrick Monnerat |
94d50ff |
- // ldap_perror( ld, "ldap_bind" );
|
|
Patrick Monnerat |
94d50ff |
+ // ldap_perror( ld, "ldap_sasl_bind_s" );
|
|
Patrick Monnerat |
94d50ff |
return NULL;
|
|
Patrick Monnerat |
94d50ff |
}
|
|
Patrick Monnerat |
94d50ff |
|
|
Patrick Monnerat |
94d50ff |
@@ -319,9 +339,8 @@
|
|
Patrick Monnerat |
94d50ff |
syslog( LOG_INFO, "INFO::LDAP::Successfully binded (%s)", url->dn);
|
|
Patrick Monnerat |
94d50ff |
|
|
Patrick Monnerat |
94d50ff |
/* We search for the exact match, so LDAP_SCOPE_BASE is used here */
|
|
Patrick Monnerat |
94d50ff |
- if (( rc = ldap_search_s( ld, url->dn, LDAP_SCOPE_BASE,
|
|
Patrick Monnerat |
94d50ff |
- filter, attrs, 0, &res )) != LDAP_SUCCESS ) {
|
|
Patrick Monnerat |
94d50ff |
-
|
|
Patrick Monnerat |
94d50ff |
+ if ((rc = ldap_search_ext_s(ld, url->dn, LDAP_SCOPE_BASE, filter,
|
|
Patrick Monnerat |
94d50ff |
+ attrs, 0, NULL, NULL, NULL, LDAP_NO_LIMIT, &res)) != LDAP_SUCCESS) {
|
|
Patrick Monnerat |
94d50ff |
if ( rc != LDAP_NO_SUCH_OBJECT )
|
|
Patrick Monnerat |
94d50ff |
syslog( LOG_ERR, "ERROR::LDAP::[%s] NOT found",
|
|
Patrick Monnerat |
94d50ff |
url->dn );
|
|
Patrick Monnerat |
94d50ff |
@@ -372,7 +391,7 @@
|
|
Patrick Monnerat |
94d50ff |
|
|
Patrick Monnerat |
94d50ff |
end:
|
|
Patrick Monnerat |
94d50ff |
if(res) ldap_msgfree( res );
|
|
Patrick Monnerat |
94d50ff |
- if(ld) ldap_unbind( ld );
|
|
Patrick Monnerat |
94d50ff |
+ if(ld) ldap_unbind_ext(ld, NULL, NULL);
|
|
Patrick Monnerat |
94d50ff |
|
|
Patrick Monnerat |
94d50ff |
if( ocspd_conf->verbose )
|
|
Patrick Monnerat |
94d50ff |
syslog( LOG_INFO, "INFO::LDAP::Successfully unbinded" );
|