]> git.sur5r.net Git - openldap/commitdiff
need a regular file (ITS#3865)
authorPierangelo Masarati <ando@openldap.org>
Thu, 14 Jul 2005 18:03:29 +0000 (18:03 +0000)
committerPierangelo Masarati <ando@openldap.org>
Thu, 14 Jul 2005 18:03:29 +0000 (18:03 +0000)
servers/slapd/config.c

index 9a0c798429300bcc0e1409f5e0f3701f2903345d..fa3a2c2e2434bc246606f431922be992e89d095b 100644 (file)
 #include <ac/socket.h>
 #include <ac/errno.h>
 
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
 #include "slap.h"
 #ifdef LDAP_SLAPI
 #include "slapi/slapi.h"
@@ -549,6 +553,7 @@ read_config_file(const char *fname, int depth, ConfigArgs *cf, ConfigTable *cft)
        ConfigTable *ct;
        ConfigArgs *c;
        int rc;
+       struct stat s;
 
        c = ch_calloc( 1, sizeof( ConfigArgs ) );
        if ( c == NULL ) {
@@ -567,6 +572,22 @@ read_config_file(const char *fname, int depth, ConfigArgs *cf, ConfigTable *cft)
        c->fname = fname;
        init_config_argv( c );
 
+       if ( stat( fname, &s ) != 0 ) {
+               ldap_syslog = 1;
+               Debug(LDAP_DEBUG_ANY,
+                   "could not stat config file \"%s\": %s (%d)\n",
+                   fname, strerror(errno), errno);
+               return(1);
+       }
+
+       if ( !S_ISREG( s.st_mode ) ) {
+               ldap_syslog = 1;
+               Debug(LDAP_DEBUG_ANY,
+                   "regular file expected, got \"%s\"\n",
+                   fname, 0, 0 );
+               return(1);
+       }
+
        fp = fopen( fname, "r" );
        if ( fp == NULL ) {
                ldap_syslog = 1;