Commit 3390d74e authored by Evan Hunt's avatar Evan Hunt

[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.
parent 8c2c6b8b
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]
......
......@@ -145,3 +145,12 @@ key "mykey" {
algorithm "hmac-md5";
secret "qwertyuiopasdfgh";
};
dyndb "name" "library.so" {
this;
\};
is a {
"test" { \{ of; the; };
} bracketed;
"text \"";
system;
};
......@@ -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)
......
......@@ -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. */
......
......@@ -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
......
/*
* 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 */
......@@ -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__,
......
......@@ -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
......
/*
* 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());
}
......@@ -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
......
/*
* 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));
}
......@@ -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
......
......@@ -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
......
......@@ -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
......
/*
* 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));
}
......@@ -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
......
......@@ -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
......
......@@ -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
......
......@@ -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"
......
......@@ -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>
......@@ -407,6 +410,9 @@
<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>
......
......@@ -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" />
......
......@@ -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);
......