Fixed incorrect usage of strncpy
authorVictor Kirhenshtein <victor@netxms.org>
Mon, 17 Oct 2005 20:45:54 +0000 (20:45 +0000)
committerVictor Kirhenshtein <victor@netxms.org>
Mon, 17 Oct 2005 20:45:54 +0000 (20:45 +0000)
79 files changed:
include/nms_agent.h
include/nms_util.h
src/agent/core/actions.cpp
src/agent/core/getparam.cpp
src/agent/core/netinfo.cpp
src/agent/core/nxagentd.cpp
src/agent/core/subagent.cpp
src/agent/core/tools.cpp
src/agent/subagents/freebsd/net.cpp
src/agent/subagents/linux/net.cpp
src/agent/subagents/linux/proc.cpp
src/agent/subagents/ping/ping.cpp
src/agent/subagents/python/main.cpp
src/agent/subagents/sunos/net.cpp
src/agent/subagents/sunos/process.cpp
src/agent/subagents/winperf/collect.cpp
src/agent/subagents/winperf/tools.cpp
src/agent/subagents/winperf/winperf.cpp
src/console/cmdline/main.cpp
src/console/nxav/nxav.cpp
src/console/win32/ActionEditor.cpp
src/console/win32/DCIDataView.cpp
src/console/win32/EventEditor.cpp
src/console/win32/EventPolicyEditor.cpp
src/console/win32/GraphFrame.h
src/console/win32/InternalItemSelDlg.cpp
src/console/win32/MainFrm.cpp
src/console/win32/PackageMgr.cpp
src/console/win32/RuleList.cpp
src/console/win32/ServerCfgEditor.cpp
src/console/win32/ToolBox.cpp
src/console/win32/TrapEditDlg.cpp
src/libnetxms/config.cpp
src/libnetxms/dload.cpp
src/libnetxms/inline.cpp
src/libnetxms/tools.cpp
src/libnxcl/package.cpp
src/libnxcl/session.cpp
src/nxevent/nxevent.cpp
src/nxmibc/nxmibc.cpp
src/nxreport/nxreport.cpp
src/server/core/actions.cpp
src/server/core/alarm.cpp
src/server/core/config.cpp
src/server/core/container.cpp
src/server/core/dcitem.cpp
src/server/core/dcivalue.cpp
src/server/core/email.cpp
src/server/core/events.cpp
src/server/core/image.cpp
src/server/core/interface.cpp
src/server/core/locks.cpp
src/server/core/modules.cpp
src/server/core/netinfo.cpp
src/server/core/netobj.cpp
src/server/core/node.cpp
src/server/core/objects.cpp
src/server/core/objtools.cpp
src/server/core/poll.cpp
src/server/core/session.cpp
src/server/core/sms.cpp
src/server/core/snmptrap.cpp
src/server/core/syslogd.cpp
src/server/core/tools.cpp
src/server/core/users.cpp
src/server/dbdrv/mssql/mssql.cpp
src/server/dbdrv/mssql/mssqldrv.h
src/server/include/nms_objects.h
src/server/libnxsrv/agent.cpp
src/server/netxmsd/netxmsd.cpp
src/server/tools/nxaction/nxaction.cpp
src/server/tools/nxconfig/WizardWorker.cpp
src/server/tools/nxdbmgr/check.cpp
src/server/tools/nxdbmgr/nxdbmgr.cpp
src/server/tools/nxdbmgr/upgrade.cpp
src/server/tools/nxget/nxget.cpp
src/server/tools/nxsnmpget/nxsnmpget.cpp
src/server/tools/nxsnmpwalk/nxsnmpwalk.cpp
src/server/tools/nxupload/nxupload.cpp

index 6cb2f84..a6bdb2c 100644 (file)
@@ -187,7 +187,8 @@ typedef struct
 
 inline void ret_string(TCHAR *rbuf, TCHAR *value)
 {
-   _tcsncpy(rbuf, value, MAX_RESULT_LENGTH);
+   _tcsncpy(rbuf, value, MAX_RESULT_LENGTH - 1);
+   rbuf[MAX_RESULT_LENGTH - 1] = 0;
 }
 
 inline void ret_int(TCHAR *rbuf, long value)
index 4ec2cc4..e5d30fb 100644 (file)
@@ -166,6 +166,19 @@ typedef struct _dir_struc
 #define SwapWideString(x)  __bswap_wstr(x)
 #endif
 
