]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/slaptest.c
refuse illegal values for "threads" (ITS#4433)
[openldap] / servers / slapd / slaptest.c
index 7a20dfdab95d6ef87d8c9449e48c845f719de507..e0de63628a57fcd040247a3215a5d2e45b04d4f7 100644 (file)
@@ -1,6 +1,6 @@
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
- * Copyright 2004 The OpenLDAP Foundation.
+ * Copyright 2004-2006 The OpenLDAP Foundation.
  * Portions Copyright 2004 Pierangelo Masarati.
  * All rights reserved.
  *
 #include <ac/ctype.h>
 #include <ac/string.h>
 #include <ac/socket.h>
+#include <sys/types.h>
+#include <sys/stat.h>
 #include <ac/unistd.h>
+#include <ac/errno.h>
 
 #include <lber.h>
 #include <ldif.h>
 
 #include "slapcommon.h"
 
+static int
+test_file( const char *fname, const char *ftype )
+{
+       struct stat     st;
+       int             save_errno;
+
+       switch ( stat( fname, &st ) ) {
+       case 0:
+               if ( !( st.st_mode & S_IWUSR ) ) {
+                       Debug( LDAP_DEBUG_ANY, "%s file "
+                               "\"%s\" exists, but user does not have access\n",
+                               ftype, fname, 0 );
+                       return -1;
+               }
+               break;
+
+       case -1:
+       default:
+               save_errno = errno;
+               if ( save_errno == ENOENT ) {
+                       FILE            *fp = fopen( fname, "w" );
+
+                       if ( fp == NULL ) {
+                               save_errno = errno;
+
+                               Debug( LDAP_DEBUG_ANY, "unable to open file "
+                                       "\"%s\": %d (%s)\n",
+                                       fname,
+                                       save_errno, strerror( save_errno ) );
+
+                               return -1;
+                       }
+                       unlink( fname );
+                       break;
+               }
+
+               Debug( LDAP_DEBUG_ANY, "unable to stat file "
+                       "\"%s\": %d (%s)\n",
+                       slapd_pid_file,
+                       save_errno, strerror( save_errno ) );
+               return -1;
+       }
+
+       return 0;
+}
+
 int
 slaptest( int argc, char **argv )
 {
        int                     rc = EXIT_SUCCESS;
        const char              *progname = "slaptest";
 
-#ifdef NEW_LOGGING
-       lutil_log_initialize( argc, argv );
-#endif
        slap_tool_init( progname, SLAPTEST, argc, argv );
 
+       if ( slapd_pid_file != NULL ) {
+               if ( test_file( slapd_pid_file, "pid" ) ) {
+                       return EXIT_FAILURE;
+               }
+       }
+
+       if ( slapd_args_file != NULL ) {
+               if ( test_file( slapd_args_file, "args" ) ) {
+                       return EXIT_FAILURE;
+               }
+       }
+
        fprintf( stderr, "config file testing succeeded\n");
 
        slap_tool_destroy();