Coverage Report

Created: 2026-01-09 06:42

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/bind9/lib/dns/rdata/generic/nid_104.c
Line
Count
Source
1
/*
2
 * Copyright (C) Internet Systems Consortium, Inc. ("ISC")
3
 *
4
 * SPDX-License-Identifier: MPL-2.0
5
 *
6
 * This Source Code Form is subject to the terms of the Mozilla Public
7
 * License, v. 2.0. If a copy of the MPL was not distributed with this
8
 * file, you can obtain one at https://mozilla.org/MPL/2.0/.
9
 *
10
 * See the COPYRIGHT file distributed with this work for additional
11
 * information regarding copyright ownership.
12
 */
13
14
#ifndef RDATA_GENERIC_NID_104_C
15
#define RDATA_GENERIC_NID_104_C
16
17
#include <string.h>
18
19
#include <isc/net.h>
20
21
9.34k
#define RRTYPE_NID_ATTRIBUTES (0)
22
23
static isc_result_t
24
90
fromtext_nid(ARGS_FROMTEXT) {
25
90
  isc_token_t token;
26
90
  unsigned char locator[NS_LOCATORSZ];
27
28
90
  REQUIRE(type == dns_rdatatype_nid);
29
30
90
  UNUSED(type);
31
90
  UNUSED(rdclass);
32
90
  UNUSED(origin);
33
90
  UNUSED(options);
34
90
  UNUSED(callbacks);
35
36
90
  RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_number,
37
90
              false));
38
87
  if (token.value.as_ulong > 0xffffU) {
39
10
    RETTOK(ISC_R_RANGE);
40
10
  }
41
77
  RETERR(uint16_tobuffer(token.value.as_ulong, target));
42
43
77
  RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_string,
44
77
              false));
45
46
62
  if (locator_pton(DNS_AS_STR(token), locator) != 1) {
47
37
    RETTOK(DNS_R_SYNTAX);
48
37
  }
49
25
  return mem_tobuffer(target, locator, NS_LOCATORSZ);