+#ifdef __cplusplus
+#ifndef LIBNETXMS_INLINE
+   inline TCHAR *nx_strncpy(TCHAR *pszDest, const TCHAR *pszSrc, int nLen)
+   {
+      _tcsncpy(pszDest, pszSrc, nLen - 1);
+      pszDest[nLen - 1] = 0;
+      return pszDest;
+   }
+#endif
+#else
+   TCHAR LIBNETXMS_EXPORTABLE *nx_strncpy(TCHAR *pszDest, TCHAR *pszSrc, int nLen);
+#endif
+
 #ifdef __cplusplus
 extern "C"
 {
index 218cea3..374186e 100644 (file)
@@ -49,9 +49,9 @@ BOOL AddAction(char *pszName, int iType, char *pArg,
    // Create new entry in action list
    m_dwNumActions++;
    m_pActionList = (ACTION *)realloc(m_pActionList, sizeof(ACTION) * m_dwNumActions);
-   strncpy(m_pActionList[i].szName, pszName, MAX_PARAM_NAME);
+   nx_strncpy(m_pActionList[i].szName, pszName, MAX_PARAM_NAME);
    m_pActionList[i].iType = iType;
-   strncpy(m_pActionList[i].szDescription, pszDescription, MAX_DB_STRING);
+   nx_strncpy(m_pActionList[i].szDescription, pszDescription, MAX_DB_STRING);
    switch(iType)
    {
       case AGENT_ACTION_EXEC:
@@ -60,7 +60,7 @@ BOOL AddAction(char *pszName, int iType, char *pArg,
       case AGENT_ACTION_SUBAGENT:
          m_pActionList[i].handler.sa.fpHandler = fpHandler;
          m_pActionList[i].handler.sa.pArg = pArg;
-         strncpy(m_pActionList[i].handler.sa.szSubagentName, pszSubAgent,MAX_PATH);
+         nx_strncpy(m_pActionList[i].handler.sa.szSubagentName, pszSubAgent,MAX_PATH);
          break;
       default:
          break;
index b760c5f..552ee26 100644 (file)
@@ -283,7 +283,7 @@ void AddParameter(char *pszName, LONG (* fpHandler)(char *,char *,char *), char
       // Replace existing handler and attributes
       m_pParamList[i].fpHandler = fpHandler;
       m_pParamList[i].iDataType = iDataType;
-      strncpy(m_pParamList[i].szDescription, pszDescription, MAX_DB_STRING);
+      nx_strncpy(m_pParamList[i].szDescription, pszDescription, MAX_DB_STRING);
 
       // If we are replacing System.PlatformName, add pointer to
       // platform suffix as argument, otherwise, use supplied pArg
@@ -300,11 +300,11 @@ void AddParameter(char *pszName, LONG (* fpHandler)(char *,char *,char *), char
    {
       // Add new parameter
       m_pParamList = (NETXMS_SUBAGENT_PARAM *)realloc(m_pParamList, sizeof(NETXMS_SUBAGENT_PARAM) * (m_iNumParams + 1));
-      strncpy(m_pParamList[m_iNumParams].szName, pszName, MAX_PARAM_NAME - 1);
+      nx_strncpy(m_pParamList[m_iNumParams].szName, pszName, MAX_PARAM_NAME - 1);
       m_pParamList[m_iNumParams].fpHandler = fpHandler;
       m_pParamList[m_iNumParams].pArg = pArg;
       m_pParamList[m_iNumParams].iDataType = iDataType;
-      strncpy(m_pParamList[m_iNumParams].szDescription, pszDescription, MAX_DB_STRING);
+      nx_strncpy(m_pParamList[m_iNumParams].szDescription, pszDescription, MAX_DB_STRING);
       m_iNumParams++;
    }
 }
@@ -332,7 +332,7 @@ void AddEnum(char *pszName, LONG (* fpHandler)(char *,char *,NETXMS_VALUES_LIST
    {
       // Add new enum
       m_pEnumList = (NETXMS_SUBAGENT_ENUM *)realloc(m_pEnumList, sizeof(NETXMS_SUBAGENT_ENUM) * (m_iNumEnums + 1));
-      strncpy(m_pEnumList[m_iNumEnums].szName, pszName, MAX_PARAM_NAME - 1);
+      nx_strncpy(m_pEnumList[m_iNumEnums].szName, pszName, MAX_PARAM_NAME - 1);
       m_pEnumList[m_iNumEnums].fpHandler = fpHandler;
       m_pEnumList[m_iNumEnums].pArg = pArg;
       m_iNumEnums++;
index a0556b1..d6ec78d 100644 (file)
@@ -102,13 +102,13 @@ LONG H_InterfaceList(char *cmd, char *arg, NETXMS_VALUES_LIST *value)
             }
             else
             {
-               strncpy(szAdapterName, pInfo->AdapterName, MAX_OBJECT_NAME);
+               nx_strncpy(szAdapterName, pInfo->AdapterName, MAX_OBJECT_NAME);
             }
          }
          else
          {
             // We don't have a GUID resolving function, use GUID as name
-            strncpy(szAdapterName, pInfo->AdapterName, MAX_OBJECT_NAME);
+            nx_strncpy(szAdapterName, pInfo->AdapterName, MAX_OBJECT_NAME);
          }
 
          BinToStr(pInfo->Address, pInfo->AddressLength, szMacAddr);
@@ -197,13 +197,13 @@ static DWORD AdapterNameToIndex(char *pszName)
             }
             else
             {
-               strncpy(szAdapterName, pInfo->AdapterName, MAX_OBJECT_NAME);
+               nx_strncpy(szAdapterName, pInfo->AdapterName, MAX_OBJECT_NAME);
             }
          }
          else
          {
             // We don't have a GUID resolving function, use GUID as name
-            strncpy(szAdapterName, pInfo->AdapterName, MAX_OBJECT_NAME);
+            nx_strncpy(szAdapterName, pInfo->AdapterName, MAX_OBJECT_NAME);
          }
 
          if (!stricmp(szAdapterName, pszName))
index 344eda3..cc1e102 100644 (file)
@@ -852,11 +852,11 @@ int main(int argc, char *argv[])
             g_dwFlags |= AF_DEBUG;
             break;
          case 'c':   // Configuration file
-            strncpy(g_szConfigFile, optarg, MAX_PATH - 1);
+            nx_strncpy(g_szConfigFile, optarg, MAX_PATH - 1);
             break;
 #if !defined(_WIN32) && !defined(_NETWARE)
          case 'p':   // PID file
-            strncpy(g_szPidFile, optarg, MAX_PATH - 1);
+            nx_strncpy(g_szPidFile, optarg, MAX_PATH - 1);
             break;
 #endif
          case 'C':   // Configuration check only
index 3c4cc87..d1f0cd7 100644 (file)
@@ -59,10 +59,10 @@ BOOL InitSubAgent(HMODULE hModule, TCHAR *pszModuleName,
          m_pSubAgentList = (SUBAGENT *)realloc(m_pSubAgentList, 
                                                sizeof(SUBAGENT) * (m_dwNumSubAgents + 1));
          m_pSubAgentList[m_dwNumSubAgents].hModule = hModule;
-         strncpy(m_pSubAgentList[m_dwNumSubAgents].szName, pszModuleName, MAX_PATH );
+         nx_strncpy(m_pSubAgentList[m_dwNumSubAgents].szName, pszModuleName, MAX_PATH );
          m_pSubAgentList[m_dwNumSubAgents].pInfo = pInfo;
 #ifdef _NETWARE
-         strncpy(m_pSubAgentList[m_dwNumSubAgents].szEntryPoint, pszEntryPoint, 256);
+         nx_strncpy(m_pSubAgentList[m_dwNumSubAgents].szEntryPoint, pszEntryPoint, 256);
 #endif
          m_dwNumSubAgents++;
 
index 3d77708..c20dce4 100644 (file)
@@ -82,7 +82,7 @@ void BuildFullPath(TCHAR *pszFileName, TCHAR *pszFullPath)
       _tcscat(pszFullPath, FS_PATH_SEPARATOR);
       nLen++;
    }
-   _tcsncpy(&pszFullPath[nLen], &pszFileName[i + 1], MAX_PATH - nLen);
+   nx_strncpy(&pszFullPath[nLen], &pszFileName[i + 1], MAX_PATH - nLen);
 }
 
 
@@ -108,7 +108,7 @@ char *GetPdhErrorText(DWORD dwError, char *pszBuffer, int iBufSize)
                      (LPSTR)&msgBuf, 0, NULL)>0)
    {
       msgBuf[strcspn(msgBuf, "\r\n")] = 0;
-      strncpy(pszBuffer, msgBuf, iBufSize);
+      nx_strncpy(pszBuffer, msgBuf, iBufSize);
       LocalFree(msgBuf);
    }
    else
index 7bf23d4..a684e51 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: net.cpp,v 1.9 2005-08-22 23:00:05 alk Exp $ */
+/* $Id: net.cpp,v 1.10 2005-10-17 20:45:46 victor Exp $ */
 
 /* 
 ** NetXMS subagent for FreeBSD
@@ -119,7 +119,7 @@ LONG H_NetIfAdmStatus(char *pszParam, char *pArg, char *pValue)
                                int flags;
 
                                memset(&ifr, 0, sizeof(ifr));
-                               strncpy(ifr.ifr_name, szArg, sizeof(ifr.ifr_name));
+                               nx_strncpy(ifr.ifr_name, szArg, sizeof(ifr.ifr_name));
                                if (ioctl(nSocket, SIOCGIFFLAGS, (caddr_t)&ifr) >= 0)
                                {
                                        flags = (ifr.ifr_flags & 0xffff) | (ifr.ifr_flagshigh << 16);
@@ -174,7 +174,7 @@ LONG H_NetIfLink(char *pszParam, char *pArg, char *pValue)
                                struct ifmediareq ifmr;
 
                                memset(&ifmr, 0, sizeof(ifmr));
-                               strncpy(ifmr.ifm_name, szArg, sizeof(ifmr.ifm_name));
+                               nx_strncpy(ifmr.ifm_name, szArg, sizeof(ifmr.ifm_name));
                                if (ioctl(nSocket, SIOCGIFMEDIA, (caddr_t)&ifmr) >= 0)
                                {
                                        if ((ifmr.ifm_status & IFM_AVALID) == IFM_AVALID &&
@@ -533,6 +533,9 @@ LONG H_NetIfList(char *pszParam, char *pArg, NETXMS_VALUES_LIST *pValue)
 /*
 
 $Log: not supported by cvs2svn $
+Revision 1.9  2005/08/22 23:00:05  alk
+Net.IP.RoutingTable added
+
 Revision 1.8  2005/06/12 17:58:36  victor
 Net.Interface.AdminStatus should return 2 for disabled interfaces
 
index d1bd2c5..e10dd34 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: net.cpp,v 1.9 2005-09-08 16:26:31 alk Exp $ */
+/* $Id: net.cpp,v 1.10 2005-10-17 20:45:46 victor Exp $ */
 
 /* 
 ** NetXMS subagent for GNU/Linux
@@ -127,7 +127,7 @@ LONG H_NetArpCache(char *pszParam, char *pArg, NETXMS_VALUES_LIST *pValue)
                                                continue;
                                        }
 
-                                       strncpy(irq.ifr_name, szIf, IFNAMSIZ);
+                                       nx_strncpy(irq.ifr_name, szIf, IFNAMSIZ);
                                        if (ioctl(nFd, SIOCGIFINDEX, &irq) != 0)
                                        {
                                                perror("ioctl()");
@@ -203,7 +203,7 @@ LONG H_NetRoutingTable(char *pszParam, char *pArg, NETXMS_VALUES_LIST *pValue)
                                        int nIndex;
                                        struct ifreq irq;
 
-                                       strncpy(irq.ifr_name, szIF, IFNAMSIZ);
+                                       nx_strncpy(irq.ifr_name, szIF, IFNAMSIZ);
                                        if (ioctl(nFd, SIOCGIFINDEX, &irq) != 0)
                                        {
                                                perror("ioctl()");
@@ -361,7 +361,7 @@ LONG H_NetIfInfoFromIOCTL(char *pszParam, char *pArg, char *pValue)
    else
    {
       // Name passed as argument
-      strncpy(ifr.ifr_name, szBuffer, IFNAMSIZ);
+      nx_strncpy(ifr.ifr_name, szBuffer, IFNAMSIZ);
    }
 
    // Get interface information
@@ -446,7 +446,7 @@ LONG H_NetIfInfoFromProc(char *pszParam, char *pArg, char *pValue)
    else
    {
       // Name passed as argument
-      strncpy(szName, szBuffer, IFNAMSIZ);
+      nx_strncpy(szName, szBuffer, IFNAMSIZ);
    }
 
    // Get interface information
@@ -526,6 +526,10 @@ LONG H_NetIfInfoFromProc(char *pszParam, char *pArg, char *pValue)
 /*
 
 $Log: not supported by cvs2svn $
+Revision 1.9  2005/09/08 16:26:31  alk
+Net.InterfaceList now use alternative way and works with virtual
+interfaces under 2.6
+
 Revision 1.8  2005/08/22 00:11:47  alk
 Net.IP.RoutingTable added
 
index 805789f..e9c9e34 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: proc.cpp,v 1.2 2005-01-18 17:09:33 alk Exp $ */
+/* $Id: proc.cpp,v 1.3 2005-10-17 20:45:46 victor Exp $ */
 
 /* 
 ** NetXMS subagent for GNU/Linux
@@ -120,7 +120,7 @@ int ProcRead(PROC_ENT **pEnt, char *szPatern)
                                                                        if (pEnt != NULL)
                                                                        {
                                                                                (*pEnt)[nFound].nPid = nPid;
-                                                                               strncpy((*pEnt)[nFound].szProcName, pProcName,
+                                                                               nx_strncpy((*pEnt)[nFound].szProcName, pProcName,
                                                                                                sizeof((*pEnt)[nFound].szProcName));
                                                                        }
                                                                }
@@ -143,6 +143,9 @@ int ProcRead(PROC_ENT **pEnt, char *szPatern)
 /*
 
 $Log: not supported by cvs2svn $
+Revision 1.2  2005/01/18 17:09:33  alk
+process name matching chaged from patern to exact match
+
 Revision 1.1  2004/10/22 22:08:34  alk
 source restructured;
 implemented:
index 8fb165a..f8a441c 100644 (file)
@@ -246,7 +246,7 @@ static BOOL AddTargetFromConfig(TCHAR *pszCfg)
       memset(&m_pTargetList[m_dwNumTargets], 0, sizeof(PING_TARGET));
       m_pTargetList[m_dwNumTargets].dwIpAddr = dwIpAddr;
       if (pszName != NULL)
-         _tcsncpy(m_pTargetList[m_dwNumTargets].szName, pszName, MAX_DB_STRING);
+         nx_strncpy(m_pTargetList[m_dwNumTargets].szName, pszName, MAX_DB_STRING);
       else
          IpToStr(ntohl(dwIpAddr), m_pTargetList[m_dwNumTargets].szName);
       m_pTargetList[m_dwNumTargets].dwPacketSize = dwPacketSize;
index 165b2a3..58a84a4 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: main.cpp,v 1.1.1.1 2005-02-01 20:18:04 alk Exp $ */
+/* $Id: main.cpp,v 1.2 2005-10-17 20:45:47 victor Exp $ */
 
 //#include <windows.h>
 #include <Python.h>
@@ -100,7 +100,7 @@ extern "C" BOOL SKELETON_EXPORTABLE NxSubAgentInit(NETXMS_SUBAGENT_INFO **ppInfo
                        bRet = TRUE;
 
                        m_info.dwNumParameters = 1;
-                       strncpy(m_param[0].szName, szCommand, sizeof(m_param[0].szName));
+                       nx_strncpy(m_param[0].szName, szCommand, sizeof(m_param[0].szName));
                        m_param[0].iDataType = m_nRetType;
                        
                *ppInfo = &m_info;
@@ -148,5 +148,10 @@ int _fini(void)
 /*
 
 $Log: not supported by cvs2svn $
+Revision 1.1.1.1  2005/02/01 20:18:04  alk
+initial import
+
+nb! NOT WORKING!
+
 
 */
index 2f19850..f3ca2f9 100644 (file)
@@ -137,7 +137,7 @@ LONG H_NetIfList(char *pszParam, char *pArg, NETXMS_VALUES_LIST *pValue)
                                        strcpy(rq.lifr_name, lc.lifc_req[i].lifr_name);
                                        if (ioctl(nFd, SIOCGLIFADDR, &rq) == 0)
                                        {
-                                               strncpy(szIpAddr, inet_ntoa(((struct sockaddr_in *)&rq.lifr_addr)->sin_addr), sizeof(szIpAddr));
+                                               nx_strncpy(szIpAddr, inet_ntoa(((struct sockaddr_in *)&rq.lifr_addr)->sin_addr), sizeof(szIpAddr));
                                        }
                                        else
                                        {
index 87045c0..b31f19a 100644 (file)
@@ -120,7 +120,7 @@ static int ProcRead(PROC_ENT **pEnt, char *pszPattern)
                                                if (pEnt != NULL)
                                                {
                                                        (*pEnt)[nFound].nPid = strtoul(pNameList[nCount]->d_name, NULL, 10);
-                                                       strncpy((*pEnt)[nFound].szProcName, psi.pr_fname,
+                                                       nx_strncpy((*pEnt)[nFound].szProcName, psi.pr_fname,
                                                                          sizeof((*pEnt)[nFound].szProcName));
                                                }
                                                nFound++;
index d57165c..9bb95a9 100644 (file)
@@ -159,10 +159,10 @@ BOOL AddCounterFromConfig(TCHAR *pszStr)
                   switch(iField)
                   {
                      case 0:  // Parameter name
-                        _tcsncpy(szParamName, pszCurrField, MAX_PARAM_NAME);
+                        nx_strncpy(szParamName, pszCurrField, MAX_PARAM_NAME);
                         break;
                      case 1:  // Counter path
-                        _tcsncpy(szCounterPath, pszCurrField, MAX_PATH);
+                        nx_strncpy(szCounterPath, pszCurrField, MAX_PATH);
                         break;
                      case 2:  // Number of samples
                         iNumSamples = _tcstol(pszCurrField, &eptr, 0);
@@ -181,7 +181,7 @@ BOOL AddCounterFromConfig(TCHAR *pszStr)
                            iState = 255;
                         break;
                      case 5:  // Description
-                        _tcsncpy(szDescription, pszCurrField, MAX_DB_STRING);
+                        nx_strncpy(szDescription, pszCurrField, MAX_DB_STRING);
                         break;
                      default:
                         iState = 255;  // Error
index 81e0d13..289a3c4 100644 (file)
@@ -39,7 +39,7 @@ TCHAR *GetPdhErrorText(DWORD dwError, TCHAR *pszBuffer, int iBufferSize)
                      (LPTSTR)&pszMsg, 0, NULL)>0)
    {
       TranslateStr(pszMsg, _T("\r\n"), _T(""));
-      _tcsncpy(pszBuffer, pszMsg, iBufferSize);
+      nx_strncpy(pszBuffer, pszMsg, iBufferSize);
       LocalFree(pszMsg);
    }
    else
index 3c2e3f9..90c103b 100644 (file)
@@ -401,11 +401,11 @@ BOOL AddParameter(TCHAR *pszName, LONG (* fpHandler)(TCHAR *, TCHAR *, TCHAR *),
                   sizeof(NETXMS_SUBAGENT_PARAM) * m_info.dwNumParameters);
    }
 
-   _tcsncpy(m_info.pParamList[i].szName, pszName, MAX_PARAM_NAME);
+   nx_strncpy(m_info.pParamList[i].szName, pszName, MAX_PARAM_NAME);
    m_info.pParamList[i].fpHandler = fpHandler;
    m_info.pParamList[i].pArg = pArg;
    m_info.pParamList[i].iDataType = iDataType;
-   _tcsncpy(m_info.pParamList[i].szDescription, pszDescription, MAX_DB_STRING);
+   nx_strncpy(m_info.pParamList[i].szDescription, pszDescription, MAX_DB_STRING);
    
    return TRUE;
 }
index c4cda71..1e04a0f 100644 (file)
@@ -112,14 +112,14 @@ int main(int argc, char *argv[])
             bStart = FALSE;
             break;
          case 'p':   // Password
-            strncpy(szPassword, optarg, 255);
+            nx_strncpy(szPassword, optarg, 255);
             bPasswordProvided = TRUE;
             break;
          case 's':   // Server
-            strncpy(szServer, optarg, 255);
+            nx_strncpy(szServer, optarg, 255);
             break;
          case 'u':   // Login
-            strncpy(szLogin, optarg, 255);
+            nx_strncpy(szLogin, optarg, 255);
             break;
          case '?':
             bStart = FALSE;
@@ -161,7 +161,8 @@ int main(int argc, char *argv[])
       NXCSetDebugCallback(DebugCallback);
 
    printf("Connecting to server %s as user %s ...\n", szServer, szLogin);
-   dwResult = NXCConnect(szServer, szLogin, szPassword, &g_hSession, FALSE, FALSE);
+   dwResult = NXCConnect(szServer, szLogin, szPassword, &g_hSession, 
+                         "nxcmd/" NETXMS_VERSION_STRING, FALSE, FALSE);
    if (dwResult != RCC_SUCCESS)
    {
       printf("Unable to connect to server: %s\n", NXCGetErrorText(dwResult));
index cdb5837..bea881a 100644 (file)
@@ -101,9 +101,9 @@ BOOL CAlarmViewApp::InitInstance()
          dlg.m_szPassword = g_szPassword;
          if (dlg.DoModal() != IDOK)
             return FALSE;
-         _tcsncpy(g_szServer, (LPCTSTR)dlg.m_szServer, MAX_PATH);
-         _tcsncpy(g_szLogin, (LPCTSTR)dlg.m_szLogin, MAX_USER_NAME);
-         _tcsncpy(g_szPassword, (LPCTSTR)dlg.m_szPassword, MAX_SECRET_LENGTH);
+         nx_strncpy(g_szServer, (LPCTSTR)dlg.m_szServer, MAX_PATH);
+         nx_strncpy(g_szLogin, (LPCTSTR)dlg.m_szLogin, MAX_USER_NAME);
+         nx_strncpy(g_szPassword, (LPCTSTR)dlg.m_szPassword, MAX_SECRET_LENGTH);
       }
 
       // Save last connection parameters
index 6241b35..c41299b 100644 (file)
@@ -273,7 +273,7 @@ void CActionEditor::OnActionNew()
             memset(&g_pActionList[i], 0, sizeof(NXC_ACTION));
             g_pActionList[i].dwId = dwActionId;
             g_pActionList[i].iType = ACTION_EXEC;
-            strncpy(g_pActionList[i].szName, dlg.m_strName, MAX_OBJECT_NAME);
+            nx_strncpy(g_pActionList[i].szName, dlg.m_strName, MAX_OBJECT_NAME);
             g_pActionList[i].pszData = strdup("");
          }
 
