diff --git a/apps/dav/lib/CardDAV/CardDavBackend.php b/apps/dav/lib/CardDAV/CardDavBackend.php index 13926ef12ce38..ad451b31b0f81 100644 --- a/apps/dav/lib/CardDAV/CardDavBackend.php +++ b/apps/dav/lib/CardDAV/CardDavBackend.php @@ -1062,6 +1062,7 @@ private function searchByAddressBookIds(array $addressBookIds, array $searchProperties, array $options = []): array { $escapePattern = !\array_key_exists('escape_like_param', $options) || $options['escape_like_param'] !== false; + $strictSearch = array_key_exists('strict_search', $options) && $options['strict_search'] === true; $query2 = $this->db->getQueryBuilder(); @@ -1103,10 +1104,18 @@ private function searchByAddressBookIds(array $addressBookIds, // No need for like when the pattern is empty if ('' !== $pattern) { - if (!$escapePattern) { - $query2->andWhere($query2->expr()->ilike('cp.value', $query2->createNamedParameter($pattern))); + if ($strictSearch) { + if (!$escapePattern) { + $query2->andWhere( $query2->expr()->eq('cp.value', $query2->createNamedParameter($pattern))); + } else { + $query2->andWhere( $query2->expr()->eq('cp.value', $query2->createNamedParameter('%' . $this->db->escapeLikeParameter($pattern) . '%'))); + } } else { - $query2->andWhere($query2->expr()->ilike('cp.value', $query2->createNamedParameter('%' . $this->db->escapeLikeParameter($pattern) . '%'))); + if (!$escapePattern) { + $query2->andWhere( $query2->expr()->ilike('cp.value', $query2->createNamedParameter($pattern))); + } else { + $query2->andWhere( $query2->expr()->ilike('cp.value', $query2->createNamedParameter('%' . $this->db->escapeLikeParameter($pattern) . '%'))); + } } } diff --git a/lib/private/Federation/CloudIdManager.php b/lib/private/Federation/CloudIdManager.php index 24437456fd028..8700396aaa096 100644 --- a/lib/private/Federation/CloudIdManager.php +++ b/lib/private/Federation/CloudIdManager.php @@ -90,7 +90,7 @@ public function resolveCloudId(string $cloudId): ICloudId { } protected function getDisplayNameFromContact(string $cloudId): ?string { - $addressBookEntries = $this->contactsManager->search($cloudId, ['CLOUD']); + $addressBookEntries = $this->contactsManager->search($cloudId, ['CLOUD'], ["strict_search" => true]); foreach ($addressBookEntries as $entry) { if (isset($entry['CLOUD'])) { foreach ($entry['CLOUD'] as $cloudID) {