Blame view

Documentation/networking/dns_resolver.txt 5.06 KB
1a4240f47   Wang Lei   DNS: Separate out...
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
  			     ===================
  			     DNS Resolver Module
  			     ===================
  
  Contents:
  
   - Overview.
   - Compilation.
   - Setting up.
   - Usage.
   - Mechanism.
   - Debugging.
  
  
  ========
  OVERVIEW
  ========
  
  The DNS resolver module provides a way for kernel services to make DNS queries
  by way of requesting a key of key type dns_resolver.  These queries are
  upcalled to userspace through /sbin/request-key.
  
  These routines must be supported by userspace tools dns.upcall, cifs.upcall and
  request-key.  It is under development and does not yet provide the full feature
  set.  The features it does support include:
  
   (*) Implements the dns_resolver key_type to contact userspace.
  
  It does not yet support the following AFS features:
  
   (*) Dns query support for AFSDB resource record.
  
  This code is extracted from the CIFS filesystem.
  
  
  ===========
  COMPILATION
  ===========
  
  The module should be enabled by turning on the kernel configuration options:
  
  	CONFIG_DNS_RESOLVER	- tristate "DNS Resolver support"
  
  
  ==========
  SETTING UP
  ==========
  
  To set up this facility, the /etc/request-key.conf file must be altered so that
  /sbin/request-key can appropriately direct the upcalls.  For example, to handle
  basic dname to IPv4/IPv6 address resolution, the following line should be
  added:
  
  	#OP	TYPE		DESC	CO-INFO	PROGRAM ARG1 ARG2 ARG3 ...
  	#======	============	=======	=======	==========================
  	create	dns_resolver  	*	*	/usr/sbin/cifs.upcall %k
  
  To direct a query for query type 'foo', a line of the following should be added
  before the more general line given above as the first match is the one taken.
  
  	create	dns_resolver  	foo:*	*	/usr/sbin/dns.foo %k
1a4240f47   Wang Lei   DNS: Separate out...
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
  =====
  USAGE
  =====
  
  To make use of this facility, one of the following functions that are
  implemented in the module can be called after doing:
  
  	#include <linux/dns_resolver.h>
  
   (1) int dns_query(const char *type, const char *name, size_t namelen,
  		   const char *options, char **_result, time_t *_expiry);
  
       This is the basic access function.  It looks for a cached DNS query and if
       it doesn't find it, it upcalls to userspace to make a new DNS query, which
       may then be cached.  The key description is constructed as a string of the
       form:
  
  		[<type>:]<name>
  
       where <type> optionally specifies the particular upcall program to invoke,
       and thus the type of query to do, and <name> specifies the string to be
       looked up.  The default query type is a straight hostname to IP address
       set lookup.
  
       The name parameter is not required to be a NUL-terminated string, and its
       length should be given by the namelen argument.
  
       The options parameter may be NULL or it may be a set of options
       appropriate to the query type.
  
       The return value is a string appropriate to the query type.  For instance,
       for the default query type it is just a list of comma-separated IPv4 and
       IPv6 addresses.  The caller must free the result.
ff9517a68   David Howells   DNS: Fixes for th...
95
96
97
       The length of the result string is returned on success, and a negative
       error code is returned otherwise.  -EKEYREJECTED will be returned if the
       DNS lookup failed.
1a4240f47   Wang Lei   DNS: Separate out...
98
99
100
  
       If _expiry is non-NULL, the expiry time (TTL) of the result will be
       returned also.
700920eb5   David Howells   KEYS: Allow speci...
101
102
103
  The kernel maintains an internal keyring in which it caches looked up keys.
  This can be cleared by any process that has the CAP_SYS_ADMIN capability by
  the use of KEYCTL_KEYRING_CLEAR on the keyring ID.
1a4240f47   Wang Lei   DNS: Separate out...
104

1362fa078   David Howells   DNS: Fix a NULL p...
105
106
107
108
109
110
  ===============================
  READING DNS KEYS FROM USERSPACE
  ===============================
  
  Keys of dns_resolver type can be read from userspace using keyctl_read() or
  "keyctl read/print/pipe".
1a4240f47   Wang Lei   DNS: Separate out...
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
  =========
  MECHANISM
  =========
  
  The dnsresolver module registers a key type called "dns_resolver".  Keys of
  this type are used to transport and cache DNS lookup results from userspace.
  
  When dns_query() is invoked, it calls request_key() to search the local
  keyrings for a cached DNS result.  If that fails to find one, it upcalls to
  userspace to get a new result.
  
  Upcalls to userspace are made through the request_key() upcall vector, and are
  directed by means of configuration lines in /etc/request-key.conf that tell
  /sbin/request-key what program to run to instantiate the key.
  
  The upcall handler program is responsible for querying the DNS, processing the
  result into a form suitable for passing to the keyctl_instantiate_key()
  routine.  This then passes the data to dns_resolver_instantiate() which strips
  off and processes any options included in the data, and then attaches the
  remainder of the string to the key as its payload.
  
  The upcall handler program should set the expiry time on the key to that of the
  lowest TTL of all the records it has extracted a result from.  This means that
  the key will be discarded and recreated when the data it holds has expired.
  
  dns_query() returns a copy of the value attached to the key, or an error if
  that is indicated instead.
d410fa4ef   Randy Dunlap   Create Documentat...
138
139
  See <file:Documentation/security/keys-request-key.txt> for further
  information about request-key function.
1a4240f47   Wang Lei   DNS: Separate out...
140
141
142
143
144
145
146
147
148
149
  
  
  =========
  DEBUGGING
  =========
  
  Debugging messages can be turned on dynamically by writing a 1 into the
  following file:
  
          /sys/module/dnsresolver/parameters/debug