oc: Fix internal EntryIds properties on multidomain
PidTag*EntryId properties were not being generated (which contain the email address and so on). Functionality on Outlook clients like "Reply All" were not working because of this (probably a lot more stuff related with email addresses). With multidomain support enabled outlook clients will use full email address (e.g. user@domain.com) as login. This change is needed because we were performing ldap queries on samdb using (sAMAccountName=UIDFieldName), being UIDFieldName the parameter configured in sogo.conf for that source. In multidomain environment this field could be `sAMAccountName` but it could not. Actually the more logical scenario will be to use `uid` field here (which will be just `user`, without the `@domain.com` part). SOGoUserManager will return `sAMAccountName` if the contact has it (in Outlook environment that means always) so it can (and must) be used to query samdb in MAPIStoreSamDBUtils properly. TL;DR: use sAMAccoutName instead of uid to query samdbpull/79/head^2
parent
a8e8ec535a
commit
0f432b654f
|
@ -264,7 +264,7 @@ static NSCharacterSet *hexCharacterSet = nil;
|
||||||
|
|
||||||
if (contactInfos)
|
if (contactInfos)
|
||||||
{
|
{
|
||||||
username = [contactInfos objectForKey: @"c_uid"];
|
username = [contactInfos objectForKey: @"sAMAccountName"];
|
||||||
recipient->username = [username asUnicodeInMemCtx: msgData];
|
recipient->username = [username asUnicodeInMemCtx: msgData];
|
||||||
entryId = MAPIStoreInternalEntryId (connInfo->sam_ctx, username);
|
entryId = MAPIStoreInternalEntryId (connInfo->sam_ctx, username);
|
||||||
}
|
}
|
||||||
|
@ -365,7 +365,7 @@ static NSCharacterSet *hexCharacterSet = nil;
|
||||||
|
|
||||||
if (contactInfos)
|
if (contactInfos)
|
||||||
{
|
{
|
||||||
username = [contactInfos objectForKey: @"c_uid"];
|
username = [contactInfos objectForKey: @"sAMAccountName"];
|
||||||
recipient->username = [username asUnicodeInMemCtx: msgData];
|
recipient->username = [username asUnicodeInMemCtx: msgData];
|
||||||
entryId = MAPIStoreInternalEntryId (connInfo->sam_ctx, username);
|
entryId = MAPIStoreInternalEntryId (connInfo->sam_ctx, username);
|
||||||
}
|
}
|
||||||
|
@ -931,7 +931,7 @@ static NSCharacterSet *hexCharacterSet = nil;
|
||||||
contactInfos = [mgr contactInfosForUserWithUIDorEmail: email];
|
contactInfos = [mgr contactInfosForUserWithUIDorEmail: email];
|
||||||
if (contactInfos)
|
if (contactInfos)
|
||||||
{
|
{
|
||||||
username = [contactInfos objectForKey: @"c_uid"];
|
username = [contactInfos objectForKey: @"sAMAccountName"];
|
||||||
entryId = MAPIStoreInternalEntryId (connInfo->sam_ctx, username);
|
entryId = MAPIStoreInternalEntryId (connInfo->sam_ctx, username);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -803,7 +803,7 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
|
||||||
contactInfos = [mgr contactInfosForUserWithUIDorEmail: email];
|
contactInfos = [mgr contactInfosForUserWithUIDorEmail: email];
|
||||||
if (contactInfos)
|
if (contactInfos)
|
||||||
{
|
{
|
||||||
username = [contactInfos objectForKey: @"c_uid"];
|
username = [contactInfos objectForKey: @"sAMAccountName"];
|
||||||
samCtx = [[self context] connectionInfo]->sam_ctx;
|
samCtx = [[self context] connectionInfo]->sam_ctx;
|
||||||
entryId = MAPIStoreInternalEntryId (samCtx, username);
|
entryId = MAPIStoreInternalEntryId (samCtx, username);
|
||||||
}
|
}
|
||||||
|
@ -1504,7 +1504,7 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
|
||||||
|
|
||||||
if (contactInfos)
|
if (contactInfos)
|
||||||
{
|
{
|
||||||
username = [contactInfos objectForKey: @"c_uid"];
|
username = [contactInfos objectForKey: @"sAMAccountName"];
|
||||||
recipient->username = [username asUnicodeInMemCtx: msgData];
|
recipient->username = [username asUnicodeInMemCtx: msgData];
|
||||||
entryId = MAPIStoreInternalEntryId (samCtx, username);
|
entryId = MAPIStoreInternalEntryId (samCtx, username);
|
||||||
}
|
}
|
||||||
|
|
|
@ -386,7 +386,7 @@ static NSString *recTypes[] = { @"orig", @"to", @"cc", @"bcc" };
|
||||||
contactInfos = [mgr contactInfosForUserWithUIDorEmail: email];
|
contactInfos = [mgr contactInfosForUserWithUIDorEmail: email];
|
||||||
if (contactInfos)
|
if (contactInfos)
|
||||||
{
|
{
|
||||||
username = [contactInfos objectForKey: @"c_uid"];
|
username = [contactInfos objectForKey: @"sAMAccountName"];
|
||||||
recipient->username = [username asUnicodeInMemCtx: msgData];
|
recipient->username = [username asUnicodeInMemCtx: msgData];
|
||||||
entryId = MAPIStoreInternalEntryId (samCtx, username);
|
entryId = MAPIStoreInternalEntryId (samCtx, username);
|
||||||
}
|
}
|
||||||
|
|
|
@ -96,7 +96,10 @@ MAPIStoreInternalEntryId (struct ldb_context *samCtx, NSString *username)
|
||||||
[entryId appendUInt8: 0]; // end of string
|
[entryId appendUInt8: 0]; // end of string
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
|
NSLog (@"Error trying to generate EntryId for `%@`", username);
|
||||||
entryId = nil;
|
entryId = nil;
|
||||||
|
}
|
||||||
|
|
||||||
return entryId;
|
return entryId;
|
||||||
}
|
}
|
||||||
|
|
|
@ -689,8 +689,7 @@ static Class NSNullK;
|
||||||
[currentUser setObject: [NSNumber numberWithBool: YES]
|
[currentUser setObject: [NSNumber numberWithBool: YES]
|
||||||
forKey: @"MailAccess"];
|
forKey: @"MailAccess"];
|
||||||
|
|
||||||
sogoSources = [[self authenticationSourceIDsInDomain: domain]
|
sogoSources = [[self authenticationSourceIDsInDomain: domain] objectEnumerator];
|
||||||
objectEnumerator];
|
|
||||||
userEntry = nil;
|
userEntry = nil;
|
||||||
while (!userEntry && (sourceID = [sogoSources nextObject]))
|
while (!userEntry && (sourceID = [sogoSources nextObject]))
|
||||||
{
|
{
|
||||||
|
@ -736,6 +735,11 @@ static Class NSNullK;
|
||||||
if ([userEntry objectForKey: @"numberOfSimultaneousBookings"])
|
if ([userEntry objectForKey: @"numberOfSimultaneousBookings"])
|
||||||
[currentUser setObject: [userEntry objectForKey: @"numberOfSimultaneousBookings"]
|
[currentUser setObject: [userEntry objectForKey: @"numberOfSimultaneousBookings"]
|
||||||
forKey: @"numberOfSimultaneousBookings"];
|
forKey: @"numberOfSimultaneousBookings"];
|
||||||
|
|
||||||
|
// This is Active Directory specific attribute (needed on OpenChange/* layer)
|
||||||
|
if ([userEntry objectForKey: @"samaccountname"])
|
||||||
|
[currentUser setObject: [userEntry objectForKey: @"samaccountname"]
|
||||||
|
forKey: @"sAMAccountName"];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue