mirror of
https://repo.or.cz/socat.git
synced 2024-12-22 15:32:35 +00:00
Added options res-retrans, res-retry
This commit is contained in:
parent
03f028a985
commit
282db9feda
11 changed files with 151 additions and 53 deletions
5
CHANGES
5
CHANGES
|
@ -135,6 +135,11 @@ Features:
|
|||
|
||||
New address SHELL invokes a shell but without the overhead of SYSTEM
|
||||
|
||||
Added options res-retrans and res-retry that make use of undocumented
|
||||
resolver variables to set the retransmission time interval resp.the
|
||||
number of times to retransmit.
|
||||
Disable them and the old res-* opts with: ./configure --disable-resolve
|
||||
|
||||
Corrections:
|
||||
When a sub process (EXEC, SYSTEM) terminated with exit code other than
|
||||
0, its last sent data might have been lost depending on timing of read/
|
||||
|
|
|
@ -678,6 +678,9 @@
|
|||
#undef HAVE_PROC_DIR_FD
|
||||
#undef HAVE_PROC_DIR_PATH
|
||||
|
||||
#undef HAVE_RES_RETRANS
|
||||
#undef HAVE_RES_RETRY
|
||||
|
||||
#undef HAVE_SETGRENT
|
||||
#undef HAVE_GETGRENT
|
||||
#undef HAVE_ENDGRENT
|
||||
|
@ -720,6 +723,7 @@
|
|||
#undef WITH_FS
|
||||
#undef WITH_OPENSSL
|
||||
#undef WITH_OPENSSL_METHOD
|
||||
#undef WITH_RESOLVE
|
||||
#undef WITH_RES_DEPRECATED /* AAONLY,PRIMARY */
|
||||
#define WITH_STREAMS 1
|
||||
#undef WITH_FIPS
|
||||
|
|
22
configure.ac
22
configure.ac
|
@ -709,6 +709,14 @@ AC_ARG_ENABLE(openssl-method, [ --enable-openssl-method enable OpenSSL me
|
|||
[AC_MSG_RESULT(no)])
|
||||
fi
|
||||
|
||||
AC_MSG_CHECKING(whether to include undocumented resolver related options)
|
||||
AC_ARG_ENABLE(resolve, [ --enable-resolve enable undocumented resolver options],
|
||||
[case "$enableval" in
|
||||
no) AC_MSG_RESULT(no);;
|
||||
*) AC_DEFINE(WITH_RESOLVE) AC_MSG_RESULT(yes);;
|
||||
esac],
|
||||
[AC_DEFINE(WITH_RESOLVE) AC_MSG_RESULT(yes)])
|
||||
|
||||
AC_MSG_CHECKING(whether to include deprecated resolver option)
|
||||
AC_ARG_ENABLE(res-deprecated, [ --enable-res-deprecated enable deprecated resolver options],
|
||||
[case "$enableval" in
|
||||
|
@ -2135,6 +2143,20 @@ else
|
|||
AC_MSG_RESULT(no)
|
||||
fi
|
||||
|
||||
# Some OSes have undocumented _res.retrans, _res.retry components
|
||||
AC_MSG_CHECKING(for _res.retrans)
|
||||
AC_TRY_COMPILE([#include <resolv.h>],
|
||||
[_res.retrans == 0],
|
||||
[AC_MSG_RESULT(yes);
|
||||
AC_DEFINE(HAVE_RES_RETRANS, 1)],
|
||||
[AC_MSG_RESULT(no)])
|
||||
AC_MSG_CHECKING(for _res.retry)
|
||||
AC_TRY_COMPILE([#include <resolv.h>],
|
||||
[_res.retry == 0],
|
||||
[AC_MSG_RESULT(yes);
|
||||
AC_DEFINE(HAVE_RES_RETRY, 1)],
|
||||
[AC_MSG_RESULT(no)])
|
||||
|
||||
|
||||
dnl "tcpd" "tcpwrappers"
|
||||
# on some platforms, raw linking with libwrap fails because allow_severity and
|
||||
|
|
15
doc/socat.yo
15
doc/socat.yo
|
@ -2423,13 +2423,20 @@ label(OPTION_RES_RECURSE)dit(bf(tt(res-recurse)))
|
|||
label(OPTION_RES_DEFNAMES)dit(bf(tt(res-defnames)))
|
||||
label(OPTION_RES_STAYOPEN)dit(bf(tt(res-stayopen)))
|
||||
label(OPTION_RES_DNSRCH)dit(bf(tt(res-dnsrch)))
|
||||
These options temporarily set the corresponding resolver (name resolution)
|
||||
option flags. Append "=0" to clear a default option. See man
|
||||
NOEXPAND(resolver(5)) for more information on these options. These flags are
|
||||
per process, however socat() restores the old values after name resolution.
|
||||
These options set the corresponding resolver (name resolution) option flags.
|
||||
Append "=0" to clear a default option. See man NOEXPAND(resolver(5)) for
|
||||
more information on these options. Socat() restores the old values after
|
||||
finishing the open phase of the address, so these options are valid just for
|
||||
the address they are applied to.nl()
|
||||
Please note that these flags only affect DNS resolution, but not hosts or
|
||||
NIS based name resolution, and they have no effect when (g)libc retrieves
|
||||
the results from code(nscd).
|
||||
label(OPTION_RES_RETRANS)dit(bf(tt(res-retrans=<int>)))
|
||||
Sets the retransmission time interval of the DNS resolver (based on an
|
||||
undocumented feature).
|
||||
label(OPTION_RES_RETRY)dit(bf(tt(res-retry=<int>)))
|
||||
Sets the number of retransmits of the DNS resolver (based on an undocumented
|
||||
feature).
|
||||
enddit()
|
||||
|
||||
startdit()enddit()nl()
|
||||
|
|
46
xio-ip.c
46
xio-ip.c
|
@ -91,26 +91,33 @@ const struct optdesc opt_ai_v4mapped = { "ai-v4mapped", "v4mapped", OPT_AI
|
|||
const struct optdesc opt_ai_passive = { "ai-passive", "passive", OPT_AI_PASSIVE, GROUP_SOCK_IP, PH_OFFSET, TYPE_BOOL, OFUNC_OFFSET_MASKS, XIO_OFFSETOF(para.socket.ip.ai_flags), XIO_SIZEOF(para.socket.ip.ai_flags), AI_PASSIVE };
|
||||
#endif
|
||||
|
||||
#if WITH_RESOLVE
|
||||
#if WITH_RES_DEPRECATED
|
||||
# define WITH_RES_AAONLY 1
|
||||
# define WITH_RES_PRIMARY 1
|
||||
#endif /* WITH_RES_DEPRECATED */
|
||||
#if HAVE_RESOLV_H
|
||||
const struct optdesc opt_res_debug = { "res-debug", NULL, OPT_RES_DEBUG, GROUP_SOCK_IP, PH_OFFSET, TYPE_BOOL, OFUNC_OFFSET_MASKS, XIO_OFFSETOF(para.socket.ip.res_opts), XIO_SIZEOF(para.socket.ip.res_opts), RES_DEBUG };
|
||||
const struct optdesc opt_res_debug = { "res-debug", NULL, OPT_RES_DEBUG, GROUP_SOCK_IP, PH_OFFSET, TYPE_BOOL, OFUNC_OFFSET_MASKS, XIO_OFFSETOF(para.socket.ip.res.opts), XIO_SIZEOF(para.socket.ip.res.opts), RES_DEBUG };
|
||||
#if WITH_RES_AAONLY
|
||||
const struct optdesc opt_res_aaonly = { "res-aaonly", "aaonly", OPT_RES_AAONLY, GROUP_SOCK_IP, PH_OFFSET, TYPE_BOOL, OFUNC_OFFSET_MASKS, XIO_OFFSETOF(para.socket.ip.res_opts), XIO_SIZEOF(para.socket.ip.res_opts), RES_AAONLY };
|
||||
const struct optdesc opt_res_aaonly = { "res-aaonly", "aaonly", OPT_RES_AAONLY, GROUP_SOCK_IP, PH_OFFSET, TYPE_BOOL, OFUNC_OFFSET_MASKS, XIO_OFFSETOF(para.socket.ip.res.opts), XIO_SIZEOF(para.socket.ip.res.opts), RES_AAONLY };
|
||||
#endif
|
||||
const struct optdesc opt_res_usevc = { "res-usevc", "usevc", OPT_RES_USEVC, GROUP_SOCK_IP, PH_OFFSET, TYPE_BOOL, OFUNC_OFFSET_MASKS, XIO_OFFSETOF(para.socket.ip.res_opts), XIO_SIZEOF(para.socket.ip.res_opts), RES_USEVC };
|
||||
const struct optdesc opt_res_usevc = { "res-usevc", "usevc", OPT_RES_USEVC, GROUP_SOCK_IP, PH_OFFSET, TYPE_BOOL, OFUNC_OFFSET_MASKS, XIO_OFFSETOF(para.socket.ip.res.opts), XIO_SIZEOF(para.socket.ip.res.opts), RES_USEVC };
|
||||
#if WITH_RES_PRIMARY
|
||||
const struct optdesc opt_res_primary = { "res-primary", "primary", OPT_RES_PRIMARY, GROUP_SOCK_IP, PH_OFFSET, TYPE_BOOL, OFUNC_OFFSET_MASKS, XIO_OFFSETOF(para.socket.ip.res_opts), XIO_SIZEOF(para.socket.ip.res_opts), RES_PRIMARY };
|
||||
const struct optdesc opt_res_primary = { "res-primary", "primary", OPT_RES_PRIMARY, GROUP_SOCK_IP, PH_OFFSET, TYPE_BOOL, OFUNC_OFFSET_MASKS, XIO_OFFSETOF(para.socket.ip.res.opts), XIO_SIZEOF(para.socket.ip.res.opts), RES_PRIMARY };
|
||||
#endif
|
||||
const struct optdesc opt_res_igntc = { "res-igntc", "igntc", OPT_RES_IGNTC, GROUP_SOCK_IP, PH_OFFSET, TYPE_BOOL, OFUNC_OFFSET_MASKS, XIO_OFFSETOF(para.socket.ip.res.opts), XIO_SIZEOF(para.socket.ip.res.opts), RES_IGNTC };
|
||||
const struct optdesc opt_res_recurse = { "res-recurse", "recurse", OPT_RES_RECURSE, GROUP_SOCK_IP, PH_OFFSET, TYPE_BOOL, OFUNC_OFFSET_MASKS, XIO_OFFSETOF(para.socket.ip.res.opts), XIO_SIZEOF(para.socket.ip.res.opts), RES_RECURSE };
|
||||
const struct optdesc opt_res_defnames = { "res-defnames", "defnames", OPT_RES_DEFNAMES, GROUP_SOCK_IP, PH_OFFSET, TYPE_BOOL, OFUNC_OFFSET_MASKS, XIO_OFFSETOF(para.socket.ip.res.opts), XIO_SIZEOF(para.socket.ip.res.opts), RES_DEFNAMES };
|
||||
const struct optdesc opt_res_stayopen = { "res-stayopen", "stayopen", OPT_RES_STAYOPEN, GROUP_SOCK_IP, PH_OFFSET, TYPE_BOOL, OFUNC_OFFSET_MASKS, XIO_OFFSETOF(para.socket.ip.res.opts), XIO_SIZEOF(para.socket.ip.res.opts), RES_STAYOPEN };
|
||||
const struct optdesc opt_res_dnsrch = { "res-dnsrch", "dnsrch", OPT_RES_DNSRCH, GROUP_SOCK_IP, PH_OFFSET, TYPE_BOOL, OFUNC_OFFSET_MASKS, XIO_OFFSETOF(para.socket.ip.res.opts), XIO_SIZEOF(para.socket.ip.res.opts), RES_DNSRCH };
|
||||
#if HAVE_RES_RETRANS
|
||||
const struct optdesc opt_res_retrans = { "res-retrans", "retrans", OPT_RES_RETRANS, GROUP_SOCK_IP, PH_OFFSET, TYPE_INT, OFUNC_OFFSET, XIO_OFFSETOF(para.socket.ip.res.retrans), XIO_SIZEOF(para.socket.ip.res.retrans), RES_MAXRETRANS };
|
||||
#endif
|
||||
#if HAVE_RES_RETRY
|
||||
const struct optdesc opt_res_retry = { "res-retry", NULL, OPT_RES_RETRY, GROUP_SOCK_IP, PH_OFFSET, TYPE_INT, OFUNC_OFFSET, XIO_OFFSETOF(para.socket.ip.res.retry), XIO_SIZEOF(para.socket.ip.res.retry), RES_MAXRETRY };
|
||||
#endif
|
||||
const struct optdesc opt_res_igntc = { "res-igntc", "igntc", OPT_RES_IGNTC, GROUP_SOCK_IP, PH_OFFSET, TYPE_BOOL, OFUNC_OFFSET_MASKS, XIO_OFFSETOF(para.socket.ip.res_opts), XIO_SIZEOF(para.socket.ip.res_opts), RES_IGNTC };
|
||||
const struct optdesc opt_res_recurse = { "res-recurse", "recurse", OPT_RES_RECURSE, GROUP_SOCK_IP, PH_OFFSET, TYPE_BOOL, OFUNC_OFFSET_MASKS, XIO_OFFSETOF(para.socket.ip.res_opts), XIO_SIZEOF(para.socket.ip.res_opts), RES_RECURSE };
|
||||
const struct optdesc opt_res_defnames = { "res-defnames", "defnames", OPT_RES_DEFNAMES, GROUP_SOCK_IP, PH_OFFSET, TYPE_BOOL, OFUNC_OFFSET_MASKS, XIO_OFFSETOF(para.socket.ip.res_opts), XIO_SIZEOF(para.socket.ip.res_opts), RES_DEFNAMES };
|
||||
const struct optdesc opt_res_stayopen = { "res-stayopen", "stayopen", OPT_RES_STAYOPEN, GROUP_SOCK_IP, PH_OFFSET, TYPE_BOOL, OFUNC_OFFSET_MASKS, XIO_OFFSETOF(para.socket.ip.res_opts), XIO_SIZEOF(para.socket.ip.res_opts), RES_STAYOPEN };
|
||||
const struct optdesc opt_res_dnsrch = { "res-dnsrch", "dnsrch", OPT_RES_DNSRCH, GROUP_SOCK_IP, PH_OFFSET, TYPE_BOOL, OFUNC_OFFSET_MASKS, XIO_OFFSETOF(para.socket.ip.res_opts), XIO_SIZEOF(para.socket.ip.res_opts), RES_DNSRCH };
|
||||
#endif /* HAVE_RESOLV_H */
|
||||
|
||||
#endif /* WITH_RESOLVE */
|
||||
#endif /* WITH_IP4 || WITH_IP6 */
|
||||
|
||||
|
||||
|
@ -241,8 +248,10 @@ int xiogetaddrinfo(const char *node, const char *service,
|
|||
hints.ai_flags, hints.ai_family,
|
||||
hints.ai_socktype, hints.ai_protocol,
|
||||
gai_strerror(error_num));
|
||||
if (res != NULL) freeaddrinfo(*res);
|
||||
if (numnode) free(numnode);
|
||||
if (*res != NULL)
|
||||
freeaddrinfo(*res);
|
||||
if (numnode)
|
||||
free(numnode);
|
||||
return STAT_NORETRY;
|
||||
}
|
||||
hints.ai_protocol = 0;
|
||||
|
@ -255,8 +264,11 @@ int xiogetaddrinfo(const char *node, const char *service,
|
|||
hints.ai_socktype, hints.ai_protocol,
|
||||
(error_num == EAI_SYSTEM)?
|
||||
strerror(errno):gai_strerror(error_num));
|
||||
if (*res != NULL)
|
||||
freeaddrinfo(*res);
|
||||
if (numnode)
|
||||
free(numnode);
|
||||
|
||||
return STAT_RETRYLATER;
|
||||
}
|
||||
} while (1);
|
||||
|
@ -988,6 +1000,7 @@ int xioapply_ip_add_source_membership(struct single *sfd, struct opt *opt) {
|
|||
#endif /* HAVE_STRUCT_IP_MREQ_SOURCE */
|
||||
|
||||
|
||||
#if WITH_RESOLVE
|
||||
#if HAVE_RESOLV_H
|
||||
|
||||
/* When there are options for resolver then this function saves the current
|
||||
|
@ -1001,8 +1014,8 @@ int xio_res_init(
|
|||
struct single *sfd,
|
||||
struct __res_state *save_res)
|
||||
{
|
||||
if (sfd->para.socket.ip.res_opts[0] ||
|
||||
sfd->para.socket.ip.res_opts[1]) {
|
||||
if (sfd->para.socket.ip.res.opts[0] ||
|
||||
sfd->para.socket.ip.res.opts[1]) {
|
||||
if (!(_res.options & RES_INIT)) {
|
||||
if (Res_init() < 0) {
|
||||
Error("res_init() failed");
|
||||
|
@ -1010,8 +1023,8 @@ int xio_res_init(
|
|||
}
|
||||
}
|
||||
*save_res = _res;
|
||||
_res.options |= sfd->para.socket.ip.res_opts[0];
|
||||
_res.options &= ~sfd->para.socket.ip.res_opts[1];
|
||||
_res.options |= sfd->para.socket.ip.res.opts[0];
|
||||
_res.options &= ~sfd->para.socket.ip.res.opts[1];
|
||||
Debug2("changed _res.options from 0x%lx to 0x%lx",
|
||||
save_res->options, _res.options);
|
||||
return 1;
|
||||
|
@ -1026,5 +1039,6 @@ int xio_res_restore(
|
|||
return 0;
|
||||
}
|
||||
#endif /* HAVE_RESOLV_H */
|
||||
#endif /* WITH_RESOLVE */
|
||||
|
||||
#endif /* _WITH_IP4 || _WITH_IP6 */
|
||||
|
|
8
xio-ip.h
8
xio-ip.h
|
@ -42,6 +42,8 @@ extern const struct optdesc opt_res_recurse;
|
|||
extern const struct optdesc opt_res_defnames;
|
||||
extern const struct optdesc opt_res_stayopen;
|
||||
extern const struct optdesc opt_res_dnsrch;
|
||||
extern const struct optdesc opt_res_retrans;
|
||||
extern const struct optdesc opt_res_retry;
|
||||
|
||||
extern int xioinit_ip(int *pf, char ipv);
|
||||
|
||||
|
@ -54,9 +56,9 @@ extern int xioapply_ip_add_membership(xiosingle_t *xfd, struct opt *opt);
|
|||
extern int xiotype_ip_add_source_membership(char* token, const struct optname *ent, struct opt *opt);
|
||||
extern int xioapply_ip_add_source_membership(struct single *xfd, struct opt *opt);
|
||||
|
||||
#if HAVE_RESOLV_H
|
||||
#if WITH_RESOLVE && HAVE_RESOLV_H
|
||||
extern int xio_res_init(struct single *sfd, struct __res_state *save_res);
|
||||
extern int xio_res_restore(struct __res_state *save_red);
|
||||
#endif /* HAVE_RESOLV_H */
|
||||
extern int xio_res_restore(struct __res_state *save_res);
|
||||
#endif /* WITH_RESOLVE && HAVE_RESOLV_H */
|
||||
|
||||
#endif /* !defined(__xio_ip_h_included) */
|
||||
|
|
|
@ -80,7 +80,7 @@ const struct optdesc opt_ipv6_recvpathmtu = { "ipv6-recvpathmtu", "recvpathmtu",
|
|||
#endif
|
||||
|
||||
/* Returns canonical form of IPv6 address.
|
||||
IPv6 address may bei enclose in brackets.
|
||||
IPv6 address may be enclose in brackets.
|
||||
Returns STAT_OK on success, STAT_NORETRY on failure. */
|
||||
int xioip6_pton(
|
||||
const char *src,
|
||||
|
|
20
xio.h
20
xio.h
|
@ -133,10 +133,24 @@ extern xioparms_t xioparms;
|
|||
#define MAXARGV 8
|
||||
|
||||
#if _WITH_IP4 || _WITH_IP6
|
||||
#if WITH_RESOLVE && HAVE_RESOLV_H
|
||||
struct para_ip_res {
|
||||
unsigned int opts[2]; /* bits to be set in _res.options are in [0],
|
||||
bits to be cleared are in [1] */
|
||||
#if HAVE_RES_RETRANS
|
||||
int retrans;
|
||||
#endif
|
||||
#if HAVE_RES_RETRY
|
||||
int retry;
|
||||
#endif
|
||||
} ;
|
||||
#endif /* WITH_RESOLVE && HAVE_RESOLV_H */
|
||||
|
||||
struct para_ip {
|
||||
int ai_flags[2]; /* flags for getaddrinfo() ai_flags (set/unset) */
|
||||
unsigned long res_opts[2]; /* bits to be set in _res.options are
|
||||
at [0], bits to be cleared are at [1] */
|
||||
int ai_flags[2]; /* flags for getaddrinfo() ai_flags (set/unset) */
|
||||
#if WITH_RESOLVE && HAVE_RESOLV_H
|
||||
struct para_ip_res res;
|
||||
#endif
|
||||
bool dosourceport; /* check the source port of incoming connection or packets */
|
||||
uint16_t sourceport; /* host byte order */
|
||||
bool lowport;
|
||||
|
|
23
xioopen.c
23
xioopen.c
|
@ -397,7 +397,14 @@ static xiofile_t *xioallocfd(void) {
|
|||
fd->stream.escape = -1;
|
||||
/* fd->stream.para.exec.pid = 0; */
|
||||
fd->stream.lineterm = LINETERM_RAW;
|
||||
|
||||
#if WITH_RESOLVE
|
||||
#if HAVE_RES_RETRANS
|
||||
fd->stream.para.socket.ip.res.retrans = -1;
|
||||
#endif
|
||||
#if HAVE_RES_RETRY
|
||||
fd->stream.para.socket.ip.res.retry = -1;
|
||||
#endif
|
||||
#endif /* WITH_RESOLVE */
|
||||
return fd;
|
||||
}
|
||||
|
||||
|
@ -616,10 +623,10 @@ int xioopen_single(xiofile_t *xfd, int xioflags) {
|
|||
const char *modetext[4] = { "none", "read-only", "write-only", "read-write" } ;
|
||||
int result;
|
||||
/* Values to be saved until xioopen() is finished */
|
||||
#if HAVE_RESOLV_H
|
||||
#if WITH_RESOLVE && HAVE_RESOLV_H
|
||||
int do_res;
|
||||
struct __res_state save_res;
|
||||
#endif /* HAVE_RESOLV_H */
|
||||
#endif /* WITH_RESOLVE && HAVE_RESOLV_H */
|
||||
#if WITH_NAMESPACES
|
||||
char *temp_netns;
|
||||
int save_netfd = -1;
|
||||
|
@ -648,10 +655,10 @@ int xioopen_single(xiofile_t *xfd, int xioflags) {
|
|||
}
|
||||
#endif /* WITH_NAMESPACES */
|
||||
|
||||
#if HAVE_RESOLV_H
|
||||
#if WITH_RESOLVE && HAVE_RESOLV_H
|
||||
if ((do_res = xio_res_init(sfd, &save_res)) < 0)
|
||||
return STAT_NORETRY;
|
||||
#endif /* HAVE_RESOLV_H */
|
||||
#endif /* WITH_RESOLVE && HAVE_RESOLV_H */
|
||||
|
||||
addrdesc = xfd->stream.addr;
|
||||
/* Check if address supports required data directions */
|
||||
|
@ -673,10 +680,10 @@ int xioopen_single(xiofile_t *xfd, int xioflags) {
|
|||
xfd->stream.opts, xioflags, xfd,
|
||||
addrdesc);
|
||||
|
||||
#if HAVE_RESOLV_H
|
||||
#if WITH_RESOLVE && HAVE_RESOLV_H
|
||||
if (do_res)
|
||||
xio_res_init(sfd, &save_res);
|
||||
#endif /* HAVE_RESOLV_H */
|
||||
xio_res_restore(&save_res);
|
||||
#endif /* WITH_RESOLVE && HAVE_RESOLV_H */
|
||||
|
||||
#if WITH_NAMESPACES
|
||||
if (save_netfd >= 0) {
|
||||
|
|
57
xioopts.c
57
xioopts.c
|
@ -126,6 +126,12 @@ bool xioopts_ignoregroups;
|
|||
# define IF_OPENSSL(a,b)
|
||||
#endif
|
||||
|
||||
#if WITH_RESOLVE
|
||||
# define IF_RESOLVE(a,b) {a,b},
|
||||
#else
|
||||
# define IF_RESOLVE(a,b)
|
||||
#endif
|
||||
|
||||
#if WITH_INTERFACE
|
||||
# define IF_INTERFACE(a,b) {a,b},
|
||||
#else
|
||||
|
@ -160,7 +166,7 @@ static int applyopt(struct single *sfd, int fd, struct opt *opt);
|
|||
/* NULL terminated */
|
||||
const struct optname optionnames[] = {
|
||||
#if HAVE_RESOLV_H && WITH_RES_AAONLY
|
||||
IF_IP ("aaonly", &opt_res_aaonly)
|
||||
IF_RESOLVE("aaonly", &opt_res_aaonly)
|
||||
#endif
|
||||
#ifdef TCP_ABORT_THRESHOLD /* HP_UX */
|
||||
IF_TCP ("abort-threshold", &opt_tcp_abort_threshold)
|
||||
|
@ -384,7 +390,7 @@ const struct optname optionnames[] = {
|
|||
IF_TERMIOS("ctty", &opt_tiocsctty)
|
||||
IF_EXEC ("dash", &opt_dash)
|
||||
IF_SOCKET ("debug", &opt_so_debug)
|
||||
/*IF_IP ("debug", &opt_res_debug)*/
|
||||
/*IF_RESOLVE("debug", &opt_res_debug)*/
|
||||
#ifdef O_DEFER
|
||||
IF_OPEN ("defer", &opt_o_defer)
|
||||
#endif
|
||||
|
@ -392,7 +398,7 @@ const struct optname optionnames[] = {
|
|||
IF_TCP ("defer-accept", &opt_tcp_defer_accept)
|
||||
#endif
|
||||
#if HAVE_RESOLV_H
|
||||
IF_IP ("defnames", &opt_res_defnames)
|
||||
IF_RESOLVE("defnames", &opt_res_defnames)
|
||||
#endif /* HAVE_RESOLV_H */
|
||||
#ifdef O_DELAY
|
||||
IF_OPEN ("delay", &opt_o_delay)
|
||||
|
@ -425,7 +431,7 @@ const struct optname optionnames[] = {
|
|||
IF_TERMIOS("discard", &opt_vdiscard)
|
||||
#endif
|
||||
#if HAVE_RESOLV_H
|
||||
IF_IP ("dnsrch", &opt_res_dnsrch)
|
||||
IF_RESOLVE("dnsrch", &opt_res_dnsrch)
|
||||
#endif /* HAVE_RESOLV_H */
|
||||
#ifdef SO_DONTLINGER
|
||||
IF_SOCKET ("dontlinger", &opt_so_dontlinger)
|
||||
|
@ -686,7 +692,7 @@ const struct optname optionnames[] = {
|
|||
IF_ANY ("ignoreof", &opt_ignoreeof)
|
||||
IF_TERMIOS("ignpar", &opt_ignpar)
|
||||
#if HAVE_RESOLV_H
|
||||
IF_IP ("igntc", &opt_res_igntc)
|
||||
IF_RESOLVE("igntc", &opt_res_igntc)
|
||||
#endif /* HAVE_RESOLV_H */
|
||||
IF_TERMIOS("imaxbel", &opt_imaxbel)
|
||||
#if WITH_FS && defined(FS_IMMUTABLE_FL)
|
||||
|
@ -1306,7 +1312,7 @@ const struct optname optionnames[] = {
|
|||
IF_ANY ("posixmq-priority", &opt_posixmq_priority)
|
||||
#endif
|
||||
#if HAVE_RESOLV_H && WITH_RES_PRIMARY
|
||||
IF_IP ("primary", &opt_res_primary)
|
||||
IF_RESOLVE("primary", &opt_res_primary)
|
||||
#endif
|
||||
#ifdef SO_PRIORITY
|
||||
IF_SOCKET ("priority", &opt_so_priority)
|
||||
|
@ -1367,7 +1373,7 @@ const struct optname optionnames[] = {
|
|||
IF_OPEN ("rdwr", &opt_o_rdwr)
|
||||
IF_ANY ("readbytes", &opt_readbytes)
|
||||
#if HAVE_RESOLV_H
|
||||
IF_IP ("recurse", &opt_res_recurse)
|
||||
IF_RESOLVE("recurse", &opt_res_recurse)
|
||||
#endif /* HAVE_RESOLV_H */
|
||||
#ifdef IP_RECVDSTADDR
|
||||
IF_IP ("recvdstaddr", &opt_ip_recvdstaddr)
|
||||
|
@ -1408,24 +1414,39 @@ const struct optname optionnames[] = {
|
|||
#endif
|
||||
#if HAVE_RESOLV_H
|
||||
# if WITH_AA_ONLY
|
||||
IF_IP ("res-aaonly", &opt_res_aaonly)
|
||||
IF_RESOLVE("res-aaonly", &opt_res_aaonly)
|
||||
# endif
|
||||
IF_RESOLVE("res-debug", &opt_res_debug)
|
||||
IF_RESOLVE("res-defnames", &opt_res_defnames)
|
||||
IF_RESOLVE("res-dnsrch", &opt_res_dnsrch)
|
||||
IF_RESOLVE("res-igntc", &opt_res_igntc)
|
||||
# if HAVE_RES_RETRANS
|
||||
IF_RESOLVE("res-maxretrans", &opt_res_retrans)
|
||||
# endif
|
||||
# if HAVE_RES_RETRY
|
||||
IF_RESOLVE("res-maxretry", &opt_res_retry)
|
||||
# endif
|
||||
IF_IP ("res-debug", &opt_res_debug)
|
||||
IF_IP ("res-defnames", &opt_res_defnames)
|
||||
IF_IP ("res-dnsrch", &opt_res_dnsrch)
|
||||
IF_IP ("res-igntc", &opt_res_igntc)
|
||||
# if WITH_RES_PRIMARY
|
||||
IF_IP ("res-primary", &opt_res_primary)
|
||||
IF_RESOLVE("res-primary", &opt_res_primary)
|
||||
# endif
|
||||
IF_IP ("res-recurse", &opt_res_recurse)
|
||||
IF_IP ("res-stayopen", &opt_res_stayopen)
|
||||
IF_IP ("res-usevc", &opt_res_usevc)
|
||||
IF_RESOLVE("res-recurse", &opt_res_recurse)
|
||||
# if HAVE_RES_RETRANS
|
||||
IF_RESOLVE("res-retrans", &opt_res_retrans)
|
||||
# endif
|
||||
# if HAVE_RES_RETRY
|
||||
IF_RESOLVE("res-retry", &opt_res_retry)
|
||||
# endif
|
||||
IF_RESOLVE("res-stayopen", &opt_res_stayopen)
|
||||
IF_RESOLVE("res-usevc", &opt_res_usevc)
|
||||
#endif /* HAVE_RESOLV_H */
|
||||
IF_PROXY ("resolv", &opt_proxy_resolve)
|
||||
IF_PROXY ("resolve", &opt_proxy_resolve)
|
||||
#ifdef IP_RETOPTS
|
||||
IF_IP ("retopts", &opt_ip_retopts)
|
||||
#endif
|
||||
# if HAVE_RES_RETRANS
|
||||
IF_RESOLVE("retrans", &opt_res_retrans)
|
||||
# endif
|
||||
#if WITH_INTERFACE && defined(PACKET_AUXDATA)
|
||||
IF_SOCKET ("retrieve-vlan", &opt_retrieve_vlan)
|
||||
#endif
|
||||
|
@ -1662,7 +1683,7 @@ const struct optname optionnames[] = {
|
|||
IF_IPAPP ("sp", &opt_sourceport)
|
||||
IF_TERMIOS("start", &opt_vstart)
|
||||
#if HAVE_RESOLV_H
|
||||
IF_IP ("stayopen", &opt_res_stayopen)
|
||||
IF_RESOLVE("stayopen", &opt_res_stayopen)
|
||||
#endif /* HAVE_RESOLV_H */
|
||||
IF_EXEC ("stderr", &opt_stderr)
|
||||
#ifdef TCP_STDURG
|
||||
|
@ -1865,7 +1886,7 @@ const struct optname optionnames[] = {
|
|||
IF_NAMED ("user-early", &opt_user_early)
|
||||
IF_ANY ("user-late", &opt_user_late)
|
||||
#if HAVE_RESOLV_H
|
||||
IF_IP ("usevc", &opt_res_usevc)
|
||||
IF_RESOLVE("usevc", &opt_res_usevc)
|
||||
#endif /* HAVE_RESOLV_H */
|
||||
#if defined(AI_V4MAPPED)
|
||||
IF_IP ("v4mapped", &opt_ai_v4mapped)
|
||||
|
|
|
@ -630,6 +630,8 @@ enum e_optcode {
|
|||
OPT_RES_IGNTC, /* resolver(3) */
|
||||
OPT_RES_PRIMARY, /* resolver(3) */
|
||||
OPT_RES_RECURSE, /* resolver(3) */
|
||||
OPT_RES_RETRANS, /* undocumented */
|
||||
OPT_RES_RETRY, /* undocumented */
|
||||
OPT_RES_STAYOPEN, /* resolver(3) */
|
||||
OPT_RES_USEVC, /* resolver(3) */
|
||||
OPT_RETRIEVE_VLAN, /* Linux: get VLAN info on raw sockets per auxdata */
|
||||
|
|
Loading…
Reference in a new issue