1
1
mirror of https://github.com/systemd/systemd-stable.git synced 2025-02-02 09:47:03 +03:00

Merge pull request #1034 from poettering/resolved-fixes-2

various resolved fixes
This commit is contained in:
Daniel Mack 2015-08-25 23:47:30 +02:00
commit 4ece412faf
4 changed files with 41 additions and 42 deletions

View File

@ -64,7 +64,7 @@ int dns_packet_new(DnsPacket **ret, DnsProtocol protocol, size_t mtu) {
int dns_packet_new_query(DnsPacket **ret, DnsProtocol protocol, size_t mtu) {
DnsPacket *p;
DnsPacketHeader *h;
int r, rd;
int r;
assert(ret);
@ -74,27 +74,26 @@ int dns_packet_new_query(DnsPacket **ret, DnsProtocol protocol, size_t mtu) {
h = DNS_PACKET_HEADER(p);
switch (protocol) {
case DNS_PROTOCOL_LLMNR:
/* no recursion for link-local resolving protocols */
rd = 0;
break;
default:
/* ask for recursion */
rd = 1;
break;
}
h->flags = htobe16(DNS_PACKET_MAKE_FLAGS(0 /* qr */,
0 /* opcode */,
0 /* aa */,
0 /* tc */,
rd /* rd */,
0 /* ra */,
0 /* ad */,
0 /* cd */,
0 /* rcode */));
if (protocol == DNS_PROTOCOL_LLMNR)
h->flags = htobe16(DNS_PACKET_MAKE_FLAGS(0 /* qr */,
0 /* opcode */,
0 /* c */,
0 /* tc */,
0 /* t */,
0 /* ra */,
0 /* ad */,
0 /* cd */,
0 /* rcode */));
else
h->flags = htobe16(DNS_PACKET_MAKE_FLAGS(0 /* qr */,
0 /* opcode */,
0 /* aa */,
0 /* tc */,
1 /* rd (ask for recursion) */,
0 /* ra */,
0 /* ad */,
0 /* cd */,
0 /* rcode */));
*ret = p;
return 0;

View File

@ -121,15 +121,15 @@ static inline uint8_t* DNS_PACKET_DATA(DnsPacket *p) {
#define DNS_PACKET_ARCOUNT(p) be16toh(DNS_PACKET_HEADER(p)->arcount)
#define DNS_PACKET_MAKE_FLAGS(qr, opcode, aa, tc, rd, ra, ad, cd, rcode) \
(((uint16_t) !!qr << 15) | \
((uint16_t) (opcode & 15) << 11) | \
((uint16_t) !!aa << 10) | \
((uint16_t) !!tc << 9) | \
((uint16_t) !!rd << 8) | \
((uint16_t) !!ra << 7) | \
((uint16_t) !!ad << 5) | \
((uint16_t) !!cd << 4) | \
((uint16_t) (rcode & 15)))
(((uint16_t) !!(qr) << 15) | \
((uint16_t) ((opcode) & 15) << 11) | \
((uint16_t) !!(aa) << 10) | /* on LLMNR: c */ \
((uint16_t) !!(tc) << 9) | \
((uint16_t) !!(rd) << 8) | /* on LLMNR: t */ \
((uint16_t) !!(ra) << 7) | \
((uint16_t) !!(ad) << 5) | \
((uint16_t) !!(cd) << 4) | \
((uint16_t) ((rcode) & 15)))
static inline unsigned DNS_PACKET_RRCOUNT(DnsPacket *p) {
return

View File

@ -39,8 +39,8 @@ DnsTransaction* dns_transaction_free(DnsTransaction *t) {
dns_packet_unref(t->received);
dns_answer_unref(t->cached);
sd_event_source_unref(t->dns_event_source);
safe_close(t->dns_fd);
sd_event_source_unref(t->dns_udp_event_source);
safe_close(t->dns_udp_fd);
dns_server_unref(t->server);
dns_stream_free(t->stream);
@ -98,7 +98,7 @@ int dns_transaction_new(DnsTransaction **ret, DnsScope *s, DnsResourceKey *key)
if (!t)
return -ENOMEM;
t->dns_fd = -1;
t->dns_udp_fd = -1;
t->key = dns_resource_key_ref(key);
/* Find a fresh, unused transaction id */
@ -328,8 +328,8 @@ static void dns_transaction_next_dns_server(DnsTransaction *t) {
assert(t);
t->server = dns_server_unref(t->server);
t->dns_event_source = sd_event_source_unref(t->dns_event_source);
t->dns_fd = safe_close(t->dns_fd);
t->dns_udp_event_source = sd_event_source_unref(t->dns_udp_event_source);
t->dns_udp_fd = safe_close(t->dns_udp_fd);
dns_scope_next_dns_server(t->scope);
}
@ -500,16 +500,16 @@ static int dns_transaction_emit(DnsTransaction *t) {
if (fd < 0)
return fd;
r = sd_event_add_io(t->scope->manager->event, &t->dns_event_source, fd, EPOLLIN, on_dns_packet, t);
r = sd_event_add_io(t->scope->manager->event, &t->dns_udp_event_source, fd, EPOLLIN, on_dns_packet, t);
if (r < 0)
return r;
t->dns_fd = fd;
t->dns_udp_fd = fd;
fd = -1;
t->server = dns_server_ref(server);
}
r = dns_scope_emit(t->scope, t->dns_fd, t->sent);
r = dns_scope_emit(t->scope, t->dns_udp_fd, t->sent);
if (r < 0)
return r;

View File

@ -62,10 +62,10 @@ struct DnsTransaction {
sd_event_source *timeout_event_source;
unsigned n_attempts;
int dns_fd;
sd_event_source *dns_event_source;
int dns_udp_fd;
sd_event_source *dns_udp_event_source;
/* the active server */
/* The active server */
DnsServer *server;
/* TCP connection logic, if we need it */