Bläddra i källkod

HPCC-2309 Configmgr - Entering LDAP ou info is error-prone

- When modifying the 'ldapServer' field under the 'LDAP' tab for
  the 'Dali Server' component, pop-up will ask to update the 'filesBasedn'
  field to match that of the selected LDAP server.

- When modifying the 'ldapServer' field under the 'Authentication' tab for
  the 'Esp' component, a pop-up will ask to update the 'filesBasedn' field
  to match that of the selected LDAP server for all bound esp services
  that contain a filesBasedn field.

- When modifying the 'serverice' field under the 'ESP Service Bindings' tab
  for the 'Esp' component, a pop-up will ask to update the 'filesBasedn'
  field for all bound esp services that contain a filesBasedn field.

Signed-off-by: Gleb Aronsky <gleb.aronsky@lexisnexis.com>
Gleb Aronsky 12 år sedan
förälder
incheckning
e094d8ffaa

+ 6 - 0
deployment/deploy/XMLTags.h

@@ -31,6 +31,7 @@
 
 #define XML_TAG_ATTRIBUTESERVER        "AttributeServer"
 #define XML_TAG_ATTRSERVERINSTANCE     "AttrServerInstance"
+#define XML_TAG_AUTHENTICATION         "Authentication"
 #define XML_TAG_BUILD                  "Build"
 #define XML_TAG_BUILDSET               "BuildSet"
 #define XML_TAG_CLUSTER                "Cluster"
@@ -128,6 +129,7 @@
 #define XML_ATTR_EXTERNALPROGDIR       "@externalProgDir"
 #define XML_ATTR_FAMILY                "@family"
 #define XML_ATTR_FILENAME              "@filename"
+#define XML_ATTR_FILESBASEDN           "@filesBasedn"
 #define XML_ATTR_FOLDSQL               "@foldSQL"
 #define XML_ATTR_FORCECOMPARECLUSTER   "@forceCompareCluster"
 #define XML_ATTR_FORCETHORCOMPARECLUSTER "@forceThorCompareCluster"
@@ -143,6 +145,7 @@
 #define XML_ATTR_JACKAGENTIP           "@jackAgentIP"
 #define XML_ATTR_KEEPCPP               "@keepCPP"
 #define XML_ATTR_LABEL                 "@label"
+#define XML_ATTR_LDAPSERVER            "@ldapServer"
 #define XML_ATTR_LOADERNAME            "@loaderName"
 #define XML_ATTR_LOADORDER             "@loadOrder"
 #define XML_ATTR_LOCALCACHE            "@localCache"
@@ -269,6 +272,9 @@
 #define TAG_VALUE                       "value"
 #define TAG_ATTRIBUTE                   "Attribute"
 #define TAG_ELEMENT                     "Element"
+#define TAG_DALISERVER                  "daliServer"
+#define TAG_LDAPSERVER                  "ldapServer"
+#define TAG_SERVICE                     "service"
 
 //---------------------------------------------------------------------------
 #endif // !defined(AFX_XMLTAGS_H__57887617_2BDE_4E3E_92CB_43FCDEDD05B8__INCLUDED_)

+ 8 - 1
esp/files/scripts/configmgr/configmgr.js

