X Tutup
Skip to content

Commit 36d9205

Browse files
committed
resolved: rr - introduce dns_resource_key_new_redirect()
Takes a key and CNAME RR and returns the canonical RR of the right type. Make use of this in dns_question_redirect().
1 parent 7c1ff6a commit 36d9205

File tree

7 files changed

+17
-9
lines changed

7 files changed

+17
-9
lines changed

src/resolve/resolved-bus.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ static void bus_method_resolve_hostname_complete(DnsQuery *q) {
191191

192192
/* This has a cname? Then update the query with the
193193
* new cname. */
194-
r = dns_query_cname_redirect(q, cname->cname.name);
194+
r = dns_query_cname_redirect(q, cname);
195195
if (r < 0) {
196196
if (r == -ELOOP)
197197
r = sd_bus_reply_method_errorf(q->request, BUS_ERROR_CNAME_LOOP, "CNAME loop on '%s'", q->request_hostname);

src/resolve/resolved-dns-query.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -831,7 +831,7 @@ void dns_query_ready(DnsQuery *q) {
831831
dns_query_complete(q, state);
832832
}
833833

834-
int dns_query_cname_redirect(DnsQuery *q, const char *name) {
834+
int dns_query_cname_redirect(DnsQuery *q, const DnsResourceRecord *cname) {
835835
_cleanup_(dns_question_unrefp) DnsQuestion *nq = NULL;
836836
int r;
837837

@@ -840,7 +840,7 @@ int dns_query_cname_redirect(DnsQuery *q, const char *name) {
840840
if (q->n_cname_redirects > CNAME_MAX)
841841
return -ELOOP;
842842

843-
r = dns_question_cname_redirect(q->question, name, &nq);
843+
r = dns_question_cname_redirect(q->question, cname, &nq);
844844
if (r < 0)
845845
return r;
846846

src/resolve/resolved-dns-query.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ DnsQuery *dns_query_free(DnsQuery *q);
7272
int dns_query_go(DnsQuery *q);
7373
void dns_query_ready(DnsQuery *q);
7474

75-
int dns_query_cname_redirect(DnsQuery *q, const char *name);
75+
int dns_query_cname_redirect(DnsQuery *q, const DnsResourceRecord *cname);
7676

7777
int dns_query_bus_track(DnsQuery *q, sd_bus_message *m);
7878

src/resolve/resolved-dns-question.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -242,13 +242,13 @@ int dns_question_is_equal(DnsQuestion *a, DnsQuestion *b) {
242242
return 1;
243243
}
244244

245-
int dns_question_cname_redirect(DnsQuestion *q, const char *name, DnsQuestion **ret) {
245+
int dns_question_cname_redirect(DnsQuestion *q, const DnsResourceRecord *cname, DnsQuestion **ret) {
246246
_cleanup_(dns_question_unrefp) DnsQuestion *n = NULL;
247247
bool same = true;
248248
unsigned i;
249249
int r;
250250

251-
assert(name);
251+
assert(cname);
252252
assert(ret);
253253

254254
if (!q) {
@@ -262,7 +262,7 @@ int dns_question_cname_redirect(DnsQuestion *q, const char *name, DnsQuestion **
262262
}
263263

264264
for (i = 0; i < q->n_keys; i++) {
265-
r = dns_name_equal(DNS_RESOURCE_KEY_NAME(q->keys[i]), name);
265+
r = dns_name_equal(DNS_RESOURCE_KEY_NAME(q->keys[i]), cname->cname.name);
266266
if (r < 0)
267267
return r;
268268

@@ -286,7 +286,7 @@ int dns_question_cname_redirect(DnsQuestion *q, const char *name, DnsQuestion **
286286
for (i = 0; i < q->n_keys; i++) {
287287
_cleanup_(dns_resource_key_unrefp) DnsResourceKey *k = NULL;
288288

289-
k = dns_resource_key_new(q->keys[i]->class, q->keys[i]->type, name);
289+
k = dns_resource_key_new_redirect(q->keys[i], cname);
290290
if (!k)
291291
return -ENOMEM;
292292

src/resolve/resolved-dns-question.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,6 @@ int dns_question_is_superset(DnsQuestion *q, DnsQuestion *other);
4646
int dns_question_contains(DnsQuestion *a, DnsResourceKey *k);
4747
int dns_question_is_equal(DnsQuestion *a, DnsQuestion *b);
4848

49-
int dns_question_cname_redirect(DnsQuestion *q, const char *name, DnsQuestion **ret);
49+
int dns_question_cname_redirect(DnsQuestion *q, const DnsResourceRecord *cname, DnsQuestion **ret);
5050

5151
DEFINE_TRIVIAL_CLEANUP_FUNC(DnsQuestion*, dns_question_unref);

src/resolve/resolved-dns-rr.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,13 @@ DnsResourceKey* dns_resource_key_new_cname(const DnsResourceKey *key) {
5454
return dns_resource_key_new(key->class, DNS_TYPE_CNAME, DNS_RESOURCE_KEY_NAME(key));
5555
}
5656

57+
DnsResourceKey* dns_resource_key_new_redirect(const DnsResourceKey *key, const DnsResourceRecord *cname) {
58+
assert(key);
59+
assert(cname);
60+
61+
return dns_resource_key_new(key->class, key->type, cname->cname.name);
62+
}
63+
5764
DnsResourceKey* dns_resource_key_new_consume(uint16_t class, uint16_t type, char *name) {
5865
DnsResourceKey *k;
5966

src/resolve/resolved-dns-rr.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,7 @@ static inline const char* DNS_RESOURCE_KEY_NAME(const DnsResourceKey *key) {
178178

179179
DnsResourceKey* dns_resource_key_new(uint16_t class, uint16_t type, const char *name);
180180
DnsResourceKey* dns_resource_key_new_cname(const DnsResourceKey *key);
181+
DnsResourceKey* dns_resource_key_new_redirect(const DnsResourceKey *key, const DnsResourceRecord *cname);
181182
DnsResourceKey* dns_resource_key_new_consume(uint16_t class, uint16_t type, char *name);
182183
DnsResourceKey* dns_resource_key_ref(DnsResourceKey *key);
183184
DnsResourceKey* dns_resource_key_unref(DnsResourceKey *key);

0 commit comments

Comments
 (0)
X Tutup