1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
|
/*++
/* NAME
/* dns_str_resflags 3
/* SUMMARY
/* convert resolver flags to printable form
/* SYNOPSIS
/* #include <dns.h>
/*
/* const char *dns_str_resflags(mask)
/* unsigned long mask;
/* DESCRIPTION
/* dns_str_resflags() converts RES_* resolver(5) flags from internal
/* form to printable string. Individual flag names are separated
/* with '|'. The result is overwritten with each call.
/* LICENSE
/* .ad
/* .fi
/* The Secure Mailer license must be distributed with this software.
/* AUTHOR(S)
/* Wietse Venema
/* Google, Inc.
/* 111 8th Avenue
/* New York, NY 10011, USA
/*--*/
/*
* System library.
*/
#include <sys_defs.h>
#include <netinet/in.h>
#include <arpa/nameser.h>
#include <resolv.h>
/*
* Utility library.
*/
#include <name_mask.h>
/*
* DNS library.
*/
#include <dns.h>
/*
* Application-specific.
*/
/*
* This list overlaps with dns_res_opt_masks[] in smtp.c, but there we
* permit only a small subset of all possible flags.
*/
static const LONG_NAME_MASK resflag_table[] = {
"RES_INIT", RES_INIT,
"RES_DEBUG", RES_DEBUG,
#ifdef RES_AAONLY
"RES_AAONLY", RES_AAONLY,
#endif
"RES_USEVC", RES_USEVC,
#ifdef RES_PRIMARY
"RES_PRIMARY", RES_PRIMARY,
#endif
"RES_IGNTC", RES_IGNTC,
"RES_RECURSE", RES_RECURSE,
"RES_DEFNAMES", RES_DEFNAMES,
"RES_STAYOPEN", RES_STAYOPEN,
"RES_DNSRCH", RES_DNSRCH,
#ifdef RES_INSECURE1
"RES_INSECURE1", RES_INSECURE1,
#endif
#ifdef RES_INSECURE2
"RES_INSECURE2", RES_INSECURE2,
#endif
"RES_NOALIASES", RES_NOALIASES,
#ifdef RES_USE_INET6
"RES_USE_INET6", RES_USE_INET6,
#endif
#ifdef RES_ROTATE
"RES_ROTATE", RES_ROTATE,
#endif
#ifdef RES_NOCHECKNAME
"RES_NOCHECKNAME", RES_NOCHECKNAME,
#endif
"RES_USE_EDNS0", RES_USE_EDNS0,
"RES_USE_DNSSEC", RES_USE_DNSSEC,
#ifdef RES_KEEPTSIG
"RES_KEEPTSIG", RES_KEEPTSIG,
#endif
#ifdef RES_BLAST
"RES_BLAST", RES_BLAST,
#endif
#ifdef RES_USEBSTRING
"RES_USEBSTRING", RES_USEBSTRING,
#endif
#ifdef RES_NSID
"RES_NSID", RES_NSID,
#endif
#ifdef RES_NOIP6DOTINT
"RES_NOIP6DOTINT", RES_NOIP6DOTINT,
#endif
#ifdef RES_USE_DNAME
"RES_USE_DNAME", RES_USE_DNAME,
#endif
#ifdef RES_NO_NIBBLE2
"RES_NO_NIBBLE2", RES_NO_NIBBLE2,
#endif
#ifdef RES_SNGLKUP
"RES_SNGLKUP", RES_SNGLKUP,
#endif
#ifdef RES_SNGLKUPREOP
"RES_SNGLKUPREOP", RES_SNGLKUPREOP,
#endif
#ifdef RES_NOTLDQUERY
"RES_NOTLDQUERY", RES_NOTLDQUERY,
#endif
0,
};
/* dns_str_resflags - convert RES_* resolver flags to printable form */
const char *dns_str_resflags(unsigned long mask)
{
static VSTRING *buf;
if (buf == 0)
buf = vstring_alloc(20);
return (str_long_name_mask_opt(buf, "dsns_str_resflags", resflag_table,
mask, NAME_MASK_NUMBER | NAME_MASK_PIPE));
}
|