]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Ensure that log files are plain files. (RT #22771)
authorScott Mann <smann@isc.org>
Fri, 4 Mar 2011 17:12:20 +0000 (17:12 +0000)
committerScott Mann <smann@isc.org>
Fri, 4 Mar 2011 17:12:20 +0000 (17:12 +0000)
17 files changed:
CHANGES
bin/named/logconf.c
bin/tests/system/conf.sh.in
bin/tests/system/logfileconfig/clean.sh [new file with mode: 0644]
bin/tests/system/logfileconfig/ns1/named.conf [new file with mode: 0644]
bin/tests/system/logfileconfig/ns1/named.dirconf [new file with mode: 0644]
bin/tests/system/logfileconfig/ns1/named.pipeconf [new file with mode: 0644]
bin/tests/system/logfileconfig/ns1/named.plain [new file with mode: 0644]
bin/tests/system/logfileconfig/ns1/named.symconf [new file with mode: 0644]
bin/tests/system/logfileconfig/ns1/rndc.conf [new file with mode: 0644]
bin/tests/system/logfileconfig/ns1/root.db [new file with mode: 0644]
bin/tests/system/logfileconfig/tests.sh [new file with mode: 0644]
bin/tests/system/start.pl
lib/isc/include/isc/file.h
lib/isc/unix/file.c
lib/isc/unix/stdio.c
lib/isc/win32/file.c

diff --git a/CHANGES b/CHANGES
index 7b1fb70998be921b5e61751a2d54c55277e5add5..c7f59d19b17c9a2afe192b3dcc0c853d37c2fed9 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,7 @@
+3058.   [bug]           Cause named to terminate at startup or rndc reconfig/
+                        reload to fail, if a log file specified in the conf
+                        file isn't a plain file. [RT #22771]
+
 3051.  [bug]           NS records obsure DS records at the bottom of the
                        zone if both are present. [RT #23035]
 
index ce815f496e81e881573bd637c1ceca24421f9773..a43654ea7a88fd180980f0670cd12bbb8bf53797 100644 (file)
@@ -15,7 +15,7 @@
  * PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: logconf.c,v 1.35.18.5 2006/03/02 00:37:21 marka Exp $ */
+/* $Id: logconf.c,v 1.35.18.6 2011/03/04 17:12:18 smann Exp $ */
 
 /*! \file */
 
@@ -221,24 +221,36 @@ channel_fromconf(const cfg_obj_t *channel, isc_logconfig_t *lctx) {
                FILE *fp;
                
                /*
-                * Test that the file can be opened, since isc_log_open()
-                * can't effectively report failures when called in
-                * isc_log_doit().
-                */
-               result = isc_stdio_open(dest.file.name, "a", &fp);
-               if (result != ISC_R_SUCCESS)
-                       isc_log_write(ns_g_lctx, CFG_LOGCATEGORY_CONFIG,
-                                     NS_LOGMODULE_SERVER, ISC_LOG_ERROR,
-                                     "logging channel '%s' file '%s': %s",
-                                     channelname, dest.file.name,
-                                     isc_result_totext(result));
-               else
-                       (void)isc_stdio_close(fp);
-
-               /*
-                * Allow named to continue by returning success.
-                */
-               result = ISC_R_SUCCESS;
+                * Test to make sure that file is a plain file.
+                * Fix defect #22771
+               */
+                result = isc_file_isplainfile(dest.file.name);
+                if (result == ISC_R_SUCCESS || 
+                   result == ISC_R_FILENOTFOUND) {
+                       /*
+                        * Test that the file can be opened, since
+                        * isc_log_open() can't effectively report 
+                        * failures when called in
+                        * isc_log_doit().
+                        */
+                       result = isc_stdio_open(dest.file.name, "a", &fp);
+                       if (result != ISC_R_SUCCESS) {
+                               syslog(LOG_ERR,
+                                       "isc_stdio_open '%s' failed: %s",
+                                       dest.file.name, 
+                                       isc_result_totext(result));
+                               fprintf(stderr,
+                                       "isc_stdio_open '%s' failed: %s",
+                                       dest.file.name,
+                                       isc_result_totext(result));
+                       } else
+                               (void)isc_stdio_close(fp);
+               } else {
+                       syslog(LOG_ERR, "isc_file_isplainfile '%s' failed: %s",
+                               dest.file.name, isc_result_totext(result));
+                       fprintf(stderr, "isc_file_isplainfile '%s' failed: %s",
+                               dest.file.name, isc_result_totext(result));
+               }
        }
 
        return (result);
index 8b08633a614253ddc9581f91c356127ebd0988b1..fc075f77503a28a8ad49947cc4ea5c8dfedcc35c 100644 (file)
@@ -15,7 +15,7 @@
 # OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 # PERFORMANCE OF THIS SOFTWARE.
 
-# $Id: conf.sh.in,v 1.27.18.16 2011/03/02 23:45:32 tbox Exp $
+# $Id: conf.sh.in,v 1.27.18.17 2011/03/04 17:12:18 smann Exp $
 
 #
 # Common configuration data for system tests, to be sourced into
@@ -44,9 +44,9 @@ CHECKCONF=$TOP/bin/check/named-checkconf
 # load on the machine to make it unusable to other users.
 # v6synth
 SUBDIRS="acl cacheclean checkconf checknames checkzone dlv dnssec forward
-        glue ixfr limits lwresd masterfile masterformat notify nsupdate
-        pending resolver rrsetorder sortlist stub tkey unknown upforwd
-        views xfer xferquota zonechecks"
+        glue ixfr limits logfileconfig lwresd masterfile masterformat notify
+        nsupdate pending resolver rrsetorder sortlist stub tkey unknown
+        upforwd views xfer xferquota zonechecks"
 
 # PERL will be an empty string if no perl interpreter was found.
 PERL=@PERL@
diff --git a/bin/tests/system/logfileconfig/clean.sh b/bin/tests/system/logfileconfig/clean.sh
new file mode 100644 (file)
index 0000000..b720fb6
--- /dev/null
@@ -0,0 +1,28 @@
+#!/bin/sh
+#
+# Copyright (C) 2011  Internet Systems Consortium, Inc. ("ISC")
+# Copyright (C) 2004, 2007  Internet Systems Consortium, Inc. ("ISC")
+# Copyright (C) 2000, 2001  Internet Software Consortium.
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+# AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+
+# $Id: clean.sh,v 1.2.8.2 2011/03/04 17:12:18 smann Exp $
+
+#
+# Clean up after log file tests
+#
+rm -f ns1/named.pid ns1/named.run
+rm -f ns1/named.memstats ns1/dig.out
+rm -f ns1/named_log ns1/named_pipe ns1/named_sym
+rm -rf ns1/named_dir
+cp ns1/named.plain ns1/named.conf
diff --git a/bin/tests/system/logfileconfig/ns1/named.conf b/bin/tests/system/logfileconfig/ns1/named.conf
new file mode 100644 (file)
index 0000000..f18966d
--- /dev/null
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2011  Internet Systems Consortium, Inc. ("ISC")
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+ * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+/* $Id: named.conf,v 1.2.8.2 2011/03/04 17:12:19 smann Exp $ */
+
+options {
+        query-source address 10.53.0.1;
+        notify-source 10.53.0.1;
+        transfer-source 10.53.0.1;
+        port 5300;
+        pid-file "named.pid";
+        listen-on port 5300 {
+                10.53.0.1;
+        };
+        listen-on-v6 { none; };
+       recursion no;
+       notify yes;
+};
+
+logging {
+        channel default_log {
+          file "named_log";
+          print-time yes;
+        };
+        category default { default_log; default_debug; };
+        category lame-servers { null; };
+};
+
+controls {
+    inet 127.0.0.1 port 9593 allow {
+                         127.0.0.1/32; ::1/128; }
+                         keys { "rndc-key"; };
+};
+
+key "rndc-key" {
+        algorithm hmac-md5;
+        secret "Am9vCg==";
+};
+
+
+zone "." {
+       type master;
+       file "root.db";
+};
diff --git a/bin/tests/system/logfileconfig/ns1/named.dirconf b/bin/tests/system/logfileconfig/ns1/named.dirconf
new file mode 100644 (file)
index 0000000..859e9ff
--- /dev/null
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2011  Internet Systems Consortium, Inc. ("ISC")
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+ * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+/* $Id: named.dirconf,v 1.2.8.2 2011/03/04 17:12:19 smann Exp $ */
+
+options {
+        query-source address 10.53.0.1;
+        notify-source 10.53.0.1;
+        transfer-source 10.53.0.1;
+        port 5300;
+        pid-file "named.pid";
+        listen-on port 5300 {
+                10.53.0.1;
+        };
+        listen-on-v6 { none; };
+       recursion no;
+       notify yes;
+};
+
+logging {
+        channel default_log {
+          file "named_dir";
+          print-time yes;
+        };
+        category default { default_log; default_debug; };
+        category lame-servers { null; };
+};
+
+controls {
+    inet 127.0.0.1 port 9593 allow {
+                         127.0.0.1/32; ::1/128; }
+                         keys { "rndc-key"; };
+};
+
+key "rndc-key" {
+        algorithm hmac-md5;
+        secret "Am9vCg==";
+};
+
+zone "." {
+       type master;
+       file "root.db";
+};
diff --git a/bin/tests/system/logfileconfig/ns1/named.pipeconf b/bin/tests/system/logfileconfig/ns1/named.pipeconf
new file mode 100644 (file)
index 0000000..ca22dcf
--- /dev/null
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2011  Internet Systems Consortium, Inc. ("ISC")
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+ * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+/* $Id: named.pipeconf,v 1.2.8.2 2011/03/04 17:12:19 smann Exp $ */
+
+options {
+        query-source address 10.53.0.1;
+        notify-source 10.53.0.1;
+        transfer-source 10.53.0.1;
+        port 5300;
+        pid-file "named.pid";
+        listen-on port 5300 {
+                10.53.0.1;
+        };
+        listen-on-v6 { none; };
+       recursion no;
+       notify yes;
+};
+
+logging {
+        channel default_log {
+          file "named_pipe";
+          print-time yes;
+        };
+        category default { default_log; default_debug; };
+        category lame-servers { null; };
+};
+
+controls {
+    inet 127.0.0.1 port 9593 allow {
+                         127.0.0.1/32; ::1/128; }
+                         keys { "rndc-key"; };
+};
+
+key "rndc-key" {
+        algorithm hmac-md5;
+        secret "Am9vCg==";
+};
+
+zone "." {
+       type master;
+       file "root.db";
+};
diff --git a/bin/tests/system/logfileconfig/ns1/named.plain b/bin/tests/system/logfileconfig/ns1/named.plain
new file mode 100644 (file)
index 0000000..54da605
--- /dev/null
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2011  Internet Systems Consortium, Inc. ("ISC")
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+ * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+/* $Id: named.plain,v 1.2.8.2 2011/03/04 17:12:19 smann Exp $ */
+
+options {
+        query-source address 10.53.0.1;
+        notify-source 10.53.0.1;
+        transfer-source 10.53.0.1;
+        port 5300;
+        pid-file "named.pid";
+        listen-on port 5300 {
+                10.53.0.1;
+        };
+        listen-on-v6 { none; };
+       recursion no;
+       notify yes;
+};
+
+logging {
+        channel default_log {
+          file "named_log";
+          print-time yes;
+        };
+        category default { default_log; default_debug; };
+        category lame-servers { null; };
+};
+
+controls {
+    inet 127.0.0.1 port 9593 allow {
+                         127.0.0.1/32; ::1/128; }
+                         keys { "rndc-key"; };
+};
+
+key "rndc-key" {
+        algorithm hmac-md5;
+        secret "Am9vCg==";
+};
+
+
+zone "." {
+       type master;
+       file "root.db";
+};
diff --git a/bin/tests/system/logfileconfig/ns1/named.symconf b/bin/tests/system/logfileconfig/ns1/named.symconf
new file mode 100644 (file)
index 0000000..ea65156
--- /dev/null
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2011  Internet Systems Consortium, Inc. ("ISC")
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+ * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+/* $Id: named.symconf,v 1.2.8.2 2011/03/04 17:12:19 smann Exp $ */
+
+options {
+        query-source address 10.53.0.1;
+        notify-source 10.53.0.1;
+        transfer-source 10.53.0.1;
+        port 5300;
+        pid-file "named.pid";
+        listen-on port 5300 {
+                10.53.0.1;
+        };
+        listen-on-v6 { none; };
+       recursion no;
+       notify yes;
+};
+
+logging {
+        channel default_log {
+          file "named_sym";
+          print-time yes;
+        };
+        category default { default_log; default_debug; };
+        category lame-servers { null; };
+};
+
+controls {
+    inet 127.0.0.1 port 9593 allow {
+                         127.0.0.1/32; ::1/128; }
+                         keys { "rndc-key"; };
+};
+
+key "rndc-key" {
+        algorithm hmac-md5;
+        secret "Am9vCg==";
+};
+
+zone "." {
+       type master;
+       file "root.db";
+};
diff --git a/bin/tests/system/logfileconfig/ns1/rndc.conf b/bin/tests/system/logfileconfig/ns1/rndc.conf
new file mode 100644 (file)
index 0000000..4d0eeae
--- /dev/null
@@ -0,0 +1,13 @@
+options {
+       default-server localhost;
+};
+
+server localhost {
+       key "rndc-key";
+       addresses   { localhost port 9593; };
+};
+
+key "rndc-key" {
+        algorithm hmac-md5;
+        secret "Am9vCg==";
+};
diff --git a/bin/tests/system/logfileconfig/ns1/root.db b/bin/tests/system/logfileconfig/ns1/root.db
new file mode 100644 (file)
index 0000000..01e639a
--- /dev/null
@@ -0,0 +1,33 @@
+; Copyright (C) 2004, 2007  Internet Systems Consortium, Inc. ("ISC")
+; Copyright (C) 2000, 2001  Internet Software Consortium.
+;
+; Permission to use, copy, modify, and/or distribute this software for any
+; purpose with or without fee is hereby granted, provided that the above
+; copyright notice and this permission notice appear in all copies.
+;
+; THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+; REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+; AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+; INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+; LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+; OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+; PERFORMANCE OF THIS SOFTWARE.
+
+; $Id: root.db,v 1.2.8.2 2011/03/04 17:12:19 smann Exp $
+
+$TTL 300
+.                      IN SOA  gson.nominum.com. a.root.servers.nil. (
+                               2000042100      ; serial
+                               600             ; refresh
+                               600             ; retry
+                               1200            ; expire
+                               600             ; minimum
+                               )
+.                      NS      a.root-servers.nil.
+a.root-servers.nil.    A       10.53.0.1
+
+example.               NS      ns2.example.
+ns2.example.           A       10.53.0.2
+
+tsigzone.              NS      ns2.tsigzone.
+ns2.tsigzone.          A       10.53.0.2
diff --git a/bin/tests/system/logfileconfig/tests.sh b/bin/tests/system/logfileconfig/tests.sh
new file mode 100644 (file)
index 0000000..4411ef1
--- /dev/null
@@ -0,0 +1,145 @@
+#!/bin/sh
+#
+# Copyright (C) 2011  Internet Systems Consortium, Inc. ("ISC")
+# Copyright (C) 2004, 2005, 2007  Internet Systems Consortium, Inc. ("ISC")
+# Copyright (C) 2000, 2001  Internet Software Consortium.
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+# AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+
+# $Id: tests.sh,v 1.2.8.2 2011/03/04 17:12:18 smann Exp $
+
+SYSTEMTESTTOP=..
+. $SYSTEMTESTTOP/conf.sh
+THISDIR=`pwd`
+CONFDIR="ns1"
+PLAINCONF="${THISDIR}/${CONFDIR}/named.plain"
+DIRCONF="${THISDIR}/${CONFDIR}/named.dirconf"
+PIPECONF="${THISDIR}/${CONFDIR}/named.pipeconf"
+SYMCONF="${THISDIR}/${CONFDIR}/named.symconf"
+PLAINFILE="named_log"
+DIRFILE="named_dir"
+PIPEFILE="named_pipe"
+SYMFILE="named_sym"
+PIDFILE="${THISDIR}/${CONFDIR}/named.pid"
+myRNDC="$RNDC -c ${THISDIR}/${CONFDIR}/rndc.conf"
+myNAMED="$NAMED -c ${THISDIR}/${CONFDIR}/named.conf -m record,size,mctx -d 99"
+
+# Stop the server and run through a series of tests with various config
+# files while controlling the stop/start of the server.
+# Have to stop the stock server because it uses "-g"
+#
+$PERL ../stop.pl . ns1
+
+# Make sure everything is cleaned up
+sh ./clean.sh
+
+cd $CONFDIR
+
+$myNAMED #> /dev/null 2>&1
+
+if [ $? -ne 0 ]
+then
+       echo "I:failed to start $myNAMED"
+       echo "I:exit status: $status"
+       exit $status
+fi
+
+status=0
+
+echo "I:testing log file validity (only plain files allowed)"
+
+# First run with a known good config.
+echo > $PLAINFILE
+cp $PLAINCONF named.conf
+$myRNDC reconfig
+grep "reloading configuration failed" named.run > /dev/null 2>&1
+if [ $? -ne 0 ]
+then
+       echo "I: testing plain file succeeded"
+else
+       echo "I: testing plain file failed (unexpected)"
+       echo "I:exit status: 1"
+       exit 1 
+fi
+
+# Now try directory, expect failure
+echo "I: testing directory as log file"
+echo > named.run
+mkdir -p $DIRFILE >/dev/null 2>&1
+if [ $? -eq 0 ]
+then
+       cp $DIRCONF named.conf
+       echo > named.run
+       $myRNDC reconfig
+       grep "invalid file" named.run > /dev/null 2>&1
+       if [ $? -ne 0 ]
+       then
+               echo "I: testing directory as file succeeded (UNEXPECTED)"
+               echo "I:exit status: 1"
+               exit 1
+       else
+               echo "I: testing directory as log file failed (expected)"
+       fi
+else
+       echo "I: skipping directory test (unable to create directory)"
+fi
+
+# Now try pipe file, expect failure
+echo "I: testing pipe file as log file"
+echo > named.run
+mkfifo $PIPEFILE >/dev/null 2>&1
+if [ $? -eq 0 ]
+then
+       cp $PIPECONF named.conf
+       echo > named.run
+       $myRNDC reconfig
+       grep "invalid file" named.run > /dev/null 2>&1
+       if [ $? -ne 0 ]
+       then
+               echo "I: testing pipe file as log file succeeded (UNEXPECTED)"
+               echo "I:exit status: 1"
+               exit 1
+       else
+               echo "I: testing pipe file as log file failed (expected)"
+       fi
+else
+       echo "I: skipping pipe test (unable to create pipe)"
+fi
+
+# Now try symlink file to plain file, expect success 
+echo "I: testing symlink to plain file as log file"
+# Assume success
+status=0
+echo > named.run
+echo > $PLAINFILE
+ln -s $PLAINFILE $SYMFILE >/dev/null 2>&1
+if [ $? -eq 0 ]
+then
+       cp $SYMCONF named.conf
+       $myRNDC reconfig
+       echo > named.run
+       grep "reloading configuration failed" named.run > /dev/null 2>&1
+       if [ $? -ne 0 ]
+       then
+               echo "I: testing symlink to plain file succeeded"
+       else
+               echo "I: testing symlink to plain file failed (unexpected)"
+               echo "I:exit status: 1"
+               exit 1
+       fi
+else
+       echo "I: skipping symlink test (unable to create symlink)"
+fi
+
+echo "I:exit status: $status"
+exit $status
index 0cd7531aef7692f9c22efdc2d5e744685e2a967a..3025e056c3eb9f0f1028e46d8040791648697a27 100644 (file)
@@ -15,7 +15,7 @@
 # OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 # PERFORMANCE OF THIS SOFTWARE.
 
-# $Id: start.pl,v 1.5.18.4 2006/03/05 23:58:51 marka Exp $
+# $Id: start.pl,v 1.5.18.5 2011/03/04 17:12:18 smann Exp $
 
 # Framework for starting test servers.
 # Based on the type of server specified, check for port availability, remove
@@ -33,6 +33,8 @@ use Getopt::Long;
 #   test - name of the test directory
 #   server - name of the server directory
 #   options - alternate options for the server
+#             NOTE: options must be specified with '-- "<option list>"',
+#              for instance: start.pl . ns1 -- "-c n.conf -d 43"
 
 my $usage = "usage: $0 [--noclean] test-directory [server-directory [server-options]]";
 my $noclean;
index b984f666907e9d7c2a2376cd8774e27ecec6ebd1..cfd828b7035cb01657ee8cd6de3fc83ae25a25df 100644 (file)
@@ -15,7 +15,7 @@
  * PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: file.h,v 1.27.18.4 2009/01/19 23:46:16 tbox Exp $ */
+/* $Id: file.h,v 1.27.18.5 2011/03/04 17:12:19 smann Exp $ */
 
 #ifndef ISC_FILE_H
 #define ISC_FILE_H 1
@@ -181,6 +181,27 @@ isc_file_isabsolute(const char *filename);
  * \brief Return #ISC_TRUE if the given file name is absolute.
  */
 
+isc_result_t
+isc_file_isplainfile(const char *name);
+/*!<
+ * \brief Check that the file is a plain file
+ *
+ * Returns:
+ *\li  #ISC_R_SUCCESS
+ *             Success. The file is a plain file.
+ *\li  #ISC_R_INVALIDFILE
+ *             The path specified was not usable by the operating system.
+ *\li  #ISC_R_FILENOTFOUND
+ *             The file does not exist. This return code comes from
+ *             errno=ENOENT when stat returns -1. This code is mentioned
+ *             here, because in logconf.c, it is the one rcode that is
+ *             permitted in addition to ISC_R_SUCCESS. This is done since 
+ *             the next call in logconf.c is to isc_stdio_open(), which
+ *             will create the file if it can.
+ *\li  #other ISC_R_* errors translated from errno
+ *             These occur when stat returns -1 and an errno.
+ */
+
 isc_boolean_t
 isc_file_iscurrentdir(const char *filename);
 /*!<
index 700edb147433583cec97eb7d6bd10c09551d478e..530cf739a19b979d5cf6c0a8bd373141580aa838 100644 (file)
@@ -48,7 +48,7 @@
  * SUCH DAMAGE.
  */
 
-/* $Id: file.c,v 1.47.18.4 2009/02/16 23:46:03 tbox Exp $ */
+/* $Id: file.c,v 1.47.18.5 2011/03/04 17:12:20 smann Exp $ */
 
 /*! \file */
 
@@ -338,6 +338,23 @@ isc_file_exists(const char *pathname) {
        return (ISC_TF(file_stats(pathname, &stats) == ISC_R_SUCCESS));
 }
 
+isc_result_t
+isc_file_isplainfile(const char *filename) {
+       /*
+        * This function returns success if filename is a plain file.
+        */
+       struct stat filestat;
+       memset(&filestat,0,sizeof(struct stat));
+
+       if ((stat(filename, &filestat)) == -1)
+               return(isc__errno2result(errno));
+
+       if(! S_ISREG(filestat.st_mode))
+               return(ISC_R_INVALIDFILE);
+
+       return(ISC_R_SUCCESS);
+}
+
 isc_boolean_t
 isc_file_isabsolute(const char *filename) {
        REQUIRE(filename != NULL);
index 64db925f22637ce0a16837d73dad9f2d4755c507..573b0a99232ffe94deb629d065c1180c5dae11ec 100644 (file)
@@ -15,7 +15,7 @@
  * PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: stdio.c,v 1.6 2004/03/05 05:11:47 marka Exp $ */
+/* $Id: stdio.c,v 1.6.18.1 2011/03/04 17:12:20 smann Exp $ */
 
 #include <config.h>
 
@@ -23,6 +23,7 @@
 #include <unistd.h>
 
 #include <isc/stdio.h>
+#include <isc/stat.h>
 
 #include "errno2result.h"
 
index 1e6b65ed3ffea87071f4ccd2f6ba5c5529d6fc1b..c40c3ec461ef69180f27064045de0c1b5356384c 100644 (file)
@@ -15,7 +15,7 @@
  * PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: file.c,v 1.29 2004/03/05 05:11:57 marka Exp $ */
+/* $Id: file.c,v 1.29.18.1 2011/03/04 17:12:20 smann Exp $ */
 
 #include <config.h>
 
@@ -379,6 +379,23 @@ isc_file_exists(const char *pathname) {
        return (ISC_TF(file_stats(pathname, &stats) == ISC_R_SUCCESS));
 }
 
+isc_result_t
+isc_file_isplainfile(const char *filename) {
+       /*
+        * This function returns success if filename is a plain file.
+        */
+       struct stat filestat;
+       memset(&filestat,0,sizeof(struct stat));
+
+       if ((stat(filename, &filestat)) == -1)
+               return(isc__errno2result(errno));
+
+       if(! S_ISREG(filestat.st_mode))
+               return(ISC_R_INVALIDFILE);
+
+       return(ISC_R_SUCCESS);
+}
+
 isc_boolean_t
 isc_file_isabsolute(const char *filename) {
        REQUIRE(filename != NULL);