/src/systemd/src/shared/dns-domain.h
Line | Count | Source (jump to first uncovered line) |
1 | | /* SPDX-License-Identifier: LGPL-2.1+ */ |
2 | | #pragma once |
3 | | |
4 | | #include <errno.h> |
5 | | #include <stdbool.h> |
6 | | #include <stddef.h> |
7 | | #include <stdint.h> |
8 | | |
9 | | #include "hashmap.h" |
10 | | #include "in-addr-util.h" |
11 | | |
12 | | /* Length of a single label, with all escaping removed, excluding any trailing dot or NUL byte */ |
13 | 6.29M | #define DNS_LABEL_MAX 63 |
14 | | |
15 | | /* Worst case length of a single label, with all escaping applied and room for a trailing NUL byte. */ |
16 | 373k | #define DNS_LABEL_ESCAPED_MAX (DNS_LABEL_MAX*4+1) |
17 | | |
18 | | /* Maximum length of a full hostname, consisting of a series of unescaped labels, and no trailing dot or NUL byte */ |
19 | 99.6k | #define DNS_HOSTNAME_MAX 253 |
20 | | |
21 | | /* Maximum length of a full hostname, on the wire, including the final NUL byte */ |
22 | | #define DNS_WIRE_FORMAT_HOSTNAME_MAX 255 |
23 | | |
24 | | /* Maximum number of labels per valid hostname */ |
25 | 0 | #define DNS_N_LABELS_MAX 127 |
26 | | |
27 | | typedef enum DNSLabelFlags { |
28 | | DNS_LABEL_LDH = 1 << 0, /* Follow the "LDH" rule — only letters, digits, and internal hyphens. */ |
29 | | DNS_LABEL_NO_ESCAPES = 1 << 1, /* Do not treat backslashes specially */ |
30 | | } DNSLabelFlags; |
31 | | |
32 | | int dns_label_unescape(const char **name, char *dest, size_t sz, DNSLabelFlags flags); |
33 | | int dns_label_unescape_suffix(const char *name, const char **label_end, char *dest, size_t sz); |
34 | | int dns_label_escape(const char *p, size_t l, char *dest, size_t sz); |
35 | | int dns_label_escape_new(const char *p, size_t l, char **ret); |
36 | | |
37 | 0 | static inline int dns_name_parent(const char **name) { |
38 | 0 | return dns_label_unescape(name, NULL, DNS_LABEL_MAX, 0); |
39 | 0 | } Unexecuted instantiation: networkd-manager.c:dns_name_parent Unexecuted instantiation: networkd-network.c:dns_name_parent Unexecuted instantiation: sd-dhcp-client.c:dns_name_parent Unexecuted instantiation: sd-dhcp-lease.c:dns_name_parent Unexecuted instantiation: ndisc-router.c:dns_name_parent Unexecuted instantiation: sd-radv.c:dns_name_parent Unexecuted instantiation: sd-dhcp6-client.c:dns_name_parent Unexecuted instantiation: dhcp6-option.c:dns_name_parent Unexecuted instantiation: resolved-dns-packet.c:dns_name_parent Unexecuted instantiation: resolved-dns-rr.c:dns_name_parent Unexecuted instantiation: resolved-dns-answer.c:dns_name_parent Unexecuted instantiation: resolved-dns-question.c:dns_name_parent Unexecuted instantiation: resolved-dns-dnssec.c:dns_name_parent Unexecuted instantiation: dns-domain.c:dns_name_parent Unexecuted instantiation: sd-resolve.c:dns_name_parent |
40 | | |
41 | | #if HAVE_LIBIDN |
42 | | int dns_label_apply_idna(const char *encoded, size_t encoded_size, char *decoded, size_t decoded_max); |
43 | | int dns_label_undo_idna(const char *encoded, size_t encoded_size, char *decoded, size_t decoded_max); |
44 | | #endif |
45 | | |
46 | | int dns_name_concat(const char *a, const char *b, DNSLabelFlags flags, char **ret); |
47 | | |
48 | 106k | static inline int dns_name_normalize(const char *s, DNSLabelFlags flags, char **ret) { |
49 | 106k | /* dns_name_concat() normalizes as a side-effect */ |
50 | 106k | return dns_name_concat(s, NULL, flags, ret); |
51 | 106k | } Unexecuted instantiation: networkd-manager.c:dns_name_normalize networkd-network.c:dns_name_normalize Line | Count | Source | 48 | 101k | static inline int dns_name_normalize(const char *s, DNSLabelFlags flags, char **ret) { | 49 | 101k | /* dns_name_concat() normalizes as a side-effect */ | 50 | 101k | return dns_name_concat(s, NULL, flags, ret); | 51 | 101k | } |
Unexecuted instantiation: sd-dhcp-client.c:dns_name_normalize Unexecuted instantiation: sd-dhcp-lease.c:dns_name_normalize Unexecuted instantiation: ndisc-router.c:dns_name_normalize Unexecuted instantiation: sd-radv.c:dns_name_normalize Unexecuted instantiation: sd-dhcp6-client.c:dns_name_normalize Unexecuted instantiation: dhcp6-option.c:dns_name_normalize Unexecuted instantiation: resolved-dns-packet.c:dns_name_normalize Unexecuted instantiation: resolved-dns-rr.c:dns_name_normalize Unexecuted instantiation: resolved-dns-answer.c:dns_name_normalize Unexecuted instantiation: resolved-dns-question.c:dns_name_normalize Unexecuted instantiation: resolved-dns-dnssec.c:dns_name_normalize dns-domain.c:dns_name_normalize Line | Count | Source | 48 | 4.68k | static inline int dns_name_normalize(const char *s, DNSLabelFlags flags, char **ret) { | 49 | 4.68k | /* dns_name_concat() normalizes as a side-effect */ | 50 | 4.68k | return dns_name_concat(s, NULL, flags, ret); | 51 | 4.68k | } |
Unexecuted instantiation: sd-resolve.c:dns_name_normalize |
52 | | |
53 | 45.7k | static inline int dns_name_is_valid(const char *s) { |
54 | 45.7k | int r; |
55 | 45.7k | |
56 | 45.7k | /* dns_name_normalize() verifies as a side effect */ |
57 | 45.7k | r = dns_name_normalize(s, 0, NULL); |
58 | 45.7k | if (r == -EINVAL) |
59 | 45.7k | return 0; |
60 | 42.0k | if (r < 0) |
61 | 0 | return r; |
62 | 42.0k | return 1; |
63 | 42.0k | } Unexecuted instantiation: networkd-manager.c:dns_name_is_valid networkd-network.c:dns_name_is_valid Line | Count | Source | 53 | 41.0k | static inline int dns_name_is_valid(const char *s) { | 54 | 41.0k | int r; | 55 | 41.0k | | 56 | 41.0k | /* dns_name_normalize() verifies as a side effect */ | 57 | 41.0k | r = dns_name_normalize(s, 0, NULL); | 58 | 41.0k | if (r == -EINVAL) | 59 | 41.0k | return 0; | 60 | 38.5k | if (r < 0) | 61 | 0 | return r; | 62 | 38.5k | return 1; | 63 | 38.5k | } |
Unexecuted instantiation: sd-dhcp-client.c:dns_name_is_valid Unexecuted instantiation: sd-dhcp-lease.c:dns_name_is_valid Unexecuted instantiation: ndisc-router.c:dns_name_is_valid Unexecuted instantiation: sd-radv.c:dns_name_is_valid Unexecuted instantiation: sd-dhcp6-client.c:dns_name_is_valid Unexecuted instantiation: dhcp6-option.c:dns_name_is_valid Unexecuted instantiation: resolved-dns-packet.c:dns_name_is_valid Unexecuted instantiation: resolved-dns-rr.c:dns_name_is_valid Unexecuted instantiation: resolved-dns-answer.c:dns_name_is_valid Unexecuted instantiation: resolved-dns-question.c:dns_name_is_valid Unexecuted instantiation: resolved-dns-dnssec.c:dns_name_is_valid dns-domain.c:dns_name_is_valid Line | Count | Source | 53 | 4.68k | static inline int dns_name_is_valid(const char *s) { | 54 | 4.68k | int r; | 55 | 4.68k | | 56 | 4.68k | /* dns_name_normalize() verifies as a side effect */ | 57 | 4.68k | r = dns_name_normalize(s, 0, NULL); | 58 | 4.68k | if (r == -EINVAL) | 59 | 4.68k | return 0; | 60 | 3.43k | if (r < 0) | 61 | 0 | return r; | 62 | 3.43k | return 1; | 63 | 3.43k | } |
Unexecuted instantiation: sd-resolve.c:dns_name_is_valid |
64 | | |
65 | 0 | static inline int dns_name_is_valid_ldh(const char *s) { |
66 | 0 | int r; |
67 | 0 |
|
68 | 0 | r = dns_name_concat(s, NULL, DNS_LABEL_LDH|DNS_LABEL_NO_ESCAPES, NULL); |
69 | 0 | if (r == -EINVAL) |
70 | 0 | return 0; |
71 | 0 | if (r < 0) |
72 | 0 | return r; |
73 | 0 | return 1; |
74 | 0 | } Unexecuted instantiation: networkd-manager.c:dns_name_is_valid_ldh Unexecuted instantiation: networkd-network.c:dns_name_is_valid_ldh Unexecuted instantiation: sd-dhcp-client.c:dns_name_is_valid_ldh Unexecuted instantiation: sd-dhcp-lease.c:dns_name_is_valid_ldh Unexecuted instantiation: ndisc-router.c:dns_name_is_valid_ldh Unexecuted instantiation: sd-radv.c:dns_name_is_valid_ldh Unexecuted instantiation: sd-dhcp6-client.c:dns_name_is_valid_ldh Unexecuted instantiation: dhcp6-option.c:dns_name_is_valid_ldh Unexecuted instantiation: resolved-dns-packet.c:dns_name_is_valid_ldh Unexecuted instantiation: resolved-dns-rr.c:dns_name_is_valid_ldh Unexecuted instantiation: resolved-dns-answer.c:dns_name_is_valid_ldh Unexecuted instantiation: resolved-dns-question.c:dns_name_is_valid_ldh Unexecuted instantiation: resolved-dns-dnssec.c:dns_name_is_valid_ldh Unexecuted instantiation: dns-domain.c:dns_name_is_valid_ldh Unexecuted instantiation: sd-resolve.c:dns_name_is_valid_ldh |
75 | | |
76 | | void dns_name_hash_func(const char *s, struct siphash *state); |
77 | | int dns_name_compare_func(const char *a, const char *b); |
78 | | extern const struct hash_ops dns_name_hash_ops; |
79 | | |
80 | | int dns_name_between(const char *a, const char *b, const char *c); |
81 | | int dns_name_equal(const char *x, const char *y); |
82 | | int dns_name_endswith(const char *name, const char *suffix); |
83 | | int dns_name_startswith(const char *name, const char *prefix); |
84 | | |
85 | | int dns_name_change_suffix(const char *name, const char *old_suffix, const char *new_suffix, char **ret); |
86 | | |
87 | | int dns_name_reverse(int family, const union in_addr_union *a, char **ret); |
88 | | int dns_name_address(const char *p, int *family, union in_addr_union *a); |
89 | | |
90 | | bool dns_name_is_root(const char *name); |
91 | | bool dns_name_is_single_label(const char *name); |
92 | | |
93 | | int dns_name_to_wire_format(const char *domain, uint8_t *buffer, size_t len, bool canonical); |
94 | | |
95 | | bool dns_srv_type_is_valid(const char *name); |
96 | | bool dnssd_srv_type_is_valid(const char *name); |
97 | | bool dns_service_name_is_valid(const char *name); |
98 | | |
99 | | int dns_service_join(const char *name, const char *type, const char *domain, char **ret); |
100 | | int dns_service_split(const char *joined, char **name, char **type, char **domain); |
101 | | |
102 | | int dns_name_suffix(const char *name, unsigned n_labels, const char **ret); |
103 | | int dns_name_count_labels(const char *name); |
104 | | |
105 | | int dns_name_skip(const char *a, unsigned n_labels, const char **ret); |
106 | | int dns_name_equal_skip(const char *a, unsigned n_labels, const char *b); |
107 | | |
108 | | int dns_name_common_suffix(const char *a, const char *b, const char **ret); |
109 | | |
110 | | int dns_name_apply_idna(const char *name, char **ret); |
111 | | |
112 | | int dns_name_is_valid_or_address(const char *name); |