From 3390d74e33385337631b19e68760025e0ca5d6ec Mon Sep 17 00:00:00 2001 From: Evan Hunt Date: Wed, 17 Aug 2016 11:22:09 -0700 Subject: [PATCH] [master] fix dyndb issues; isc_errno_toresult() 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. --- CHANGES | 9 ++ bin/tests/system/checkconf/good.conf | 9 ++ bin/tests/system/dyndb/driver/instance.c | 9 +- bin/tests/system/dyndb/driver/instance.h | 2 +- lib/isc/Makefile.in | 7 +- lib/isc/include/isc/errno.h | 25 ++++++ lib/isc/lex.c | 60 +++++++------ lib/isc/tests/Makefile.in | 11 ++- lib/isc/tests/errno_test.c | 102 +++++++++++++++++++++++ lib/isc/unix/Makefile.in | 11 ++- lib/isc/unix/errno.c | 21 +++++ lib/isc/unix/errno2result.c | 14 ++-- lib/isc/unix/errno2result.h | 7 +- lib/isc/win32/Makefile.in | 8 +- lib/isc/win32/errno.c | 18 ++++ lib/isc/win32/errno2result.c | 14 +++- lib/isc/win32/errno2result.h | 5 +- lib/isc/win32/libisc.dsp.in | 8 ++ lib/isc/win32/libisc.mak.in | 23 +++++ lib/isc/win32/libisc.vcxproj.filters.in | 6 ++ lib/isc/win32/libisc.vcxproj.in | 2 + lib/isc/win32/socket.c | 4 +- 22 files changed, 308 insertions(+), 67 deletions(-) create mode 100644 lib/isc/include/isc/errno.h create mode 100644 lib/isc/tests/errno_test.c create mode 100644 lib/isc/unix/errno.c create mode 100644 lib/isc/win32/errno.c diff --git a/CHANGES b/CHANGES index 59ca5f42d5..609d0c69e0 100644 --- 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] diff --git a/bin/tests/system/checkconf/good.conf b/bin/tests/system/checkconf/good.conf index 57f768dbd3..49ec69c39f 100644 --- a/bin/tests/system/checkconf/good.conf +++ b/bin/tests/system/checkconf/good.conf @@ -145,3 +145,12 @@ key "mykey" { algorithm "hmac-md5"; secret "qwertyuiopasdfgh"; }; +dyndb "name" "library.so" { + this; + \}; + is a { + "test" { \{ of; the; }; + } bracketed; + "text \""; + system; +}; diff --git a/bin/tests/system/dyndb/driver/instance.c b/bin/tests/system/dyndb/driver/instance.c index ad7349aefc..f2207b9435 100644 --- a/bin/tests/system/dyndb/driver/instance.c +++ b/bin/tests/system/dyndb/driver/instance.c @@ -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) diff --git a/bin/tests/system/dyndb/driver/instance.h b/bin/tests/system/dyndb/driver/instance.h index 2e5b4c8637..ff0f5c39f8 100644 --- a/bin/tests/system/dyndb/driver/instance.h +++ b/bin/tests/system/dyndb/driver/instance.h @@ -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. */ diff --git a/lib/isc/Makefile.in b/lib/isc/Makefile.in index 939583ceb1..7a29a37c49 100644 --- a/lib/isc/Makefile.in +++ b/lib/isc/Makefile.in @@ -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 index 0000000000..47ec90f553 --- /dev/null +++ b/lib/isc/include/isc/errno.h @@ -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_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 */ diff --git a/lib/isc/lex.c b/lib/isc/lex.c index da7bb316c0..9a37986142 100644 --- a/lib/isc/lex.c +++ b/lib/isc/lex.c @@ -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__, diff --git a/lib/isc/tests/Makefile.in b/lib/isc/tests/Makefile.in index 464b9ab586..8571a00e9d 100644 --- a/lib/isc/tests/Makefile.in +++ b/lib/isc/tests/Makefile.in @@ -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 index 0000000000..253a857d6c --- /dev/null +++ b/lib/isc/tests/errno_test.c @@ -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 + +#include +#include + +#include + +#include +#include + +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()); +} + diff --git a/lib/isc/unix/Makefile.in b/lib/isc/unix/Makefile.in index c9443dd1d6..66b69f672a 100644 --- a/lib/isc/unix/Makefile.in +++ b/lib/isc/unix/Makefile.in @@ -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 index 0000000000..c5f1c56736 --- /dev/null +++ b/lib/isc/unix/errno.c @@ -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 + +#include +#include + +#include "errno2result.h" + +isc_result_t +isc_errno_toresult(int err) { + return (isc___errno2result(err, ISC_FALSE, 0, 0)); +} diff --git a/lib/isc/unix/errno2result.c b/lib/isc/unix/errno2result.c index 5d93e779a3..f69087b2cb 100644 --- a/lib/isc/unix/errno2result.c +++ b/lib/isc/unix/errno2result.c @@ -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 diff --git a/lib/isc/unix/errno2result.h b/lib/isc/unix/errno2result.h index de70f87a5c..68d0756bac 100644 --- a/lib/isc/unix/errno2result.h +++ b/lib/isc/unix/errno2result.h @@ -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 @@ -22,10 +20,11 @@ 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 diff --git a/lib/isc/win32/Makefile.in b/lib/isc/win32/Makefile.in index 6b17a61714..a8824b8eaa 100644 --- a/lib/isc/win32/Makefile.in +++ b/lib/isc/win32/Makefile.in @@ -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 index 0000000000..5c454966f3 --- /dev/null +++ b/lib/isc/win32/errno.c @@ -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 + +#include "errno2result.h" + +isc_result_t +isc_errno_toresult(int err) { + return (isc__errno2resultx(err, ISC_FALSE, 0, 0)); +} diff --git a/lib/isc/win32/errno2result.c b/lib/isc/win32/errno2result.c index 8682f60072..283a818195 100644 --- a/lib/isc/win32/errno2result.c +++ b/lib/isc/win32/errno2result.c @@ -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 diff --git a/lib/isc/win32/errno2result.h b/lib/isc/win32/errno2result.h index 04925af7af..bb78344529 100644 --- a/lib/isc/win32/errno2result.h +++ b/lib/isc/win32/errno2result.h @@ -21,10 +21,11 @@ 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 diff --git a/lib/isc/win32/libisc.dsp.in b/lib/isc/win32/libisc.dsp.in index 955f71bbe7..d21edb8e17 100644 --- a/lib/isc/win32/libisc.dsp.in +++ b/lib/isc/win32/libisc.dsp.in @@ -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 diff --git a/lib/isc/win32/libisc.mak.in b/lib/isc/win32/libisc.mak.in index 7171b39f24..9a6acd58fe 100644 --- a/lib/isc/win32/libisc.mak.in +++ b/lib/isc/win32/libisc.mak.in @@ -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" diff --git a/lib/isc/win32/libisc.vcxproj.filters.in b/lib/isc/win32/libisc.vcxproj.filters.in index e9938b35c6..1ffb451053 100644 --- a/lib/isc/win32/libisc.vcxproj.filters.in +++ b/lib/isc/win32/libisc.vcxproj.filters.in @@ -70,6 +70,9 @@ Library Header Files + + Library Header Files + Library Header Files @@ -407,6 +410,9 @@ Win32 Source Files + + Win32 Source Files + Win32 Source Files diff --git a/lib/isc/win32/libisc.vcxproj.in b/lib/isc/win32/libisc.vcxproj.in index 10d68f8192..a1a2c7ad86 100644 --- a/lib/isc/win32/libisc.vcxproj.in +++ b/lib/isc/win32/libisc.vcxproj.in @@ -311,6 +311,7 @@ copy InstallFiles ..\Build\Release\ + @@ -495,6 +496,7 @@ copy InstallFiles ..\Build\Release\ + diff --git a/lib/isc/win32/socket.c b/lib/isc/win32/socket.c index d4d158d60a..908e60e9dd 100644 --- a/lib/isc/win32/socket.c +++ b/lib/isc/win32/socket.c @@ -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);