@@ -919,6 +919,12 @@ function handleConfigCellClickEvent(oArgs, caller, isComplex) {
 
     var form = top.window.document.forms['treeForm'];
     top.document.startWait(document);
+
+    if ((record.getData('compType') == 'EspProcess' || record.getData('compType') == "DaliServerProcess") && (record.getData('params').indexOf('subType=EspBinding') != -1 || record.getData('_key') == "ldapServer"))
+      bUpdateFilesBasedn = confirm("If available, proceed with update of filesBasedn value?\n\n(If you are unsure select 'Ok')");
+    else
+      bUpdateFilesBasedn = false;
+
     var xmlArgs = argsToXml(category, params, attrName, oldValue, newValue, recordIndex + 1, record.getData(column.key + '_onChange'));
     YAHOO.util.Connect.asyncRequest('POST', '/WsDeploy/SaveSetting', {
       success: function(o) {
@@ -1019,6 +1025,7 @@ function handleConfigCellClickEvent(oArgs, caller, isComplex) {
               doPageRefresh();
             }
           }
+          top.document.navDT.clickCurrentSelOrName(top.document.navDT); // refresh
         } else {
           alert(r.replyText);
           callback();
@@ -1033,7 +1040,7 @@ function handleConfigCellClickEvent(oArgs, caller, isComplex) {
       },
       scope: this
     },
-    top.document.navDT.getFileName(true) + 'XmlArgs=' + xmlArgs);
+    top.document.navDT.getFileName(true) + 'XmlArgs=' + xmlArgs + '&bUpdateFilesBasedn='  + bUpdateFilesBasedn);
   };
 
   if (typeof (caller.editors) === 'undefined') {

+ 1 - 0
esp/scm/WsDeploy.ecm

@@ -137,6 +137,7 @@ ESPresponse [exceptions_inline, encode(0)] DisplaySettingsResponse
 ESPrequest SaveSettingRequest
 {
     string XmlArgs;
+    bool bUpdateFilesBasedn;
     ESPstruct WsDeployReqInfo ReqInfo;
 };
 

+ 67 - 0
esp/services/WsDeploy/WsDeployService.cpp

@@ -993,6 +993,7 @@ bool CWsDeployFileInfo::saveSetting(IEspContext &context, IEspSaveSettingRequest
   checkForRefresh(context, &req.getReqInfo(), true);
 
   const char* xmlArg = req.getXmlArgs();
+  bool bUpdateFilesBasedn = req.getBUpdateFilesBasedn();
   Owned<IPropertyTree> pEnvRoot = &m_Environment->getPTree();
   IPropertyTree* pEnvSoftware = pEnvRoot->queryPropTree(XML_TAG_SOFTWARE);
   IPropertyTree* pEnvHardware = pEnvRoot->queryPropTree(XML_TAG_HARDWARE);
@@ -1272,6 +1273,72 @@ bool CWsDeployFileInfo::saveSetting(IEspContext &context, IEspSaveSettingRequest
         }
       }
 
+      if (bUpdateFilesBasedn == true && strcmp(pszAttrName, TAG_LDAPSERVER) == 0 && strcmp(pszCompType, XML_TAG_DALISERVERPROCESS) == 0 && pComp != NULL && pszNewValue && *pszNewValue)
+      {
+        Owned<IPropertyTree> pActiveEnvRoot = getEnvTree(context, &req.getReqInfo());
+
+        StringBuffer ldapXPath;
+        ldapXPath.appendf("./%s/%s[%s=\"%s\"]", XML_TAG_SOFTWARE, XML_TAG_LDAPSERVERPROCESS, XML_ATTR_NAME, pszNewValue);
+
+        StringBuffer strFilesBasedn(pActiveEnvRoot->queryPropTree(ldapXPath.str())->queryProp(XML_ATTR_FILESBASEDN));
+
+        pComp->setProp(XML_ATTR_FILESBASEDN,strFilesBasedn);
+      }
+      else if (bUpdateFilesBasedn == true && pComp != NULL && strcmp(pszCompType, XML_TAG_ESPPROCESS) == 0 && strcmp(pszAttrName, TAG_SERVICE) == 0 && pszNewValue && *pszNewValue)
+      {
+        Owned<IPropertyTree> pActiveEnvRoot = getEnvTree(context, &req.getReqInfo());
+
+        StringBuffer ldapXPath;
+        StringBuffer espServiceXPath;
+        StringBuffer espProcessXPath;
+
+        espServiceXPath.appendf("./%s/%s[%s=\"%s\"]", XML_TAG_SOFTWARE, XML_TAG_ESPSERVICE, XML_ATTR_NAME, pszNewValue);
+        espProcessXPath.appendf("./%s/%s/[%s=\"%s\"]/%s", XML_TAG_SOFTWARE, XML_TAG_ESPPROCESS, XML_ATTR_NAME, pszCompName, XML_TAG_AUTHENTICATION);
+
+        StringBuffer strLDAPName(pActiveEnvRoot->queryPropTree(espProcessXPath.str())->queryProp(XML_ATTR_LDAPSERVER));
+
+        if (strLDAPName.length() > 0)
+        {
+          ldapXPath.appendf("./%s/%s[%s=\"%s\"]", XML_TAG_SOFTWARE, XML_TAG_LDAPSERVERPROCESS, XML_ATTR_NAME, strLDAPName.str());
+
+          StringBuffer strFilesBasedn(pActiveEnvRoot->queryPropTree(ldapXPath.str())->queryProp(XML_ATTR_FILESBASEDN));
+
+          if (strFilesBasedn.length() > 0)
+            pActiveEnvRoot->queryPropTree(espServiceXPath.str())->setProp(XML_ATTR_FILESBASEDN, strFilesBasedn);
+        }
+      }
+      else if (bUpdateFilesBasedn == true && strcmp(pszAttrName, TAG_LDAPSERVER) == 0 && strcmp(pszCompType, XML_TAG_ESPPROCESS) == 0 && pComp != NULL)
+      {
+        Owned<IPropertyTree> pActiveEnvRoot = getEnvTree(context, &req.getReqInfo());
+
+        StringBuffer ldapXPath;
+        StringBuffer espBindingXPath;
+        StringBuffer espProcessXPath;
+
+        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));
+
+        if (strFilesBasedn.length() > 0)
+        {
+          Owned<IPropertyTreeIterator> iterItems = pActiveEnvRoot->getElements(espBindingXPath.str());
+
+          ForEach(*iterItems)
+          {
+            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);
+
+            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 (!pComp)
         throw MakeStringException(-1, "No such component in environment: '%s' named '%s'.", pszCompType, pszCompName);
       else