added utility function GetLocalHostName; added agent parameter System.FQDN; agent...
authorVictor Kirhenshtein <victor@netxms.org>
Fri, 8 Sep 2017 15:28:49 +0000 (18:28 +0300)
committerVictor Kirhenshtein <victor@netxms.org>
Fri, 8 Sep 2017 15:28:49 +0000 (18:28 +0300)
23 files changed:
include/nms_agent.h
include/nms_util.h
src/agent/core/getparam.cpp
src/agent/core/nxagentd.cpp
src/agent/core/sysinfo.cpp
src/agent/core/tunnel.cpp
src/agent/core/win32.cpp
src/agent/subagents/freebsd/freebsd.cpp
src/agent/subagents/freebsd/system.cpp
src/agent/subagents/freebsd/system.h
src/agent/subagents/hpux/main.cpp
src/agent/subagents/hpux/system.cpp
src/agent/subagents/hpux/system.h
src/agent/subagents/linux/linux.cpp
src/agent/subagents/linux/linux_subagent.h
src/agent/subagents/linux/system.cpp
src/agent/subagents/netbsd/netbsd.cpp
src/agent/subagents/netbsd/system.cpp
src/agent/subagents/netbsd/system.h
src/agent/subagents/openbsd/openbsd.cpp
src/agent/subagents/openbsd/system.cpp
src/agent/subagents/openbsd/system.h
src/libnetxms/tools.cpp

index f83ef95..ba8bd0b 100644 (file)
 #define DCIDESC_SYSTEM_CPU_FREQUENCY              _T("CPU {instance}: frequency")
 #define DCIDESC_SYSTEM_CPU_MODEL                  _T("CPU {instance}: model")
 #define DCIDESC_SYSTEM_CPU_PHYSICAL_ID            _T("CPU {instance}: physical ID")
+#define DCIDESC_SYSTEM_FQDN                       _T("Fully qualified domain name")
 #define DCIDESC_SYSTEM_HOSTNAME                   _T("Host name")
 #define DCIDESC_SYSTEM_IS_VIRTUAL                 _T("Virtual system indicator")
 #define DCIDESC_SYSTEM_MEMORY_PHYSICAL_AVAILABLE  _T("Available physical memory")
index 55efb54..b39bcb1 100644 (file)
@@ -2239,6 +2239,8 @@ INT64 LIBNETXMS_EXPORTABLE GetProcessRSS();
 
 TCHAR LIBNETXMS_EXPORTABLE *GetLastSocketErrorText(TCHAR *buffer, size_t size);
 
+TCHAR LIBNETXMS_EXPORTABLE *GetLocalHostName(TCHAR *buffer, size_t size, bool fqdn);
+
 #if !HAVE_DAEMON || !HAVE_DECL_DAEMON
 int LIBNETXMS_EXPORTABLE __daemon(int nochdir, int noclose);
 #define daemon __daemon
