diff --git a/ChangeLog b/ChangeLog index 2c0a73997..510b855e5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2009-03-16 Ludovic Marcotte + + * SoObjects/SOGo/LDAPSource.m: We now support + the specification of a filter. Also updated + the installation guide to document this new parameter + * sogo.spec: Modified so that we use our tmpwatch + script from /etc/cron.daily + 2009-03-16 Francis Lachapelle * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions diff --git a/Documentation/SOGo Installation Guide.odt b/Documentation/SOGo Installation Guide.odt index d32108fc1..e7174aa70 100644 Binary files a/Documentation/SOGo Installation Guide.odt and b/Documentation/SOGo Installation Guide.odt differ diff --git a/SoObjects/SOGo/LDAPSource.h b/SoObjects/SOGo/LDAPSource.h index e1db2396f..77532b722 100644 --- a/SoObjects/SOGo/LDAPSource.h +++ b/SoObjects/SOGo/LDAPSource.h @@ -1,6 +1,6 @@ /* LDAPSource.h - this file is part of SOGo * - * Copyright (C) 2007 Inverse inc. + * Copyright (C) 2007-2009 Inverse inc. * * Author: Wolfgang Sourdeau * @@ -36,6 +36,7 @@ NSString *hostname; unsigned int port; NSString *password; + NSString *_filter; NSString *baseDN; NSString *IDField; /* the first part of a user DN */ diff --git a/SoObjects/SOGo/LDAPSource.m b/SoObjects/SOGo/LDAPSource.m index 97c185c79..53037c525 100644 --- a/SoObjects/SOGo/LDAPSource.m +++ b/SoObjects/SOGo/LDAPSource.m @@ -1,6 +1,6 @@ /* LDAPSource.m - this file is part of SOGo * - * Copyright (C) 2007-2008 Inverse inc. + * Copyright (C) 2007-2009 Inverse inc. * * Author: Wolfgang Sourdeau * @@ -165,6 +165,7 @@ static NSLock *lock; mailFields = [NSArray arrayWithObject: @"mail"]; [mailFields retain]; bindFields = nil; + _filter = nil; ldapConnection = nil; searchAttributes = nil; @@ -184,6 +185,7 @@ static NSLock *lock; [UIDField release]; [mailFields release]; [bindFields release]; + [_filter release]; [ldapConnection release]; [sourceID release]; [modulesConstraints release]; @@ -206,7 +208,8 @@ static NSLock *lock; UIDField: [udSource objectForKey: @"UIDFieldName"] mailFields: [udSource objectForKey: @"MailFieldNames"] andBindFields: [udSource objectForKey: @"bindFields"]]; - ASSIGN (modulesConstraints, [udSource objectForKey: @"ModulesConstraints"]); + ASSIGN(modulesConstraints, [udSource objectForKey: @"ModulesConstraints"]); + ASSIGN(_filter, [udSource objectForKey: @"filter"]); return self; } @@ -282,7 +285,11 @@ static NSLock *lock; fields = [[bindFields componentsSeparatedByString: @","] objectEnumerator]; while ((currentField = [fields nextObject])) [qs appendFormat: @" OR (%@='%@')", currentField, uid]; - [qs deleteCharactersInRange: NSMakeRange (0, 4)]; + + if (_filter && [_filter length]) + [qs appendFormat: @" AND %@", _filter]; + + [qs deleteCharactersInRange: NSMakeRange(0, 4)]; return [EOQualifier qualifierWithQualifierFormat: qs]; } @@ -360,25 +367,30 @@ static NSLock *lock; /* contact management */ - (EOQualifier *) _qualifierForFilter: (NSString *) filter { - NSString *qs, *mailFormat, *fieldFormat; + NSString *mailFormat, *fieldFormat; EOQualifier *qualifier; - + NSMutableString *qs; + fieldFormat = [NSString stringWithFormat: @"(%%@='%@*')", filter]; mailFormat = [[mailFields stringsWithFormat: fieldFormat] componentsJoinedByString: @" OR "]; + qs = [NSMutableString string]; if ([filter length] > 0) { if ([filter isEqualToString: @"."]) - qs = @"(cn='*')"; + [qs appendFormat: @"(%@='*')", CNField]; else - qs = [NSString stringWithFormat: - @"(cn='%@*')" - @"OR (sn='%@*')" - @"OR (displayName='%@*')" - @"OR %@" - @"OR (telephoneNumber='*%@*')", - filter, filter, filter, mailFormat, filter]; + [qs appendFormat: @"(%@='%@*')" + @"OR (sn='%@*')" + @"OR (displayName='%@*')" + @"OR %@" + @"OR (telephoneNumber='*%@*')", + CNField, filter, filter, filter, mailFormat, filter]; + + if (_filter && [_filter length]) + [qs appendFormat: @" AND %@", _filter]; + qualifier = [EOQualifier qualifierWithQualifierFormat: qs]; } else @@ -389,13 +401,18 @@ static NSLock *lock; - (EOQualifier *) _qualifierForUIDFilter: (NSString *) uid { - NSString *qs, *mailFormat, *fieldFormat; + NSString *mailFormat, *fieldFormat; + NSMutableString *qs; fieldFormat = [NSString stringWithFormat: @"(%%@='%@')", uid]; mailFormat = [[mailFields stringsWithFormat: fieldFormat] componentsJoinedByString: @" OR "]; - qs = [NSString stringWithFormat: (@"(%@='%@') OR %@"), - UIDField, uid, mailFormat]; + qs = [NSMutableString string]; + + [qs appendFormat: (@"(%@='%@') OR %@"), UIDField, uid, mailFormat]; + + if (_filter && [_filter length]) + [qs appendFormat: @" AND %@", _filter]; return [EOQualifier qualifierWithQualifierFormat: qs]; } diff --git a/sogo.spec b/sogo.spec index 6d181c9b7..e19e87c3d 100644 --- a/sogo.spec +++ b/sogo.spec @@ -129,12 +129,14 @@ make DESTDIR=${RPM_BUILD_ROOT} \ CC="$cc" LDFLAGS="$ldflags" \ install mkdir -p ${RPM_BUILD_ROOT}/etc/init.d +mkdir -p ${RPM_BUILD_ROOT}/etc/cron.daily mkdir -p ${RPM_BUILD_ROOT}/etc/httpd/conf.d mkdir -p ${RPM_BUILD_ROOT}/usr/sbin mkdir -p ${RPM_BUILD_ROOT}/var/run/sogo mkdir -p ${RPM_BUILD_ROOT}/var/log/sogo mkdir -p ${RPM_BUILD_ROOT}/var/spool/sogo cp Apache/SOGo.conf ${RPM_BUILD_ROOT}/etc/httpd/conf.d/ +cp Scripts/tmpwatch ${RPM_BUILD_ROOT}/etc/cron.daily/sogo-tmpwatch cp Scripts/sogo-init.d-redhat ${RPM_BUILD_ROOT}/etc/init.d/sogod cp Scripts/sogod-wrapper ${RPM_BUILD_ROOT}/usr/sbin/sogod rm -rf ${RPM_BUILD_ROOT}%{prefix}/Tools/test_quick_extract @@ -148,6 +150,7 @@ rm -fr ${RPM_BUILD_ROOT} %defattr(-,root,root,-) /etc/init.d/sogod +/etc/cron.daily/sogo-tmpwatch /usr/sbin/sogod /var/run/sogo /var/log/sogo