@@ -329,9 +329,9 @@ void CActionEditor::OnActionProperties()
                action.dwId = m_wndListCtrl.GetItemData(iItem);
                action.iType = dlg.m_iType;
                action.pszData = strdup((LPCTSTR)dlg.m_strData);
-               strncpy(action.szEmailSubject, (LPCTSTR)dlg.m_strSubject, MAX_EMAIL_SUBJECT_LEN);
-               strncpy(action.szName, (LPCTSTR)dlg.m_strName, MAX_OBJECT_NAME);
-               strncpy(action.szRcptAddr, (LPCTSTR)dlg.m_strRcpt, MAX_RCPT_ADDR_LEN);
+               nx_strncpy(action.szEmailSubject, (LPCTSTR)dlg.m_strSubject, MAX_EMAIL_SUBJECT_LEN);
+               nx_strncpy(action.szName, (LPCTSTR)dlg.m_strName, MAX_OBJECT_NAME);
+               nx_strncpy(action.szRcptAddr, (LPCTSTR)dlg.m_strRcpt, MAX_RCPT_ADDR_LEN);
 
                dwResult = DoRequestArg2(NXCModifyAction, g_hSession, &action, "Updating action configuration...");
                if (dwResult == RCC_SUCCESS)
index e13fc5d..fc44e1d 100644 (file)
@@ -27,7 +27,7 @@ CDCIDataView::CDCIDataView(DWORD dwNodeId, DWORD dwItemId, TCHAR *pszItemName)
 {
    m_dwNodeId = dwNodeId;
    m_dwItemId = dwItemId;
-   _tcsncpy(m_szItemName, pszItemName, MAX_OBJECT_NAME + MAX_ITEM_NAME + 4);
+   nx_strncpy(m_szItemName, pszItemName, MAX_OBJECT_NAME + MAX_ITEM_NAME + 4);
 }
 
 CDCIDataView::CDCIDataView(TCHAR *pszParams)
index 9b61436..224acd3 100644 (file)
@@ -178,7 +178,7 @@ BOOL CEventEditor::EditEvent(int iItem)
          evt.dwSeverity = dlgEditEvent.m_dwSeverity;
          evt.pszDescription = _tcsdup((LPCTSTR)dlgEditEvent.m_strDescription);
          evt.pszMessage = _tcsdup((LPCTSTR)dlgEditEvent.m_strMessage);
-         _tcsncpy(evt.szName, (LPCTSTR)dlgEditEvent.m_strName, MAX_EVENT_NAME);
+         nx_strncpy(evt.szName, (LPCTSTR)dlgEditEvent.m_strName, MAX_EVENT_NAME);
 
          dwResult = DoRequestArg2(NXCSetEventInfo, g_hSession, 
                                   &evt, _T("Updating event configuration database..."));
index 64ba9ac..2554e09 100644 (file)
@@ -861,9 +861,9 @@ void CEventPolicyEditor::EditAlarm(int iRow)
       {
          m_pEventPolicy->pRuleList[iRow].dwFlags |= RF_GENERATE_ALARM;
          m_pEventPolicy->pRuleList[iRow].wAlarmSeverity = dlg.m_iSeverity;
-         strncpy(m_pEventPolicy->pRuleList[iRow].szAlarmMessage, (LPCTSTR)dlg.m_strMessage, MAX_DB_STRING);
-         strncpy(m_pEventPolicy->pRuleList[iRow].szAlarmKey, (LPCTSTR)dlg.m_strKey, MAX_DB_STRING);
-         strncpy(m_pEventPolicy->pRuleList[iRow].szAlarmAckKey, (LPCTSTR)dlg.m_strAckKey, MAX_DB_STRING);
+         nx_strncpy(m_pEventPolicy->pRuleList[iRow].szAlarmMessage, (LPCTSTR)dlg.m_strMessage, MAX_DB_STRING);
+         nx_strncpy(m_pEventPolicy->pRuleList[iRow].szAlarmKey, (LPCTSTR)dlg.m_strKey, MAX_DB_STRING);
+         nx_strncpy(m_pEventPolicy->pRuleList[iRow].szAlarmAckKey, (LPCTSTR)dlg.m_strAckKey, MAX_DB_STRING);
       }
       else
       {
index 108c2f2..42904d7 100644 (file)
@@ -106,7 +106,7 @@ private:
        CGraph m_wndGraph;
 
 public:
-   void SetSubTitle(TCHAR *pszText) { _tcsncpy(m_szSubTitle, pszText, 256); }
+   void SetSubTitle(TCHAR *pszText) { nx_strncpy(m_szSubTitle, pszText, 256); }
    TCHAR *GetSubTitle(void) { return m_szSubTitle; }
 };
 
index 5d23552..94a498e 100644 (file)
@@ -118,8 +118,8 @@ void CInternalItemSelDlg::OnOK()
       DWORD dwIndex;
 
       dwIndex = m_wndListCtrl.GetItemData(m_wndListCtrl.GetSelectionMark());
-      _tcsncpy(m_szItemName, m_itemList[dwIndex].pszName, MAX_DB_STRING);
-      _tcsncpy(m_szItemDescription, m_itemList[dwIndex].pszDescription, MAX_DB_STRING);
+      nx_strncpy(m_szItemName, m_itemList[dwIndex].pszName, MAX_DB_STRING);
+      nx_strncpy(m_szItemDescription, m_itemList[dwIndex].pszDescription, MAX_DB_STRING);
       m_iDataType = m_itemList[dwIndex].iDataType;
           CDialog::OnOK();
    }