index 768e72d..cec069d 100644 (file)
@@ -43,6 +43,7 @@ LONG H_ExternalParameter(const TCHAR *cmd, const TCHAR *arg, TCHAR *value, Abstr
 LONG H_ExternalList(const TCHAR *cmd, const TCHAR *arg, StringList *value, AbstractCommSession *session);
 LONG H_ExternalTable(const TCHAR *cmd, const TCHAR *arg, Table *value, AbstractCommSession *session);
 LONG H_FileTime(const TCHAR *cmd, const TCHAR *arg, TCHAR *value, AbstractCommSession *session);
+LONG H_HostName(const TCHAR *cmd, const TCHAR *arg, TCHAR *value, AbstractCommSession *session);
 LONG H_IsExtSubagentConnected(const TCHAR *pszCmd, const TCHAR *pArg, TCHAR *pValue, AbstractCommSession *session);
 LONG H_IsSubagentLoaded(const TCHAR *cmd, const TCHAR *arg, TCHAR *value, AbstractCommSession *session);
 LONG H_MD5Hash(const TCHAR *cmd, const TCHAR *arg, TCHAR *value, AbstractCommSession *session);
@@ -64,7 +65,6 @@ LONG H_CPUCount(const TCHAR *cmd, const TCHAR *arg, TCHAR *value, AbstractCommSe
 LONG H_DiskInfo(const TCHAR *cmd, const TCHAR *arg, TCHAR *value, AbstractCommSession *session);
 LONG H_FileSystems(const TCHAR *cmd, const TCHAR *arg, Table *value, AbstractCommSession *session);
 LONG H_FileSystemType(const TCHAR *cmd, const TCHAR *arg, TCHAR *value, AbstractCommSession *session);
-LONG H_HostName(const TCHAR *cmd, const TCHAR *arg, TCHAR *value, AbstractCommSession *session);
 LONG H_MemoryInfo(const TCHAR *cmd, const TCHAR *arg, TCHAR *value, AbstractCommSession *session);
 LONG H_MountPoints(const TCHAR *cmd, const TCHAR *arg, StringList *value, AbstractCommSession *session);
 LONG H_PhysicalDiskInfo(const TCHAR *cmd, const TCHAR *arg, TCHAR *pValue, AbstractCommSession *session);
@@ -303,7 +303,6 @@ static NETXMS_SUBAGENT_PARAM m_stdParams[] =
    { _T("PhysicalDisk.SmartStatus(*)"), H_PhysicalDiskInfo, _T("S"), DCI_DT_INT, DCIDESC_PHYSICALDISK_SMARTSTATUS },
    { _T("PhysicalDisk.Temperature(*)"), H_PhysicalDiskInfo, _T("T"), DCI_DT_INT, DCIDESC_PHYSICALDISK_TEMPERATURE },
    { _T("System.CPU.Count"), H_CPUCount, NULL, DCI_DT_UINT, DCIDESC_SYSTEM_CPU_COUNT },
-   { _T("System.Hostname"), H_HostName, NULL, DCI_DT_STRING, DCIDESC_SYSTEM_HOSTNAME },
    { _T("System.IsVirtual"), H_SystemIsVirtual, NULL, DCI_DT_INT, DCIDESC_SYSTEM_IS_VIRTUAL },
    { _T("System.Memory.Physical.Available"), H_MemoryInfo, (TCHAR *)MEMINFO_PHYSICAL_FREE, DCI_DT_UINT64, DCIDESC_SYSTEM_MEMORY_PHYSICAL_AVAILABLE },
    { _T("System.Memory.Physical.AvailablePerc"), H_MemoryInfo, (TCHAR *)MEMINFO_PHYSICAL_FREE_PCT, DCI_DT_FLOAT, DCIDESC_SYSTEM_MEMORY_PHYSICAL_AVAILABLE_PCT },
@@ -382,6 +381,8 @@ static NETXMS_SUBAGENT_PARAM m_stdParams[] =
    { _T("Net.Resolver.AddressByName(*)"), H_ResolverAddrByName, NULL, DCI_DT_STRING, DCIDESC_NET_RESOLVER_ADDRBYNAME },
    { _T("Net.Resolver.NameByAddress(*)"), H_ResolverNameByAddr, NULL, DCI_DT_STRING, DCIDESC_NET_RESOLVER_NAMEBYADDR },
    { _T("System.CurrentTime"), H_SystemTime, NULL, DCI_DT_INT64, DCIDESC_SYSTEM_CURRENTTIME },
+   { _T("System.FQDN"), H_HostName, _T("FQDN"), DCI_DT_STRING, DCIDESC_SYSTEM_FQDN },
+   { _T("System.Hostname"), H_HostName, NULL, DCI_DT_STRING, DCIDESC_SYSTEM_HOSTNAME },
    { _T("System.PlatformName"), H_PlatformName, NULL, DCI_DT_STRING, DCIDESC_SYSTEM_PLATFORMNAME }
 };
 
index 067fe11..79606ba 100644 (file)
@@ -306,7 +306,7 @@ static NX_CFG_TEMPLATE m_cfgTemplate[] =
    { _T("StartupDelay"), CT_LONG, 0, 0, 0, 0, &g_dwStartupDelay, NULL },
    { _T("SubAgent"), CT_STRING_LIST, '\n', 0, 0, 0, &m_pszSubagentList, NULL },
    { _T("SyslogListenPort"), CT_WORD, 0, 0, 0, 0, &g_syslogListenPort, NULL },
-   { _T("SystemName"), CT_STRING, 0, 0, MAX_SECRET_LENGTH, 0, g_systemName, NULL },
+   { _T("SystemName"), CT_STRING, 0, 0, MAX_OBJECT_NAME, 0, g_systemName, NULL },
    { _T("TimeOut"), CT_IGNORE, 0, 0, 0, 0, NULL, NULL },
    { _T("WaitForProcess"), CT_STRING, 0, 0, MAX_PATH, 0, s_processToWaitFor, NULL },
    { _T("ZoneId"), CT_LONG, 0, 0, 0, 0, &g_zoneUIN, NULL }, // for backward compatibility
@@ -827,16 +827,7 @@ BOOL Initialize()
 
    // Set system name to host name if not set in config
    if (g_systemName[0] == 0)
-   {
-#ifdef UNICODE
-      char buffer[MAX_OBJECT_NAME];
-      gethostname(buffer, MAX_OBJECT_NAME);
-      MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, buffer, -1, g_systemName, MAX_OBJECT_NAME);
-#else
-      gethostname(g_systemName, MAX_OBJECT_NAME);
-#endif
-      g_systemName[MAX_OBJECT_NAME - 1] = 0;
-   }
+      GetLocalHostName(g_systemName, MAX_OBJECT_NAME, false);
    nxlog_debug(2, _T("Using system name \"%s\""), g_systemName);
 
        if (!(g_dwFlags & AF_SUBAGENT_LOADER))
