monit-dev
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[monit-dev] [monit] r214 committed - - don't use service name in queued


From: monit
Subject: [monit-dev] [monit] r214 committed - - don't use service name in queued event path since service name can c...
Date: Fri, 30 Jul 2010 20:55:59 +0000

Revision: 214
Author: martin2812
Date: Fri Jul 30 13:55:29 2010
Log: - don't use service name in queued event path since service name can contain '/' which has special meaning in filesystem and event store attempt failed
- improve error logging for event queue so it is clear why it failed


http://code.google.com/p/monit/source/detail?r=214

Modified:
 /trunk/event.c
 /trunk/file.c

=======================================
--- /trunk/event.c      Mon Jul 26 12:10:25 2010
+++ /trunk/event.c      Fri Jul 30 13:55:29 2010
@@ -499,21 +499,21 @@
       DEBUG("%s: processing queued event %s\n", prog, file_name);

       if (! (file = fopen(file_name, "r")) ) {
- LogError("%s: Processing failed - cannot open the event file %s -- %s\n", prog, file_name, STRERROR); + LogError("%s: queued event processing failed - cannot open the file %s -- %s\n", prog, file_name, STRERROR);
         goto error1;
       }

       /* read event structure version */
       if (!(version = File_readQueue(file, &size))) {
-        LogError("skipping %s - unknown data format\n", file_name);
+ LogError("skipping queued event %s - unknown data format\n", file_name);
         goto error2;
       }
       if (size != sizeof(int)) {
-        LogError("Aborting event %s - invalid size %d\n", file_name, size);
+ LogError("Aborting queued event %s - invalid size %d\n", file_name, size);
         goto error3;
       }
       if (*version != EVENT_VERSION) {
- LogError("Aborting event %s - incompatible data format version %d\n", file_name, *version); + LogError("Aborting queued event %s - incompatible data format version %d\n", file_name, *version);
         goto error3;
       }

@@ -579,7 +579,7 @@

       /* If no error persists, remove it from the queue */
       if (e->flag == HANDLER_SUCCEEDED) {
- DEBUG("Removing event %s from the queue for later external delivery\n", file_name);
+        DEBUG("Removing queued event %s\n", file_name);
         if (unlink(file_name) < 0)
LogError("Failed to remove queued event file '%s' -- %s\n", file_name, STRERROR);
       } else if (handlers_passed > 0) {
@@ -749,7 +749,7 @@
   }

   /* compose the file name of actual timestamp and service name */
- snprintf(file_name, STRLEN, "%s/%ld_%s", Run.eventlist_dir, (long int)time(NULL), E->source); + snprintf(file_name, STRLEN, "%s/%ld_%lx", Run.eventlist_dir, (long int)time(NULL), (long unsigned)E->source);

DEBUG("%s: Adding event to the queue file %s for later delivery\n", prog, file_name);