index 457c0e0..ef2f9a6 100644 (file)
@@ -392,7 +392,7 @@ void CMainFrame::OnDesktopSaveas()
    {
       TCHAR szName[MAX_OBJECT_NAME];
 
-      _tcsncpy(szName, (LPCTSTR)dlg.m_strName, MAX_OBJECT_NAME);
+      nx_strncpy(szName, (LPCTSTR)dlg.m_strName, MAX_OBJECT_NAME);
       StrStrip(szName);
       if (szName[0] != 0)
       {
@@ -489,7 +489,7 @@ void CMainFrame::OnDesktopRestore()
    dlg.m_bRestore = TRUE;
    if (dlg.DoModal() == IDOK)
    {
-      _tcsncpy(szName, (LPCTSTR)dlg.m_strName, MAX_OBJECT_NAME);
+      nx_strncpy(szName, (LPCTSTR)dlg.m_strName, MAX_OBJECT_NAME);
       StrStrip(szName);
 
       // Close existing windows
index 0707cc9..0eca8e5 100644 (file)
@@ -210,7 +210,7 @@ static DWORD InstallPackage(TCHAR *pszPkgFile, NXC_PACKAGE_INFO *pInfo)
    dwResult = NXCParseNPIFile(pszPkgFile, pInfo);
    if (dwResult == RCC_SUCCESS)
    {
-      _tcsncpy(szDataFile, pszPkgFile, MAX_PATH);
+      nx_strncpy(szDataFile, pszPkgFile, MAX_PATH);
       ptr = _tcsrchr(szDataFile, _T('\\'));
       ASSERT(ptr != NULL);
       if (ptr == NULL)  // Normally we should receive full path, so it's just a paranoid check
index 6f58831..af6ea6d 100644 (file)
@@ -543,7 +543,7 @@ int CRuleList::InsertColumn(int iInsertBefore, char *pszText, int iWidth, DWORD
               sizeof(RL_COLUMN) * (m_iNumColumns - iNewCol));
    m_iNumColumns++;
    m_pColList[iNewCol].m_iWidth = iWidth;
-   strncpy(m_pColList[iNewCol].m_szName, pszText, MAX_COLUMN_NAME);
+   nx_strncpy(m_pColList[iNewCol].m_szName, pszText, MAX_COLUMN_NAME);
    m_pColList[iNewCol].m_dwFlags = dwFlags;
 
    // Insert new item into header control
index 28d22e5..6cdf321 100644 (file)
@@ -228,7 +228,7 @@ void CServerCfgEditor::OnVariableEdit()
       dlg.m_strValue = szValue;
       if (dlg.DoModal() == IDOK)
       {
-         _tcsncpy(szValue, (LPCTSTR)dlg.m_strValue, MAX_DB_STRING);
+         nx_strncpy(szValue, (LPCTSTR)dlg.m_strValue, MAX_DB_STRING);
          dwResult = DoRequestArg3(NXCSetServerVariable, g_hSession,
                                   szName, szValue, _T("Updating configuration variable..."));
          if (dwResult == RCC_SUCCESS)
@@ -258,8 +258,8 @@ void CServerCfgEditor::OnVariableNew()
    dlg.m_bNewVariable = TRUE;
    if (dlg.DoModal() == IDOK)
    {
-      _tcsncpy(szName, (LPCTSTR)dlg.m_strName, MAX_OBJECT_NAME);
-      _tcsncpy(szValue, (LPCTSTR)dlg.m_strValue, MAX_DB_STRING);
+      nx_strncpy(szName, (LPCTSTR)dlg.m_strName, MAX_OBJECT_NAME);
+      nx_strncpy(szValue, (LPCTSTR)dlg.m_strValue, MAX_DB_STRING);
 
       lvfi.flags = LVFI_STRING;
       lvfi.psz = szName;
index d978465..5caa225 100644 (file)
@@ -57,7 +57,7 @@ BOOL CToolBox::PreCreateWindow(CREATESTRUCT& cs)
 
 BOOL CToolBox::Create(LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext)
 {
-   strncpy(m_szTitle, lpszWindowName, MAX_TOOLBOX_TITLE - 1);
+   nx_strncpy(m_szTitle, lpszWindowName, MAX_TOOLBOX_TITLE - 1);
        return CWnd::Create(NULL, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext);
 }
 
index 36cbd06..e71abe5 100644 (file)
@@ -241,7 +241,7 @@ void CTrapEditDlg::OnButtonAdd()
    {
       m_trap.pMaps = 
          (NXC_OID_MAP *)realloc(m_trap.pMaps, sizeof(NXC_OID_MAP) * (m_trap.dwNumMaps + 1));
-      _tcsncpy(m_trap.pMaps[m_trap.dwNumMaps].szDescription, 
+      nx_strncpy(m_trap.pMaps[m_trap.dwNumMaps].szDescription, 
                dlg.m_strDescription, MAX_DB_STRING);
       m_trap.pMaps[m_trap.dwNumMaps].dwOidLen = 
          SNMPParseOID(dlg.m_strOID, pdwOid, MAX_OID_LEN);
@@ -298,7 +298,7 @@ void CTrapEditDlg::OnButtonEdit()
          dlg.m_strOID = szBuffer;
          if (dlg.DoModal() == IDOK)
          {
-            _tcsncpy(m_trap.pMaps[iItem].szDescription, 
+            nx_strncpy(m_trap.pMaps[iItem].szDescription, 
                      dlg.m_strDescription, MAX_DB_STRING);
             m_trap.pMaps[iItem].dwOidLen = 
                SNMPParseOID(dlg.m_strOID, pdwOid, MAX_OID_LEN);
index f2e6c64..100061a 100644 (file)
@@ -128,7 +128,7 @@ DWORD LIBNETXMS_EXPORTABLE NxLoadConfig(TCHAR *pszFileName, TCHAR *pszSection,
                      }
                      break;
                   case CT_STRING:
-                     _tcsncpy((TCHAR *)pTemplateList[i].pBuffer, ptr, pTemplateList[i].dwBufferSize);
+                     nx_strncpy((TCHAR *)pTemplateList[i].pBuffer, ptr, pTemplateList[i].dwBufferSize);
                      break;
                   case CT_STRING_LIST:
                      iLength = _tcslen(ptr) + 2;
index 7a1f28a..3f9b48f 100644 (file)
@@ -45,7 +45,7 @@ HMODULE LIBNETXMS_EXPORTABLE DLOpen(TCHAR *szLibName, TCHAR *pszErrorText)
 #elif defined(_NETWARE)
    TCHAR szBuffer[MAX_PATH + 4];
 
-   _tcsncpy(&szBuffer[4], szLibName, MAX_PATH);
+   nx_strncpy(&szBuffer[4], szLibName, MAX_PATH);
    if (LoadModule(getscreenhandle(), &szBuffer[4], LO_RETURN_HANDLE) == 0)
    {
       hModule = *((HMODULE *)szBuffer);
@@ -58,7 +58,7 @@ HMODULE LIBNETXMS_EXPORTABLE DLOpen(TCHAR *szLibName, TCHAR *pszErrorText)
 #else    /* _WIN32 */
    hModule = dlopen(szLibName, RTLD_NOW | RTLD_GLOBAL);
    if (hModule == NULL)
-      strncpy(pszErrorText, dlerror(), 255);
+      nx_strncpy(pszErrorText, dlerror(), 255);
 #endif
    return hModule;
 }
@@ -115,7 +115,7 @@ void LIBNETXMS_EXPORTABLE *DLGetSymbolAddr(HMODULE hModule,
 #else    /* _WIN32 */
    pAddr = dlsym(hModule, pszSymbol);
    if (pAddr == NULL)
-      _tcsncpy(pszErrorText, dlerror(), 255);
+      nx_strncpy(pszErrorText, dlerror(), 255);
 #endif
    return pAddr;
 }
index beafc8e..ffbda26 100644 (file)
@@ -31,7 +31,8 @@
 
 extern "C" void LIBNETXMS_EXPORTABLE ret_string(TCHAR *rbuf, TCHAR *value)
 {
-   _tcsncpy(rbuf, value, MAX_RESULT_LENGTH);
+   _tcsncpy(rbuf, value, MAX_RESULT_LENGTH - 1);
+   rbuf[MAX_RESULT_LENGTH - 1] = 0;
 }
 
 extern "C" void LIBNETXMS_EXPORTABLE ret_int(TCHAR *rbuf, long value)
@@ -66,3 +67,10 @@ extern "C" void LIBNETXMS_EXPORTABLE ret_uint64(TCHAR *rbuf, QWORD value)
    _stprintf(rbuf, _T("%llu"), value);
 #endif   /* _WIN32 */
 }
+
+extern "C" TCHAR LIBNETXMS_EXPORTABLE *nx_strncpy(TCHAR *pszDest, const TCHAR *pszSrc, int nLen)
+{
+   _tcsncpy(pszDest, pszSrc, nLen - 1);
+   pszDest[nLen - 1] = 0;
+   return pszDest;
+}
index 761eaed..13cbb93 100644 (file)
@@ -430,7 +430,7 @@ TCHAR LIBNETXMS_EXPORTABLE *GetSystemErrorText(DWORD dwError, TCHAR *pszBuffer,
                      (LPTSTR)&msgBuf, 0, NULL) > 0)
    {
       msgBuf[_tcscspn(msgBuf, _T("\r\n"))] = 0;
-      _tcsncpy(pszBuffer, msgBuf, iBufSize);
+      nx_strncpy(pszBuffer, msgBuf, iBufSize);
       LocalFree(msgBuf);
    }
    else
index 43a730a..3450be4 100644 (file)
@@ -233,23 +233,23 @@ DWORD LIBNXCL_EXPORTABLE NXCParseNPIFile(TCHAR *pszInfoFile, NXC_PACKAGE_INFO *p
 
          if (!_tcscmp(szTag, _T("NAME")))
          {
-            _tcsncpy(pInfo->szName, ptr, MAX_PACKAGE_NAME_LEN);
+            nx_strncpy(pInfo->szName, ptr, MAX_PACKAGE_NAME_LEN);
          }
          else if (!_tcscmp(szTag, _T("PLATFORM")))
          {
-            _tcsncpy(pInfo->szPlatform, ptr, MAX_PLATFORM_NAME_LEN);
+            nx_strncpy(pInfo->szPlatform, ptr, MAX_PLATFORM_NAME_LEN);
          }
          else if (!_tcscmp(szTag, _T("VERSION")))
          {
-            _tcsncpy(pInfo->szVersion, ptr, MAX_AGENT_VERSION_LEN);
+            nx_strncpy(pInfo->szVersion, ptr, MAX_AGENT_VERSION_LEN);
          }
          else if (!_tcscmp(szTag, _T("DESCRIPTION")))
          {
-            _tcsncpy(pInfo->szDescription, ptr, MAX_DB_STRING);
+            nx_strncpy(pInfo->szDescription, ptr, MAX_DB_STRING);
          }
          else if (!_tcscmp(szTag, _T("FILE")))
          {
-            _tcsncpy(pInfo->szFileName, GetCleanFileName(ptr), MAX_DB_STRING);
+            nx_strncpy(pInfo->szFileName, GetCleanFileName(ptr), MAX_DB_STRING);
          }
          else
          {
index b34e871..77e1fe6 100644 (file)
@@ -577,7 +577,7 @@ BOOL NXCL_Session::GetEventNameEx(DWORD dwId, TCHAR *pszBuffer, DWORD dwBufSize)
    for(i = 0; i < m_dwNumTemplates; i++)
       if (m_ppEventTemplates[i]->dwCode == dwId)
       {
-         _tcsncpy(pszBuffer, m_ppEventTemplates[i]->szName, dwBufSize);
+         nx_strncpy(pszBuffer, m_ppEventTemplates[i]->szName, dwBufSize);
          MutexUnlock(m_mutexEventAccess);
          return TRUE;
       }
@@ -620,7 +620,7 @@ BOOL NXCL_Session::GetEventText(DWORD dwId, TCHAR *pszBuffer, DWORD dwBufSize)
    for(i = 0; i < m_dwNumTemplates; i++)
       if (m_ppEventTemplates[i]->dwCode == dwId)
       {
-         _tcsncpy(pszBuffer, m_ppEventTemplates[i]->pszMessage, dwBufSize);
+         nx_strncpy(pszBuffer, m_ppEventTemplates[i]->pszMessage, dwBufSize);
          MutexUnlock(m_mutexEventAccess);
          return TRUE;
       }
index aaca1ac..de552e4 100644 (file)
@@ -120,10 +120,10 @@ int main(int argc, char *argv[])
             m_dwObjectId = _tcstoul(optarg, NULL, 0);
             break;
          case 'u':
-            _tcsncpy(m_szLogin, optarg, MAX_DB_STRING);
+            nx_strncpy(m_szLogin, optarg, MAX_DB_STRING);
             break;
          case 'P':
-            _tcsncpy(m_szPassword, optarg, MAX_DB_STRING);
+            nx_strncpy(m_szPassword, optarg, MAX_DB_STRING);
             break;
          case 'w':
             m_dwTimeOut = _tcstoul(optarg, NULL, 0);
@@ -163,7 +163,7 @@ int main(int argc, char *argv[])
             return 4;
          }
 #endif
-         strncpy(m_szServer, argv[optind], 256);
+         nx_strncpy(m_szServer, argv[optind], 256);
          m_dwEventCode = _tcstoul(argv[optind + 1], NULL, 0);
          SendEvent(argc - optind - 2, &argv[optind + 2]);
       }
index a4d4839..ae8df17 100644 (file)
@@ -176,7 +176,7 @@ int main(int argc, char *argv[])
             ScanDirectory(optarg);
             break;
          case 'o':
-            strncpy(m_szOutFile, optarg, MAX_PATH);
+            nx_strncpy(m_szOutFile, optarg, MAX_PATH);
             break;
          case 's':
             dwFlags |= SMT_SKIP_DESCRIPTIONS;
index ecf14c8..0af8093 100644 (file)
@@ -184,10 +184,10 @@ int main(int argc, char *argv[])
             gs_dwRootObj = _tcstoul(optarg, NULL, 0);
             break;
          case 'P':
-            _tcsncpy(szPassword, optarg, MAX_DB_STRING);
+            nx_strncpy(szPassword, optarg, MAX_DB_STRING);
             break;
          case 'u':
-            _tcsncpy(szLogin, optarg, MAX_DB_STRING);
+            nx_strncpy(szLogin, optarg, MAX_DB_STRING);
             break;
          case 'v':
             printf("NetXMS Event Sender  Version " NETXMS_VERSION_STRING "\n");
@@ -231,7 +231,7 @@ int main(int argc, char *argv[])
             return 4;
          }
 #endif
-         strncpy(szServer, argv[optind], 256);
+         nx_strncpy(szServer, argv[optind], 256);
          
          if (!NXCInitialize())
                        {
index 9cba71e..bed8a66 100644 (file)
@@ -86,7 +86,7 @@ static BOOL LoadActions(void)
       for(i = 0; i < m_dwNumActions; i++)
       {
          m_pActionList[i].dwId = DBGetFieldULong(hResult, i, 0);
-         strncpy(m_pActionList[i].szName, DBGetField(hResult, i, 1), MAX_OBJECT_NAME);
+         nx_strncpy(m_pActionList[i].szName, DBGetField(hResult, i, 1), MAX_OBJECT_NAME);
          m_pActionList[i].iType = DBGetFieldLong(hResult, i, 2);
          m_pActionList[i].bIsDisabled = DBGetFieldLong(hResult, i, 3);
 
@@ -285,7 +285,7 @@ DWORD CreateNewAction(char *pszName, DWORD *pdwId)
       m_dwNumActions++;
       m_pActionList = (NXC_ACTION *)realloc(m_pActionList, sizeof(NXC_ACTION) * m_dwNumActions);
       m_pActionList[i].dwId = CreateUniqueId(IDG_ACTION);
-      strncpy(m_pActionList[i].szName, pszName, MAX_OBJECT_NAME);
+      nx_strncpy(m_pActionList[i].szName, pszName, MAX_OBJECT_NAME);
       m_pActionList[i].bIsDisabled = TRUE;
       m_pActionList[i].iType = ACTION_EXEC;
       m_pActionList[i].szEmailSubject[0] = 0;
index 4d345b7..79255f4 100644 (file)
@@ -99,10 +99,10 @@ BOOL AlarmManager::Init(void)
          m_pAlarmList[i].dwSourceObject = DBGetFieldULong(hResult, i, 2);
          m_pAlarmList[i].dwSourceEventCode = DBGetFieldULong(hResult, i, 3);
          m_pAlarmList[i].qwSourceEventId = DBGetFieldUInt64(hResult, i, 4);
-         strncpy(m_pAlarmList[i].szMessage, DBGetField(hResult, i, 5), MAX_DB_STRING);
+         nx_strncpy(m_pAlarmList[i].szMessage, DBGetField(hResult, i, 5), MAX_DB_STRING);
          DecodeSQLString(m_pAlarmList[i].szMessage);
          m_pAlarmList[i].wSeverity = (WORD)DBGetFieldLong(hResult, i, 6);
-         strncpy(m_pAlarmList[i].szKey, DBGetField(hResult, i, 7), MAX_DB_STRING);
+         nx_strncpy(m_pAlarmList[i].szKey, DBGetField(hResult, i, 7), MAX_DB_STRING);
          DecodeSQLString(m_pAlarmList[i].szKey);
          m_pAlarmList[i].wIsAck = 0;
          m_pAlarmList[i].dwAckByUser = 0;
@@ -137,8 +137,8 @@ void AlarmManager::NewAlarm(char *pszMsg, char *pszKey, BOOL bIsAck, int iSeveri
    alarm.dwAckByUser = 0;
    alarm.wIsAck = bIsAck;
    alarm.wSeverity = iSeverity;
-   strncpy(alarm.szMessage, pszExpMsg, MAX_DB_STRING);
-   strncpy(alarm.szKey, pszExpKey, MAX_DB_STRING);
+   nx_strncpy(alarm.szMessage, pszExpMsg, MAX_DB_STRING);
+   nx_strncpy(alarm.szKey, pszExpKey, MAX_DB_STRING);
    free(pszExpMsg);
    free(pszExpKey);
 
index 25d1d9e..9d75829 100644 (file)
@@ -75,7 +75,7 @@ BOOL NXCORE_EXPORTABLE ConfigReadStr(char *szVar, char *szBuffer, int iBufSize,
    char szQuery[256];
    BOOL bSuccess = FALSE;
 
-   strncpy(szBuffer, szDefault, iBufSize);
+   nx_strncpy(szBuffer, szDefault, iBufSize);
    if (strlen(szVar) > 127)
       return FALSE;
 
@@ -86,7 +86,7 @@ BOOL NXCORE_EXPORTABLE ConfigReadStr(char *szVar, char *szBuffer, int iBufSize,
 
    if (DBGetNumRows(hResult) > 0)
    {
-      strncpy(szBuffer, DBGetField(hResult, 0, 0), iBufSize - 1);
+      nx_strncpy(szBuffer, DBGetField(hResult, 0, 0), iBufSize - 1);
       DecodeSQLString(szBuffer);
       bSuccess = TRUE;
    }
index 044e9be..cb36c07 100644 (file)
@@ -59,7 +59,7 @@ Container::Container()
 Container::Container(char *pszName, DWORD dwCategory, char *pszDescription)
           :NetObj()
 {
-   strncpy(m_szName, pszName, MAX_OBJECT_NAME);
+   nx_strncpy(m_szName, pszName, MAX_OBJECT_NAME);
    m_pszDescription = strdup(pszDescription);
    m_pdwChildIdList = NULL;
    m_dwChildIdListSize = 0;
index c94bfee..eed9930 100644 (file)
@@ -110,7 +110,7 @@ DCItem::DCItem(DB_RESULT hResult, int iRow, Template *pNode)
    DB_RESULT hRawResult;
 
    m_dwId = DBGetFieldULong(hResult, iRow, 0);
-   strncpy(m_szName, DBGetField(hResult, iRow, 1), MAX_ITEM_NAME);
+   nx_strncpy(m_szName, DBGetField(hResult, iRow, 1), MAX_ITEM_NAME);
    DecodeSQLString(m_szName);
    m_iSource = (BYTE)DBGetFieldLong(hResult, iRow, 2);
    m_iDataType = (BYTE)DBGetFieldLong(hResult, iRow, 3);
@@ -121,9 +121,9 @@ DCItem::DCItem(DB_RESULT hResult, int iRow, Template *pNode)
    m_pszFormula = strdup(DBGetField(hResult, iRow, 8));
    DecodeSQLString(m_pszFormula);
    m_dwTemplateId = DBGetFieldULong(hResult, iRow, 9);
-   strncpy(m_szDescription, DBGetField(hResult, iRow, 10), MAX_DB_STRING);
+   nx_strncpy(m_szDescription, DBGetField(hResult, iRow, 10), MAX_DB_STRING);
    DecodeSQLString(m_szDescription);
-   strncpy(m_szInstance, DBGetField(hResult, iRow, 11), MAX_DB_STRING);
+   nx_strncpy(m_szInstance, DBGetField(hResult, iRow, 11), MAX_DB_STRING);
    DecodeSQLString(m_szInstance);
    m_dwTemplateItemId = DBGetFieldULong(hResult, iRow, 12);
    m_iBusy = 0;
@@ -164,9 +164,9 @@ DCItem::DCItem(DWORD dwId, char *szName, int iSource, int iDataType,
    m_dwId = dwId;
    m_dwTemplateId = 0;
    m_dwTemplateItemId = 0;
-   strncpy(m_szName, szName, MAX_ITEM_NAME);
+   nx_strncpy(m_szName, szName, MAX_ITEM_NAME);
    if (pszDescription != NULL)
-      strncpy(m_szDescription, pszDescription, MAX_DB_STRING);
+      nx_strncpy(m_szDescription, pszDescription, MAX_DB_STRING);
    else
       strcpy(m_szDescription, m_szName);
    m_szInstance[0] = 0;
index c41d6a6..f6f80d8 100644 (file)
@@ -45,7 +45,7 @@ ItemValue::ItemValue()
 
 ItemValue::ItemValue(const TCHAR *pszValue, DWORD dwTimeStamp)
 {
-   strncpy(m_szString, pszValue, MAX_DB_STRING);
+   nx_strncpy(m_szString, pszValue, MAX_DB_STRING);
    m_iInt32 = strtol(m_szString, NULL, 0);
    m_iInt64 = strtoll(m_szString, NULL, 0);
    m_dwInt32 = strtoul(m_szString, NULL, 0);
@@ -101,7 +101,7 @@ const ItemValue& ItemValue::operator=(const ItemValue &src)
 
 const ItemValue& ItemValue::operator=(const TCHAR *pszStr)
 {
-   strncpy(m_szString, pszStr, MAX_DB_STRING);
+   nx_strncpy(m_szString, pszStr, MAX_DB_STRING);
    m_iInt32 = strtol(m_szString, NULL, 0);
    m_iInt64 = strtoll(m_szString, NULL, 0);
    m_dwInt32 = strtoul(m_szString, NULL, 0);
index eea9408..cca5158 100644 (file)
@@ -337,8 +337,8 @@ void NXCORE_EXPORTABLE PostMail(char *pszRcpt, char *pszSubject, char *pszText)
    MAIL_ENVELOPE *pEnvelope;
 
    pEnvelope = (MAIL_ENVELOPE *)malloc(sizeof(MAIL_ENVELOPE));
-   strncpy(pEnvelope->szRcptAddr, pszRcpt, MAX_RCPT_ADDR_LEN);
-   strncpy(pEnvelope->szSubject, pszSubject, MAX_EMAIL_SUBJECT_LEN);
+   nx_strncpy(pEnvelope->szRcptAddr, pszRcpt, MAX_RCPT_ADDR_LEN);
+   nx_strncpy(pEnvelope->szSubject, pszSubject, MAX_EMAIL_SUBJECT_LEN);
    pEnvelope->pszText = strdup(pszText);
    m_pMailerQueue->Put(pEnvelope);
 }
index 29627ab..165319d 100644 (file)
@@ -1,6 +1,6 @@
 /* 
-** Project X - Network Management System
-** Copyright (C) 2003 Victor Kirhenshtein
+** NetXMS - Network Management System
+** Copyright (C) 2003, 2004, 2005 Victor Kirhenshtein
 **
 ** This program is free software; you can redistribute it and/or modify
 ** it under the terms of the GNU General Public License as published by
@@ -336,7 +336,8 @@ void Event::PrepareMessage(NXC_EVENT *pEventData)
    pEventData->dwSourceId = htonl(m_dwSource);
 
 #ifdef UNICODE
-   _tcsncpy(pEventData->szMessage, CHECK_NULL(m_pszMessageText), MAX_EVENT_MSG_LENGTH);
+   wcsncpy(pEventData->szMessage, CHECK_NULL(m_pszMessageText), MAX_EVENT_MSG_LENGTH - 1);
+   pEventData->szMessage[MAX_EVENT_MSG_LENGTH - 1] = 0;
 #else
    MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, CHECK_NULL(m_pszMessageText), -1, 
                        (WCHAR *)pEventData->szMessage, MAX_EVENT_MSG_LENGTH);
index 1d6675c..d913580 100644 (file)
@@ -149,8 +149,8 @@ void SendImageCatalogue(ClientSession *pSession, DWORD dwRqId, WORD wFormat)
       for(i = 0; i < dwNumImages; i++)
       {
          pImageList[i].dwId = htonl(DBGetFieldULong(hResult, i, 0));
-         strncpy(pImageList[i].szName, DBGetField(hResult, i, 1), MAX_OBJECT_NAME);
-         strncpy(szHashText, DBGetField(hResult, i, 2), MD5_DIGEST_SIZE * 2 + 1);
+         nx_strncpy(pImageList[i].szName, DBGetField(hResult, i, 1), MAX_OBJECT_NAME);
+         nx_strncpy(szHashText, DBGetField(hResult, i, 2), MD5_DIGEST_SIZE * 2 + 1);
          for(j = 0, k = 0; j < MD5_DIGEST_SIZE; j++)
          {
             char ch1, ch2;
index 67a0af2..d60b9a5 100644 (file)
@@ -62,7 +62,7 @@ Interface::Interface(DWORD dwAddr, DWORD dwNetMask)
 Interface::Interface(char *szName, DWORD dwIndex, DWORD dwAddr, DWORD dwNetMask, DWORD dwType)
           : NetObj()
 {
-   strncpy(m_szName, szName, MAX_OBJECT_NAME);
+   nx_strncpy(m_szName, szName, MAX_OBJECT_NAME);
    m_dwIfIndex = dwIndex;
    m_dwIfType = dwType;
    m_dwIpAddr = dwAddr;
index c89cca9..a79b9e2 100644 (file)
@@ -139,7 +139,7 @@ BOOL LockComponent(DWORD dwId, DWORD dwLockBy, char *pszOwnerInfo,
    if (m_locks[dwId].dwLockStatus == UNLOCKED)
    {
       m_locks[dwId].dwLockStatus = dwLockBy;
-      strncpy(m_locks[dwId].szOwnerInfo, pszOwnerInfo, MAX_OWNER_INFO);
+      nx_strncpy(m_locks[dwId].szOwnerInfo, pszOwnerInfo, MAX_OWNER_INFO);
       bSuccess = TRUE;
    }
    else
index ceb4c6c..f5bfe7b 100644 (file)
@@ -85,7 +85,7 @@ void LoadNetXMSModules(void)
                         memcpy(&g_pModuleList[g_dwNumModules], &module, sizeof(NXMODULE));
                         g_pModuleList[g_dwNumModules].hModule = hModule;
                         g_pModuleList[g_dwNumModules].dwFlags = dwFlags;
-                        strncpy(g_pModuleList[g_dwNumModules].szName, DBGetField(hResult, i, 0), MAX_OBJECT_NAME);
+                        nx_strncpy(g_pModuleList[g_dwNumModules].szName, DBGetField(hResult, i, 0), MAX_OBJECT_NAME);
 
                         // Start module's main thread
                         ThreadCreate(ModuleThreadStarter, 0, &g_pModuleList[g_dwNumModules]);
index 69df52d..bba923a 100644 (file)
@@ -251,13 +251,13 @@ static INTERFACE_LIST *SysGetLocalIfList(void)
             }
             else
             {
-               strncpy(szAdapterName, pInfo->AdapterName, MAX_OBJECT_NAME);
+               nx_strncpy(szAdapterName, pInfo->AdapterName, MAX_OBJECT_NAME);
             }
          }
          else
          {
             // We don't have a GUID resolving function, use GUID as name
-            strncpy(szAdapterName, pInfo->AdapterName, MAX_OBJECT_NAME);
+            nx_strncpy(szAdapterName, pInfo->AdapterName, MAX_OBJECT_NAME);
          }
 
          BinToStr(pInfo->Address, pInfo->AddressLength, szMacAddr);
@@ -267,7 +267,7 @@ static INTERFACE_LIST *SysGetLocalIfList(void)
          {
             pIfList->pInterfaces = (INTERFACE_INFO *)realloc(pIfList->pInterfaces,
                                           sizeof(INTERFACE_INFO) * (pIfList->iNumEntries + 1));
-            _tcsncpy(pIfList->pInterfaces[pIfList->iNumEntries].szName, szAdapterName, MAX_OBJECT_NAME);
+            nx_strncpy(pIfList->pInterfaces[pIfList->iNumEntries].szName, szAdapterName, MAX_OBJECT_NAME);
             memcpy(pIfList->pInterfaces[pIfList->iNumEntries].bMacAddr, pInfo->Address, MAC_ADDR_LENGTH);
             pIfList->pInterfaces[pIfList->iNumEntries].dwIndex = pInfo->Index;
             pIfList->pInterfaces[pIfList->iNumEntries].dwIpAddr = ntohl(_t_inet_addr(pAddr->IpAddress.String));
index ac73575..f60d2c1 100644 (file)
@@ -128,7 +128,7 @@ BOOL NetObj::LoadCommonProperties(void)
    {
       if (DBGetNumRows(hResult) > 0)
       {
-         _tcsncpy(m_szName, DBGetField(hResult, 0, 0), MAX_OBJECT_NAME);
+         nx_strncpy(m_szName, DBGetField(hResult, 0, 0), MAX_OBJECT_NAME);
          m_iStatus = DBGetFieldLong(hResult, 0, 1);
          m_bIsDeleted = DBGetFieldLong(hResult, 0, 2) ? TRUE : FALSE;
          m_dwImageId = DBGetFieldULong(hResult, 0, 3);
index d91c9ed..346e54b 100644 (file)
@@ -157,17 +157,17 @@ BOOL Node::CreateFromDB(DWORD dwId)
    m_iSNMPVersion = DBGetFieldLong(hResult, 0, 2);
    m_dwDiscoveryFlags = DBGetFieldULong(hResult, 0, 3);
    m_wAuthMethod = (WORD)DBGetFieldLong(hResult, 0, 4);
-   strncpy(m_szSharedSecret, DBGetField(hResult, 0, 5), MAX_SECRET_LENGTH);
+   nx_strncpy(m_szSharedSecret, DBGetField(hResult, 0, 5), MAX_SECRET_LENGTH);
    m_wAgentPort = (WORD)DBGetFieldLong(hResult, 0, 6);
    m_iStatusPollType = DBGetFieldLong(hResult, 0, 7);
-   strncpy(m_szCommunityString, DBGetField(hResult, 0, 8), MAX_COMMUNITY_LENGTH);
-   strncpy(m_szObjectId, DBGetField(hResult, 0, 9), MAX_OID_LEN * 4);
+   nx_strncpy(m_szCommunityString, DBGetField(hResult, 0, 8), MAX_COMMUNITY_LENGTH);
+   nx_strncpy(m_szObjectId, DBGetField(hResult, 0, 9), MAX_OID_LEN * 4);
    m_pszDescription = _tcsdup(CHECK_NULL_EX(DBGetField(hResult, 0, 10)));
    DecodeSQLString(m_pszDescription);
    m_dwNodeType = DBGetFieldULong(hResult, 0, 11);
-   _tcsncpy(m_szAgentVersion, CHECK_NULL_EX(DBGetField(hResult, 0, 12)), MAX_AGENT_VERSION_LEN);
+   nx_strncpy(m_szAgentVersion, CHECK_NULL_EX(DBGetField(hResult, 0, 12)), MAX_AGENT_VERSION_LEN);
    DecodeSQLString(m_szAgentVersion);
-   _tcsncpy(m_szPlatformName, CHECK_NULL_EX(DBGetField(hResult, 0, 13)), MAX_PLATFORM_NAME_LEN);
+   nx_strncpy(m_szPlatformName, CHECK_NULL_EX(DBGetField(hResult, 0, 13)), MAX_PLATFORM_NAME_LEN);
    DecodeSQLString(m_szPlatformName);
    m_dwPollerNode = DBGetFieldULong(hResult, 0, 14);
    m_dwZoneGUID = DBGetFieldULong(hResult, 0, 15);
@@ -930,7 +930,7 @@ void Node::ConfigurationPoll(ClientSession *pSession, DWORD dwRqId, int nPoller)
 
             if (strcmp(m_szObjectId, szBuffer))
             {
-               strncpy(m_szObjectId, szBuffer, MAX_OID_LEN * 4);
+               nx_strncpy(m_szObjectId, szBuffer, MAX_OID_LEN * 4);
                bHasChanges = TRUE;
             }
 
@@ -985,7 +985,7 @@ void Node::ConfigurationPoll(ClientSession *pSession, DWORD dwRqId, int nPoller)
                LockData();
                if (strcmp(m_szObjectId, ".1.3.6.1.4.1.2620.1.1"))
                {
-                  strncpy(m_szObjectId, ".1.3.6.1.4.1.2620.1.1", MAX_OID_LEN * 4);
+                  nx_strncpy(m_szObjectId, ".1.3.6.1.4.1.2620.1.1", MAX_OID_LEN * 4);
                   bHasChanges = TRUE;
                }
 
index ca87962..75c0aa0 100644 (file)
@@ -551,7 +551,7 @@ BOOL LoadObjects(void)
       for(i = 0; i < (int)g_dwNumCategories; i++)
       {
          g_pContainerCatList[i].dwCatId = DBGetFieldULong(hResult, i, 0);
-         strncpy(g_pContainerCatList[i].szName, DBGetField(hResult, i, 1), MAX_OBJECT_NAME);
+         nx_strncpy(g_pContainerCatList[i].szName, DBGetField(hResult, i, 1), MAX_OBJECT_NAME);
          g_pContainerCatList[i].dwImageId = DBGetFieldULong(hResult, i, 2);
          g_pContainerCatList[i].pszDescription = strdup(DBGetField(hResult, i, 3));
       }
index a44a880..3b85091 100644 (file)
@@ -161,7 +161,7 @@ static THREAD_RESULT THREAD_CALL GetAgentTable(void *pArg)
             pnSubstrPos = (int *)malloc(sizeof(int) * dwNumCols);
             for(i = 0; i < dwNumCols; i++)
             {
-               _tcsncpy(szBuffer, DBGetField(hResult, i, 0), 256);
+               nx_strncpy(szBuffer, DBGetField(hResult, i, 0), 256);
                DecodeSQLString(szBuffer);
                msg.SetVariable(VID_COLUMN_NAME_BASE + i, szBuffer);
                msg.SetVariable(VID_COLUMN_FMT_BASE + i, DBGetFieldULong(hResult, i, 1));
@@ -367,7 +367,7 @@ static THREAD_RESULT THREAD_CALL GetSNMPTable(void *pArg)
          args.values.ppStringList = NULL;
          for(i = 0; i < dwNumCols; i++)
          {
-            _tcsncpy(szBuffer, DBGetField(hResult, i, 0), 256);
+            nx_strncpy(szBuffer, DBGetField(hResult, i, 0), 256);
             DecodeSQLString(szBuffer);
             msg.SetVariable(VID_COLUMN_NAME_BASE + i, szBuffer);
             args.ppszOidList[i] = _tcsdup(DBGetField(hResult, i, 1));
index bcf3bb3..069b12b 100644 (file)
@@ -125,7 +125,7 @@ void CheckForMgmtNode(void)
 
 static void SetPollerState(int nIdx, char *pszMsg)
 {
-   strncpy(m_pPollerState[nIdx].szMsg, pszMsg, 128);
+   nx_strncpy(m_pPollerState[nIdx].szMsg, pszMsg, 128);
    m_pPollerState[nIdx].szInfo[0] = 0;
    m_pPollerState[nIdx].timestamp = time(NULL);
 }
@@ -139,7 +139,7 @@ void SetPollerInfo(int nIdx, char *pszMsg)
 {
    if (nIdx != -1)
    {
-      strncpy(m_pPollerState[nIdx].szInfo, pszMsg, 128);
+      nx_strncpy(m_pPollerState[nIdx].szInfo, pszMsg, 128);
       m_pPollerState[nIdx].timestamp = time(NULL);
    }
 }
index f0bfa89..53a59a6 100644 (file)
@@ -1468,7 +1468,7 @@ void ClientSession::SendAllConfigVars(DWORD dwRqId)
          for(i = 0, dwId = VID_VARLIST_BASE; i < dwNumRecords; i++)
          {
             msg.SetVariable(dwId++, DBGetField(hResult, i, 0));
-            _tcsncpy(szBuffer, DBGetField(hResult, i, 1), MAX_DB_STRING);
+            nx_strncpy(szBuffer, DBGetField(hResult, i, 1), MAX_DB_STRING);
             DecodeSQLString(szBuffer);
             msg.SetVariable(dwId++, szBuffer);
             msg.SetVariable(dwId++, (WORD)DBGetFieldLong(hResult, i, 2));
@@ -4281,9 +4281,9 @@ void ClientSession::DeployPackage(CSCPMessage *pRequest)
          hResult = DBSelect(g_hCoreDB, szQuery);
          if ((hResult != NULL) && (DBGetNumRows(hResult) > 0))
          {
-            _tcsncpy(szPlatform, DBGetField(hResult, 0, 0), MAX_PLATFORM_NAME_LEN);
-            _tcsncpy(szPkgFile, DBGetField(hResult, 0, 1), MAX_PATH);
-            _tcsncpy(szVersion, DBGetField(hResult, 0, 2), MAX_AGENT_VERSION_LEN);
+            nx_strncpy(szPlatform, DBGetField(hResult, 0, 0), MAX_PLATFORM_NAME_LEN);
+            nx_strncpy(szPkgFile, DBGetField(hResult, 0, 1), MAX_PATH);
+            nx_strncpy(szVersion, DBGetField(hResult, 0, 2), MAX_AGENT_VERSION_LEN);
 
             // Create list of nodes to be upgraded
             dwNumObjects = pRequest->GetVariableLong(VID_NUM_OBJECTS);
index 99697ba..b87ff1c 100644 (file)
@@ -147,8 +147,8 @@ void NXCORE_EXPORTABLE PostSMS(TCHAR *pszRcpt, TCHAR *pszText)
        if (m_pMsgQueue != NULL)
        {
                pMsg = (SMS *)malloc(sizeof(SMS));
-               _tcsncpy(pMsg->szRcpt, pszRcpt, MAX_RCPT_ADDR_LEN);
-               _tcsncpy(pMsg->szText, pszText, 160);
+               nx_strncpy(pMsg->szRcpt, pszRcpt, MAX_RCPT_ADDR_LEN);
+               nx_strncpy(pMsg->szText, pszText, 160);
                m_pMsgQueue->Put(pMsg);
        }
 }
index 65eb36b..7d0b13c 100644 (file)
@@ -71,7 +71,7 @@ static BOOL LoadTrapCfg(void)
             bResult = FALSE;
          }
          m_pTrapCfg[i].dwEventCode = DBGetFieldULong(hResult, i, 2);
-         _tcsncpy(m_pTrapCfg[i].szDescription, DBGetField(hResult, i, 3), MAX_DB_STRING);
+         nx_strncpy(m_pTrapCfg[i].szDescription, DBGetField(hResult, i, 3), MAX_DB_STRING);
          DecodeSQLString(m_pTrapCfg[i].szDescription);
       }
       DBFreeResult(hResult);
@@ -100,7 +100,7 @@ static BOOL LoadTrapCfg(void)
                            DBGetField(hResult, j, 0), m_pTrapCfg[i].dwId);
                   bResult = FALSE;
                }
-               _tcsncpy(m_pTrapCfg[i].pMaps[j].szDescription, DBGetField(hResult, j, 1), MAX_DB_STRING);
+               nx_strncpy(m_pTrapCfg[i].pMaps[j].szDescription, DBGetField(hResult, j, 1), MAX_DB_STRING);
                DecodeSQLString(m_pTrapCfg[i].pMaps[j].szDescription);
             }
             DBFreeResult(hResult);
index d384efc..4388592 100644 (file)
@@ -240,7 +240,7 @@ static void BindMsgToNode(NX_LOG_RECORD *pRec, DWORD dwSourceIP)
       {
          pRec->dwSourceObject = pNode->Id();
          if (pRec->szHostName[0] == 0)
-            _tcsncpy(pRec->szHostName, pNode->Name(), MAX_SYSLOG_HOSTNAME_LEN);
+            nx_strncpy(pRec->szHostName, pNode->Name(), MAX_SYSLOG_HOSTNAME_LEN);
       }
       else
       {
index 7f855a2..887d628 100644 (file)
@@ -50,7 +50,7 @@ char NXCORE_EXPORTABLE *GetSystemErrorText(DWORD error)
                      (LPSTR)&msgBuf,0,NULL)>0)
    {
       msgBuf[strcspn(msgBuf,"\r\n")]=0;
-      strncpy(staticBuffer,msgBuf,1023);
+      nx_strncpy(staticBuffer,msgBuf,1023);
       LocalFree(msgBuf);
    }
    else
@@ -142,7 +142,7 @@ void GetSysInfoStr(char *pszBuffer)
 #if HAVE_STRERROR_R
                strerror_r(errno, pszBuffer, 512);
 #else
-               strncpy(pszBuffer, strerror(errno), 512);
+               nx_strncpy(pszBuffer, strerror(errno), 512);
 #endif
        }
 # else
index 97d6245..0d8c01b 100644 (file)
@@ -71,7 +71,7 @@ BOOL LoadUsers(void)
    for(i = 0; i < g_dwNumUsers; i++)
    {
       g_pUserList[i].dwId = DBGetFieldULong(hResult, i, 0);
-      strncpy(g_pUserList[i].szName, DBGetField(hResult, i, 1), MAX_USER_NAME);
+      nx_strncpy(g_pUserList[i].szName, DBGetField(hResult, i, 1), MAX_USER_NAME);
       if (StrToBin(DBGetField(hResult, i, 2), g_pUserList[i].szPassword, SHA1_DIGEST_SIZE) != SHA1_DIGEST_SIZE)
       {
          WriteLog(MSG_INVALID_SHA1_HASH, EVENTLOG_WARNING_TYPE, "s", g_pUserList[i].szName);
@@ -82,8 +82,8 @@ BOOL LoadUsers(void)
       else
          g_pUserList[i].wSystemRights = (WORD)DBGetFieldLong(hResult, i, 3);
       g_pUserList[i].wFlags = (WORD)DBGetFieldLong(hResult, i, 4);
-      strncpy(g_pUserList[i].szFullName, DBGetField(hResult, i, 5), MAX_USER_FULLNAME);
-      strncpy(g_pUserList[i].szDescription, DBGetField(hResult, i, 6), MAX_USER_DESCR);
+      nx_strncpy(g_pUserList[i].szFullName, DBGetField(hResult, i, 5), MAX_USER_FULLNAME);
+      nx_strncpy(g_pUserList[i].szDescription, DBGetField(hResult, i, 6), MAX_USER_DESCR);
    }
 
    DBFreeResult(hResult);
@@ -117,10 +117,10 @@ BOOL LoadUsers(void)
    for(i = 0; i < g_dwNumGroups; i++)
    {
       g_pGroupList[i].dwId = DBGetFieldULong(hResult, i, 0);
-      strncpy(g_pGroupList[i].szName, DBGetField(hResult, i, 1), MAX_USER_NAME);
+      nx_strncpy(g_pGroupList[i].szName, DBGetField(hResult, i, 1), MAX_USER_NAME);
       g_pGroupList[i].wSystemRights = (WORD)DBGetFieldLong(hResult, i, 2);
       g_pGroupList[i].wFlags = (WORD)DBGetFieldLong(hResult, i, 3);
-      strncpy(g_pGroupList[i].szDescription, DBGetField(hResult, i, 4), MAX_USER_DESCR);
+      nx_strncpy(g_pGroupList[i].szDescription, DBGetField(hResult, i, 4), MAX_USER_DESCR);
       g_pGroupList[i].dwNumMembers = 0;
       g_pGroupList[i].pMembers = NULL;
    }
@@ -519,7 +519,7 @@ DWORD CreateNewUser(char *pszName, BOOL bIsGroup, DWORD *pdwId)
          g_pGroupList[i].dwId = dwNewId = CreateUniqueId(IDG_USER_GROUP);
          g_pGroupList[i].dwNumMembers = 0;
          g_pGroupList[i].pMembers = NULL;
-         strncpy(g_pGroupList[i].szName, pszName, MAX_USER_NAME);
+         nx_strncpy(g_pGroupList[i].szName, pszName, MAX_USER_NAME);
          g_pGroupList[i].wFlags = UF_MODIFIED;
          g_pGroupList[i].wSystemRights = 0;
          g_pGroupList[i].szDescription[0] = 0;
@@ -548,7 +548,7 @@ DWORD CreateNewUser(char *pszName, BOOL bIsGroup, DWORD *pdwId)
          g_dwNumUsers++;
          g_pUserList = (NMS_USER *)realloc(g_pUserList, sizeof(NMS_USER) * g_dwNumUsers);
          g_pUserList[i].dwId = dwNewId = CreateUniqueId(IDG_USER);
-         strncpy(g_pUserList[i].szName, pszName, MAX_USER_NAME);
+         nx_strncpy(g_pUserList[i].szName, pszName, MAX_USER_NAME);
          g_pUserList[i].wFlags = UF_MODIFIED;
          g_pUserList[i].wSystemRights = 0;
          g_pUserList[i].szFullName[0] = 0;
index fcce728..7c00a30 100644 (file)
@@ -146,10 +146,10 @@ extern "C" DB_HANDLE EXPORT DrvConnect(char *szHost, char *szLogin, char *szPass
          pConn->hProcess = hProcess;
          pConn->mutexQueryLock = MutexCreate();
          pConn->bProcessDead = FALSE;
-         strncpy(pConn->szHost, szHost, MAX_CONN_STRING);
-         strncpy(pConn->szLogin, szLogin, MAX_CONN_STRING);
-         strncpy(pConn->szPassword, szPassword, MAX_CONN_STRING);
-         strncpy(pConn->szDatabase, CHECK_NULL_EX(szDatabase), MAX_CONN_STRING);
+         nx_strncpy(pConn->szHost, szHost, MAX_CONN_STRING);
+         nx_strncpy(pConn->szLogin, szLogin, MAX_CONN_STRING);
+         nx_strncpy(pConn->szPassword, szPassword, MAX_CONN_STRING);
+         nx_strncpy(pConn->szDatabase, CHECK_NULL_EX(szDatabase), MAX_CONN_STRING);
 
          dbsetuserdata(hProcess, pConn);
       }
index bd6357a..5d7bde6 100644 (file)
@@ -35,6 +35,7 @@
 #include <stdio.h>
 #include <dbdrv.h>
 #include <nms_threads.h>
+#include <nms_util.h>
 #include <sqlfront.h>
 #include <sqldb.h>
 
index 3f2d726..7a774db 100644 (file)
@@ -251,7 +251,7 @@ public:
 
    void SetId(DWORD dwId) { m_dwId = dwId; Modify(); }
    void SetMgmtStatus(BOOL bIsManaged);
-   void SetName(char *pszName) { strncpy(m_szName, pszName, MAX_OBJECT_NAME); Modify(); }
+   void SetName(char *pszName) { nx_strncpy(m_szName, pszName, MAX_OBJECT_NAME); Modify(); }
    void ResetStatus(void) { m_iStatus = STATUS_UNKNOWN; Modify(); }
 
    virtual void CalculateCompoundStatus(void);
index 4cd4d26..4caa90d 100644 (file)
@@ -106,7 +106,7 @@ AgentConnection::AgentConnection(DWORD dwAddr, WORD wPort, int iAuthMethod, TCHA
       WideCharToMultiByte(CP_ACP, WC_COMPOSITECHECK | WC_DEFAULTCHAR, 
                           pszSecret, -1, m_szSecret, MAX_SECRET_LENGTH, NULL, NULL);
 #else
-      strncpy(m_szSecret, pszSecret, MAX_SECRET_LENGTH);
+      nx_strncpy(m_szSecret, pszSecret, MAX_SECRET_LENGTH);
 #endif
    }
    else
@@ -498,7 +498,7 @@ INTERFACE_LIST *AgentConnection::GetInterfaceList(void)
          }
 
          // Name
-         _tcsncpy(pIfList->pInterfaces[i].szName, pBuf, MAX_OBJECT_NAME - 1);
+         nx_strncpy(pIfList->pInterfaces[i].szName, pBuf, MAX_OBJECT_NAME - 1);
       }
 
       Lock();
index b88d186..ee58095 100644 (file)
@@ -99,7 +99,7 @@ static BOOL ParseCommandLine(int argc, char *argv[])
       else if (!strcmp(argv[i], "--config"))  // Config file
       {
          i++;
-         strncpy(g_szConfigFile, argv[i], MAX_PATH);     // Next word should contain name of the config file
+         nx_strncpy(g_szConfigFile, argv[i], MAX_PATH);     // Next word should contain name of the config file
       }
 #ifndef _WIN32
       else if (!strcmp(argv[i], "--pid-file"))  // PID file
@@ -253,7 +253,7 @@ int main(int argc, char *argv[])
 #else
    pszEnv = getenv("NETXMSD_CONFIG");
    if (pszEnv != NULL)
-      strncpy(g_szConfigFile, pszEnv, MAX_PATH);
+      nx_strncpy(g_szConfigFile, pszEnv, MAX_PATH);
 #endif
 
    if (!ParseCommandLine(argc, argv))
index 1d18ceb..b2712a1 100644 (file)
@@ -116,7 +116,7 @@ int main(int argc, char *argv[])
             bVerbose = FALSE;
             break;
          case 's':   // Shared secret
-            strncpy(szSecret, optarg, MAX_SECRET_LENGTH - 1);
+            nx_strncpy(szSecret, optarg, MAX_SECRET_LENGTH - 1);
             break;
          case 'v':   // Print version and exit
             printf("NetXMS ACTION command-line utility Version " NETXMS_VERSION_STRING "\n");
@@ -145,7 +145,7 @@ int main(int argc, char *argv[])
             }
             break;
          case 'K':
-            strncpy(szKeyFile, optarg, MAX_PATH);
+            nx_strncpy(szKeyFile, optarg, MAX_PATH);
             break;
 #else
          case 'e':
index b488196..3b3b988 100644 (file)
@@ -335,8 +335,8 @@ static DWORD __stdcall WorkerThread(void *pArg)
    if (bResult)
    {
       PostMessage(m_hStatusWnd, WM_START_STAGE, 0, (LPARAM)_T("Loading database driver"));
-      _tcsncpy(g_szDbDriver, pc->m_szDBDriver, MAX_PATH);
-      _tcsncpy(g_szDbServer, pc->m_szDBServer, MAX_PATH);
+      nx_strncpy(g_szDbDriver, pc->m_szDBDriver, MAX_PATH);
+      nx_strncpy(g_szDbServer, pc->m_szDBServer, MAX_PATH);
       bResult = DBInit(FALSE, FALSE, FALSE);
       if (!bResult)
          _tcscpy(g_szWizardErrorText, _T("Error loading database driver"));
index f1b3a8c..5781842 100644 (file)
@@ -72,7 +72,7 @@ static void CheckNodes(void)
             }
             else
             {
-               _tcsncpy(szName, DBGetField(hResult2, 0, 0), MAX_OBJECT_NAME);
+               nx_strncpy(szName, DBGetField(hResult2, 0, 0), MAX_OBJECT_NAME);
                bIsDeleted = DBGetFieldLong(hResult2, 0, 1) ? TRUE : FALSE;
             }
             DBFreeResult(hResult2);
@@ -150,7 +150,7 @@ static void CheckInterfaces(void)
             }
             else
             {
-               _tcsncpy(szName, DBGetField(hResult2, 0, 0), MAX_OBJECT_NAME);
+               nx_strncpy(szName, DBGetField(hResult2, 0, 0), MAX_OBJECT_NAME);
                bIsDeleted = DBGetFieldLong(hResult2, 0, 1) ? TRUE : FALSE;
             }
             DBFreeResult(hResult2);
@@ -265,7 +265,7 @@ void CheckDatabase(void)
       {
          if (DBGetNumRows(hResult) > 0)
          {
-            _tcsncpy(szLockStatus, DBGetField(hResult, 0, 0), MAX_DB_STRING);
+            nx_strncpy(szLockStatus, DBGetField(hResult, 0, 0), MAX_DB_STRING);
             DecodeSQLString(szLockStatus);
             bLocked = _tcscmp(szLockStatus, _T("UNLOCKED"));
          }
@@ -278,7 +278,7 @@ void CheckDatabase(void)
             {
                if (DBGetNumRows(hResult) > 0)
                {
-                  _tcsncpy(szLockInfo, DBGetField(hResult, 0, 0), MAX_DB_STRING);
+                  nx_strncpy(szLockInfo, DBGetField(hResult, 0, 0), MAX_DB_STRING);
                   DecodeSQLString(szLockInfo);
                }
                DBFreeResult(hResult);
index 1893927..9f73646 100644 (file)
@@ -197,7 +197,7 @@ BOOL ConfigReadStr(TCHAR *pszVar, TCHAR *pszBuffer, int iBufSize, const TCHAR *p
    TCHAR szQuery[256];
    BOOL bSuccess = FALSE;
 
-   _tcsncpy(pszBuffer, pszDefault, iBufSize);
+   nx_strncpy(pszBuffer, pszDefault, iBufSize);
    if (_tcslen(pszVar) > 127)
       return FALSE;
 
@@ -208,7 +208,7 @@ BOOL ConfigReadStr(TCHAR *pszVar, TCHAR *pszBuffer, int iBufSize, const TCHAR *p
 
    if (DBGetNumRows(hResult) > 0)
    {
-      _tcsncpy(pszBuffer, DBGetField(hResult, 0, 0), iBufSize - 1);
+      nx_strncpy(pszBuffer, DBGetField(hResult, 0, 0), iBufSize - 1);
       DecodeSQLString(pszBuffer);
       bSuccess = TRUE;
    }
@@ -285,7 +285,7 @@ int main(int argc, char *argv[])
             bStart = FALSE;
             break;
          case 'c':
-            _tcsncpy(szConfigFile, optarg, MAX_PATH);
+            nx_strncpy(szConfigFile, optarg, MAX_PATH);
             break;
          case 'f':
             m_bForce = TRUE;
@@ -345,7 +345,7 @@ int main(int argc, char *argv[])
    {
       if (DBGetNumRows(hResult) > 0)
       {
-         _tcsncpy(szSyntaxId, DBGetField(hResult, 0, 0), sizeof(szSyntaxId));
+         nx_strncpy(szSyntaxId, DBGetField(hResult, 0, 0), sizeof(szSyntaxId));
          DecodeSQLString(szSyntaxId);
       }
       else
index ba0a83c..b82c191 100644 (file)
@@ -414,7 +414,7 @@ static BOOL MoveObjectData(DWORD dwId, BOOL bInheritRights)
       {
          if (DBGetNumRows(hResult) > 0)
          {
-            _tcsncpy(szName, DBGetField(hResult, 0, 0), MAX_OBJECT_NAME);
+            nx_strncpy(szName, DBGetField(hResult, 0, 0), MAX_OBJECT_NAME);
             bIsDeleted = DBGetFieldLong(hResult, 0, 1) ? TRUE : FALSE;
             dwImageId = DBGetFieldULong(hResult, 0, 2);
             dwStatus = bIsTemplate ? STATUS_UNKNOWN : DBGetFieldULong(hResult, 0, 3);
index 9f94653..643605d 100644 (file)
@@ -312,13 +312,13 @@ int main(int argc, char *argv[])
             m_bVerbose = FALSE;
             break;
          case 'r':   // Service check request string
-            strncpy(szRequest, optarg, MAX_DB_STRING);
+            nx_strncpy(szRequest, optarg, MAX_DB_STRING);
             break;
          case 'R':   // Service check response string
-            strncpy(szResponse, optarg, MAX_DB_STRING);
+            nx_strncpy(szResponse, optarg, MAX_DB_STRING);
             break;
          case 's':   // Shared secret
-            strncpy(szSecret, optarg, MAX_SECRET_LENGTH);
+            nx_strncpy(szSecret, optarg, MAX_SECRET_LENGTH);
             break;
          case 'S':   // Check service
             iCommand = CMD_CHECK_SERVICE;
@@ -376,7 +376,7 @@ int main(int argc, char *argv[])
             }
             break;
          case 'K':
-            strncpy(szKeyFile, optarg, MAX_PATH);
+            nx_strncpy(szKeyFile, optarg, MAX_PATH);
             break;
 #else
          case 'e':
index 423fbf4..9e10097 100644 (file)
@@ -150,7 +150,7 @@ int main(int argc, char *argv[])
             bStart = FALSE;
             break;
          case 'c':   // Community
-            strncpy(m_szCommunity, optarg, 256);
+            nx_strncpy(m_szCommunity, optarg, 256);
             break;
          case 'p':   // Port number
             dwValue = strtoul(optarg, &eptr, 0);
index 663ce86..c80bfb1 100644 (file)
@@ -179,7 +179,7 @@ int main(int argc, char *argv[])
             bStart = FALSE;
             break;
          case 'c':   // Community
-            strncpy(m_szCommunity, optarg, 256);
+            nx_strncpy(m_szCommunity, optarg, 256);
             break;
          case 'p':   // Port number
             dwValue = strtoul(optarg, &eptr, 0);
index cd5cca1..cc7952b 100644 (file)
@@ -190,7 +190,7 @@ int main(int argc, char *argv[])
             bVerbose = FALSE;
             break;
          case 's':   // Shared secret
-            strncpy(szSecret, optarg, MAX_SECRET_LENGTH - 1);
+            nx_strncpy(szSecret, optarg, MAX_SECRET_LENGTH - 1);
             break;
          case 'u':   // Upgrade agent
             bUpgrade = TRUE;
@@ -222,7 +222,7 @@ int main(int argc, char *argv[])
             }
             break;
          case 'K':
-            strncpy(szKeyFile, optarg, MAX_PATH);
+            nx_strncpy(szKeyFile, optarg, MAX_PATH);
             break;
 #else
          case 'e':