index 8e536f5..2932adc 100644 (file)
@@ -531,3 +531,11 @@ LONG H_ThreadPoolList(const TCHAR *cmd, const TCHAR *arg, StringList *value, Abs
    delete pools;
    return SYSINFO_RC_SUCCESS;
 }
+
+/**
+ * Handler for System.Hostname and System.FQDN parameters
+ */
+LONG H_HostName(const TCHAR *metric, const TCHAR *arg, TCHAR *value, AbstractCommSession *session)
+{
+   return (GetLocalHostName(value, MAX_RESULT_LENGTH, arg != NULL) != NULL) ? SYSINFO_RC_SUCCESS : SYSINFO_RC_ERROR;
+}
index d18956b..4be144a 100644 (file)
@@ -563,6 +563,11 @@ bool Tunnel::connectToServer()
    msg.setId(InterlockedIncrement(&m_requestId));
    msg.setField(VID_AGENT_VERSION, NETXMS_BUILD_TAG);
    msg.setField(VID_SYS_NAME, g_systemName);
+   msg.setField(VID_ZONE_UIN, g_zoneUIN);
+
+   TCHAR fqdn[256];
+   if (GetLocalHostName(fqdn, 256, true))
+      msg.setField(VID_HOSTNAME, fqdn);
 
    VirtualSession session(0);
    TCHAR buffer[MAX_RESULT_LENGTH];
index c484c27..3cb8917 100644 (file)
@@ -74,20 +74,6 @@ LONG H_MemoryInfo(const TCHAR *cmd, const TCHAR *arg, TCHAR *value, AbstractComm
 }
 
 /**
- * Handler for System.Hostname parameter
- */
-LONG H_HostName(const TCHAR *pszCmd, const TCHAR *pArg, TCHAR *pValue, AbstractCommSession *session)
-{
-   DWORD dwSize;
-   TCHAR szBuffer[MAX_COMPUTERNAME_LENGTH + 1];
-
-   dwSize = MAX_COMPUTERNAME_LENGTH + 1;
-   GetComputerName(szBuffer, &dwSize);
-   ret_string(pValue, szBuffer);
-   return SYSINFO_RC_SUCCESS;
-}
-
-/**
  * Handler for FileSystem.Stats table
  */
 LONG H_FileSystems(const TCHAR *cmd, const TCHAR *arg, Table *table, AbstractCommSession *session)
index 4f5b405..622d435 100644 (file)
@@ -180,7 +180,6 @@ static NETXMS_SUBAGENT_PARAM m_parameters[] =
        { _T("System.CPU.Usage15.Idle(*)"),        H_CpuUsageEx,      MAKE_CPU_USAGE_PARAM(INTERVAL_15MIN, CPU_USAGE_IDLE),
                DCI_DT_FLOAT,   DCIDESC_SYSTEM_CPU_USAGE15_IDLE_EX },
 
