- Added agent's configuration parameter EnabledCiphers
authorVictor Kirhenshtein <victor@netxms.org>
Tue, 21 Jun 2005 17:41:10 +0000 (17:41 +0000)
committerVictor Kirhenshtein <victor@netxms.org>
Tue, 21 Jun 2005 17:41:10 +0000 (17:41 +0000)
- Added agent's parameter Agent.SupportedCiphers

contrib/nxagentd.conf-dist
include/nxcscpapi.h
src/agent/core/getparam.cpp
src/agent/core/nxagentd.cpp

index 39fbdf3..ddf5e2c 100644 (file)
 # Example:
 # RequireAuthentication = no
 
+#
+# RequireEncryption
+#
+# If set to "yes", host connected to agent will be forced to use encryption,
+# and if encryption is not supported by remote host, connection will be 
+# dropped. Default value is "no". This parameter has no effect if agent
+# was compiled without encryption support.
+#
+# Example:
+# RequireEncryption = no
+
+#
+# EnabledCiphers
+#
+# Control what ciphers agent can use for connection encryption. Value for
+# this parameter is a cipher code. To enable more than one cipher, they
+# codes should be added. By default, all possible ciphers are enabled.
+#
+# Possible cipher codes:
+#      1  =  AES-256
+#      2  =  BLOWFISH
+#      4  =  IDEA
+#       8  =  Triple DES
+#
+# Example (enable AES-256 and IDEA):
+# EnabledCiphers = 5
+
 #
 # SharedSecret
 #
index cf2fbab..4ea4ea1 100644 (file)
@@ -188,6 +188,7 @@ BOOL LIBNXCSCP_EXPORTABLE SendFileOverCSCP(SOCKET hSocket, DWORD dwId, TCHAR *ps
                                            CSCP_ENCRYPTION_CONTEXT *pCtx);
    
 BOOL LIBNXCSCP_EXPORTABLE InitCryptoLib(DWORD dwEnabledCiphers);
+DWORD LIBNXCSCP_EXPORTABLE CSCPGetSupportedCiphers(void);
 CSCP_ENCRYPTED_MESSAGE LIBNXCSCP_EXPORTABLE 
    *CSCPEncryptMessage(CSCP_ENCRYPTION_CONTEXT *pCtx, CSCP_MESSAGE *pMsg);
 BOOL LIBNXCSCP_EXPORTABLE CSCPDecryptMessage(CSCP_ENCRYPTION_CONTEXT *pCtx,
index 66de504..fb66a5b 100644 (file)
@@ -107,6 +107,36 @@ static LONG H_UIntPtr(char *cmd, char *arg, char *value)
 }
 
 
+//
+// Handler for Agent.SupportedCiphers
+//
+
+static LONG H_SupportedCiphers(char *pszCmd, char *pArg, char *pValue)
+{
+   DWORD dwCiphers;
+
+   dwCiphers = CSCPGetSupportedCiphers();
+   if (dwCiphers == 0)
+   {
+      ret_string(pValue, "NONE");
+   }
+   else
+   {
+      *pValue = 0;
+      if (dwCiphers & CSCP_SUPPORT_AES_256)
+         strcat(pValue, "AES-256 ");
+      if (dwCiphers & CSCP_SUPPORT_BLOWFISH)
+         strcat(pValue, "BLOWFISH ");
+      if (dwCiphers & CSCP_SUPPORT_IDEA)
+         strcat(pValue, "IDEA ");
+      if (dwCiphers & CSCP_SUPPORT_3DES)
+         strcat(pValue, "3DES ");
+      pValue[strlen(pValue) - 1] = 0;
+   }
+   return SYSINFO_RC_SUCCESS;
+}
+
+
 //
 // Handler for parameters list
 //
@@ -196,6 +226,7 @@ static NETXMS_SUBAGENT_PARAM m_stdParams[] =
    { "Agent.ProcessedRequests", H_UIntPtr, (char *)&m_dwProcessedRequests, DCI_DT_UINT, "" },
    { "Agent.RejectedConnections", H_UIntPtr, (char *)&g_dwRejectedConnections, DCI_DT_UINT, "" },
    { "Agent.SourcePackageSupport", H_StringConstant, "0", DCI_DT_INT, "" },
+   { "Agent.SupportedCiphers", H_SupportedCiphers, NULL, DCI_DT_STRING, "List of ciphers supported by agent" },
    { "Agent.TimedOutRequests", H_UIntPtr, (char *)&m_dwTimedOutRequests, DCI_DT_UINT, "" },
    { "Agent.UnsupportedRequests", H_UIntPtr, (char *)&m_dwUnsupportedRequests, DCI_DT_UINT, "" },
    { "Agent.Uptime", H_AgentUptime, NULL, DCI_DT_UINT, "Agent's uptime" },
index ccd0613..047d35a 100644 (file)
@@ -106,6 +106,7 @@ static char *m_pszInstallServerList = NULL;
 static char *m_pszSubagentList = NULL;
 static char *m_pszExtParamList = NULL;
 static CONDITION m_hCondShutdown = INVALID_CONDITION_HANDLE;
+static DWORD m_dwEnabledCiphers = 0xFFFF;
 
 
 //
@@ -116,6 +117,7 @@ static NX_CFG_TEMPLATE m_cfgTemplate[] =
 {
    { "Action", CT_STRING_LIST, '\n', 0, 0, 0, &m_pszActionList },
    { "EnableActions", CT_BOOLEAN, 0, 0, AF_ENABLE_ACTIONS, 0, &g_dwFlags },
+   { "EnabledCiphers", CT_LONG, 0, 0, 0, 0, &m_dwEnabledCiphers },
    { "ExternalParameter", CT_STRING_LIST, '\n', 0, 0, 0, &m_pszExtParamList },
    { "FileStore", CT_STRING, 0, 0, MAX_PATH, 0, g_szFileStore },
    { "InstallationServers", CT_STRING_LIST, ',', 0, 0, 0, &m_pszInstallServerList },
@@ -307,7 +309,7 @@ BOOL Initialize(void)
    InitSubAgentsLogger(WriteSubAgentMsg);
 
    // Initialize cryptografy
-   if (!InitCryptoLib(0xFFFF))
+   if (!InitCryptoLib(m_dwEnabledCiphers))
    {
       WriteLog(MSG_INIT_CRYPTO_FAILED, EVENTLOG_ERROR_TYPE, "e", WSAGetLastError());
       return FALSE;