Add option to use encrypted password in password fields in configuration files and...
authorzev <zev@radensolutions.com>
Thu, 3 Sep 2015 13:55:54 +0000 (16:55 +0300)
committerzev <zev@radensolutions.com>
Thu, 3 Sep 2015 13:56:46 +0000 (16:56 +0300)
20 files changed:
include/nms_common.h
include/nms_util.h
src/agent/core/nxagentd.cpp
src/agent/subagents/db2/db2_subagent.cpp
src/agent/subagents/db2/db2_subagent.h
src/agent/subagents/dbquery/conn.cpp
src/agent/subagents/informix/informix_subagent.h
src/agent/subagents/informix/main.cpp
src/agent/subagents/mongodb/db.cpp
src/agent/subagents/mongodb/mongodb_subagent.h
src/agent/subagents/oracle/main.cpp
src/agent/subagents/oracle/oracle_subagent.h
src/flow_analyzer/nxflowd/nxflowd.cpp
src/libnetxms/tools.cpp
src/server/core/config.cpp
src/server/core/ldap.cpp
src/server/core/xmpp.cpp
src/server/include/nms_users.h
src/server/tools/nxdbmgr/migrate.cpp
src/server/tools/nxdbmgr/nxdbmgr.cpp

index 724d635..48be835 100644 (file)
 #define MAX_COLUMN_NAME          64
 #define MAX_DNS_NAME             256
 #define MAX_HELPDESK_REF_LEN     64
+#define MAX_PASSWORD             48
 #define GROUP_FLAG               ((UINT32)0x80000000)
 
 #define NETXMS_MAX_CIPHERS       6
index f2f423c..2f33353 100644 (file)
@@ -1464,7 +1464,7 @@ void LIBNETXMS_EXPORTABLE GenerateRandomBytes(BYTE *buffer, size_t size);
 void LIBNETXMS_EXPORTABLE ICEEncryptData(const BYTE *in, int inLen, BYTE *out, const BYTE *key);
 void LIBNETXMS_EXPORTABLE ICEDecryptData(const BYTE *in, int inLen, BYTE *out, const BYTE *key);
 
-BOOL LIBNETXMS_EXPORTABLE DecryptPassword(const TCHAR *login, const TCHAR *encryptedPasswd, TCHAR *decryptedPasswd);
+BOOL LIBNETXMS_EXPORTABLE DecryptPassword(const TCHAR *login, const TCHAR *encryptedPasswd, TCHAR *decryptedPasswd, UINT32 bufferLenght);
 
 int LIBNETXMS_EXPORTABLE NxDCIDataTypeFromText(const TCHAR *pszText);
 
index 812b3ad..eb1b3bd 100644 (file)
@@ -136,7 +136,6 @@ extern const TCHAR *g_szMessages[];
  */
 UINT32 g_dwFlags = AF_ENABLE_ACTIONS | AF_ENABLE_AUTOLOAD;
 TCHAR g_szLogFile[MAX_PATH] = AGENT_DEFAULT_LOG;
-TCHAR g_szEncryptedSharedSecret[MAX_SECRET_LENGTH] = _T("");
 TCHAR g_szSharedSecret[MAX_SECRET_LENGTH] = _T("admin");
 TCHAR g_szConfigFile[MAX_PATH] = AGENT_DEFAULT_CONFIG;
 TCHAR g_szFileStore[MAX_PATH] = AGENT_DEFAULT_FILE_STORE;
@@ -239,7 +238,7 @@ static NX_CFG_TEMPLATE m_cfgTemplate[] =
    { _T("EnableSNMPTrapProxy"), CT_BOOLEAN, 0, 0, AF_ENABLE_SNMP_TRAP_PROXY, 0, &g_dwFlags, NULL },
    { _T("EnableSubagentAutoload"), CT_BOOLEAN, 0, 0, AF_ENABLE_AUTOLOAD, 0, &g_dwFlags, NULL },
    { _T("EnableWatchdog"), CT_BOOLEAN, 0, 0, AF_ENABLE_WATCHDOG, 0, &g_dwFlags, NULL },
-   { _T("EncryptedSharedSecret"), CT_STRING, 0, 0, MAX_SECRET_LENGTH, 0, g_szEncryptedSharedSecret, NULL },
+   { _T("EncryptedSharedSecret"), CT_STRING, 0, 0, MAX_SECRET_LENGTH, 0, g_szSharedSecret, NULL },
    { _T("ExecTimeout"), CT_LONG, 0, 0, 0, 0, &g_dwExecTimeout, NULL },
        { _T("ExternalMasterAgent"), CT_STRING, 0, 0, MAX_PATH, 0, g_masterAgent, NULL },
    { _T("ExternalParameter"), CT_STRING_LIST, '\n', 0, 0, 0, &m_pszExtParamList, NULL },
