now possible to configure objectClass names for LDAP groups using GroupObjectClasses (#1499)

pull/75/merge
Ludovic Marcotte 2015-03-24 08:40:13 -04:00
parent d75fb0722a
commit 097d5c2333
6 changed files with 45 additions and 17 deletions

View File

@ -1048,6 +1048,11 @@ of supported attributes.
user addressbooks (see _abOU_ below), this list of object classes will
be applied to new records as they are created.
|GroupObjectClasses
|A list (array) of names identifying groups within the LDAP source. If not
set, SOGo will use `group`, `groupofnames`, `groupofuniquenames`
and `posixgroup`.
|modifiers
|A list (array) of usernames that are authorized to perform
modifications to the address book defined by this LDAP source.

1
NEWS
View File

@ -6,6 +6,7 @@ Enhancements
- immediately delete mails from EAS clients when they are marked as deleted on the IMAP server
- now favor login@domain as the default email address if multiple mail: fields are specified
- enable by default HTML mails support using EAS on Windows and BB phones
- now possible to configure objectClass names for LDAP groups using GroupObjectClasses (#1499)
Bug fixes
- fixed login issue after password change (#2601)

View File

@ -72,6 +72,7 @@
NSDictionary *contactMapping;
NSArray *contactObjectClasses;
NSArray *groupObjectClasses;
NSDictionary *modulesConstraints;
@ -106,6 +107,7 @@
UIDField: (NSString *) newUIDField
mailFields: (NSArray *) newMailFields
searchFields: (NSArray *) newSearchFields
groupObjectClasses: (NSArray *) newGroupObjectClasses
IMAPHostField: (NSString *) newIMAPHostField
IMAPLoginField: (NSString *) newIMAPLoginField
SieveHostField: (NSString *) newSieveHostField

View File

@ -101,6 +101,8 @@ static Class NSStringK;
contactMapping = nil;
searchFields = [NSArray arrayWithObjects: @"sn", @"displayname", @"telephonenumber", nil];
[searchFields retain];
groupObjectClasses = [NSArray arrayWithObjects: @"group", @"groupofnames", @"groupofuniquenames", @"posixgroup", nil];
[groupObjectClasses retain];
IMAPHostField = nil;
IMAPLoginField = nil;
SieveHostField = nil;
@ -144,6 +146,7 @@ static Class NSStringK;
[contactMapping release];
[mailFields release];
[searchFields release];
[groupObjectClasses release];
[IMAPHostField release];
[IMAPLoginField release];
[SieveHostField release];
@ -189,6 +192,7 @@ static Class NSStringK;
UIDField: [udSource objectForKey: @"UIDFieldName"]
mailFields: [udSource objectForKey: @"MailFieldNames"]
searchFields: [udSource objectForKey: @"SearchFieldNames"]
groupObjectClasses: [udSource objectForKey: @"GroupObjectClasses"]
IMAPHostField: [udSource objectForKey: @"IMAPHostFieldName"]
IMAPLoginField: [udSource objectForKey: @"IMAPLoginFieldName"]
SieveHostField: [udSource objectForKey: @"SieveHostFieldName"]
@ -310,6 +314,7 @@ static Class NSStringK;
UIDField: (NSString *) newUIDField
mailFields: (NSArray *) newMailFields
searchFields: (NSArray *) newSearchFields
groupObjectClasses: (NSArray *) newGroupObjectClasses
IMAPHostField: (NSString *) newIMAPHostField
IMAPLoginField: (NSString *) newIMAPLoginField
SieveHostField: (NSString *) newSieveHostField
@ -334,6 +339,8 @@ static Class NSStringK;
ASSIGN(mailFields, newMailFields);
if (newSearchFields)
ASSIGN(searchFields, newSearchFields);
if (newGroupObjectClasses)
ASSIGN(groupObjectClasses, newGroupObjectClasses);
if (newBindFields)
{
// Before SOGo v1.2.0, bindFields was a comma-separated list
@ -1031,6 +1038,8 @@ static Class NSStringK;
NSString *value;
static NSArray *resourceKinds = nil;
NSMutableArray *classes;
NSEnumerator *gclasses;
NSString *gclass;
id o;
if (!resourceKinds)
@ -1059,24 +1068,27 @@ static Class NSStringK;
if (classes)
{
// We check if our entry is a group. If so, we set the
// 'isGroup' custom attribute.
if ([classes containsObject: @"group"] ||
[classes containsObject: @"groupofnames"] ||
[classes containsObject: @"groupofuniquenames"] ||
[classes containsObject: @"posixgroup"])
{
[ldifRecord setObject: [NSNumber numberWithInt: 1]
forKey: @"isGroup"];
}
// We check if our entry is a resource. We also support
// determining resources based on the KindFieldName attribute
// value - see below.
else if ([classes containsObject: @"calendarresource"])
if ([classes containsObject: @"calendarresource"])
{
[ldifRecord setObject: [NSNumber numberWithInt: 1]
forKey: @"isResource"];
}
else
{
// We check if our entry is a group. If so, we set the
// 'isGroup' custom attribute.
gclasses = [groupObjectClasses objectEnumerator];
while (gclass = [gclasses nextObject])
if ([classes containsObject: [gclass lowercaseString]])
{
[ldifRecord setObject: [NSNumber numberWithInt: 1]
forKey: @"isGroup"];
break;
}
}
}
// We check if that entry corresponds to a resource. For this,
@ -1368,6 +1380,11 @@ static Class NSStringK;
return modifiers;
}
- (NSArray *) groupObjectClasses
{
return groupObjectClasses;
}
static NSArray *
_convertRecordToLDAPAttributes (LDAPSourceSchema *schema, NSDictionary *ldifRecord)
{
@ -1683,6 +1700,7 @@ _makeLDAPChanges (NGLdapConnection *ldapConnection,
UIDField: @"cn"
mailFields: nil
searchFields: nil
groupObjectClasses: nil
IMAPHostField: nil
IMAPLoginField: nil
SieveHostField: nil

View File

@ -137,6 +137,8 @@
NGLdapEntry *entry;
NSObject <SOGoSource> *source;
id o;
NSEnumerator *gclasses;
NSString *gclass;
int i;
@ -194,12 +196,11 @@
}
}
// Found a group, let's return it.
if ([classes containsObject: @"group"] ||
[classes containsObject: @"groupofnames"] ||
[classes containsObject: @"groupofuniquenames"] ||
[classes containsObject: @"posixgroup"])
{
gclasses = [[source groupObjectClasses] objectEnumerator];
while (gclass = [gclasses nextObject])
if ([classes containsObject: gclass])
{
// Found a group, let's return it.
o = [[self alloc] initWithIdentifier: theValue
domain: domain
source: source

View File

@ -110,6 +110,7 @@
- (NSString *) baseDN;
- (NSString *) MSExchangeHostname;
- (NSArray *) groupObjectClasses;
@end
#endif /* SOGOSOURCE_H */