now possible to configure objectClass names for LDAP groups using GroupObjectClasses (#1499)
parent
d75fb0722a
commit
097d5c2333
|
@ -1048,6 +1048,11 @@ of supported attributes.
|
||||||
user addressbooks (see _abOU_ below), this list of object classes will
|
user addressbooks (see _abOU_ below), this list of object classes will
|
||||||
be applied to new records as they are created.
|
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
|
|modifiers
|
||||||
|A list (array) of usernames that are authorized to perform
|
|A list (array) of usernames that are authorized to perform
|
||||||
modifications to the address book defined by this LDAP source.
|
modifications to the address book defined by this LDAP source.
|
||||||
|
|
1
NEWS
1
NEWS
|
@ -6,6 +6,7 @@ Enhancements
|
||||||
- immediately delete mails from EAS clients when they are marked as deleted on the IMAP server
|
- 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
|
- 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
|
- 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
|
Bug fixes
|
||||||
- fixed login issue after password change (#2601)
|
- fixed login issue after password change (#2601)
|
||||||
|
|
|
@ -72,6 +72,7 @@
|
||||||
|
|
||||||
NSDictionary *contactMapping;
|
NSDictionary *contactMapping;
|
||||||
NSArray *contactObjectClasses;
|
NSArray *contactObjectClasses;
|
||||||
|
NSArray *groupObjectClasses;
|
||||||
|
|
||||||
NSDictionary *modulesConstraints;
|
NSDictionary *modulesConstraints;
|
||||||
|
|
||||||
|
@ -106,6 +107,7 @@
|
||||||
UIDField: (NSString *) newUIDField
|
UIDField: (NSString *) newUIDField
|
||||||
mailFields: (NSArray *) newMailFields
|
mailFields: (NSArray *) newMailFields
|
||||||
searchFields: (NSArray *) newSearchFields
|
searchFields: (NSArray *) newSearchFields
|
||||||
|
groupObjectClasses: (NSArray *) newGroupObjectClasses
|
||||||
IMAPHostField: (NSString *) newIMAPHostField
|
IMAPHostField: (NSString *) newIMAPHostField
|
||||||
IMAPLoginField: (NSString *) newIMAPLoginField
|
IMAPLoginField: (NSString *) newIMAPLoginField
|
||||||
SieveHostField: (NSString *) newSieveHostField
|
SieveHostField: (NSString *) newSieveHostField
|
||||||
|
|
|
@ -101,6 +101,8 @@ static Class NSStringK;
|
||||||
contactMapping = nil;
|
contactMapping = nil;
|
||||||
searchFields = [NSArray arrayWithObjects: @"sn", @"displayname", @"telephonenumber", nil];
|
searchFields = [NSArray arrayWithObjects: @"sn", @"displayname", @"telephonenumber", nil];
|
||||||
[searchFields retain];
|
[searchFields retain];
|
||||||
|
groupObjectClasses = [NSArray arrayWithObjects: @"group", @"groupofnames", @"groupofuniquenames", @"posixgroup", nil];
|
||||||
|
[groupObjectClasses retain];
|
||||||
IMAPHostField = nil;
|
IMAPHostField = nil;
|
||||||
IMAPLoginField = nil;
|
IMAPLoginField = nil;
|
||||||
SieveHostField = nil;
|
SieveHostField = nil;
|
||||||
|
@ -144,6 +146,7 @@ static Class NSStringK;
|
||||||
[contactMapping release];
|
[contactMapping release];
|
||||||
[mailFields release];
|
[mailFields release];
|
||||||
[searchFields release];
|
[searchFields release];
|
||||||
|
[groupObjectClasses release];
|
||||||
[IMAPHostField release];
|
[IMAPHostField release];
|
||||||
[IMAPLoginField release];
|
[IMAPLoginField release];
|
||||||
[SieveHostField release];
|
[SieveHostField release];
|
||||||
|
@ -189,6 +192,7 @@ static Class NSStringK;
|
||||||
UIDField: [udSource objectForKey: @"UIDFieldName"]
|
UIDField: [udSource objectForKey: @"UIDFieldName"]
|
||||||
mailFields: [udSource objectForKey: @"MailFieldNames"]
|
mailFields: [udSource objectForKey: @"MailFieldNames"]
|
||||||
searchFields: [udSource objectForKey: @"SearchFieldNames"]
|
searchFields: [udSource objectForKey: @"SearchFieldNames"]
|
||||||
|
groupObjectClasses: [udSource objectForKey: @"GroupObjectClasses"]
|
||||||
IMAPHostField: [udSource objectForKey: @"IMAPHostFieldName"]
|
IMAPHostField: [udSource objectForKey: @"IMAPHostFieldName"]
|
||||||
IMAPLoginField: [udSource objectForKey: @"IMAPLoginFieldName"]
|
IMAPLoginField: [udSource objectForKey: @"IMAPLoginFieldName"]
|
||||||
SieveHostField: [udSource objectForKey: @"SieveHostFieldName"]
|
SieveHostField: [udSource objectForKey: @"SieveHostFieldName"]
|
||||||
|
@ -310,6 +314,7 @@ static Class NSStringK;
|
||||||
UIDField: (NSString *) newUIDField
|
UIDField: (NSString *) newUIDField
|
||||||
mailFields: (NSArray *) newMailFields
|
mailFields: (NSArray *) newMailFields
|
||||||
searchFields: (NSArray *) newSearchFields
|
searchFields: (NSArray *) newSearchFields
|
||||||
|
groupObjectClasses: (NSArray *) newGroupObjectClasses
|
||||||
IMAPHostField: (NSString *) newIMAPHostField
|
IMAPHostField: (NSString *) newIMAPHostField
|
||||||
IMAPLoginField: (NSString *) newIMAPLoginField
|
IMAPLoginField: (NSString *) newIMAPLoginField
|
||||||
SieveHostField: (NSString *) newSieveHostField
|
SieveHostField: (NSString *) newSieveHostField
|
||||||
|
@ -334,6 +339,8 @@ static Class NSStringK;
|
||||||
ASSIGN(mailFields, newMailFields);
|
ASSIGN(mailFields, newMailFields);
|
||||||
if (newSearchFields)
|
if (newSearchFields)
|
||||||
ASSIGN(searchFields, newSearchFields);
|
ASSIGN(searchFields, newSearchFields);
|
||||||
|
if (newGroupObjectClasses)
|
||||||
|
ASSIGN(groupObjectClasses, newGroupObjectClasses);
|
||||||
if (newBindFields)
|
if (newBindFields)
|
||||||
{
|
{
|
||||||
// Before SOGo v1.2.0, bindFields was a comma-separated list
|
// Before SOGo v1.2.0, bindFields was a comma-separated list
|
||||||
|
@ -1031,6 +1038,8 @@ static Class NSStringK;
|
||||||
NSString *value;
|
NSString *value;
|
||||||
static NSArray *resourceKinds = nil;
|
static NSArray *resourceKinds = nil;
|
||||||
NSMutableArray *classes;
|
NSMutableArray *classes;
|
||||||
|
NSEnumerator *gclasses;
|
||||||
|
NSString *gclass;
|
||||||
id o;
|
id o;
|
||||||
|
|
||||||
if (!resourceKinds)
|
if (!resourceKinds)
|
||||||
|
@ -1059,24 +1068,27 @@ static Class NSStringK;
|
||||||
|
|
||||||
if (classes)
|
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
|
// We check if our entry is a resource. We also support
|
||||||
// determining resources based on the KindFieldName attribute
|
// determining resources based on the KindFieldName attribute
|
||||||
// value - see below.
|
// value - see below.
|
||||||
else if ([classes containsObject: @"calendarresource"])
|
if ([classes containsObject: @"calendarresource"])
|
||||||
{
|
{
|
||||||
[ldifRecord setObject: [NSNumber numberWithInt: 1]
|
[ldifRecord setObject: [NSNumber numberWithInt: 1]
|
||||||
forKey: @"isResource"];
|
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,
|
// We check if that entry corresponds to a resource. For this,
|
||||||
|
@ -1368,6 +1380,11 @@ static Class NSStringK;
|
||||||
return modifiers;
|
return modifiers;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (NSArray *) groupObjectClasses
|
||||||
|
{
|
||||||
|
return groupObjectClasses;
|
||||||
|
}
|
||||||
|
|
||||||
static NSArray *
|
static NSArray *
|
||||||
_convertRecordToLDAPAttributes (LDAPSourceSchema *schema, NSDictionary *ldifRecord)
|
_convertRecordToLDAPAttributes (LDAPSourceSchema *schema, NSDictionary *ldifRecord)
|
||||||
{
|
{
|
||||||
|
@ -1683,6 +1700,7 @@ _makeLDAPChanges (NGLdapConnection *ldapConnection,
|
||||||
UIDField: @"cn"
|
UIDField: @"cn"
|
||||||
mailFields: nil
|
mailFields: nil
|
||||||
searchFields: nil
|
searchFields: nil
|
||||||
|
groupObjectClasses: nil
|
||||||
IMAPHostField: nil
|
IMAPHostField: nil
|
||||||
IMAPLoginField: nil
|
IMAPLoginField: nil
|
||||||
SieveHostField: nil
|
SieveHostField: nil
|
||||||
|
|
|
@ -137,6 +137,8 @@
|
||||||
NGLdapEntry *entry;
|
NGLdapEntry *entry;
|
||||||
NSObject <SOGoSource> *source;
|
NSObject <SOGoSource> *source;
|
||||||
id o;
|
id o;
|
||||||
|
NSEnumerator *gclasses;
|
||||||
|
NSString *gclass;
|
||||||
|
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
@ -194,12 +196,11 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Found a group, let's return it.
|
gclasses = [[source groupObjectClasses] objectEnumerator];
|
||||||
if ([classes containsObject: @"group"] ||
|
while (gclass = [gclasses nextObject])
|
||||||
[classes containsObject: @"groupofnames"] ||
|
if ([classes containsObject: gclass])
|
||||||
[classes containsObject: @"groupofuniquenames"] ||
|
{
|
||||||
[classes containsObject: @"posixgroup"])
|
// Found a group, let's return it.
|
||||||
{
|
|
||||||
o = [[self alloc] initWithIdentifier: theValue
|
o = [[self alloc] initWithIdentifier: theValue
|
||||||
domain: domain
|
domain: domain
|
||||||
source: source
|
source: source
|
||||||
|
|
|
@ -110,6 +110,7 @@
|
||||||
- (NSString *) baseDN;
|
- (NSString *) baseDN;
|
||||||
- (NSString *) MSExchangeHostname;
|
- (NSString *) MSExchangeHostname;
|
||||||
|
|
||||||
|
- (NSArray *) groupObjectClasses;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
#endif /* SOGOSOURCE_H */
|
#endif /* SOGOSOURCE_H */
|
||||||
|
|
Loading…
Reference in New Issue