@@ -1673,10 +1672,7 @@ int main(int argc, char *argv[])
                                g_config->loadConfigDirectory(g_szConfigIncludeDir, _T("agent"));
                                if (g_config->parseTemplate(_T("agent"), m_cfgTemplate))
                                {
-               if (g_szEncryptedSharedSecret[0] != 0)
-               {
-                  DecryptPassword(_T("netxms"), g_szEncryptedSharedSecret, g_szSharedSecret);
-               }
+               DecryptPassword(_T("netxms"), g_szSharedSecret, g_szSharedSecret, MAX_SECRET_LENGTH);
 
                // try to guess executable path
 #ifdef _WIN32
index f60b5f7..b027fd4 100644 (file)
@@ -815,8 +815,8 @@ static const PDB2_INFO GetConfigs(Config *config, ConfigEntry *configEntry, cons
       { _T("DBName"),            CT_STRING,      0, 0, DB2_DB_MAX_NAME,   0, db2Info->db2DbName },
       { _T("DBAlias"),           CT_STRING,      0, 0, DB2_DB_MAX_NAME,   0, db2Info->db2DbAlias },
       { _T("UserName"),          CT_STRING,      0, 0, DB2_MAX_USER_NAME, 0, db2Info->db2UName },
-      { _T("Password"),          CT_STRING,      0, 0, STR_MAX,           0, db2Info->db2UPass },
-      { _T("EncryptedPassword"), CT_STRING,      0, 0, MAX_DB_STRING,     0, dbPassEncrypted },
+      { _T("Password"),          CT_STRING,      0, 0, MAX_PASSWORD,      0, db2Info->db2UPass },
+      { _T("EncryptedPassword"), CT_STRING,      0, 0, MAX_PASSWORD,      0, db2Info->db2UPass },
       { _T("ReconnectInterval"), CT_LONG,        0, 0, sizeof(LONG),      0, &db2Info->db2ReconnectInterval },
       { _T("QueryInterval"),     CT_LONG,        0, 0, sizeof(LONG),      0, &db2Info->db2QueryInterval },
       { _T(""),                  CT_END_OF_LIST, 0, 0, 0,                 0, NULL }
@@ -828,12 +828,7 @@ static const PDB2_INFO GetConfigs(Config *config, ConfigEntry *configEntry, cons
       noErr = FALSE;
    }
 
-   if (*dbPassEncrypted != '\0')
-   {
-      noErr = DecryptPassword(db2Info->db2UName, dbPassEncrypted, db2Info->db2UPass);
-      if(!noErr)
-         AgentWriteDebugLog(EVENTLOG_ERROR_TYPE, _T("%s: failed to decrypt password"), SUBAGENT_NAME);
-   }
+   DecryptPassword(db2Info->db2UName, db2Info->db2UPass, db2Info->db2UPass, MAX_PASSWORD);
 
    if (noErr)
    {
index 22f789d..a307623 100644 (file)
@@ -50,7 +50,7 @@ typedef struct
    TCHAR db2DbName[DB2_DB_MAX_NAME];
    TCHAR db2DbAlias[DB2_DB_MAX_NAME];
    TCHAR db2UName[DB2_MAX_USER_NAME];
-   TCHAR db2UPass[STR_MAX];
+   TCHAR db2UPass[MAX_PASSWORD];
    LONG db2ReconnectInterval;
    LONG db2QueryInterval;
 } DB2_INFO, *PDB2_INFO;
index 358f452..0d88745 100644 (file)
@@ -1,4 +1,4 @@
-/* 
+/*
 ** NetXMS - Network Management System
 ** Copyright (C) 2003-2013 Victor Kirhenshtein
 **
@@ -79,21 +79,15 @@ DBConnection *DBConnection::createFromConfig(const TCHAR *config)
    conn->m_id = ReadAttribute(config, _T("id"));
    conn->m_driver = ReadAttribute(config, _T("driver"));
    conn->m_server = ReadAttribute(config, _T("server"));
-   conn->m_dbName = ReadAttribute(config, _T("dbname")); 
+   conn->m_dbName = ReadAttribute(config, _T("dbname"));
    conn->m_login = ReadAttribute(config, _T("login"));
+   conn->m_password = ReadAttribute(config, _T("password"));
 
-   TCHAR *password = ReadAttribute(config, _T("encryptedPassword"));
-   if (password != NULL)
-   {
-      TCHAR buffer[256];
-      DecryptPassword(CHECK_NULL_EX(conn->m_login), password, buffer);
-      free(password);
-      conn->m_password = _tcsdup(buffer);
-   }
-   else
-   {
-      conn->m_password = ReadAttribute(config, _T("password"));
-   }
+   if(conn->m_password == NULL)
+      conn->m_password = ReadAttribute(config, _T("encryptedPassword"));
+
+   if (conn->m_password != NULL)
+      DecryptPassword(CHECK_NULL_EX(conn->m_login), conn->m_password, conn->m_password, _tcslen(conn->m_password));
 
    if ((conn->m_id == NULL) || (conn->m_driver == NULL))
    {
index d04aaf5..32f6578 100644 (file)
@@ -32,7 +32,7 @@
 //
 
 // struct for the databases configured within the subagent
-typedef struct 
+typedef struct
 {
        TCHAR id[MAX_STR];                              // this is how client addresses the database
        TCHAR dsn[MAX_STR];
index 63a3aee..57e6020 100644 (file)
@@ -19,7 +19,7 @@ DBParameterGroup g_paramGroup[] = {
                1100, _T("Informix.Session."),
                _T("select ") DB_NULLARG_MAGIC _T(" ValueName, count(*) Count from syssessions"),
                2, { NULL }, 0
-       }, 
+       },
        {
                1100, _T("Informix.Database."),
                        _T("select name ValueName, owner Owner, is_logging Logged, created Created from sysdatabases"),
@@ -31,7 +31,7 @@ DBParameterGroup g_paramGroup[] = {
                        _T("sum(nfree) Free,round((sum(nfree))/(sum(chksize))*100,2) FreePerc from sysdbspaces d,syschunks c ")
                        _T("where d.dbsnum=c.dbsnum     group by name order by name"),
                        5, { NULL }, 0
-       }, 
+       },
        0
 };
 
@@ -120,7 +120,7 @@ static BOOL SubAgentInit(Config *config)
       { _T("DBName"),            CT_STRING, 0, 0, MAX_STR,       0, info.dsn },
       { _T("DBLogin"),           CT_STRING, 0, 0, MAX_USERNAME,  0, info.username },
       { _T("DBPassword"),        CT_STRING, 0, 0, MAX_PASSWORD,  0, info.password },
-      { _T("DBPasswordEncrypted"), CT_STRING, 0, 0, MAX_DB_STRING, 0, dbPassEncrypted },
+      { _T("DBPasswordEncrypted"), CT_STRING, 0, 0, MAX_PASSWORD, 0, info.password },
       { _T(""), CT_END_OF_LIST, 0, 0, 0, 0, NULL }
    };
 
@@ -151,10 +151,7 @@ static BOOL SubAgentInit(Config *config)
                        g_dbInfo[g_dbCount].accessMutex = MutexCreate();
                }
 
-          if (*dbPassEncrypted != '\0')
-          {
-             DecryptPassword(info.username, dbPassEncrypted, info.password);
-          }
+      DecryptPassword(info.username, info.password, info.password, MAX_PASSWORD);
        }
 
        // Load configuration
@@ -171,7 +168,7 @@ static BOOL SubAgentInit(Config *config)
                }
                if (info.dsn[0] == 0)
                        continue;
-               
+
                if (info.id[0] == 0)
                        _tcscpy(info.id, info.dsn);
                memcpy(&g_dbInfo[++g_dbCount], &info, sizeof(DatabaseInfo));
@@ -181,10 +178,9 @@ static BOOL SubAgentInit(Config *config)
                        AgentWriteLog(EVENTLOG_ERROR_TYPE, _T("%s: error getting username for "), MYNAMESTR);
                        result = FALSE;
                }
-      if (*dbPassEncrypted != '\0')
-      {
-         result = DecryptPassword(info.username, dbPassEncrypted, info.password);
-      }
+
+      DecryptPassword(info.username, info.password, info.password, MAX_PASSWORD);
+
       if (info.password[0] == '\0')
       {
          AgentWriteLog(EVENTLOG_ERROR_TYPE, _T("%s: error getting password for "), MYNAMESTR);
@@ -234,7 +230,7 @@ static void SubAgentShutdown()
 // Figure out Informix DBMS version
 //
 
-static int getInformixVersion(DB_HANDLE handle) 
+static int getInformixVersion(DB_HANDLE handle)
 {
        return 1100;
 }
@@ -313,7 +309,7 @@ bool getParametersFromDB( int dbIndex )
                AgentWriteDebugLog(7, _T("%s: got entry for '%s'"), MYNAMESTR, g_paramGroup[i].prefix);
 
                if (g_paramGroup[i].version > info.version)     // this parameter group is not supported for this DB
-                       continue; 
+                       continue;
 
                // Release previously allocated array of values for this group
                for (int j = 0; j < g_paramGroup[i].valueCount[dbIndex]; j++)
@@ -336,7 +332,7 @@ bool getParametersFromDB( int dbIndex )
                        TCHAR colname[MAX_STR];
                        DBGetField(queryResult, j, 0, (g_paramGroup[i].values[dbIndex])[j].name, MAX_STR);
                        (g_paramGroup[i].values[dbIndex])[j].attrs = new StringMap;
-                       for (int k = 1; DBGetColumnName(queryResult, k, colname, MAX_STR); k++) 
+                       for (int k = 1; DBGetColumnName(queryResult, k, colname, MAX_STR); k++)
                        {
                                TCHAR colval[MAX_STR];
                                DBGetField(queryResult, j, k, colval, MAX_STR);
index 921a0b0..e6290d9 100644 (file)
@@ -47,19 +47,16 @@ bool AddMongoDBFromConfig(const TCHAR *config)
    _tcsncpy(info.username, CHECK_NULL_EX(tmp), MAX_STR);
    safe_free(tmp);
 
-   TCHAR *password = ReadAttribute(config, _T("encryptedPassword"));
-   if (password != NULL)
+   TCHAR *password = ReadAttribute(config, _T("password"));
+   if (password == NULL)
    {
-      TCHAR buffer[256];
-      DecryptPassword(CHECK_NULL_EX(info.username), password, buffer);
-      free(password);
-      _tcsncpy(info.password, CHECK_NULL_EX(buffer), MAX_STR);
+      password = ReadAttribute(config, _T("encryptedPassword"));
    }
-   else
+
+   if(password != NULL)
    {
-      tmp = ReadAttribute(config, _T("password"));
-      _tcsncpy(info.password, CHECK_NULL_EX(tmp), MAX_STR);
-      safe_free(tmp);
+      DecryptPassword(CHECK_NULL_EX(info.username), password, info.password, MAX_PASSWORD);
+      safe_free(password);
    }
 
    bool sucess = false;
index 4d08d8e..7143b82 100644 (file)
@@ -42,7 +42,7 @@ struct DatabaseInfo
        TCHAR id[MAX_STR];                              // instance ID
        TCHAR server[MAX_STR];
        TCHAR username[MAX_STR];
-       TCHAR password[MAX_STR];
+       TCHAR password[MAX_PASSWORD];
 };
 
 class MongoDBCommand
index f757c67..c330395 100644 (file)
@@ -28,7 +28,7 @@ DB_DRIVER g_driverHandle = NULL;
 /**
  * Polling queries
  */
-DatabaseQuery g_queries[] = 
+DatabaseQuery g_queries[] =
 {
    { _T("DATAFILE"), MAKE_ORACLE_VERSION(10, 2), 1,
       _T("SELECT regexp_substr(regexp_substr(f.name, '[/\\][^/\\]+$'), '[^/\\]+') AS name,")
@@ -319,15 +319,14 @@ static LONG H_TableQuery(const TCHAR *param, const TCHAR *arg, Table *value, Abs
  * Config template
  */
 static DatabaseInfo s_dbInfo;
-static TCHAR s_dbPassEncrypted[MAX_DB_STRING] = _T("");
-static NX_CFG_TEMPLATE s_configTemplate[] = 
+static NX_CFG_TEMPLATE s_configTemplate[] =
 {
        { _T("Id"),                                        CT_STRING, 0, 0, MAX_STR,       0, s_dbInfo.id },
        { _T("Name"),                              CT_STRING, 0, 0, MAX_STR,       0, s_dbInfo.name },
        { _T("TnsName"),                           CT_STRING, 0, 0, MAX_STR,       0, s_dbInfo.name },
        { _T("UserName"),                          CT_STRING, 0, 0, MAX_USERNAME,  0, s_dbInfo.username },
        { _T("Password"),                          CT_STRING, 0, 0, MAX_PASSWORD,  0, s_dbInfo.password },
-   { _T("EncryptedPassword"), CT_STRING, 0, 0, MAX_DB_STRING, 0, s_dbPassEncrypted },
+   { _T("EncryptedPassword"), CT_STRING, 0, 0, MAX_PASSWORD,  0, s_dbInfo.password },
        { _T(""), CT_END_OF_LIST, 0, 0, 0, 0, NULL }
 };
 
@@ -357,10 +356,8 @@ static BOOL SubAgentInit(Config *config)
                {
                        if (s_dbInfo.id[0] == 0)
                                _tcscpy(s_dbInfo.id, s_dbInfo.name);
-         if (*s_dbPassEncrypted != 0)
-         {
-            DecryptPassword(s_dbInfo.username, s_dbPassEncrypted, s_dbInfo.password);
-         }
+
+         DecryptPassword(s_dbInfo.username, s_dbInfo.password, s_dbInfo.password, MAX_PASSWORD);
          s_instances->add(new DatabaseInstance(&s_dbInfo));
                }
        }
@@ -371,7 +368,6 @@ static BOOL SubAgentInit(Config *config)
                TCHAR section[MAX_STR];
                memset((void*)&s_dbInfo, 0, sizeof(s_dbInfo));
                _sntprintf(section, MAX_STR, _T("oracle/databases/database#%d"), i);
-               s_dbPassEncrypted[0] = 0;
 
                if (!config->parseTemplate(section, s_configTemplate))
                {
@@ -382,10 +378,7 @@ static BOOL SubAgentInit(Config *config)
                if (s_dbInfo.name[0] == 0)
                        continue;
 
-      if (*s_dbPassEncrypted != 0)
-      {
-         DecryptPassword(s_dbInfo.username, s_dbPassEncrypted, s_dbInfo.password);
-      }
+      DecryptPassword(s_dbInfo.username, s_dbInfo.password, s_dbInfo.password, MAX_PASSWORD);
 
       s_instances->add(new DatabaseInstance(&s_dbInfo));
        }
index a832281..190e9bf 100644 (file)
@@ -81,7 +81,7 @@ private:
    CONDITION m_stopCondition;
 
    static THREAD_RESULT THREAD_CALL pollerThreadStarter(void *arg);
-   
+
    void pollerThread();
    bool poll();
    int getOracleVersion();
index 746b92a..0f473db 100644 (file)
@@ -57,16 +57,15 @@ static TCHAR s_dbServer[MAX_PATH] = _T("localhost");
 static TCHAR s_dbName[MAX_DB_NAME] = _T("netxms_db");
 static TCHAR s_dbSchema[MAX_DB_NAME] = _T("");
 static TCHAR s_dbLogin[MAX_DB_LOGIN] = _T("netxms");
-static TCHAR s_dbPassword[MAX_DB_PASSWORD] = _T("");
-static TCHAR s_encryptedDbPassword[MAX_DB_STRING] = _T("");
+static TCHAR s_dbPassword[MAX_PASSWORD] = _T("");
 static NX_CFG_TEMPLATE m_cfgTemplate[] =
 {
    { _T("DBDriver"), CT_STRING, 0, 0, MAX_PATH, 0, s_dbDriver },
    { _T("DBDrvParams"), CT_STRING, 0, 0, MAX_PATH, 0, s_dbDrvParams },
-   { _T("DBEncryptedPassword"), CT_STRING, 0, 0, MAX_DB_STRING, 0, s_encryptedDbPassword },
    { _T("DBLogin"), CT_STRING, 0, 0, MAX_DB_LOGIN, 0, s_dbLogin },
    { _T("DBName"), CT_STRING, 0, 0, MAX_DB_NAME, 0, s_dbName },
-   { _T("DBPassword"), CT_STRING, 0, 0, MAX_DB_PASSWORD, 0, s_dbPassword },
+   { _T("DBPassword"), CT_STRING, 0, 0, MAX_PASSWORD, 0, s_dbPassword },
+   { _T("DBEncryptedPassword"), CT_STRING, 0, 0, MAX_PASSWORD, 0, s_dbPassword },
    { _T("DBSchema"), CT_STRING, 0, 0, MAX_DB_NAME, 0, s_dbSchema },
    { _T("DBServer"), CT_STRING, 0, 0, MAX_PATH, 0, s_dbServer },
    { _T("ListenAddress"), CT_STRING, 0, 0, MAX_PATH, 0, g_listenAddress },
@@ -104,10 +103,7 @@ static bool LoadConfig()
        delete config;
 
        // Decrypt password
-       if (s_encryptedDbPassword[0] != 0)
-       {
-               DecryptPassword(s_dbLogin, s_encryptedDbPassword, s_dbPassword);
-       }
+   DecryptPassword(s_dbLogin, s_dbPassword, s_dbPassword, MAX_PASSWORD);
 
    return success;
 }
@@ -195,7 +191,7 @@ void Shutdown()
 #ifdef _WIN32
    ConditionSet(m_hCondShutdown);
 #endif
-   
+
    // Remove PID file
 #if !defined(_WIN32) && !defined(_NETWARE)
    remove(s_pidFile);
index 9f31a5b..5f05562 100644 (file)
@@ -1702,13 +1702,28 @@ TCHAR LIBNETXMS_EXPORTABLE **SplitString(const TCHAR *source, TCHAR sep, int *nu
        return strings;
 }
 
+inline BOOL DecryptPasswordFail(const TCHAR *encryptedPasswd, TCHAR *decryptedPasswd, UINT32 bufferLenght)
+{
+   if(decryptedPasswd != encryptedPasswd)
+      _tcsncpy(decryptedPasswd, encryptedPasswd, bufferLenght);
+   return FALSE;
+}
+
 /**
- * Decrypt password encrypted with nxencpassw
+ * Decrypt password encrypted with nxencpassw.
+ * In case when it was not possible to decrypt password as the decrypted password will be set the original one.
+ * The buffer length for encryptedPasswd and decryptedPasswd should be the same.
  */
-BOOL LIBNETXMS_EXPORTABLE DecryptPassword(const TCHAR *login, const TCHAR *encryptedPasswd, TCHAR *decryptedPasswd)
+BOOL LIBNETXMS_EXPORTABLE DecryptPassword(const TCHAR *login, const TCHAR *encryptedPasswd, TCHAR *decryptedPasswd, UINT32 bufferLenght)
 {
+   //check that lenght is correct
        if (_tcslen(encryptedPasswd) != 44)
-               return FALSE;
+      return DecryptPasswordFail(encryptedPasswd, decryptedPasswd, bufferLenght);
+
+   //check that password contain only allowed symbols
+   int containSymbols = _tcsspn(encryptedPasswd,_T("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"));
+   if(encryptedPasswd[43] != _T('=') || (containSymbols != 43 && (containSymbols != 42 && encryptedPasswd[42] != _T('='))))
+      return DecryptPasswordFail(encryptedPasswd, decryptedPasswd, bufferLenght);
 
 #ifdef UNICODE
        char *mbencrypted = MBStringFromWideString(encryptedPasswd);
@@ -1722,7 +1737,7 @@ BOOL LIBNETXMS_EXPORTABLE DecryptPassword(const TCHAR *login, const TCHAR *encry
        size_t encSize = 32;
        base64_decode(mbencrypted, strlen(mbencrypted), (char *)encrypted, &encSize);
        if (encSize != 32)
-               return FALSE;
+      return DecryptPasswordFail(encryptedPasswd, decryptedPasswd, bufferLenght);
 
        CalculateMD5Hash((BYTE *)mblogin, strlen(mblogin), key);
        ICEDecryptData(encrypted, 32, decrypted, key);
index b1bd559..f87c3f5 100644 (file)
@@ -37,7 +37,7 @@ TCHAR g_szDbDriver[MAX_PATH] = _T("");
 TCHAR g_szDbDrvParams[MAX_PATH] = _T("");
 TCHAR g_szDbServer[MAX_PATH] = _T("127.0.0.1");
 TCHAR g_szDbLogin[MAX_DB_LOGIN] = _T("netxms");
-TCHAR g_szDbPassword[MAX_DB_PASSWORD] = _T("");
+TCHAR g_szDbPassword[MAX_PASSWORD] = _T("");
 TCHAR g_szDbName[MAX_DB_NAME] = _T("netxms_db");
 TCHAR g_szDbSchema[MAX_DB_NAME] = _T("");
 
@@ -54,10 +54,10 @@ static NX_CFG_TEMPLATE m_cfgTemplate[] =
    { _T("DataDirectory"), CT_STRING, 0, 0, MAX_PATH, 0, g_netxmsdDataDir, NULL },
    { _T("DBDriver"), CT_STRING, 0, 0, MAX_PATH, 0, g_szDbDriver, NULL },
    { _T("DBDrvParams"), CT_STRING, 0, 0, MAX_PATH, 0, g_szDbDrvParams, NULL },
-   { _T("DBEncryptedPassword"), CT_STRING, 0, 0, MAX_DB_STRING, 0, s_encryptedDbPassword, NULL },
    { _T("DBLogin"), CT_STRING, 0, 0, MAX_DB_LOGIN, 0, g_szDbLogin, NULL },
    { _T("DBName"), CT_STRING, 0, 0, MAX_DB_NAME, 0, g_szDbName, NULL },
-   { _T("DBPassword"), CT_STRING, 0, 0, MAX_DB_PASSWORD, 0, g_szDbPassword, NULL },
+   { _T("DBPassword"), CT_STRING, 0, 0, MAX_PASSWORD, 0, g_szDbPassword, NULL },
+   { _T("DBEncryptedPassword"), CT_STRING, 0, 0, MAX_PASSWORD, 0, g_szDbPassword, NULL },
    { _T("DBSchema"), CT_STRING, 0, 0, MAX_DB_NAME, 0, g_szDbSchema, NULL },
    { _T("DBServer"), CT_STRING, 0, 0, MAX_PATH, 0, g_szDbServer, NULL },
    { _T("DebugLevel"), CT_LONG, 0, 0, 0, 0, &g_debugLevel, &g_debugLevel },
@@ -148,10 +148,7 @@ stop_search:
        delete config;
 
        // Decrypt password
-       if (s_encryptedDbPassword[0] != 0)
-       {
-               DecryptPassword(g_szDbLogin, s_encryptedDbPassword, g_szDbPassword);
-       }
+   DecryptPassword(g_szDbLogin, g_szDbPassword, g_szDbPassword, MAX_PASSWORD);
 
    return bSuccess;
 }
index 0bfb6d7..ee849b4 100644 (file)
@@ -286,14 +286,19 @@ void LDAPConnection::initLDAP()
  */
 void LDAPConnection::getAllSyncParameters()
 {
+   TCHAR tmpPwd[MAX_PASSWORD];
+   TCHAR tmpLogin[MAX_CONFIG_VALUE];
+   ConfigReadStr(_T("LdapSyncUserPassword"), tmpPwd, MAX_PASSWORD, _T(""));
+   ConfigReadStr(_T("LdapSyncUser"), tmpLogin, MAX_CONFIG_VALUE, _T(""));
+   DecryptPassword(tmpLogin, tmpPwd, tmpPwd, MAX_PASSWORD);
 #ifdef _WIN32
    ConfigReadStr(_T("LdapConnectionString"), m_connList, MAX_CONFIG_VALUE, _T(""));
-   ConfigReadStr(_T("LdapSyncUser"), m_userDN, MAX_CONFIG_VALUE, _T(""));
+   _tcsncpy(m_userDN, tmpLogin, MAX_CONFIG_VALUE);
    ConfigReadStr(_T("LdapSearchBase"), m_searchBase, MAX_CONFIG_VALUE, _T(""));
    ConfigReadStr(_T("LdapSearchFilter"), m_searchFilter, MAX_CONFIG_VALUE, _T("(objectClass=*)"));
    if (m_searchFilter[0] == 0)
       _tcscpy(m_searchFilter, _T("(objectClass=*)"));
-   ConfigReadStr(_T("LdapSyncUserPassword"), m_userPassword, MAX_CONFIG_VALUE, _T(""));
+   _tcsncpy(m_userPassword, tmpPwd, MAX_PASSWORD);
 #else
    ConfigReadStrUTF8(_T("LdapConnectionString"), m_connList, MAX_CONFIG_VALUE, "");
    ConfigReadStrUTF8(_T("LdapSyncUser"), m_userDN, MAX_CONFIG_VALUE, "");
@@ -301,7 +306,9 @@ void LDAPConnection::getAllSyncParameters()
    ConfigReadStrUTF8(_T("LdapSearchFilter"), m_searchFilter, MAX_CONFIG_VALUE, "(objectClass=*)");
    if (m_searchFilter[0] == 0)
       strcpy(m_searchFilter, "(objectClass=*)");
-   ConfigReadStrUTF8(_T("LdapSyncUserPassword"), m_userPassword, MAX_CONFIG_VALUE, "");
+   char *utf8Password = UTF8StringFromWideString(tmpPwd);
+   strcpy(m_userPassword, utf8Password);
+   safe_free(utf8Password);
 #endif
    ConfigReadStrUTF8(_T("LdapMappingName"), m_ldapLoginNameAttr, MAX_CONFIG_VALUE, "");
    ConfigReadStrUTF8(_T("LdapMappingFullName"), m_ldapFullNameAttr, MAX_CONFIG_VALUE, "");
index 95f36d4..07eb23b 100644 (file)
@@ -251,10 +251,22 @@ THREAD_RESULT THREAD_CALL XMPPConnectionManager(void *arg)
 
    s_xmppContext = xmpp_ctx_new(NULL, &s_logger);
 
-   char login[64], password[64];
-   ConfigReadStrA(_T("XMPPLogin"), login, 64, "netxms@localhost");
-   ConfigReadStrA(_T("XMPPPassword"), password, 64, "netxms");
+   TCHAR tmpLogin[64];
+   TCHAR tmpPassword[MAX_PASSWORD];
+
+   ConfigReadStr(_T("XMPPLogin"), tmpLogin, 64, _T("netxms@localhost"));
+   ConfigReadStr(_T("XMPPPassword"), tmpPassword, MAX_PASSWORD, _T("netxms"));
+   DecryptPassword(tmpLogin, tmpPassword, tmpPassword, MAX_PASSWORD);
 
+   char login[64], password[MAX_PASSWORD];
+#ifdef UNICODE
+   ConfigReadStrA(_T("XMPPLogin"), login, 64, "netxms@localhost");
+   char *_tmpPassword = UTF8StringFromWideString(tmpPassword);
+   strncpy(password, _tmpPassword, MAX_PASSWORD);
+#else
+   strncpy(password, tmpPassword, MAX_PASSWORD);
+   strncpy(login, tmpPassword, 64);
+#endif // UNICODE
    DbgPrintf(1, _T("XMPP connection manager started"));
 
    // outer loop - try to reconnect after disconnect
index 224d4d7..2bc3c08 100644 (file)
@@ -75,13 +75,13 @@ private:
    TCHAR m_searchBase[MAX_CONFIG_VALUE];
    TCHAR m_searchFilter[MAX_CONFIG_VALUE];
    TCHAR m_userDN[MAX_CONFIG_VALUE];
-   TCHAR m_userPassword[MAX_CONFIG_VALUE];
+   TCHAR m_userPassword[MAX_PASSWORD];
 #else
    char m_connList[MAX_CONFIG_VALUE];
    char m_searchBase[MAX_CONFIG_VALUE];
    char m_searchFilter[MAX_CONFIG_VALUE];
    char m_userDN[MAX_CONFIG_VALUE];
-   char m_userPassword[MAX_CONFIG_VALUE];
+   char m_userPassword[MAX_PASSWORD];
 #endif
    char m_ldapFullNameAttr[MAX_CONFIG_VALUE];
    char m_ldapLoginNameAttr[MAX_CONFIG_VALUE];
index e1ff85f..36a5581 100644 (file)
@@ -1,4 +1,4 @@
-/* 
+/*
 ** nxdbmgr - NetXMS database manager
 ** Copyright (C) 2004-2013 Victor Kirhenshtein
 **
@@ -35,17 +35,17 @@ static TCHAR s_dbDriver[MAX_PATH] = _T("");
 static TCHAR s_dbDrvParams[MAX_PATH] = _T("");
 static TCHAR s_dbServer[MAX_PATH] = _T("127.0.0.1");
 static TCHAR s_dbLogin[MAX_DB_LOGIN] = _T("netxms");
-static TCHAR s_dbPassword[MAX_DB_PASSWORD] = _T("");
+static TCHAR s_dbPassword[MAX_PASSWORD] = _T("");
 static TCHAR s_dbName[MAX_DB_NAME] = _T("netxms_db");
 static TCHAR s_dbSchema[MAX_DB_NAME] = _T("");
 static NX_CFG_TEMPLATE m_cfgTemplate[] =
 {
    { _T("DBDriver"), CT_STRING, 0, 0, MAX_PATH, 0, s_dbDriver },
    { _T("DBDrvParams"), CT_STRING, 0, 0, MAX_PATH, 0, s_dbDrvParams },
-   { _T("DBEncryptedPassword"), CT_STRING, 0, 0, MAX_DB_STRING, 0, s_encryptedDbPassword },
    { _T("DBLogin"), CT_STRING, 0, 0, MAX_DB_LOGIN, 0, s_dbLogin },
    { _T("DBName"), CT_STRING, 0, 0, MAX_DB_NAME, 0, s_dbName },
-   { _T("DBPassword"), CT_STRING, 0, 0, MAX_DB_PASSWORD, 0, s_dbPassword },
+   { _T("DBPassword"), CT_STRING, 0, 0, MAX_PASSWORD, 0, s_dbPassword },
+   { _T("DBEncryptedPassword"), CT_STRING, 0, 0, MAX_PASSWORD, 0, s_dbPassword },
    { _T("DBSchema"), CT_STRING, 0, 0, MAX_PATH, 0, s_dbSchema },
    { _T("DBServer"), CT_STRING, 0, 0, MAX_PATH, 0, s_dbServer },
    { _T(""), CT_END_OF_LIST, 0, 0, 0, 0, NULL }
@@ -268,10 +268,7 @@ void MigrateDatabase(const TCHAR *sourceConfig)
    }
 
        // Decrypt password
-       if (s_encryptedDbPassword[0] != 0)
-       {
-               DecryptPassword(s_dbLogin, s_encryptedDbPassword, s_dbPassword);
-       }
+   DecryptPassword(s_dbLogin, s_dbPassword, s_dbPassword, MAX_PASSWORD);
 
    if (!ConnectToSource())
       goto cleanup;
index 28392cf..ed43aef 100644 (file)
@@ -59,7 +59,7 @@ static TCHAR s_dbDriver[MAX_PATH] = _T("");
 static TCHAR s_dbDrvParams[MAX_PATH] = _T("");
 static TCHAR s_dbServer[MAX_PATH] = _T("127.0.0.1");
 static TCHAR s_dbLogin[MAX_DB_LOGIN] = _T("netxms");
-static TCHAR s_dbPassword[MAX_DB_PASSWORD] = _T("");
+static TCHAR s_dbPassword[MAX_PASSWORD] = _T("");
 static TCHAR s_dbName[MAX_DB_NAME] = _T("netxms_db");
 static TCHAR s_dbSchema[MAX_DB_NAME] = _T("");
 static NX_CFG_TEMPLATE m_cfgTemplate[] =
@@ -67,10 +67,10 @@ static NX_CFG_TEMPLATE m_cfgTemplate[] =
    { _T("CodePage"), CT_MB_STRING, 0, 0, MAX_PATH, 0, m_szCodePage },
    { _T("DBDriver"), CT_STRING, 0, 0, MAX_PATH, 0, s_dbDriver },
    { _T("DBDrvParams"), CT_STRING, 0, 0, MAX_PATH, 0, s_dbDrvParams },
-   { _T("DBEncryptedPassword"), CT_STRING, 0, 0, MAX_DB_STRING, 0, s_encryptedDbPassword },
    { _T("DBLogin"), CT_STRING, 0, 0, MAX_DB_LOGIN, 0, s_dbLogin },
    { _T("DBName"), CT_STRING, 0, 0, MAX_DB_NAME, 0, s_dbName },
-   { _T("DBPassword"), CT_STRING, 0, 0, MAX_DB_PASSWORD, 0, s_dbPassword },
+   { _T("DBPassword"), CT_STRING, 0, 0, MAX_PASSWORD, 0, s_dbPassword },
+   { _T("DBEncryptedPassword"), CT_STRING, 0, 0, MAX_PASSWORD, 0, s_dbPassword },
    { _T("DBSchema"), CT_STRING, 0, 0, MAX_DB_NAME, 0, s_dbSchema },
    { _T("DBServer"), CT_STRING, 0, 0, MAX_PATH, 0, s_dbServer },
    { _T(""), CT_END_OF_LIST, 0, 0, 0, 0, NULL }
@@ -752,10 +752,7 @@ stop_search:
        delete config;
 
        // Decrypt password
-       if (s_encryptedDbPassword[0] != 0)
-       {
-               DecryptPassword(s_dbLogin, s_encryptedDbPassword, s_dbPassword);
-       }
+   DecryptPassword(s_dbLogin, s_dbPassword, s_dbPassword, MAX_PASSWORD);
 
 #ifndef _WIN32
        SetDefaultCodepage(m_szCodePage);