-       { _T("System.Hostname"),              H_Hostname,        NULL,                          DCI_DT_FLOAT,   DCIDESC_SYSTEM_HOSTNAME },
        { _T("System.Memory.Physical.Free"),  H_MemoryInfo,      (const TCHAR *)PHYSICAL_FREE,          DCI_DT_UINT64,  DCIDESC_SYSTEM_MEMORY_PHYSICAL_FREE },
        { _T("System.Memory.Physical.FreePerc"), H_MemoryInfo,   (const TCHAR *)PHYSICAL_FREE_PCT,      DCI_DT_FLOAT,   DCIDESC_SYSTEM_MEMORY_PHYSICAL_FREE_PCT },
        { _T("System.Memory.Physical.Total"), H_MemoryInfo,      (const TCHAR *)PHYSICAL_TOTAL,         DCI_DT_UINT64,  DCIDESC_SYSTEM_MEMORY_PHYSICAL_TOTAL },
index c636b09..bd3b617 100644 (file)
@@ -72,20 +72,6 @@ LONG H_Uname(const TCHAR *pszParam, const TCHAR *pArg, TCHAR *pValue, AbstractCo
    return nRet;
 }
 
-LONG H_Hostname(const TCHAR *pszParam, const TCHAR *pArg, TCHAR *pValue, AbstractCommSession *session)
-{
-       int nRet = SYSINFO_RC_ERROR;
-       char szBuff[128];
-
-       if (gethostname(szBuff, sizeof(szBuff)) == 0)
-       {
-       ret_mbstring(pValue, szBuff);
-               nRet = SYSINFO_RC_SUCCESS;
-       }
-
-   return nRet;
-}
-
 LONG H_MemoryInfo(const TCHAR *pszParam, const TCHAR *pArg, TCHAR *pValue, AbstractCommSession *session)
 {
        int nRet = SYSINFO_RC_ERROR;
index d821c00..b566887 100644 (file)
@@ -60,8 +60,6 @@ enum
 LONG H_ProcessList(const TCHAR *, const TCHAR *, StringList *, AbstractCommSession *);
 LONG H_Uptime(const TCHAR *, const TCHAR *, TCHAR *, AbstractCommSession *);
 LONG H_Uname(const TCHAR *, const TCHAR *, TCHAR *, AbstractCommSession *);
-LONG H_Hostname(const TCHAR *, const TCHAR *, TCHAR *, AbstractCommSession *);
-LONG H_Hostname(const TCHAR *, const TCHAR *, TCHAR *, AbstractCommSession *);
 LONG H_CpuInfo(const TCHAR *, const TCHAR *, TCHAR *, AbstractCommSession *);
 LONG H_CpuLoad(const TCHAR *, const TCHAR *, TCHAR *, AbstractCommSession *);
 LONG H_CpuUsage(const TCHAR *, const TCHAR *, TCHAR *, AbstractCommSession *);
index dd80c2b..3c0c135 100644 (file)
@@ -128,8 +128,6 @@ static NETXMS_SUBAGENT_PARAM m_parameters[] =
        { _T("System.CPU.Usage5"), H_CpuUsage, (const TCHAR *)5, DCI_DT_FLOAT, DCIDESC_SYSTEM_CPU_USAGE5 },
        { _T("System.CPU.Usage15"), H_CpuUsage, (const TCHAR *)15, DCI_DT_FLOAT, DCIDESC_SYSTEM_CPU_USAGE15 },
 
-       { _T("System.Hostname"), H_Hostname, NULL, DCI_DT_STRING, DCIDESC_SYSTEM_HOSTNAME },
-
        { _T("System.IO.BytesReadRate"), H_IOStatsTotal, (const TCHAR *)IOSTAT_NUM_RBYTES, DCI_DT_UINT64, DCIDESC_SYSTEM_IO_BYTEREADS },
        { _T("System.IO.BytesReadRate(*)"), H_IOStats, (const TCHAR *)IOSTAT_NUM_RBYTES, DCI_DT_UINT64, DCIDESC_SYSTEM_IO_BYTEREADS_EX },
        { _T("System.IO.BytesWriteRate"), H_IOStatsTotal, (const TCHAR *)IOSTAT_NUM_WBYTES, DCI_DT_UINT64, DCIDESC_SYSTEM_IO_BYTEWRITES },
index 58b50cf..c1f98cf 100644 (file)
@@ -86,23 +86,6 @@ LONG H_Uname(const TCHAR *pszParam, const TCHAR *pArg, TCHAR *pValue, AbstractCo
 }
 
 /**
- * Handler for System.Hostname parameter
- */
-LONG H_Hostname(const TCHAR *pszParam, const TCHAR *pArg, TCHAR *pValue, AbstractCommSession *session)
-{
-       int nRet = SYSINFO_RC_ERROR;
-       char szBuff[128];
-
-       if (gethostname(szBuff, sizeof(szBuff)) == 0)
-       {
-               ret_mbstring(pValue, szBuff);
-               nRet = SYSINFO_RC_SUCCESS;
-       }
-
-       return nRet;
-}
-
-/**
  * Handler for System.ConnectedUsers parameter
  */
 LONG H_ConnectedUsers(const TCHAR *pszParam, const TCHAR *pArg, TCHAR *pValue, AbstractCommSession *session)
index f2df240..25a9d43 100644 (file)
@@ -44,8 +44,6 @@ enum
 LONG H_ProcessList(const TCHAR *, const TCHAR *, StringList *, AbstractCommSession *);
 LONG H_Uptime(const TCHAR *, const TCHAR *, TCHAR *, AbstractCommSession *);
 LONG H_Uname(const TCHAR *, const TCHAR *, TCHAR *, AbstractCommSession *);
-LONG H_Hostname(const TCHAR *, const TCHAR *, TCHAR *, AbstractCommSession *);
-LONG H_Hostname(const TCHAR *, const TCHAR *, TCHAR *, AbstractCommSession *);
 LONG H_CpuLoad(const TCHAR *, const TCHAR *, TCHAR *, AbstractCommSession *);
 LONG H_CpuUsage(const TCHAR *, const TCHAR *, TCHAR *, AbstractCommSession *);
 LONG H_ProcessCount(const TCHAR *, const TCHAR *, TCHAR *, AbstractCommSession *);
index 81931bd..9b93ac7 100644 (file)
@@ -396,7 +396,6 @@ static NETXMS_SUBAGENT_PARAM m_parameters[] =
                DCI_DT_FLOAT,   DCIDESC_SYSTEM_CPU_USAGE15_GUEST_EX },
 
        /**************************************************************/
