/* search.c - /etc/passwd backend search function */
+#include "portable.h"
+
#include <stdio.h>
-#include <string.h>
-#include <sys/time.h>
-#include <sys/types.h>
-#include <sys/socket.h>
+
+#include <ac/socket.h>
+#include <ac/string.h>
+#include <ac/time.h>
+
#include <pwd.h>
-#include "portable.h"
-#include "slap.h"
-extern time_t currenttime;
-extern pthread_mutex_t currenttime_mutex;
+#include "slap.h"
+#include "external.h"
-static Entry *pw2entry();
+static Entry *pw2entry(Backend *be, struct passwd *pw);
int
passwd_back_search(
for ( pw = getpwent(); pw != NULL; pw = getpwent() ) {
/* check for abandon */
- pthread_mutex_lock( &op->o_abandonmutex );
+ ldap_pvt_thread_mutex_lock( &op->o_abandonmutex );
if ( op->o_abandon ) {
- pthread_mutex_unlock( &op->o_abandonmutex );
+ ldap_pvt_thread_mutex_unlock( &op->o_abandonmutex );
endpwent();
return( -1 );
}
- pthread_mutex_unlock( &op->o_abandonmutex );
-
- /* check size limit */
- if ( --slimit == -1 ) {
- send_ldap_result( conn, op, LDAP_SIZELIMIT_EXCEEDED,
- NULL, NULL );
- endpwent();
- return( 0 );
- }
+ ldap_pvt_thread_mutex_unlock( &op->o_abandonmutex );
/* check time limit */
- pthread_mutex_lock( ¤ttime_mutex );
+ ldap_pvt_thread_mutex_lock( ¤ttime_mutex );
time( ¤ttime );
if ( currenttime > stoptime ) {
- pthread_mutex_unlock( ¤ttime_mutex );
+ ldap_pvt_thread_mutex_unlock( ¤ttime_mutex );
send_ldap_result( conn, op, LDAP_TIMELIMIT_EXCEEDED,
NULL, NULL );
endpwent();
return( 0 );
}
- pthread_mutex_unlock( ¤ttime_mutex );
+ ldap_pvt_thread_mutex_unlock( ¤ttime_mutex );
e = pw2entry( be, pw );
if ( test_filter( be, conn, op, e, filter ) == 0 ) {
+ /* check size limit */
+ if ( --slimit == -1 ) {
+ send_ldap_result( conn, op, LDAP_SIZELIMIT_EXCEEDED,
+ NULL, NULL );
+ endpwent();
+ return( 0 );
+ }
+
send_search_entry( be, conn, op, e, attrs, attrsonly );
}
e->e_attrs = NULL;
sprintf( buf, "%s@%s", pw->pw_name, be->be_suffix[0] );
- e->e_dn = strdup( buf );
+ e->e_dn = ch_strdup( buf );
+ e->e_ndn = dn_normalize_case( ch_strdup( buf ) );
val.bv_val = pw->pw_name;
val.bv_len = strlen( pw->pw_name );