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