From: Marten van de Sanden <m.vandesan...@kopano.com>

When calling (soap) resolveUserStore on a company name in hosted mode
a warning message was incorrectly logged. This removes that warning
message.
---
 provider/libserver/ECUserManagement.cpp | 14 +++++++++-----
 provider/libserver/ECUserManagement.h   |  5 +++--
 provider/libserver/cmd.cpp              |  5 +++--
 3 files changed, 15 insertions(+), 9 deletions(-)

diff --git a/provider/libserver/ECUserManagement.cpp 
b/provider/libserver/ECUserManagement.cpp
index 85ba58bae..cf80d3f34 100644
--- a/provider/libserver/ECUserManagement.cpp
+++ b/provider/libserver/ECUserManagement.cpp
@@ -873,7 +873,9 @@ ECRESULT ECUserManagement::ResolveObject(objectclass_t 
objclass,
  * Resolve an object name to an object id, with on-the-fly creation of the
  * specified object class.
  */
-ECRESULT ECUserManagement::ResolveObjectAndSync(objectclass_t objclass, const 
char* szName, unsigned int* lpulObjectId) {
+ECRESULT ECUserManagement::ResolveObjectAndSync(objectclass_t objclass,
+       const char* szName, unsigned int* lpulObjectId, bool tryResolve)
+{
        objectsignature_t objectsignature;
        std::string username, companyname;
        UserPlugin *lpPlugin = NULL;
@@ -949,12 +951,14 @@ ECRESULT 
ECUserManagement::ResolveObjectAndSync(objectclass_t objclass, const ch
        } catch (const notsupported &) {
                return KCERR_NO_SUPPORT;
        } catch (const objectnotfound &e) {
-               ec_log_warn("K-1515: Object not found %s \"%s\": %s",
-                       ObjectClassToName(objclass), szName, e.what());
+               if (!tryResolve)
+                       ec_log_warn("K-1515: Object not found %s \"%s\": %s",
+                                   ObjectClassToName(objclass), szName, 
e.what());
                return KCERR_NOT_FOUND;
        } catch (const std::exception &e) {
-               ec_log_warn("K-1516: Unable to resolve %s \"%s\": %s",
-                       ObjectClassToName(objclass), szName, e.what());
+               if (!tryResolve)
+                       ec_log_warn("K-1516: Unable to resolve %s \"%s\": %s",
+                                   ObjectClassToName(objclass), szName, 
e.what());
                return KCERR_NOT_FOUND;
        }
        return GetLocalObjectIdOrCreate(objectsignature, lpulObjectId);
diff --git a/provider/libserver/ECUserManagement.h 
b/provider/libserver/ECUserManagement.h
index e53572a7a..2535d3be2 100644
--- a/provider/libserver/ECUserManagement.h
+++ b/provider/libserver/ECUserManagement.h
@@ -67,8 +67,9 @@ public:
        /* Add a member to a group, with on-the-fly deletion of the specified 
group id. */
        _kc_hidden virtual ECRESULT 
AddSubObjectToObjectAndSync(userobject_relation_t, unsigned int parent_id, 
unsigned int child_id);
        _kc_hidden virtual ECRESULT 
DeleteSubObjectFromObjectAndSync(userobject_relation_t, unsigned int parent_id, 
unsigned int child_id);
-       /* Resolve a user name to a user id, with on-the-fly creation of the 
specified user. */
-       _kc_hidden virtual ECRESULT ResolveObjectAndSync(objectclass_t, const 
char *name, unsigned int *obj_id);
+       /* Resolve a user name to a user id, with on-the-fly creation of the
+          specified user. When 'tryResolve' is set surpress logging warnings */
+       _kc_hidden virtual ECRESULT ResolveObjectAndSync(objectclass_t, const 
char *name, unsigned int *obj_id, bool tryResolve = false);
 
        // Get a local object ID for a part of a name
        virtual ECRESULT SearchObjectAndSync(const char *search_string, 
unsigned int flags, unsigned int *id);
diff --git a/provider/libserver/cmd.cpp b/provider/libserver/cmd.cpp
index 3c366efcc..0193030d6 100644
--- a/provider/libserver/cmd.cpp
+++ b/provider/libserver/cmd.cpp
@@ -5919,8 +5919,9 @@ SOAP_ENTRY_START(resolveUserStore, lpsResponse->er, const 
char *szUserName,
                ulStoreTypeMask = ECSTORE_TYPE_MASK_PRIVATE | 
ECSTORE_TYPE_MASK_PUBLIC;
 
        auto usrmgt = lpecSession->GetUserManagement();
-       er = usrmgt->ResolveObjectAndSync(OBJECTCLASS_USER, szUserName, 
&ulObjectId);
-       if ((er == KCERR_NOT_FOUND || er == KCERR_INVALID_PARAMETER) && 
lpecSession->GetSessionManager()->IsHostedSupported())
+       bool hosted = lpecSession->GetSessionManager()->IsHostedSupported();
+       er = usrmgt->ResolveObjectAndSync(OBJECTCLASS_USER, szUserName, 
&ulObjectId, hosted);
+       if ((er == KCERR_NOT_FOUND || er == KCERR_INVALID_PARAMETER) && hosted)
                // FIXME: this function is being misused, szUserName can also 
be a company name
                er = usrmgt->ResolveObjectAndSync(CONTAINER_COMPANY, 
szUserName, &ulObjectId);
        if (er != erSuccess)
-- 
2.21.0

Reply via email to