Browse Source

HPCC-7955 Configmgr - Disassociating ldap from esp causes seg fault

- If selecting no ldap (empty) from dropdown, the filesBasedn will
  be set to empty in the esp service upon confirmation.

Signed-off-by: Gleb Aronsky <gleb.aronsky@lexisnexis.com>
Gleb Aronsky 12 years ago
parent
commit
eb094da1e9
1 changed files with 15 additions and 14 deletions
  1. 15 14
      esp/services/WsDeploy/WsDeployService.cpp

+ 15 - 14
esp/services/WsDeploy/WsDeployService.cpp

@@ -1314,28 +1314,29 @@ bool CWsDeployFileInfo::saveSetting(IEspContext &context, IEspSaveSettingRequest
         StringBuffer ldapXPath;
         StringBuffer espBindingXPath;
         StringBuffer espProcessXPath;
+        StringBuffer strFilesBasedn;
+
+        if (pszNewValue != NULL && *pszNewValue != 0)
+        {
+          ldapXPath.appendf("./%s/%s[%s=\"%s\"]", XML_TAG_SOFTWARE, XML_TAG_LDAPSERVERPROCESS, XML_ATTR_NAME, pszNewValue);
+          strFilesBasedn.appendf("%s",pActiveEnvRoot->queryPropTree(ldapXPath.str())->queryProp(XML_ATTR_FILESBASEDN));
+        }
 
-        ldapXPath.appendf("./%s/%s[%s=\"%s\"]", XML_TAG_SOFTWARE, XML_TAG_LDAPSERVERPROCESS, XML_ATTR_NAME, pszNewValue);
         espBindingXPath.appendf("./%s/%s[%s=\"%s\"]/%s", XML_TAG_SOFTWARE, XML_TAG_ESPPROCESS, XML_ATTR_NAME, pszCompName, XML_TAG_ESPBINDING);
 
-        StringBuffer strFilesBasedn(pActiveEnvRoot->queryPropTree(ldapXPath.str())->queryProp(XML_ATTR_FILESBASEDN));
+        Owned<IPropertyTreeIterator> iterItems = pActiveEnvRoot->getElements(espBindingXPath.str());
 
-        if (strFilesBasedn.length() > 0)
+        ForEach(*iterItems)
         {
-          Owned<IPropertyTreeIterator> iterItems = pActiveEnvRoot->getElements(espBindingXPath.str());
-
-          ForEach(*iterItems)
-          {
-            IPropertyTree *pItem = &iterItems->query();
-            const char* service_name = pItem->queryProp(XML_ATTR_SERVICE);
+          IPropertyTree *pItem = &iterItems->query();
+          const char* service_name = pItem->queryProp(XML_ATTR_SERVICE);
 
-            espProcessXPath.clear().appendf("./%s/%s[%s=\"%s\"]", XML_TAG_SOFTWARE, XML_TAG_ESPSERVICE, XML_ATTR_NAME, service_name);
+          espProcessXPath.clear().appendf("./%s/%s[%s=\"%s\"]", XML_TAG_SOFTWARE, XML_TAG_ESPSERVICE, XML_ATTR_NAME, service_name);
 
-            const char* service_type = pActiveEnvRoot->queryPropTree(espProcessXPath.str())->queryProp(XML_ATTR_BUILDSET);
+          const char* service_type = pActiveEnvRoot->queryPropTree(espProcessXPath.str())->queryProp(XML_ATTR_BUILDSET);
 
-            if (service_type && *service_type && !strcmp(service_type, "espsmc"))
-              pActiveEnvRoot->queryPropTree(espProcessXPath.str())->setProp(XML_ATTR_FILESBASEDN, strFilesBasedn);
-          }
+          if (service_type && *service_type && !strcmp(service_type, "espsmc"))
+            pActiveEnvRoot->queryPropTree(espProcessXPath.str())->setProp(XML_ATTR_FILESBASEDN, strFilesBasedn);
         }
       }