-       { _T("System.Hostname"), H_Hostname, NULL, DCI_DT_STRING, DCIDESC_SYSTEM_HOSTNAME },
    { _T("System.Memory.Physical.Available"),  H_MemoryInfo, (TCHAR *)PHYSICAL_AVAILABLE, DCI_DT_UINT64, DCIDESC_SYSTEM_MEMORY_PHYSICAL_AVAILABLE },
    { _T("System.Memory.Physical.AvailablePerc"), H_MemoryInfo, (TCHAR *)PHYSICAL_AVAILABLE_PCT, DCI_DT_FLOAT, DCIDESC_SYSTEM_MEMORY_PHYSICAL_AVAILABLE_PCT },
    { _T("System.Memory.Physical.Buffers"),  H_MemoryInfo, (TCHAR *)PHYSICAL_BUFFERS, DCI_DT_UINT64, DCIDESC_SYSTEM_MEMORY_PHYSICAL_BUFFERS },
index df78648..2c1a838 100644 (file)
@@ -224,8 +224,6 @@ LONG H_ProcessList(const TCHAR *, const TCHAR *, StringList *, AbstractCommSessi
 LONG H_ProcessTable(const TCHAR *cmd, const TCHAR *arg, Table *value, AbstractCommSession *);
 LONG H_Uptime(const TCHAR *, const TCHAR *, TCHAR *, AbstractCommSession *);
 LONG H_Uname(const TCHAR *, const TCHAR *, TCHAR *, AbstractCommSession *);
-LONG H_Hostname(const TCHAR *, const TCHAR *, TCHAR *, AbstractCommSession *);
-LONG H_Hostname(const TCHAR *, const TCHAR *, TCHAR *, AbstractCommSession *);
 LONG H_CpuCount(const TCHAR *, const TCHAR *, TCHAR *, AbstractCommSession *);
 LONG H_CpuInfo(const TCHAR *, const TCHAR *, TCHAR *, AbstractCommSession *);
 LONG H_CpuCswitch(const TCHAR *param, const TCHAR *arg, TCHAR *value, AbstractCommSession *session);
index 2337a0b..d36df40 100644 (file)
@@ -138,23 +138,6 @@ LONG H_Uname(const TCHAR *pszParam, const TCHAR *pArg, TCHAR *pValue, AbstractCo
 }
 
 /**
- * Handler for System.Hostname parameter
- */
-LONG H_Hostname(const TCHAR *pszParam, const TCHAR *pArg, TCHAR *pValue, AbstractCommSession *session)
-{
-       int nRet = SYSINFO_RC_ERROR;
-       char szBuff[128];
-
-       if (gethostname(szBuff, sizeof(szBuff)) == 0)
-       {
-               ret_mbstring(pValue, szBuff);
-               nRet = SYSINFO_RC_SUCCESS;
-       }
-
-       return nRet;
-}
-
-/**
  * Handler for System.CPU.LoadAvg parameters
  */
 LONG H_CpuLoad(const TCHAR *pszParam, const TCHAR *pArg, TCHAR *pValue, AbstractCommSession *session)
index 47d762a..f63a772 100644 (file)
@@ -124,8 +124,6 @@ static NETXMS_SUBAGENT_PARAM m_parameters[] =
        { "System.CPU.Usage15",           H_CpuUsage,        NULL,
        DCI_DT_FLOAT,   DCIDESC_SYSTEM_CPU_USAGE15 },
 */
-       { "System.Hostname",              H_Hostname,        NULL,
-               DCI_DT_FLOAT,   DCIDESC_SYSTEM_HOSTNAME },
        { "System.Memory.Physical.Free",  H_MemoryInfo,      (char *)PHYSICAL_FREE,
                DCI_DT_UINT64,  DCIDESC_SYSTEM_MEMORY_PHYSICAL_FREE },
        { "System.Memory.Physical.Total", H_MemoryInfo,      (char *)PHYSICAL_TOTAL,
index cc79a6e..a732b0e 100644 (file)
@@ -87,20 +87,6 @@ LONG H_Uname(const char *pszParam, const char *pArg, char *pValue, AbstractCommS
    return nRet;
 }
 
-LONG H_Hostname(const char *pszParam, const char *pArg, char *pValue, AbstractCommSession *session)
-{
-       int nRet = SYSINFO_RC_ERROR;
-       char szBuff[128];
-
-       if (gethostname(szBuff, sizeof(szBuff)) == 0)
-       {
-       ret_string(pValue, szBuff);
-               nRet = SYSINFO_RC_SUCCESS;
-       }
-
-   return nRet;
-}
-
 LONG H_CpuLoad(const char *pszParam, const char *pArg, char *pValue, AbstractCommSession *session)
 {
        int nRet = SYSINFO_RC_ERROR;
index 23f42b9..0c765fa 100644 (file)
@@ -54,8 +54,6 @@ enum
 LONG H_ProcessList(const char *, const char *, StringList *, AbstractCommSession *);
 LONG H_Uptime(const char *, const char *, char *, AbstractCommSession *);
 LONG H_Uname(const char *, const char *, char *, AbstractCommSession *);
-LONG H_Hostname(const char *, const char *, char *, AbstractCommSession *);
-LONG H_Hostname(const char *, const char *, char *, AbstractCommSession *);
 LONG H_CpuCount(const char *, const char *, char *, AbstractCommSession *);
 LONG H_CpuLoad(const char *, const char *, char *, AbstractCommSession *);
 LONG H_CpuUsage(const char *, const char *, char *, AbstractCommSession *);
index af8b504..b3b2573 100644 (file)
@@ -112,8 +112,6 @@ static NETXMS_SUBAGENT_PARAM m_parameters[] =
        { _T("System.CPU.Usage15"),           H_CpuUsage,        NULL,
        DCI_DT_FLOAT,   DCIDESC_SYSTEM_CPU_USAGE15 },
 */
-       { _T("System.Hostname"),              H_Hostname,        NULL,
-               DCI_DT_FLOAT,   DCIDESC_SYSTEM_HOSTNAME },
        { _T("System.Memory.Physical.Free"),  H_MemoryInfo,      (const TCHAR *)PHYSICAL_FREE,
                DCI_DT_UINT64,  DCIDESC_SYSTEM_MEMORY_PHYSICAL_FREE },
        { _T("System.Memory.Physical.Total"), H_MemoryInfo,      (const TCHAR *)PHYSICAL_TOTAL,
index 9ef9060..8eb2952 100644 (file)
@@ -88,20 +88,6 @@ LONG H_Uname(const TCHAR *pszParam, const TCHAR *pArg, TCHAR *pValue, AbstractCo
    return nRet;
 }
 
-LONG H_Hostname(const TCHAR *pszParam, const TCHAR *pArg, TCHAR *pValue, AbstractCommSession *session)
-{
-       int nRet = SYSINFO_RC_ERROR;
-       char szBuff[128];
-
-       if (gethostname(szBuff, sizeof(szBuff)) == 0)
-       {
-       ret_mbstring(pValue, szBuff);
-               nRet = SYSINFO_RC_SUCCESS;
-       }
-
-   return nRet;
-}
-
 LONG H_CpuLoad(const TCHAR *pszParam, const TCHAR *pArg, TCHAR *pValue, AbstractCommSession *session)
 {
        int nRet = SYSINFO_RC_ERROR;
index 7848f7f..46d5a6d 100644 (file)
@@ -37,8 +37,6 @@ enum
 LONG H_ProcessList(const TCHAR *, const TCHAR *, StringList *, AbstractCommSession *);
 LONG H_Uptime(const TCHAR *, const TCHAR *, TCHAR *, AbstractCommSession *);
 LONG H_Uname(const TCHAR *, const TCHAR *, TCHAR *, AbstractCommSession *);
-LONG H_Hostname(const TCHAR *, const TCHAR *, TCHAR *, AbstractCommSession *);
-LONG H_Hostname(const TCHAR *, const TCHAR *, TCHAR *, AbstractCommSession *);
 LONG H_CpuCount(const TCHAR *, const TCHAR *, TCHAR *, AbstractCommSession *);
 LONG H_CpuLoad(const TCHAR *, const TCHAR *, TCHAR *, AbstractCommSession *);
 LONG H_CpuUsage(const TCHAR *, const TCHAR *, TCHAR *, AbstractCommSession *);
index 78134a2..72d8ae4 100644 (file)
@@ -2932,3 +2932,82 @@ bool LIBNETXMS_EXPORTABLE ReadPassword(const TCHAR *prompt, TCHAR *buffer, size_
    _tprintf(_T("\n"));
    return true;
 }
+
+/**
+ * Get system name
+ */
+TCHAR LIBNETXMS_EXPORTABLE *GetLocalHostName(TCHAR *buffer, size_t size, bool fqdn)
+{
+   *buffer = 0;
+#ifdef _WIN32
+   DWORD s = (DWORD)size;
+   return GetComputerNameEx(fqdn ? ComputerNamePhysicalDnsFullyQualified : ComputerNamePhysicalDnsHostname, buffer, &s) ? buffer : NULL;
+#else    /* _WIN32 */
+   char hostname[256];
+   if (gethostname(hostname, 256) != 0)
+      return NULL;
+   if (fqdn)
+   {
+#if HAVE_GETADDRINFO
+      struct addrinfo hints;
+      memset(&hints, 0, sizeof hints);
+      hints.ai_family = AF_UNSPEC; /*either IPV4 or IPV6*/
+      hints.ai_socktype = SOCK_STREAM;
+      hints.ai_flags = AI_CANONNAME;
+
+      struct addrinfo *info;
+      if (getaddrinfo(hostname, "http", &hints, &info) != 0)
+         return NULL;
+
+      bool found = false;
+      for(struct addrinfo *p = info; p != NULL; p = p->ai_next)
+      {
+         if (strchr(p->ai_canonname, '.') != NULL)
+         {
+#ifdef UNICODE
+            MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, p->ai_canonname, -1, buffer, size);
+#else
+            strncpy(buffer, p->ai_canonname, size);
+#endif
+            found = true;
+            break;
+         }
+      }
+
+      if (!found && (info != NULL))
+      {
+         // Use first available name as last resort
+#ifdef UNICODE
+         MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, info->ai_canonname, -1, buffer, size);
+#else
+         strncpy(buffer, info->ai_canonname, size);
+#endif
+         found = true;
+      }
+
+      freeaddrinfo(info);
+      if (!found)
+         return NULL;
+#else    /* HAVE_GETADDRINFO */
+      struct hostent *h = gethostbyname(hostname);
+      if (h == NULL)
+         return NULL;
+#ifdef UNICODE
+      MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, h->h_name, -1, buffer, size);
+#else
+      strncpy(buffer, h->h_name, size);
+#endif
+#endif   /* HAVE_GETADDRINFO */
+   }
+   else
+   {
+#ifdef UNICODE
+      MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, hostname, -1, buffer, size);
+#else
+      strncpy(buffer, hostname, size);
+#endif
+   }
+   buffer[size - 1] = 0;
+   return buffer;
+#endif   /* _WIN32 */
+}