]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
[master] fix dyndb issues; isc_errno_toresult()
authorEvan Hunt <each@isc.org>
Wed, 17 Aug 2016 18:22:09 +0000 (11:22 -0700)
committerEvan Hunt <each@isc.org>
Wed, 17 Aug 2016 18:37:57 +0000 (11:37 -0700)
4445. [cleanup] isc_errno_toresult() can now be used to call the
formerly private function isc__errno2result().
[RT #43050]

4444. [bug] Fixed some issues related to dyndb: A bug caused
braces to be omitted when passing configuration text
from named.conf to a dyndb driver, and there was a
use-after-free in the sample dyndb driver. [RT #43050]

Patch for dyndb driver submitted by Petr Spacek at Red Hat.

22 files changed:
CHANGES
bin/tests/system/checkconf/good.conf
bin/tests/system/dyndb/driver/instance.c
bin/tests/system/dyndb/driver/instance.h
lib/isc/Makefile.in
lib/isc/include/isc/errno.h [new file with mode: 0644]
lib/isc/lex.c
lib/isc/tests/Makefile.in
lib/isc/tests/errno_test.c [new file with mode: 0644]
lib/isc/unix/Makefile.in
lib/isc/unix/errno.c [new file with mode: 0644]
lib/isc/unix/errno2result.c
lib/isc/unix/errno2result.h
lib/isc/win32/Makefile.in
lib/isc/win32/errno.c [new file with mode: 0644]
lib/isc/win32/errno2result.c
lib/isc/win32/errno2result.h
lib/isc/win32/libisc.dsp.in
lib/isc/win32/libisc.mak.in
lib/isc/win32/libisc.vcxproj.filters.in
lib/isc/win32/libisc.vcxproj.in
lib/isc/win32/socket.c

diff --git a/CHANGES b/CHANGES
index 59ca5f42d51ebc6020edbd02d0ac45bff8b8b105..609d0c69e01278ae47b8e599e2b03c4c8061c1e1 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,12 @@
+4445.  [cleanup]       isc_errno_toresult() can now be used to call the
+                       formerly private function isc__errno2result().
+                       [RT #43050]
+
+4444.  [bug]           Fixed some issues related to dyndb: A bug caused
+                       braces to be omitted when passing configuration text
+                       from named.conf to a dyndb driver, and there was a
+                       use-after-free in the sample dyndb driver. [RT #43050]
+
 4443.  [func]          Set TCP_MAXSEG in addition to IPV6_USE_MIN_MTU on
                        TCP sockets. [RT #42864]
 
index 57f768dbd3710aa916e8294eb09bd7368c2e0dc0..49ec69c39fb20faea8883f2995acadd682fedd8c 100644 (file)
@@ -145,3 +145,12 @@ key "mykey" {
        algorithm "hmac-md5";
        secret "qwertyuiopasdfgh";
 };
+dyndb "name" "library.so" {
+        this;
+        \};
+        is a {
+                "test" { \{ of; the; };
+        } bracketed;
+        "text \"";
+        system;
+};
index ad7349aefc600b0cf5cfddd80e99859fd12ae757..f2207b9435cd14ff4d6a74fd62a6acb296a1513b 100644 (file)
@@ -82,9 +82,14 @@ new_sample_instance(isc_mem_t *mctx, const char *db_name,
 
        CHECKED_MEM_GET_PTR(mctx, inst);
        ZERO_PTR(inst);
-       inst->db_name = db_name; /* const during lifetime of inst */
        isc_mem_attach(mctx, &inst->mctx);
 
+       inst->db_name = isc_mem_strdup(mctx, db_name);
+       if (inst->db_name == NULL) {
+               result = ISC_R_NOMEMORY;
+               goto cleanup;
+       }
+
        dns_fixedname_init(&inst->zone1_fn);
        inst->zone1_name = dns_fixedname_name(&inst->zone1_fn);
 
@@ -137,6 +142,8 @@ destroy_sample_instance(sample_instance_t **instp) {
        if (inst == NULL)
                return;
 
+       if (inst->db_name != NULL)
+               isc_mem_free(inst->mctx, inst->db_name);
        if (inst->zone1 != NULL)
                dns_zone_detach(&inst->zone1);
        if (inst->zone2 != NULL)
index 2e5b4c86373a491c9dcf371301afa2245c52d803..ff0f5c39f8ea0ee0a0d3493a278c07eba0e927ca 100644 (file)
@@ -13,7 +13,7 @@
 
 struct sample_instance {
        isc_mem_t               *mctx;
-       const char              *db_name;
+       char                    *db_name;
        dns_dbimplementation_t  *db_imp;
 
        /* These are needed for zone creation. */
index 939583ceb1f67fe1e07bc39819773dfd3042bf61..7a29a37c492e99ea31fda978eb85d28290061a3b 100644 (file)
@@ -26,7 +26,7 @@ CWARNINGS =
 
 # Alphabetically
 UNIXOBJS =     @ISC_ISCIPV6_O@ @ISC_ISCPK11_API_O@ \
-               unix/app.@O@ unix/dir.@O@ unix/entropy.@O@ \
+               unix/app.@O@ unix/dir.@O@ unix/entropy.@O@ unix/errno.@O@ \
                unix/errno2result.@O@ unix/file.@O@ unix/fsaccess.@O@ \
                unix/interfaceiter.@O@ unix/keyboard.@O@ unix/meminfo.@O@ \
                unix/net.@O@ unix/os.@O@ unix/resource.@O@ unix/socket.@O@ \
@@ -39,8 +39,9 @@ THREADOPTOBJS = @ISC_THREAD_DIR@/condition.@O@ @ISC_THREAD_DIR@/mutex.@O@
 
 THREADOBJS =   @THREADOPTOBJS@ @ISC_THREAD_DIR@/thread.@O@
 
-WIN32OBJS =    win32/condition.@O@ win32/dir.@O@ win32/file.@O@ \
-               win32/fsaccess.@O@ win32/meminfo.@O@ win32/once.@O@ \
+WIN32OBJS =    win32/condition.@O@ win32/dir.@O@ win32/errno.@O@ \
+               win32/file.@O@ win32/fsaccess.@O@ \
+               win32/meminfo.@O@ win32/once.@O@ \
                win32/stdtime.@O@ win32/thread.@O@ win32/time.@O@
 
 # Alphabetically
diff --git a/lib/isc/include/isc/errno.h b/lib/isc/include/isc/errno.h
new file mode 100644 (file)
index 0000000..47ec90f
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * Copyright (C) 2016  Internet Systems Consortium, Inc. ("ISC")
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#ifndef ISC_ERRNO_H
+#define ISC_ERRNO_H 1
+
+/*! \file isc/file.h */
+
+#include <isc/types.h>
+
+ISC_LANG_BEGINDECLS
+
+isc_result_t
+isc_errno_toresult(int err);
+/*!<
+ * \brief Convert a POSIX errno value to an ISC result code.
+ */
+ISC_LANG_ENDDECLS
+
+#endif /* ISC_ERRNO_H */
index da7bb316c0cf2df8484bf6983c4c4b4881d3834e..9a37986142308b97d484292761523425eea34834 100644 (file)
@@ -806,48 +806,46 @@ isc_lex_gettoken(isc_lex_t *lex, unsigned int options, isc_token_t *tokenp) {
                        if (c == '{') {
                                if (escaped) {
                                        escaped = ISC_FALSE;
-                                       INSIST(prev != NULL);
-                                       *prev = '{';
                                } else {
                                        lex->brace_count++;
                                }
                        } else if (c == '}') {
                                if (escaped) {
                                        escaped = ISC_FALSE;
-                                       INSIST(prev != NULL);
-                                       *prev = '}';
-                                       break;
+                               } else {
+                                       INSIST(lex->brace_count > 0);
+                                       lex->brace_count--;
                                }
 
-                               INSIST(lex->brace_count > 0);
-                               lex->brace_count--;
-                               if (lex->brace_count > 0)
+                               if (lex->brace_count == 0) {
+                                       tokenp->type = isc_tokentype_btext;
+                                       tokenp->value.as_textregion.base =
+                                               lex->data;
+                                       tokenp->value.as_textregion.length =
+                                               (unsigned int) (lex->max_token -
+                                                               remaining);
+                                       no_comments = ISC_FALSE;
+                                       done = ISC_TRUE;
                                        break;
-
-                               tokenp->type = isc_tokentype_btext;
-                               tokenp->value.as_textregion.base = lex->data;
-                               tokenp->value.as_textregion.length =
-                                       (unsigned int) (lex->max_token -
-                                                       remaining);
-                               no_comments = ISC_FALSE;
-                               done = ISC_TRUE;
-                       } else {
-                               if (c == '\\' && !escaped)
-                                       escaped = ISC_TRUE;
-                               else
-                                       escaped = ISC_FALSE;
-                               if (remaining == 0U) {
-                                       result = grow_data(lex, &remaining,
-                                                          &curr, &prev);
-                                       if (result != ISC_R_SUCCESS)
-                                               goto done;
                                }
-                               INSIST(remaining > 0U);
-                               prev = curr;
-                               *curr++ = c;
-                               *curr = '\0';
-                               remaining--;
                        }
+
+                       if (c == '\\' && !escaped)
+                               escaped = ISC_TRUE;
+                       else
+                               escaped = ISC_FALSE;
+
+                       if (remaining == 0U) {
+                               result = grow_data(lex, &remaining,
+                                                  &curr, &prev);
+                               if (result != ISC_R_SUCCESS)
+                                       goto done;
+                       }
+                       INSIST(remaining > 0U);
+                       prev = curr;
+                       *curr++ = c;
+                       *curr = '\0';
+                       remaining--;
                        break;
                default:
                        FATAL_ERROR(__FILE__, __LINE__,
index 464b9ab586a40e5a26e63ed1ef92ed857c7ce640..8571a00e9dbb25589f6518b81150fe56534e17a4 100644 (file)
@@ -4,8 +4,6 @@
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
-# $Id$
-
 srcdir =       @srcdir@
 VPATH =                @srcdir@
 top_srcdir =   @top_srcdir@
@@ -33,7 +31,7 @@ SRCS =                isctest.c taskpool_test.c socket_test.c hash_test.c \
                parse_test.c pool_test.c print_test.c regex_test.c \
                socket_test.c safe_test.c time_test.c aes_test.c \
                file_test.c buffer_test.c counter_test.c mem_test.c \
-               result_test.c ht_test.c
+               result_test.c ht_test.c errno_test.c
 
 SUBDIRS =
 TARGETS =      taskpool_test@EXEEXT@ socket_test@EXEEXT@ hash_test@EXEEXT@ \
@@ -43,7 +41,8 @@ TARGETS =     taskpool_test@EXEEXT@ socket_test@EXEEXT@ hash_test@EXEEXT@ \
                print_test@EXEEXT@ regex_test@EXEEXT@ socket_test@EXEEXT@ \
                safe_test@EXEEXT@ time_test@EXEEXT@ aes_test@EXEEXT@ \
                file_test@EXEEXT@ buffer_test@EXEEXT@ counter_test@EXEEXT@ \
-               mem_test@EXEEXT@ result_test@EXEEXT@ ht_test@EXEEXT@
+               mem_test@EXEEXT@ result_test@EXEEXT@ ht_test@EXEEXT@ \
+               errno_test@EXEEXT@
 
 @BIND9_MAKE_RULES@
 
@@ -140,6 +139,10 @@ ht_test@EXEEXT@: ht_test.@O@ ${ISCDEPLIBS}
        ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ \
                        ht_test.@O@ ${ISCLIBS} ${LIBS}
 
+errno_test@EXEEXT@: errno_test.@O@ ${ISCDEPLIBS}
+       ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ \
+                       errno_test.@O@ ${ISCLIBS} ${LIBS}
+
 unit::
        sh ${top_srcdir}/unit/unittest.sh
 
diff --git a/lib/isc/tests/errno_test.c b/lib/isc/tests/errno_test.c
new file mode 100644 (file)
index 0000000..253a857
--- /dev/null
@@ -0,0 +1,102 @@
+/*
+ * Copyright (C) 2016  Internet Systems Consortium, Inc. ("ISC")
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <config.h>
+
+#include <stdio.h>
+#include <sys/errno.h>
+
+#include <atf-c.h>
+
+#include <isc/errno.h>
+#include <isc/result.h>
+
+typedef struct {
+       int err;
+       isc_result_t result;
+} testpair_t;
+
+testpair_t testpair[] = {
+       { EPERM, ISC_R_NOPERM },
+       { ENOENT, ISC_R_FILENOTFOUND },
+       { EIO, ISC_R_IOERROR },
+       { EBADF, ISC_R_INVALIDFILE },
+       { ENOMEM, ISC_R_NOMEMORY },
+       { EACCES, ISC_R_NOPERM },
+       { EEXIST, ISC_R_FILEEXISTS },
+       { ENOTDIR, ISC_R_INVALIDFILE },
+       { EINVAL, ISC_R_INVALIDFILE },
+       { ENFILE, ISC_R_TOOMANYOPENFILES },
+       { EMFILE, ISC_R_TOOMANYOPENFILES },
+       { EPIPE, ISC_R_CONNECTIONRESET },
+       { ENAMETOOLONG, ISC_R_INVALIDFILE },
+       { ELOOP, ISC_R_INVALIDFILE },
+#ifdef EOVERFLOW
+       { EOVERFLOW, ISC_R_RANGE },
+#endif
+#ifdef EAFNOSUPPORT
+       { EAFNOSUPPORT, ISC_R_FAMILYNOSUPPORT },
+#endif
+#ifdef EADDRINUSE
+       { EADDRINUSE, ISC_R_ADDRINUSE },
+#endif
+       { EADDRNOTAVAIL, ISC_R_ADDRNOTAVAIL },
+#ifdef ENETDOWN
+       { ENETDOWN, ISC_R_NETDOWN },
+#endif
+#ifdef ENETUNREACH
+       { ENETUNREACH, ISC_R_NETUNREACH },
+#endif
+#ifdef ECONNABORTED
+       { ECONNABORTED, ISC_R_CONNECTIONRESET },
+#endif
+#ifdef ECONNRESET
+       { ECONNRESET, ISC_R_CONNECTIONRESET },
+#endif
+#ifdef ENOBUFS
+       { ENOBUFS, ISC_R_NORESOURCES },
+#endif
+#ifdef ENOTCONN
+       { ENOTCONN, ISC_R_NOTCONNECTED },
+#endif
+#ifdef ETIMEDOUT
+       { ETIMEDOUT, ISC_R_TIMEDOUT },
+#endif
+       { ECONNREFUSED, ISC_R_CONNREFUSED },
+#ifdef EHOSTDOWN
+       { EHOSTDOWN, ISC_R_HOSTDOWN },
+#endif
+#ifdef EHOSTUNREACH
+       { EHOSTUNREACH, ISC_R_HOSTUNREACH },
+#endif
+       { 0, ISC_R_UNEXPECTED }
+};
+
+ATF_TC(isc_errno_toresult);
+ATF_TC_HEAD(isc_errno_toresult, tc) {
+       atf_tc_set_md_var(tc, "descr", "convert errno to ISC result");
+}
+ATF_TC_BODY(isc_errno_toresult, tc) {
+       isc_result_t result, expect;
+       size_t i;
+
+       for (i = 0; i < sizeof(testpair)/sizeof(testpair[0]); i++) {
+               result = isc_errno_toresult(testpair[i].err);
+               expect = testpair[i].result;
+               ATF_CHECK(result == expect);
+       }
+}
+
+/*
+ * Main
+ */
+ATF_TP_ADD_TCS(tp) {
+       ATF_TP_ADD_TC(tp, isc_errno_toresult);
+       return (atf_no_error());
+}
+
index c9443dd1d6268da330d9cc68add80362d132011a..66b69f672a83f688b05388afa56986dd347d14ed 100644 (file)
@@ -4,8 +4,6 @@
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
-# $Id: Makefile.in,v 1.44 2009/12/05 23:31:41 each Exp $
-
 srcdir =       @srcdir@
 VPATH =                @srcdir@
 top_srcdir =   @top_srcdir@
@@ -21,15 +19,16 @@ CWARNINGS =
 
 # Alphabetically
 OBJS =         @ISC_IPV6_O@ @ISC_PK11_API_O@ \
-               app.@O@ dir.@O@ entropy.@O@ errno2result.@O@ file.@O@ \
-               fsaccess.@O@ interfaceiter.@O@ keyboard.@O@ meminfo.@O@ \
+               app.@O@ dir.@O@ entropy.@O@ errno.@O@ errno2result.@O@ \
+               file.@O@ fsaccess.@O@ interfaceiter.@O@ \
+               keyboard.@O@ meminfo.@O@ \
                net.@O@ os.@O@ resource.@O@ socket.@O@ stdio.@O@ stdtime.@O@ \
                strerror.@O@ syslog.@O@ time.@O@
 
 # Alphabetically
 SRCS =         @ISC_IPV6_C@ @ISC_PK11_API_C@ \
-               app.c dir.c entropy.c errno2result.c file.c \
-               fsaccess.c interfaceiter.c keyboard.c meminfo.c \
+               app.c dir.c entropy.c errno.c errno2result.c \
+               file.c fsaccess.c interfaceiter.c keyboard.c meminfo.c \
                net.c os.c resource.c socket.c stdio.c stdtime.c \
                strerror.c syslog.c time.c
 
diff --git a/lib/isc/unix/errno.c b/lib/isc/unix/errno.c
new file mode 100644 (file)
index 0000000..c5f1c56
--- /dev/null
@@ -0,0 +1,21 @@
+/*
+ * Copyright (C) 2016  Internet Systems Consortium, Inc. ("ISC")
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+/*! \file */
+
+#include <config.h>
+
+#include <isc/errno.h>
+#include <isc/util.h>
+
+#include "errno2result.h"
+
+isc_result_t
+isc_errno_toresult(int err) {
+       return (isc___errno2result(err, ISC_FALSE, 0, 0));
+}
index 5d93e779a38b9641f3fd5d0b2c8a40ca957ef376..f69087b2cbd44886b20662e4adc70648aa6ed893 100644 (file)
@@ -25,7 +25,9 @@
  * not already there.
  */
 isc_result_t
-isc___errno2result(int posixerrno, const char *file, unsigned int line) {
+isc___errno2result(int posixerrno, isc_boolean_t dolog,
+                  const char *file, unsigned int line)
+{
        char strbuf[ISC_STRERRORSIZE];
 
        switch (posixerrno) {
@@ -102,10 +104,12 @@ isc___errno2result(int posixerrno, const char *file, unsigned int line) {
        case ECONNREFUSED:
                return (ISC_R_CONNREFUSED);
        default:
-               isc__strerror(posixerrno, strbuf, sizeof(strbuf));
-               UNEXPECTED_ERROR(file, line, "unable to convert errno "
-                                "to isc_result: %d: %s",
-                                posixerrno, strbuf);
+               if (dolog) {
+                       isc__strerror(posixerrno, strbuf, sizeof(strbuf));
+                       UNEXPECTED_ERROR(file, line, "unable to convert errno "
+                                        "to isc_result: %d: %s",
+                                        posixerrno, strbuf);
+               }
                /*
                 * XXXDCL would be nice if perhaps this function could
                 * return the system's error string, so the caller
index de70f87a5c22f5d2388c06a3f0b27487e4f68d46..68d0756bac7ebe5f1a2d70c88de6ca64c92febe8 100644 (file)
@@ -6,8 +6,6 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
-/* $Id$ */
-
 #ifndef UNIX_ERRNO2RESULT_H
 #define UNIX_ERRNO2RESULT_H 1
 
 
 ISC_LANG_BEGINDECLS
 
-#define isc__errno2result(x) isc___errno2result(x, __FILE__, __LINE__)
+#define isc__errno2result(x) isc___errno2result(x, ISC_TRUE, __FILE__, __LINE__)
 
 isc_result_t
-isc___errno2result(int posixerrno, const char *file, unsigned int line);
+isc___errno2result(int posixerrno, isc_boolean_t dolog,
+                  const char *file, unsigned int line);
 
 ISC_LANG_ENDDECLS
 
index 6b17a617145c17c0a0b8def183ee6ad6e5092b5c..a8824b8eaab4fb34a841fc4ab05f8207458865b9 100644 (file)
@@ -4,8 +4,6 @@
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
-# $Id: Makefile.in,v 1.14 2009/12/05 23:31:41 each Exp $
-
 srcdir =       @srcdir@
 VPATH =                @srcdir@
 top_srcdir =   @top_srcdir@
@@ -18,11 +16,13 @@ CDEFINES =
 CWARNINGS =
 
 # Alphabetically
-OBJS =         condition.@O@ dir.@O@ file.@O@ meminfo.@O@ fsaccess.@O@ \
+OBJS =         condition.@O@ dir.@O@ errno.@O@ file.@O@ \
+               meminfo.@O@ fsaccess.@O@ \
                once.@O@ stdtime.@O@ thread.@O@ time.@O@ @ISC_PK11_API_O@
 
 # Alphabetically
-SRCS =         condition.c dir.c file.c meminfo.c once.c fsaccess.c \
+SRCS =         condition.c dir.c errno.c file.c \
+               meminfo.c once.c fsaccess.c \
                stdtime.c thread.c time.c @ISC_PK11_API_C@
 
 SUBDIRS =      include
diff --git a/lib/isc/win32/errno.c b/lib/isc/win32/errno.c
new file mode 100644 (file)
index 0000000..5c45496
--- /dev/null
@@ -0,0 +1,18 @@
+/*
+ * Copyright (C) 2016  Internet Systems Consortium, Inc. ("ISC")
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+/*! \file */
+
+#include <config.h>
+
+#include "errno2result.h"
+
+isc_result_t
+isc_errno_toresult(int err) {
+       return (isc__errno2resultx(err, ISC_FALSE, 0, 0));
+}
index 8682f600722bdc58d6abd8d4c5b4b861fc3fde3a..283a81819565911983883a83adab5898d4f22607 100644 (file)
@@ -23,7 +23,9 @@
  * not already there.
  */
 isc_result_t
-isc__errno2resultx(int posixerrno, const char *file, int line) {
+isc__errno2resultx(int posixerrno, isc_boolean_t dolog,
+                  const char *file, int line)
+{
        char strbuf[ISC_STRERRORSIZE];
 
        switch (posixerrno) {
@@ -94,9 +96,13 @@ isc__errno2resultx(int posixerrno, const char *file, int line) {
        case WSAENOBUFS:
                return (ISC_R_NORESOURCES);
        default:
-               isc__strerror(posixerrno, strbuf, sizeof(strbuf));
-               UNEXPECTED_ERROR(file, line, "unable to convert errno "
-                                "to isc_result: %d: %s", posixerrno, strbuf);
+               if (dolog) {
+                       isc__strerror(posixerrno, strbuf, sizeof(strbuf));
+                       UNEXPECTED_ERROR(file, line,
+                                        "unable to convert errno "
+                                        "to isc_result: %d: %s",
+                                        posixerrno, strbuf);
+               }
                /*
                 * XXXDCL would be nice if perhaps this function could
                 * return the system's error string, so the caller
index 04925af7af84f28329f96e007381205963af7ff9..bb783445296bdce9f34ee0b2a9dcd8afa750e76b 100644 (file)
 ISC_LANG_BEGINDECLS
 
 #define isc__errno2result(posixerrno) \
-       isc__errno2resultx(posixerrno, __FILE__, __LINE__)
+       isc__errno2resultx(posixerrno, ISC_TRUE, __FILE__, __LINE__)
 
 isc_result_t
-isc__errno2resultx(int posixerrno, const char *file, int line);
+isc__errno2resultx(int posixerrno, isc_boolean_t dolog,
+                  const char *file, int line);
 
 ISC_LANG_ENDDECLS
 
index 955f71bbe74d29e786ec4c0055b5d3bf556042fe..d21edb8e17cd198deb5345aa8ee107412ed40a8e 100644 (file)
@@ -121,6 +121,10 @@ SOURCE=.\entropy.c
 # End Source File
 # Begin Source File
 
+SOURCE=.\errno.c
+# End Source File
+# Begin Source File
+
 SOURCE=.\errno2result.c
 # End Source File
 # Begin Source File
@@ -293,6 +297,10 @@ SOURCE=..\include\isc\entropy.h
 # End Source File
 # Begin Source File
 
+SOURCE=..\include\isc\errno.h
+# End Source File
+# Begin Source File
+
 SOURCE=.\errno2result.h
 # End Source File
 # Begin Source File
index 7171b39f240e0279abc57751b651da05e46bc824..9a6acd58fecddeacb332568310b2db8e2d94cd90 100644 (file)
@@ -133,6 +133,7 @@ CLEAN :
        -@erase "$(INTDIR)\dir.obj"
        -@erase "$(INTDIR)\DLLMain.obj"
        -@erase "$(INTDIR)\entropy.obj"
+       -@erase "$(INTDIR)\errno.obj"
        -@erase "$(INTDIR)\errno2result.obj"
        -@erase "$(INTDIR)\error.obj"
        -@erase "$(INTDIR)\event.obj"
@@ -236,6 +237,7 @@ LINK32_OBJS= \
        "$(INTDIR)\dir.obj" \
        "$(INTDIR)\DLLMain.obj" \
        "$(INTDIR)\entropy.obj" \
+       "$(INTDIR)\errno.obj" \
        "$(INTDIR)\errno2result.obj" \
        "$(INTDIR)\file.obj" \
        "$(INTDIR)\fsaccess.obj" \
@@ -381,6 +383,8 @@ CLEAN :
        -@erase "$(INTDIR)\DLLMain.sbr"
        -@erase "$(INTDIR)\entropy.obj"
        -@erase "$(INTDIR)\entropy.sbr"
+       -@erase "$(INTDIR)\errno.obj"
+       -@erase "$(INTDIR)\errno.sbr"
        -@erase "$(INTDIR)\errno2result.obj"
        -@erase "$(INTDIR)\errno2result.sbr"
        -@erase "$(INTDIR)\error.obj"
@@ -552,6 +556,7 @@ BSC32_SBRS= \
        "$(INTDIR)\dir.sbr" \
        "$(INTDIR)\DLLMain.sbr" \
        "$(INTDIR)\entropy.sbr" \
+       "$(INTDIR)\errno.sbr" \
        "$(INTDIR)\errno2result.sbr" \
        "$(INTDIR)\file.sbr" \
        "$(INTDIR)\fsaccess.sbr" \
@@ -658,6 +663,7 @@ LINK32_OBJS= \
        "$(INTDIR)\dir.obj" \
        "$(INTDIR)\DLLMain.obj" \
        "$(INTDIR)\entropy.obj" \
+       "$(INTDIR)\errno.obj" \
        "$(INTDIR)\errno2result.obj" \
        "$(INTDIR)\file.obj" \
        "$(INTDIR)\fsaccess.obj" \
@@ -878,6 +884,23 @@ SOURCE=.\entropy.c
 
 !ENDIF
 
+SOURCE=.\errno.c
+
+!IF  "$(CFG)" == "libisc - @PLATFORM@ Release"
+
+
+"$(INTDIR)\errno.obj" : $(SOURCE) "$(INTDIR)"
+
+
+!ELSEIF  "$(CFG)" == "libisc - @PLATFORM@ Debug"
+
+
+"$(INTDIR)\errno.obj"  "$(INTDIR)\errno.sbr" : $(SOURCE) "$(INTDIR)"
+
+
+!ENDIF
+
+
 SOURCE=.\errno2result.c
 
 !IF  "$(CFG)" == "libisc - @PLATFORM@ Release"
index e9938b35c6e37c8252bf1235fb986c1ab1f66df2..1ffb4510533d95495fa123cae3d5469be4a55e9b 100644 (file)
@@ -70,6 +70,9 @@
     <ClInclude Include="..\include\isc\entropy.h">
       <Filter>Library Header Files</Filter>
     </ClInclude>
+    <ClInclude Include="..\include\isc\errno.h">
+      <Filter>Library Header Files</Filter>
+    </ClInclude>
     <ClInclude Include="..\include\isc\error.h">
       <Filter>Library Header Files</Filter>
     </ClInclude>
     <ClCompile Include="entropy.c">
       <Filter>Win32 Source Files</Filter>
     </ClCompile>
+    <ClCompile Include="errno.c">
+      <Filter>Win32 Source Files</Filter>
+    </ClCompile>
     <ClCompile Include="errno2result.c">
       <Filter>Win32 Source Files</Filter>
     </ClCompile>
index 10d68f8192d61bdf2f0673f80ede5515206b4b8c..a1a2c7ad8682e69941467e5e0ad0c8a8fbbd85c7 100644 (file)
@@ -311,6 +311,7 @@ copy InstallFiles ..\Build\Release\
     <ClInclude Include="..\include\isc\counter.h" />
     <ClInclude Include="..\include\isc\crc64.h" />
     <ClInclude Include="..\include\isc\entropy.h" />
+    <ClInclude Include="..\include\isc\errno.h" />
     <ClInclude Include="..\include\isc\error.h" />
     <ClInclude Include="..\include\isc\event.h" />
     <ClInclude Include="..\include\isc\eventclass.h" />
@@ -495,6 +496,7 @@ copy InstallFiles ..\Build\Release\
     <ClCompile Include="dir.c" />
     <ClCompile Include="DLLMain.c" />
     <ClCompile Include="entropy.c" />
+    <ClCompile Include="errno.c" />
     <ClCompile Include="errno2result.c" />
     <ClCompile Include="file.c" />
     <ClCompile Include="fsaccess.c" />
index d4d158d60a83fe3d3941b23e7b8585f5e2dc8ace..908e60e9dd8666419b345c48bf63b0a6f355d31f 100644 (file)
@@ -2522,7 +2522,7 @@ SocketIoThread(LPVOID ThreadContext) {
                         * Did the I/O operation complete?
                         */
                        errstatus = GetLastError();
-                       isc_result = isc__errno2resultx(errstatus, __FILE__, __LINE__);
+                       isc_result = isc__errno2result(errstatus);
 
                        LOCK(&sock->lock);
                        CONSISTENT(sock);
@@ -2574,7 +2574,7 @@ SocketIoThread(LPVOID ThreadContext) {
                                                goto wait_again;
                                        } else {
                                                errstatus = GetLastError();
-                                               isc_result = isc__errno2resultx(errstatus, __FILE__, __LINE__);
+                                               isc_result = isc__errno2result(errstatus);
                                                socket_log(__LINE__, sock, NULL, EVENT, NULL, 0, 0,
                                                        "restart_accept() failed: errstatus=%d isc_result=%d",
                                                        errstatus, isc_result);