=======================================
--- /trunk/file.c       Fri Jan  8 03:20:43 2010
+++ /trunk/file.c       Fri Jul 30 13:55:29 2010
@@ -313,7 +313,6 @@
  * @return TRUE if the test succeeded otherwise FALSE
  */
 int File_checkStat(char *filename, char *description, int permmask) {
-
   struct stat buf;
   errno= 0;

@@ -390,7 +389,6 @@
  * @return TRUE if the succeeded otherwise FALSE
  */
 int File_checkQueueDirectory(char *path, mode_t mode) {
-
   struct stat st;

   if(stat(path, &st)) {
@@ -400,17 +398,17 @@
       rv = mkdir(path, mode);
       umask(mask);
       if(rv) {
-        LogError("%s: cannot create the directory %s -- %s\n",
+        LogError("%s: cannot create the event queue directory %s -- %s\n",
           prog, path, STRERROR);
         return FALSE;
       }
     } else {
-      LogError("%s: cannot read the directory %s -- %s\n",
+      LogError("%s: cannot read the event queue directory %s -- %s\n",
         prog, path, STRERROR);
       return FALSE;
     }
   } else if(! S_ISDIR(st.st_mode)) {
-    LogError("%s: the %s is not the directory\n", prog, path);
+    LogError("%s: event queue: the %s is not the directory\n", prog, path);
     return FALSE;
   }
   return TRUE;
@@ -424,7 +422,6 @@
  * @return TRUE if the succeeded otherwise FALSE
  */
 int File_checkQueueLimit(char *path, int limit) {
-
   int            used = 0;
   DIR           *dir = NULL;
   struct dirent *de = NULL;
@@ -433,7 +430,7 @@
     return TRUE;

   if(! (dir = opendir(path)) ) {
- LogError("%s: cannot open the directory %s -- %s\n", prog, path, STRERROR); + LogError("%s: cannot open the event queue directory %s -- %s\n", prog, path, STRERROR);
     return FALSE;
   }
   while( (de = readdir(dir)) ) {
@@ -458,23 +455,31 @@
  * @return TRUE if the succeeded otherwise FALSE
  */
 int File_writeQueue(FILE *file, void *data, int size) {
+  int rv;

   ASSERT(file);

   /* write size */
-  if(fwrite(&size, 1, sizeof(int), file) != sizeof(int) || ferror(file))
-    goto error;
+  if((rv = fwrite(&size, 1, sizeof(int), file)) != sizeof(int)) {
+    if (feof(file) || ferror(file))
+ LogError("%s: queued event file: unable to write event size -- %s\n", prog, feof(file) ? "end of file" : "stream error");
+    else
+ LogError("%s: queued event file: unable to write event size -- read returned %d bytes\n", prog, rv);
+    return FALSE;
+  }

   /* write data if any */
-  if(size > 0)
-    if(fwrite(data, 1, size, file) != size || ferror(file))
-      goto error;
+  if(size > 0) {
+    if((rv = fwrite(data, 1, size, file)) != size) {
+      if (feof(file) || ferror(file))
+ LogError("%s: queued event file: unable to write event size -- %s\n", prog, feof(file) ? "end of file" : "stream error");
+      else
+ LogError("%s: queued event file: unable to write event size -- read returned %d bytes\n", prog, rv);
+      return FALSE;
+    }
+  }

   return TRUE;
-
-  error:
-  LogError("%s: unable to write data to the file\n", prog);
-  return FALSE;
 }


@@ -486,28 +491,32 @@
  * appropriately.
  */
 void *File_readQueue(FILE *file, int *size) {
-
+  int rv;
   void *data = NULL;

   ASSERT(file);

   /* read size */
-  if(fread(size, 1, sizeof(int), file) != sizeof(int) || ferror(file))
-    goto error;
+  if((rv = fread(size, 1, sizeof(int), file)) != sizeof(int)) {
+    if (feof(file) || ferror(file))
+ LogError("%s: queued event file: unable to read event size -- %s\n", prog, feof(file) ? "end of file" : "stream error");
+    else
+ LogError("%s: queued event file: unable to read event size -- read returned %d bytes\n", prog, rv);
+    return NULL;
+  }

/* read data if any (allow 1MB at maximum to prevent enormous memory allocation) */
   if(*size > 0 && *size < 1048576) {
     data = xcalloc(1, *size);
-    if(fread(data, 1, *size, file) != *size || ferror(file)) {
+    if((rv = fread(data, 1, *size, file)) != *size) {
       FREE(data);
-      goto error;
+      if (feof(file) || ferror(file))
+ LogError("%s: queued event file: unable to read event data -- %s\n", prog, feof(file) ? "end of file" : "stream error");
+      else
+ LogError("%s: queued event file: unable to read event data -- read returned %d bytes\n", prog, rv);
+      return NULL;
     }
   }
-
   return data;
-
-  error:
-  LogError("%s: unable to read data from the file\n", prog);
-  return FALSE;
 }




reply via email to

[Prev in Thread] Current Thread [Next in Thread]