1 /* $NetBSD: spf_99.c,v 1.8 2022/09/23 12:15:31 christos Exp $ */
2
3 /*
4 * Copyright (C) Internet Systems Consortium, Inc. ("ISC")
5 *
6 * SPDX-License-Identifier: MPL-2.0
7 *
8 * This Source Code Form is subject to the terms of the Mozilla Public
9 * License, v. 2.0. If a copy of the MPL was not distributed with this
10 * file, you can obtain one at https://mozilla.org/MPL/2.0/.
11 *
12 * See the COPYRIGHT file distributed with this work for additional
13 * information regarding copyright ownership.
14 */
15
16 #ifndef RDATA_GENERIC_SPF_99_C
17 #define RDATA_GENERIC_SPF_99_C
18
19 #define RRTYPE_SPF_ATTRIBUTES (0)
20
21 static isc_result_t
fromtext_spf(ARGS_FROMTEXT)22 fromtext_spf(ARGS_FROMTEXT) {
23 REQUIRE(type == dns_rdatatype_spf);
24
25 return (generic_fromtext_txt(CALL_FROMTEXT));
26 }
27
28 static isc_result_t
totext_spf(ARGS_TOTEXT)29 totext_spf(ARGS_TOTEXT) {
30 REQUIRE(rdata != NULL);
31 REQUIRE(rdata->type == dns_rdatatype_spf);
32
33 return (generic_totext_txt(CALL_TOTEXT));
34 }
35
36 static isc_result_t
fromwire_spf(ARGS_FROMWIRE)37 fromwire_spf(ARGS_FROMWIRE) {
38 REQUIRE(type == dns_rdatatype_spf);
39
40 return (generic_fromwire_txt(CALL_FROMWIRE));
41 }
42
43 static isc_result_t
towire_spf(ARGS_TOWIRE)44 towire_spf(ARGS_TOWIRE) {
45 REQUIRE(rdata->type == dns_rdatatype_spf);
46
47 UNUSED(cctx);
48
49 return (mem_tobuffer(target, rdata->data, rdata->length));
50 }
51
52 static int
compare_spf(ARGS_COMPARE)53 compare_spf(ARGS_COMPARE) {
54 isc_region_t r1;
55 isc_region_t r2;
56
57 REQUIRE(rdata1->type == rdata2->type);
58 REQUIRE(rdata1->rdclass == rdata2->rdclass);
59 REQUIRE(rdata1->type == dns_rdatatype_spf);
60
61 dns_rdata_toregion(rdata1, &r1);
62 dns_rdata_toregion(rdata2, &r2);
63 return (isc_region_compare(&r1, &r2));
64 }
65
66 static isc_result_t
fromstruct_spf(ARGS_FROMSTRUCT)67 fromstruct_spf(ARGS_FROMSTRUCT) {
68 REQUIRE(type == dns_rdatatype_spf);
69
70 return (generic_fromstruct_txt(CALL_FROMSTRUCT));
71 }
72
73 static isc_result_t
tostruct_spf(ARGS_TOSTRUCT)74 tostruct_spf(ARGS_TOSTRUCT) {
75 dns_rdata_spf_t *spf = target;
76
77 REQUIRE(spf != NULL);
78 REQUIRE(rdata != NULL);
79 REQUIRE(rdata->type == dns_rdatatype_spf);
80
81 spf->common.rdclass = rdata->rdclass;
82 spf->common.rdtype = rdata->type;
83 ISC_LINK_INIT(&spf->common, link);
84
85 return (generic_tostruct_txt(CALL_TOSTRUCT));
86 }
87
88 static void
freestruct_spf(ARGS_FREESTRUCT)89 freestruct_spf(ARGS_FREESTRUCT) {
90 dns_rdata_spf_t *spf = source;
91
92 REQUIRE(spf != NULL);
93 REQUIRE(spf->common.rdtype == dns_rdatatype_spf);
94
95 generic_freestruct_txt(source);
96 }
97
98 static isc_result_t
additionaldata_spf(ARGS_ADDLDATA)99 additionaldata_spf(ARGS_ADDLDATA) {
100 REQUIRE(rdata->type == dns_rdatatype_spf);
101
102 UNUSED(rdata);
103 UNUSED(add);
104 UNUSED(arg);
105
106 return (ISC_R_SUCCESS);
107 }
108
109 static isc_result_t
digest_spf(ARGS_DIGEST)110 digest_spf(ARGS_DIGEST) {
111 isc_region_t r;
112
113 REQUIRE(rdata->type == dns_rdatatype_spf);
114
115 dns_rdata_toregion(rdata, &r);
116
117 return ((digest)(arg, &r));
118 }
119
120 static bool
checkowner_spf(ARGS_CHECKOWNER)121 checkowner_spf(ARGS_CHECKOWNER) {
122 REQUIRE(type == dns_rdatatype_spf);
123
124 UNUSED(name);
125 UNUSED(type);
126 UNUSED(rdclass);
127 UNUSED(wildcard);
128
129 return (true);
130 }
131
132 static bool
checknames_spf(ARGS_CHECKNAMES)133 checknames_spf(ARGS_CHECKNAMES) {
134 REQUIRE(rdata->type == dns_rdatatype_spf);
135
136 UNUSED(rdata);
137 UNUSED(owner);
138 UNUSED(bad);
139
140 return (true);
141 }
142
143 static int
casecompare_spf(ARGS_COMPARE)144 casecompare_spf(ARGS_COMPARE) {
145 return (compare_spf(rdata1, rdata2));
146 }
147 #endif /* RDATA_GENERIC_SPF_99_C */
148