]> git.sur5r.net Git - openldap/blobdiff - servers/slurpd/main.c
add uptime monitoring (in seconds)
[openldap] / servers / slurpd / main.c
index 33dcd9b8428ae7002ca02750cc3faf921bd39b14..4284c873618a52a719cf78bb9d627984c61cb3be 100644 (file)
@@ -1,7 +1,7 @@
 /* $OpenLDAP$ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
- * Copyright 1998-2005 The OpenLDAP Foundation.
+ * Copyright 1998-2007 The OpenLDAP Foundation.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -215,31 +215,57 @@ int main( int argc, char **argv )
        }
 #endif
 
-       if ( slurpd_pid_file != NULL ) {
-               FILE *fp = fopen( slurpd_pid_file, "w" );
+       /*
+        * don't open pid/args file in one-shot mode (ITS#4152)
+        *
+        * bail out if files were specified but cannot be opened (ITS#4074)
+        */
+       if ( !sglob->one_shot_mode) {
+               if ( slurpd_pid_file != NULL ) {
+                       FILE *fp = fopen( slurpd_pid_file, "w" );
+
+                       if ( fp == NULL ) {
+                               int save_errno = errno;
+
+                               fprintf( stderr, "unable to open pid file "
+                                       "\"%s\": %d (%s)\n",
+                                       slurpd_pid_file,
+                                       save_errno, strerror( save_errno ) );
+
+                               free( slurpd_pid_file );
+                               slurpd_pid_file = NULL;
+
+                               rc = 1;
+                               goto stop;
+                       }
 
-               if( fp != NULL ) {
                        fprintf( fp, "%d\n", (int) getpid() );
                        fclose( fp );
-
-               } else {
-               free(slurpd_pid_file);
-               slurpd_pid_file = NULL;
                }
-       }
 
-       if ( slurpd_args_file != NULL ) {
-               FILE *fp = fopen( slurpd_args_file, "w" );
+               if ( slurpd_args_file != NULL ) {
+                       FILE *fp = fopen( slurpd_args_file, "w" );
+
+                       if ( fp == NULL ) {
+                               int save_errno = errno;
+
+                               fprintf( stderr, "unable to open args file "
+                                       "\"%s\": %d (%s)\n",
+                                       slurpd_args_file,
+                                       save_errno, strerror( save_errno ) );
+
+                               free( slurpd_args_file );
+                               slurpd_pid_file = NULL;
+
+                               rc = 1;
+                               goto stop;
+                       }
 
-               if( fp != NULL ) {
                        for ( i = 0; i < argc; i++ ) {
                                fprintf( fp, "%s ", argv[i] );
                        }
                        fprintf( fp, "\n" );
                        fclose( fp );
-               } else {
-                       free(slurpd_args_file);
-                       slurpd_args_file = NULL;
                }
        }