+/* $OpenLDAP$ */
/*
* query.c: for rcpt500 (X.500 email query responder)
*
#include "portable.h"
-#include <stdio.h>
-#include <ctype.h>
+#include <ac/stdlib.h>
+#include <ac/ctype.h>
#include <ac/string.h>
#include <ac/syslog.h>
#include <ac/time.h>
-#include "lber.h"
-#include "ldap.h"
-
-#if LDAP_VERSION < LDAP_VERSION3
-/* quick fix until we have ldap_set_options */
-#include "../libraries/libldap/ldap-int.h"
-#endif
+#include <stdio.h>
-#include "disptmpl.h"
+#include <ldap.h>
+#include <disptmpl.h>
#include "rcpt500.h"
-#include "ldapconfig.h"
-
-extern int dosyslog;
-extern int do_cldap;
-extern int rdncount;
-extern int derefaliases;
-extern int sizelimit;
-extern int ldapport;
-extern char *ldaphost;
-extern char *searchbase;
-extern char *dapuser;
-extern char *filterfile;
-extern char *templatefile;
+#include "ldap_defaults.h"
static char buf[ MAXSIZE ];
static char *errpreface = "Your query failed: ";
-extern int strcasecmp();
-
-void close_ldap();
+static void close_ldap(LDAP *ld);
+static void append_entry_list(char *rep, char *qu, LDAP *ld, LDAPMessage *msg);
+static int append_text(void *reply, char *text, ber_len_t len);
+static int do_read (LDAP *ld, char *dn, char *rep, struct ldap_disptmpl *tmp);
+static void report_ldap_err (LDAP *ldp, char *reply);
+static void remove_trailing_space (char *s);
int
-query_cmd( msgp, reply )
- struct msginfo *msgp;
- char *reply;
+query_cmd( struct msginfo *msgp, char *reply )
{
LDAP *ldp;
LDAPMessage *ldmsgp, *entry;
- char *s, *dn;
- int matches, rc, ufn;
+ char *dn;
+ int matches, rc, ld_errno, ufn;
LDAPFiltDesc *lfdp;
LDAPFiltInfo *lfi;
struct ldap_disptmpl *tmpllist = NULL;
ldp = cldap_open( ldaphost, ldapport );
else
#endif /* LDAP_CONNECTIONLESS */
- ldp = ldap_open( ldaphost, ldapport );
+ ldp = ldap_init( ldaphost, ldapport );
if ( ldp == NULL ) {
strcat( reply, errpreface );
/*
* set options for search and build filter
*/
- ldp->ld_deref = derefaliases;
- ldp->ld_sizelimit = sizelimit;
+ ldap_set_option(ldp, LDAP_OPT_DEREF, &derefaliases);
+ ldap_set_option(ldp, LDAP_OPT_SIZELIMIT, &sizelimit);
matches = 0;
return( 0 );
}
- if ( ldp->ld_errno == LDAP_TIMELIMIT_EXCEEDED
- || ldp->ld_errno == LDAP_SIZELIMIT_EXCEEDED ) {
+ ld_errno = 0;
+ ldap_get_option(ldp, LDAP_OPT_ERROR_NUMBER, &ld_errno);
+
+ if ( ld_errno == LDAP_TIMELIMIT_EXCEEDED
+ || ld_errno == LDAP_SIZELIMIT_EXCEEDED ) {
strcat( reply, "(Partial results only - a limit was exceeded)\n" );
}
}
-void
+static void
close_ldap( LDAP *ld )
{
#ifdef LDAP_CONNECTIONLESS
}
-append_entry_list( reply, query, ldp, ldmsgp )
- char *reply;
- char *query;
- LDAP *ldp;
- LDAPMessage *ldmsgp;
+static void
+append_entry_list( char *reply, char *query, LDAP *ldp, LDAPMessage *ldmsgp )
{
LDAPMessage *e;
char *dn, *rdn, *s, **title;
if (( cn = ldap_get_values( ldp, e, "cn" )) != NULL ) {
for ( i = 0; cn[i] != NULL; i++ ) {
- if ( isdigit( *( cn[i] + strlen( cn[i] ) - 1 ))) {
+ if ( isdigit((unsigned char) cn[i][strlen( cn[i] ) - 1])) {
rdn = strdup( cn[i] );
free_rdn = 1;
break;
}
-int
-append_text( reply, text, len )
- char *reply;
- char *text;
- int len;
+static int
+append_text( void *reply, char *text, ber_len_t len )
{
- strcat( reply, text );
+ strcat( (char *) reply, text );
return( len );
}
-int
-do_read( ldp, dn, reply, tmpll )
- LDAP *ldp;
- char *dn;
- char *reply;
- struct ldap_disptmpl *tmpll;
+static int
+do_read( LDAP *ldp, char *dn, char *reply, struct ldap_disptmpl *tmpll )
{
int rc;
static char *maildefvals[] = { "None registered in this service", NULL };
static char **defvals[] = { maildefvals, NULL };
- rc = ldap_entry2text_search( ldp, dn, searchbase, NULLMSG, tmpll,
+ rc = ldap_entry2text_search( ldp, dn, searchbase, NULL, tmpll,
defattrs, defvals, append_text, (void *)reply, "\n",
rdncount, LDAP_DISP_OPT_DOSEARCHACTIONS );
}
-report_ldap_err( ldp, reply )
- LDAP *ldp;
- char *reply;
+static void
+report_ldap_err( LDAP *ldp, char *reply )
{
+ int ld_errno = 0;
+ ldap_get_option(ldp, LDAP_OPT_ERROR_NUMBER, &ld_errno);
+
strcat( reply, errpreface );
- strcat( reply, ldap_err2string( ldp->ld_errno ));
+ strcat( reply, ldap_err2string( ld_errno ));
strcat( reply, "\n" );
}
-remove_trailing_space( s )
- char *s;
+static void
+remove_trailing_space( char *s )
{
char *p = s + strlen( s ) - 1;
- while ( isspace( *p ) && p > s ) {
+ while ( isspace( (unsigned char) *p ) && p > s ) {
--p;
}
*(++p) = '\0';