]> git.sur5r.net Git - openldap/blobdiff - servers/slurpd/main.c
add uptime monitoring (in seconds)
[openldap] / servers / slurpd / main.c
index ccd75e7ed0398f6227fea53a7c2c87289fb394e4..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
@@ -155,7 +155,7 @@ int main( int argc, char **argv )
     }
 
 #ifdef HAVE_TLS
-       if( ldap_pvt_tls_init() || ldap_pvt_tls_init_def_ctx() ) {
+       if( ldap_pvt_tls_init() || ldap_pvt_tls_init_def_ctx( 0 ) ) {
                rc = 0;
                /* See if we actually need TLS */
                for ( i=0; i < sglob->num_replicas; i++ ) {
@@ -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;
                }
        }