50
62
}
51
52
static isc_result_t
53
1.14k
totext_nid(ARGS_TOTEXT) {
54
1.14k
  isc_region_t region;
55
1.14k
  char buf[sizeof("xxxx:xxxx:xxxx:xxxx")];
56
1.14k
  unsigned short num;
57
58
1.14k
  REQUIRE(rdata->type == dns_rdatatype_nid);
59
1.14k
  REQUIRE(rdata->length != 0);
60
61
1.14k
  UNUSED(tctx);
62
63
1.14k
  dns_rdata_toregion(rdata, &region);
64
1.14k
  num = uint16_fromregion(&region);
65
1.14k
  isc_region_consume(&region, 2);
66
1.14k
  snprintf(buf, sizeof(buf), "%u", num);
67
1.14k
  RETERR(str_totext(buf, target));
68
69
1.14k
  RETERR(str_totext(" ", target));
70
71
1.14k
  snprintf(buf, sizeof(buf), "%x:%x:%x:%x",
72
1.14k
     region.base[0] << 8 | region.base[1],
73
1.14k
     region.base[2] << 8 | region.base[3],
74
1.14k
     region.base[4] << 8 | region.base[5],
75
1.14k
     region.base[6] << 8 | region.base[7]);
76
1.14k
  return str_totext(buf, target);
77
1.14k
}
78
79
static isc_result_t
80
1.33k
fromwire_nid(ARGS_FROMWIRE) {
81
1.33k
  isc_region_t sregion;
82
83
1.33k
  REQUIRE(type == dns_rdatatype_nid);
84
85
1.33k
  UNUSED(type);
86
1.33k
  UNUSED(rdclass);
87
1.33k
  UNUSED(dctx);
88
89
1.33k
  isc_buffer_activeregion(source, &sregion);
90
1.33k
  if (sregion.length != 10) {
91
26
    return DNS_R_FORMERR;
92
26
  }
93
1.31k
  isc_buffer_forward(source, sregion.length);
94
1.31k
  return mem_tobuffer(target, sregion.base, sregion.length);
95
1.33k
}
96
97
static isc_result_t
98
585
towire_nid(ARGS_TOWIRE) {
99
585
  REQUIRE(rdata->type == dns_rdatatype_nid);
100
585
  REQUIRE(rdata->length == 10);
101
102
585
  UNUSED(cctx);
103
104
585
  return mem_tobuffer(target, rdata->data, rdata->length);
105
585
}
106
107
static int
108
0
compare_nid(ARGS_COMPARE) {
109
0
  isc_region_t region1;
110
0
  isc_region_t region2;
111
112
0
  REQUIRE(rdata1->type == rdata2->type);
113
0
  REQUIRE(rdata1->rdclass == rdata2->rdclass);
114
0
  REQUIRE(rdata1->type == dns_rdatatype_nid);
115
0
  REQUIRE(rdata1->length == 10);
116
0
  REQUIRE(rdata2->length == 10);
117
118
0
  dns_rdata_toregion(rdata1, &region1);
119
0
  dns_rdata_toregion(rdata2, &region2);
120
0
  return isc_region_compare(&region1, &region2);
121
0
}
122
123
static isc_result_t
124
0
fromstruct_nid(ARGS_FROMSTRUCT) {
125
0
  dns_rdata_nid_t *nid = source;
126
127
0
  REQUIRE(type == dns_rdatatype_nid);
128
0
  REQUIRE(nid != NULL);
129
0
  REQUIRE(nid->common.rdtype == type);
130
0
  REQUIRE(nid->common.rdclass == rdclass);
131
132
0
  UNUSED(type);
133
0
  UNUSED(rdclass);
134
135
0
  RETERR(uint16_tobuffer(nid->pref, target));
136
0
  return mem_tobuffer(target, nid->nid, sizeof(nid->nid));
137
0
}
138
139
static isc_result_t
140
0
tostruct_nid(ARGS_TOSTRUCT) {
141
0
  isc_region_t region;
142
0
  dns_rdata_nid_t *nid = target;
143
144
0
  REQUIRE(rdata->type == dns_rdatatype_nid);
145
0
  REQUIRE(nid != NULL);
146
0
  REQUIRE(rdata->length == 10);
147
148
0
  UNUSED(mctx);
149
150
0
  DNS_RDATACOMMON_INIT(nid, rdata->type, rdata->rdclass);
151
152
0
  dns_rdata_toregion(rdata, &region);
153
0
  nid->pref = uint16_fromregion(&region);
154
0
  memmove(nid->nid, region.base, region.length);
155
0
  return ISC_R_SUCCESS;
156
0
}
157
158
static void
159
0
freestruct_nid(ARGS_FREESTRUCT) {
160
0
  dns_rdata_nid_t *nid = source;
161
162
0
  REQUIRE(nid != NULL);
163
0
  REQUIRE(nid->common.rdtype == dns_rdatatype_nid);
164
165
0
  return;
166
0
}
167
168
static isc_result_t
169
0
additionaldata_nid(ARGS_ADDLDATA) {
170
0
  REQUIRE(rdata->type == dns_rdatatype_nid);
171
0
  REQUIRE(rdata->length == 10);
172
173
0
  UNUSED(rdata);
174
0
  UNUSED(owner);
175
0
  UNUSED(add);
176
0
  UNUSED(arg);
177
178
0
  return ISC_R_SUCCESS;
179
0
}
180
181
static isc_result_t
182
0
digest_nid(ARGS_DIGEST) {
183
0
  isc_region_t r;
184
185
0
  REQUIRE(rdata->type == dns_rdatatype_nid);
186
0
  REQUIRE(rdata->length == 10);
187
188
0
  dns_rdata_toregion(rdata, &r);
189
190
0
  return (digest)(arg, &r);
191
0
}
192
193
static bool
194
0
checkowner_nid(ARGS_CHECKOWNER) {
195
0
  REQUIRE(type == dns_rdatatype_nid);
196
197
0
  UNUSED(name);
198
0
  UNUSED(type);
199
0
  UNUSED(rdclass);
200
0
  UNUSED(wildcard);
201
202
0
  return true;
203
0
}
204
205
static bool
206
0
checknames_nid(ARGS_CHECKNAMES) {
207
0
  REQUIRE(rdata->type == dns_rdatatype_nid);
208
0
  REQUIRE(rdata->length == 10);
209
210
0
  UNUSED(rdata);
211
0
  UNUSED(owner);
212
0
  UNUSED(bad);
213
214
0
  return true;
215
0
}
216
217
static int
218
0
casecompare_nid(ARGS_COMPARE) {
219
0
  return compare_nid(rdata1, rdata2);
220
0
}
221
222
#endif /* RDATA_GENERIC_NID_104_C */