X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslurpd%2Fmain.c;h=4284c873618a52a719cf78bb9d627984c61cb3be;hb=a6e232e7c1c6815b214e5f920459cd63ceeb54e7;hp=ccd75e7ed0398f6227fea53a7c2c87289fb394e4;hpb=f54bc2635738dd9ec568367e3d685d9c148055a7;p=openldap diff --git a/servers/slurpd/main.c b/servers/slurpd/main.c index ccd75e7ed0..4284c87361 100644 --- a/servers/slurpd/main.c +++ b/servers/slurpd/main.c @@ -1,7 +1,7 @@ /* $OpenLDAP$ */ /* This work is part of OpenLDAP Software . * - * 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; } }