]> git.sur5r.net Git - openldap/commitdiff
don't open pid/args files in one-shot mode (ITS#4152); bail out if files cannot be...
authorPierangelo Masarati <ando@openldap.org>
Wed, 9 Nov 2005 10:17:04 +0000 (10:17 +0000)
committerPierangelo Masarati <ando@openldap.org>
Wed, 9 Nov 2005 10:17:04 +0000 (10:17 +0000)
servers/slurpd/main.c

index 33dcd9b8428ae7002ca02750cc3faf921bd39b14..a502ea02651a23f4f308c4326e88e09fbd30939f 100644 (file)
@@ -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;
                }
        }