mirror of
https://github.com/inverse-inc/sogo.git
synced 2026-07-05 16:35:10 +00:00
Monotone-Parent: 4cca4d500ad1af6c1eb559603e3f0344079dd5a4
Monotone-Revision: 44d882d9bb77158fe8b181911db08dab9ca0d76b Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2009-09-30T15:11:47 Monotone-Branch: ca.inverse.sogo
This commit is contained in:
@@ -1,5 +1,11 @@
|
||||
2009-09-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||||
|
||||
* SoObjects/SOGo/LDAPSource.m (-init): removed "ldapConnection"
|
||||
ivar, since we now always use it as an autoreleased local value.
|
||||
(-_ldapConnection): modified implementation of
|
||||
"_initLDAPConnection" that now returns an autoreleased instance of
|
||||
NGLdapConnection or nil.
|
||||
|
||||
* UI/MailerUI/UIxMailMainFrame.m (-_setupContext): if
|
||||
"moduleSettings" is non-nil, we don't reset it in the user
|
||||
defaults.
|
||||
|
||||
@@ -53,7 +53,6 @@
|
||||
|
||||
NSDictionary *modulesConstraints;
|
||||
|
||||
NGLdapConnection *ldapConnection;
|
||||
NSMutableArray *searchAttributes;
|
||||
}
|
||||
|
||||
|
||||
+156
-212
@@ -172,7 +172,6 @@ static NSLock *lock;
|
||||
_scope = @"sub";
|
||||
_filter = nil;
|
||||
|
||||
ldapConnection = nil;
|
||||
searchAttributes = nil;
|
||||
}
|
||||
|
||||
@@ -193,7 +192,6 @@ static NSLock *lock;
|
||||
[IMAPHostField release];
|
||||
[bindFields release];
|
||||
[_filter release];
|
||||
[ldapConnection release];
|
||||
[sourceID release];
|
||||
[modulesConstraints release];
|
||||
[_scope release];
|
||||
@@ -286,14 +284,15 @@ static NSLock *lock;
|
||||
return rc;
|
||||
}
|
||||
|
||||
- (BOOL) _initLDAPConnection
|
||||
- (NGLdapConnection *) _ldapConnection
|
||||
{
|
||||
BOOL b;
|
||||
NGLdapConnection *ldapConnection;
|
||||
|
||||
NS_DURING
|
||||
{
|
||||
ldapConnection = [[NGLdapConnection alloc] initWithHostName: hostname
|
||||
port: port];
|
||||
[ldapConnection autorelease];
|
||||
if (![encryption length] || [self _setupEncryption: ldapConnection])
|
||||
{
|
||||
[ldapConnection bindWithMethod: @"simple"
|
||||
@@ -303,19 +302,18 @@ static NSLock *lock;
|
||||
[ldapConnection setQuerySizeLimit: sizeLimit];
|
||||
if (timeLimit > 0)
|
||||
[ldapConnection setQueryTimeLimit: timeLimit];
|
||||
b = YES;
|
||||
}
|
||||
else
|
||||
b = NO;
|
||||
ldapConnection = nil;
|
||||
}
|
||||
NS_HANDLER
|
||||
{
|
||||
NSLog(@"Could not bind to the LDAP server %@ (%d) using the bind DN: %@", hostname, port, bindDN);
|
||||
b = NO;
|
||||
ldapConnection = nil;
|
||||
}
|
||||
NS_ENDHANDLER;
|
||||
|
||||
return b;
|
||||
return ldapConnection;
|
||||
}
|
||||
|
||||
/* user management */
|
||||
@@ -344,48 +342,30 @@ static NSLock *lock;
|
||||
|
||||
- (NSString *) _fetchUserDNForLogin: (NSString *) loginToCheck
|
||||
{
|
||||
NSString *userDN;
|
||||
NSEnumerator *entries;
|
||||
NGLdapEntry *userEntry;
|
||||
EOQualifier *qualifier;
|
||||
NSArray *attributes;
|
||||
NGLdapConnection *ldapConnection;
|
||||
NSString *userDN;
|
||||
|
||||
if ([self _initLDAPConnection])
|
||||
{
|
||||
EOQualifier *qualifier;
|
||||
NSArray *attributes;
|
||||
ldapConnection = [self _ldapConnection];
|
||||
qualifier = [self _qualifierForBindFilter: loginToCheck];
|
||||
attributes = [NSArray arrayWithObject: @"dn"];
|
||||
|
||||
qualifier = [self _qualifierForBindFilter: loginToCheck];
|
||||
attributes = [NSArray arrayWithObject: @"dn"];
|
||||
|
||||
if ([_scope caseInsensitiveCompare: @"BASE"] == NSOrderedSame)
|
||||
{
|
||||
entries = [ldapConnection baseSearchAtBaseDN: baseDN
|
||||
qualifier: qualifier
|
||||
attributes: attributes];
|
||||
}
|
||||
else if ([_scope caseInsensitiveCompare: @"ONE"] == NSOrderedSame)
|
||||
{
|
||||
entries = [ldapConnection flatSearchAtBaseDN: baseDN
|
||||
qualifier: qualifier
|
||||
attributes: attributes];
|
||||
}
|
||||
else
|
||||
{
|
||||
entries = [ldapConnection deepSearchAtBaseDN: baseDN
|
||||
qualifier: qualifier
|
||||
attributes: attributes];
|
||||
}
|
||||
|
||||
userEntry = [entries nextObject];
|
||||
}
|
||||
if ([_scope caseInsensitiveCompare: @"BASE"] == NSOrderedSame)
|
||||
entries = [ldapConnection baseSearchAtBaseDN: baseDN
|
||||
qualifier: qualifier
|
||||
attributes: attributes];
|
||||
else if ([_scope caseInsensitiveCompare: @"ONE"] == NSOrderedSame)
|
||||
entries = [ldapConnection flatSearchAtBaseDN: baseDN
|
||||
qualifier: qualifier
|
||||
attributes: attributes];
|
||||
else
|
||||
userEntry = nil;
|
||||
entries = [ldapConnection deepSearchAtBaseDN: baseDN
|
||||
qualifier: qualifier
|
||||
attributes: attributes];
|
||||
|
||||
if (userEntry)
|
||||
userDN = [userEntry dn];
|
||||
else
|
||||
userDN = nil;
|
||||
|
||||
[ldapConnection autorelease];
|
||||
userDN = [[entries nextObject] dn];
|
||||
|
||||
return userDN;
|
||||
}
|
||||
@@ -410,7 +390,7 @@ static NSLock *lock;
|
||||
if (![encryption length] || [self _setupEncryption: bindConnection])
|
||||
{
|
||||
if (timeLimit > 0)
|
||||
[ldapConnection setQueryTimeLimit: timeLimit];
|
||||
[bindConnection setQueryTimeLimit: timeLimit];
|
||||
if (bindFields)
|
||||
userDN = [self _fetchUserDNForLogin: loginToCheck];
|
||||
else
|
||||
@@ -427,8 +407,8 @@ static NSLock *lock;
|
||||
NS_ENDHANDLER
|
||||
;
|
||||
}
|
||||
[bindConnection release];
|
||||
}
|
||||
[bindConnection release];
|
||||
}
|
||||
|
||||
#if defined(THREADSAFE)
|
||||
@@ -548,10 +528,12 @@ static NSLock *lock;
|
||||
|
||||
- (NSArray *) allEntryIDs
|
||||
{
|
||||
NSMutableArray *ids;
|
||||
NSEnumerator *entries;
|
||||
NGLdapEntry *currentEntry;
|
||||
NGLdapConnection *ldapConnection;
|
||||
NSString *value;
|
||||
NSArray *attributes;
|
||||
NSMutableArray *ids;
|
||||
|
||||
#if defined(THREADSAFE)
|
||||
[lock lock];
|
||||
@@ -559,42 +541,29 @@ static NSLock *lock;
|
||||
|
||||
ids = [NSMutableArray array];
|
||||
|
||||
if ([self _initLDAPConnection])
|
||||
{
|
||||
NSArray *attributes;
|
||||
|
||||
attributes = [NSArray arrayWithObject: IDField];
|
||||
if ([_scope caseInsensitiveCompare: @"BASE"] == NSOrderedSame)
|
||||
entries = [ldapConnection baseSearchAtBaseDN: baseDN
|
||||
qualifier: nil
|
||||
attributes: attributes];
|
||||
else if ([_scope caseInsensitiveCompare: @"ONE"] == NSOrderedSame)
|
||||
entries = [ldapConnection flatSearchAtBaseDN: baseDN
|
||||
qualifier: nil
|
||||
attributes: attributes];
|
||||
else
|
||||
entries = [ldapConnection deepSearchAtBaseDN: baseDN
|
||||
qualifier: nil
|
||||
attributes: attributes];
|
||||
}
|
||||
ldapConnection = [self _ldapConnection];
|
||||
attributes = [NSArray arrayWithObject: IDField];
|
||||
if ([_scope caseInsensitiveCompare: @"BASE"] == NSOrderedSame)
|
||||
entries = [ldapConnection baseSearchAtBaseDN: baseDN
|
||||
qualifier: nil
|
||||
attributes: attributes];
|
||||
else if ([_scope caseInsensitiveCompare: @"ONE"] == NSOrderedSame)
|
||||
entries = [ldapConnection flatSearchAtBaseDN: baseDN
|
||||
qualifier: nil
|
||||
attributes: attributes];
|
||||
else
|
||||
entries = nil;
|
||||
entries = [ldapConnection deepSearchAtBaseDN: baseDN
|
||||
qualifier: nil
|
||||
attributes: attributes];
|
||||
|
||||
if (entries)
|
||||
while ((currentEntry = [entries nextObject]))
|
||||
{
|
||||
currentEntry = [entries nextObject];
|
||||
while (currentEntry)
|
||||
{
|
||||
value = [[currentEntry attributeWithName: IDField]
|
||||
value = [[currentEntry attributeWithName: IDField]
|
||||
stringValueAtIndex: 0];
|
||||
if ([value length] > 0)
|
||||
[ids addObject: value];
|
||||
currentEntry = [entries nextObject];
|
||||
}
|
||||
if ([value length] > 0)
|
||||
[ids addObject: value];
|
||||
}
|
||||
|
||||
[ldapConnection autorelease];
|
||||
|
||||
#if defined(THREADSAFE)
|
||||
[lock unlock];
|
||||
#endif
|
||||
@@ -744,9 +713,12 @@ static NSLock *lock;
|
||||
|
||||
- (NSArray *) fetchContactsMatching: (NSString *) match
|
||||
{
|
||||
NSMutableArray *contacts;
|
||||
NGLdapConnection *ldapConnection;
|
||||
NGLdapEntry *currentEntry;
|
||||
NSEnumerator *entries;
|
||||
NSMutableArray *contacts;
|
||||
EOQualifier *qualifier;
|
||||
NSArray *attributes;
|
||||
|
||||
#if defined(THREADSAFE)
|
||||
[lock lock];
|
||||
@@ -756,36 +728,25 @@ static NSLock *lock;
|
||||
|
||||
if ([match length] > 0)
|
||||
{
|
||||
if ([self _initLDAPConnection])
|
||||
{
|
||||
EOQualifier *qualifier;
|
||||
NSArray *attributes;
|
||||
|
||||
qualifier = [self _qualifierForFilter: match];
|
||||
attributes = [self _searchAttributes];
|
||||
ldapConnection = [self _ldapConnection];
|
||||
qualifier = [self _qualifierForFilter: match];
|
||||
attributes = [self _searchAttributes];
|
||||
|
||||
if ([_scope caseInsensitiveCompare: @"BASE"] == NSOrderedSame)
|
||||
entries = [ldapConnection baseSearchAtBaseDN: baseDN
|
||||
qualifier: qualifier
|
||||
attributes: attributes];
|
||||
else if ([_scope caseInsensitiveCompare: @"ONE"] == NSOrderedSame)
|
||||
entries = [ldapConnection flatSearchAtBaseDN: baseDN
|
||||
qualifier: qualifier
|
||||
attributes: attributes];
|
||||
else /* we do it like before */
|
||||
entries = [ldapConnection deepSearchAtBaseDN: baseDN
|
||||
qualifier: qualifier
|
||||
attributes: attributes];
|
||||
}
|
||||
else
|
||||
entries = nil;
|
||||
|
||||
if (entries)
|
||||
while ((currentEntry = [entries nextObject]))
|
||||
[contacts addObject:
|
||||
[self _convertLDAPEntryToContact: currentEntry]];
|
||||
|
||||
[ldapConnection release];
|
||||
if ([_scope caseInsensitiveCompare: @"BASE"] == NSOrderedSame)
|
||||
entries = [ldapConnection baseSearchAtBaseDN: baseDN
|
||||
qualifier: qualifier
|
||||
attributes: attributes];
|
||||
else if ([_scope caseInsensitiveCompare: @"ONE"] == NSOrderedSame)
|
||||
entries = [ldapConnection flatSearchAtBaseDN: baseDN
|
||||
qualifier: qualifier
|
||||
attributes: attributes];
|
||||
else /* we do it like before */
|
||||
entries = [ldapConnection deepSearchAtBaseDN: baseDN
|
||||
qualifier: qualifier
|
||||
attributes: attributes];
|
||||
while ((currentEntry = [entries nextObject]))
|
||||
[contacts addObject:
|
||||
[self _convertLDAPEntryToContact: currentEntry]];
|
||||
}
|
||||
|
||||
#if defined(THREADSAFE)
|
||||
@@ -797,8 +758,13 @@ static NSLock *lock;
|
||||
|
||||
- (NSDictionary *) lookupContactEntry: (NSString *) theID
|
||||
{
|
||||
NSDictionary *contactEntry;
|
||||
NGLdapEntry *ldapEntry;
|
||||
NGLdapConnection *ldapConnection;
|
||||
NSEnumerator *entries;
|
||||
EOQualifier *qualifier;
|
||||
NSArray *attributes;
|
||||
NSString *s;
|
||||
NSDictionary *contactEntry;
|
||||
|
||||
#if defined(THREADSAFE)
|
||||
[lock lock];
|
||||
@@ -808,40 +774,28 @@ static NSLock *lock;
|
||||
|
||||
if ([theID length] > 0)
|
||||
{
|
||||
if ([self _initLDAPConnection])
|
||||
{
|
||||
NSEnumerator *entries;
|
||||
EOQualifier *qualifier;
|
||||
NSArray *attributes;
|
||||
NSString *s;
|
||||
ldapConnection = [self _ldapConnection];
|
||||
s = [NSString stringWithFormat: @"(%@='%@')",
|
||||
IDField, SafeLDAPCriteria (theID)];
|
||||
qualifier = [EOQualifier qualifierWithQualifierFormat: s];
|
||||
attributes = [self _searchAttributes];
|
||||
|
||||
s = [NSString stringWithFormat: @"(%@='%@')",
|
||||
IDField, SafeLDAPCriteria (theID)];
|
||||
qualifier = [EOQualifier qualifierWithQualifierFormat: s];
|
||||
attributes = [self _searchAttributes];
|
||||
|
||||
if ([_scope caseInsensitiveCompare: @"BASE"] == NSOrderedSame)
|
||||
entries = [ldapConnection baseSearchAtBaseDN: baseDN
|
||||
qualifier: qualifier
|
||||
attributes: attributes];
|
||||
else if ([_scope caseInsensitiveCompare: @"ONE"] == NSOrderedSame)
|
||||
entries = [ldapConnection flatSearchAtBaseDN: baseDN
|
||||
qualifier: qualifier
|
||||
attributes: attributes];
|
||||
else
|
||||
entries = [ldapConnection deepSearchAtBaseDN: baseDN
|
||||
qualifier: qualifier
|
||||
attributes: attributes];
|
||||
|
||||
ldapEntry = [entries nextObject];
|
||||
}
|
||||
if ([_scope caseInsensitiveCompare: @"BASE"] == NSOrderedSame)
|
||||
entries = [ldapConnection baseSearchAtBaseDN: baseDN
|
||||
qualifier: qualifier
|
||||
attributes: attributes];
|
||||
else if ([_scope caseInsensitiveCompare: @"ONE"] == NSOrderedSame)
|
||||
entries = [ldapConnection flatSearchAtBaseDN: baseDN
|
||||
qualifier: qualifier
|
||||
attributes: attributes];
|
||||
else
|
||||
ldapEntry = nil;
|
||||
|
||||
if (ldapEntry)
|
||||
contactEntry = [self _convertLDAPEntryToContact: ldapEntry];
|
||||
entries = [ldapConnection deepSearchAtBaseDN: baseDN
|
||||
qualifier: qualifier
|
||||
attributes: attributes];
|
||||
|
||||
[ldapConnection autorelease];
|
||||
ldapEntry = [entries nextObject];
|
||||
if (ldapEntry)
|
||||
contactEntry = [self _convertLDAPEntryToContact: ldapEntry];
|
||||
}
|
||||
|
||||
#if defined(THREADSAFE)
|
||||
@@ -853,8 +807,12 @@ static NSLock *lock;
|
||||
|
||||
- (NSDictionary *) lookupContactEntryWithUIDorEmail: (NSString *) uid
|
||||
{
|
||||
NSDictionary *contactEntry;
|
||||
NGLdapConnection *ldapConnection;
|
||||
NGLdapEntry *ldapEntry;
|
||||
NSEnumerator *entries;
|
||||
EOQualifier *qualifier;
|
||||
NSArray *attributes;
|
||||
NSDictionary *contactEntry;
|
||||
|
||||
#if defined(THREADSAFE)
|
||||
[lock lock];
|
||||
@@ -864,37 +822,26 @@ static NSLock *lock;
|
||||
|
||||
if ([uid length] > 0)
|
||||
{
|
||||
if ([self _initLDAPConnection])
|
||||
{
|
||||
NSEnumerator *entries;
|
||||
EOQualifier *qualifier;
|
||||
NSArray *attributes;
|
||||
|
||||
qualifier = [self _qualifierForUIDFilter: uid];
|
||||
attributes = [self _searchAttributes];
|
||||
ldapConnection = [self _ldapConnection];
|
||||
qualifier = [self _qualifierForUIDFilter: uid];
|
||||
attributes = [self _searchAttributes];
|
||||
|
||||
if ([_scope caseInsensitiveCompare: @"BASE"] == NSOrderedSame)
|
||||
entries = [ldapConnection baseSearchAtBaseDN: baseDN
|
||||
qualifier: qualifier
|
||||
attributes: attributes];
|
||||
else if ([_scope caseInsensitiveCompare: @"ONE"] == NSOrderedSame)
|
||||
entries = [ldapConnection flatSearchAtBaseDN: baseDN
|
||||
qualifier: qualifier
|
||||
attributes: attributes];
|
||||
else
|
||||
entries = [ldapConnection deepSearchAtBaseDN: baseDN
|
||||
qualifier: qualifier
|
||||
attributes: attributes];
|
||||
|
||||
ldapEntry = [entries nextObject];
|
||||
}
|
||||
if ([_scope caseInsensitiveCompare: @"BASE"] == NSOrderedSame)
|
||||
entries = [ldapConnection baseSearchAtBaseDN: baseDN
|
||||
qualifier: qualifier
|
||||
attributes: attributes];
|
||||
else if ([_scope caseInsensitiveCompare: @"ONE"] == NSOrderedSame)
|
||||
entries = [ldapConnection flatSearchAtBaseDN: baseDN
|
||||
qualifier: qualifier
|
||||
attributes: attributes];
|
||||
else
|
||||
ldapEntry = nil;
|
||||
|
||||
entries = [ldapConnection deepSearchAtBaseDN: baseDN
|
||||
qualifier: qualifier
|
||||
attributes: attributes];
|
||||
|
||||
ldapEntry = [entries nextObject];
|
||||
if (ldapEntry)
|
||||
contactEntry = [self _convertLDAPEntryToContact: ldapEntry];
|
||||
|
||||
[ldapConnection release];
|
||||
contactEntry = [self _convertLDAPEntryToContact: ldapEntry];
|
||||
}
|
||||
|
||||
#if defined(THREADSAFE)
|
||||
@@ -906,19 +853,18 @@ static NSLock *lock;
|
||||
|
||||
- (NSString *) lookupLoginByDN: (NSString *) theDN
|
||||
{
|
||||
NGLdapConnection *ldapConnection;
|
||||
NGLdapEntry *entry;
|
||||
NSString *login;
|
||||
|
||||
login = nil;
|
||||
if ([self _initLDAPConnection])
|
||||
{
|
||||
entry = [ldapConnection entryAtDN: theDN
|
||||
attributes: [NSArray arrayWithObject: UIDField]];
|
||||
if (entry)
|
||||
login = [[entry attributeWithName: UIDField] stringValueAtIndex: 0];
|
||||
[ldapConnection autorelease];
|
||||
}
|
||||
|
||||
|
||||
ldapConnection = [self _ldapConnection];
|
||||
entry = [ldapConnection entryAtDN: theDN
|
||||
attributes: [NSArray arrayWithObject: UIDField]];
|
||||
if (entry)
|
||||
login = [[entry attributeWithName: UIDField] stringValueAtIndex: 0];
|
||||
|
||||
return login;
|
||||
}
|
||||
|
||||
@@ -939,52 +885,50 @@ static NSLock *lock;
|
||||
- (NGLdapEntry *) lookupGroupEntryByAttribute: (NSString *) theAttribute
|
||||
andValue: (NSString *) theValue
|
||||
{
|
||||
NSMutableArray *attributes;
|
||||
NSEnumerator *entries;
|
||||
EOQualifier *qualifier;
|
||||
NSString *s;
|
||||
NGLdapConnection *ldapConnection;
|
||||
NGLdapEntry *ldapEntry;
|
||||
|
||||
#if defined(THREADSAFE)
|
||||
[lock lock];
|
||||
#endif
|
||||
|
||||
ldapEntry = nil;
|
||||
|
||||
if ([theValue length] > 0)
|
||||
{
|
||||
if ([self _initLDAPConnection])
|
||||
{
|
||||
NSMutableArray *attributes;
|
||||
NSEnumerator *entries;
|
||||
EOQualifier *qualifier;
|
||||
NSString *s;
|
||||
ldapConnection = [self _ldapConnection];
|
||||
|
||||
s = [NSString stringWithFormat: @"(%@='%@')",
|
||||
theAttribute, SafeLDAPCriteria (theValue)];
|
||||
qualifier = [EOQualifier qualifierWithQualifierFormat: s];
|
||||
s = [NSString stringWithFormat: @"(%@='%@')",
|
||||
theAttribute, SafeLDAPCriteria (theValue)];
|
||||
qualifier = [EOQualifier qualifierWithQualifierFormat: s];
|
||||
|
||||
// We look for additional attributes - the ones related to group membership
|
||||
attributes = [NSMutableArray arrayWithArray: [self _searchAttributes]];
|
||||
[attributes addObject: @"member"];
|
||||
[attributes addObject: @"uniqueMember"];
|
||||
[attributes addObject: @"memberUid"];
|
||||
[attributes addObject: @"memberOf"];
|
||||
// We look for additional attributes - the ones related to group
|
||||
// membership
|
||||
attributes = [NSMutableArray arrayWithArray: [self _searchAttributes]];
|
||||
[attributes addObject: @"member"];
|
||||
[attributes addObject: @"uniqueMember"];
|
||||
[attributes addObject: @"memberUid"];
|
||||
[attributes addObject: @"memberOf"];
|
||||
|
||||
if ([_scope caseInsensitiveCompare: @"BASE"] == NSOrderedSame)
|
||||
entries = [ldapConnection baseSearchAtBaseDN: baseDN
|
||||
qualifier: qualifier
|
||||
attributes: attributes];
|
||||
else if ([_scope caseInsensitiveCompare: @"ONE"] == NSOrderedSame)
|
||||
entries = [ldapConnection flatSearchAtBaseDN: baseDN
|
||||
qualifier: qualifier
|
||||
attributes: attributes];
|
||||
else
|
||||
entries = [ldapConnection deepSearchAtBaseDN: baseDN
|
||||
qualifier: qualifier
|
||||
attributes: attributes];
|
||||
|
||||
ldapEntry = [entries nextObject];
|
||||
}
|
||||
|
||||
[ldapConnection autorelease];
|
||||
if ([_scope caseInsensitiveCompare: @"BASE"] == NSOrderedSame)
|
||||
entries = [ldapConnection baseSearchAtBaseDN: baseDN
|
||||
qualifier: qualifier
|
||||
attributes: attributes];
|
||||
else if ([_scope caseInsensitiveCompare: @"ONE"] == NSOrderedSame)
|
||||
entries = [ldapConnection flatSearchAtBaseDN: baseDN
|
||||
qualifier: qualifier
|
||||
attributes: attributes];
|
||||
else
|
||||
entries = [ldapConnection deepSearchAtBaseDN: baseDN
|
||||
qualifier: qualifier
|
||||
attributes: attributes];
|
||||
|
||||
ldapEntry = [entries nextObject];
|
||||
}
|
||||
else
|
||||
ldapEntry = nil;
|
||||
|
||||
#if defined(THREADSAFE)
|
||||
[lock unlock];
|
||||
|
||||
Reference in New Issue
Block a user