Fixed bug #0000003
authorVictor Kirhenshtein <victor@netxms.org>
Thu, 3 Feb 2005 13:54:22 +0000 (13:54 +0000)
committerVictor Kirhenshtein <victor@netxms.org>
Thu, 3 Feb 2005 13:54:22 +0000 (13:54 +0000)
ChangeLog
TODO
sql/policy.in
src/server/core/epp.cpp
src/server/core/tools.cpp

index 9f9c8c5..9c6100b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -13,6 +13,8 @@
 - Implemented primary IP address selection for nodes
 - Added OSPF support detection
 - Fixed bug with StartupDelay parameter handling in core agent
+- Fixed communication problems on FreeBSD
+- Bug #0000003 fixed
 
 
 *
diff --git a/TODO b/TODO
index 5cd7683..411ce96 100644 (file)
--- a/TODO
+++ b/TODO
@@ -4,7 +4,6 @@
 
 GENERAL:
 
-- Fix bugs in ConditionWait()
 - Finish Linux subagent
 - Finish FreeBSD subagent
 - Finish Solaris subagent
index fa16dfa..be2e96a 100644 (file)
@@ -9,7 +9,7 @@ INSERT INTO event_policy (rule_id,flags,comments,alarm_message,alarm_severity,al
                '%m',5,'NODE_STATUS_%i','NODE_STATUS_%i');
 INSERT INTO event_policy (rule_id,flags,comments,alarm_message,alarm_severity,alarm_key,alarm_ack_key)
        VALUES (1,7944,'Acknowlege node status alarms when node status changes to NORMAL',
-               '%m',6,'','NODE_STATUS_%i');
+               '%m',6,'#00','NODE_STATUS_%i');
 INSERT INTO event_policy (rule_id,flags,comments,alarm_message,alarm_severity,alarm_key,alarm_ack_key)
        VALUES (2,7944,'Generate alarm when incorrect network mask detected on interface',
                '%m',2,'BAD_NETMASK_%i_%2','BAD_NETMASK_%i_%2');
index 7650498..8b475df 100644 (file)
@@ -55,9 +55,12 @@ EPRule::EPRule(DB_RESULT hResult, int iRow)
    m_pszComment = strdup(DBGetField(hResult, iRow, 2));
    DecodeSQLString(m_pszComment);
    strcpy(m_szAlarmMessage, DBGetField(hResult, iRow, 3));
+   DecodeSQLString(m_szAlarmMessage);
    m_iAlarmSeverity = DBGetFieldLong(hResult, iRow, 4);
    strcpy(m_szAlarmKey, DBGetField(hResult, iRow, 5));
+   DecodeSQLString(m_szAlarmKey);
    strcpy(m_szAlarmAckKey, DBGetField(hResult, iRow, 6));
+   DecodeSQLString(m_szAlarmAckKey);
 }
 
 
@@ -327,17 +330,23 @@ BOOL EPRule::LoadFromDB(void)
 
 void EPRule::SaveToDB(void)
 {
-   char *pszComment, szQuery[4096];
+   char *pszComment, *pszEscKey, *pszEscAck, *pszEscMessage, szQuery[4096];
    DWORD i;
 
    // General attributes
    pszComment = EncodeSQLString(m_pszComment);
+   pszEscKey = EncodeSQLString(m_szAlarmKey);
+   pszEscAck = EncodeSQLString(m_szAlarmAckKey);
+   pszEscMessage = EncodeSQLString(m_szAlarmMessage);
    sprintf(szQuery, "INSERT INTO event_policy (rule_id,flags,comments,alarm_message,"
                     "alarm_severity,alarm_key,alarm_ack_key) "
                     "VALUES (%ld,%ld,'%s','%s',%d,'%s','%s')",
-           m_dwId, m_dwFlags, pszComment, m_szAlarmMessage, m_iAlarmSeverity,
-           m_szAlarmKey, m_szAlarmAckKey);
+           m_dwId, m_dwFlags, pszComment, pszEscMessage, m_iAlarmSeverity,
+           pszEscKey, pszEscAck);
    free(pszComment);
+   free(pszEscMessage);
+   free(pszEscKey);
+   free(pszEscAck);
    DBQuery(g_hCoreDB, szQuery);
 
    // Actions
index 6526cc9..fcbee4e 100644 (file)
@@ -279,26 +279,35 @@ char NXCORE_EXPORTABLE *EncodeSQLString(const char *pszIn)
    char *pszOut;
    int iPosIn, iPosOut, iStrSize;
 
-   // Allocate destination buffer
-   iStrSize = strlen(pszIn) + 1;
-   for(iPosIn = 0; pszIn[iPosIn] != 0; iPosIn++)
-      if (strchr(m_szSpecialChars, pszIn[iPosIn])  != NULL)
-         iStrSize += 2;
-   pszOut = (char *)malloc(iStrSize);
-
-   // TRanslate string
-   for(iPosIn = 0, iPosOut = 0; pszIn[iPosIn] != 0; iPosIn++)
-      if (strchr(m_szSpecialChars, pszIn[iPosIn]) != NULL)
-      {
-         pszOut[iPosOut++] = '#';
-         pszOut[iPosOut++] = bin2hex(pszIn[iPosIn] >> 4);
-         pszOut[iPosOut++] = bin2hex(pszIn[iPosIn] & 0x0F);
-      }
-      else
-      {
-         pszOut[iPosOut++] = pszIn[iPosIn];
-      }
-   pszOut[iPosOut] = 0;
+   if (*pszIn != 0)
+   {
+      // Allocate destination buffer
+      iStrSize = strlen(pszIn) + 1;
+      for(iPosIn = 0; pszIn[iPosIn] != 0; iPosIn++)
+         if (strchr(m_szSpecialChars, pszIn[iPosIn])  != NULL)
+            iStrSize += 2;
+      pszOut = (char *)malloc(iStrSize);
+
+      // Translate string
+      for(iPosIn = 0, iPosOut = 0; pszIn[iPosIn] != 0; iPosIn++)
+         if (strchr(m_szSpecialChars, pszIn[iPosIn]) != NULL)
+         {
+            pszOut[iPosOut++] = '#';
+            pszOut[iPosOut++] = bin2hex(pszIn[iPosIn] >> 4);
+            pszOut[iPosOut++] = bin2hex(pszIn[iPosIn] & 0x0F);
+         }
+         else
+         {
+            pszOut[iPosOut++] = pszIn[iPosIn];
+         }
+      pszOut[iPosOut] = 0;
+   }
+   else
+   {
+      // Encode empty strings as #00
+      pszOut = (char *)malloc(4);
+      strcpy(pszOut, "#00");
+   }
    return pszOut;
 }