libpurple/dnsquery.c

Sun, 07 Feb 2021 01:33:01 -0600

author
Gary Kramlich <grim@reaperworld.com>
date
Sun, 07 Feb 2021 01:33:01 -0600
branch
release-2.x.y
changeset 40755
fb2056ce3c58
parent 36259
2c1483188cf5
child 40903
5c79001c7e86
permissions
-rw-r--r--

Implement mitigation for GHSL-2021-045

This add a static inline version of `g_memdup2` if the version of glib we're
compiling against doesn't have the function.

GHSL-2021-045 was originally reported to glib at
https://gitlab.gnome.org/GNOME/glib/-/issues/2319.

More information about the entire situation can be found on the gnome
desktop-devel-list at
https://mail.gnome.org/archives/desktop-devel-list/2021-February/msg00000.html

Testing Done:
Compiled and ran tests locally.

Reviewed at https://reviews.imfreedom.org/r/483/

14243
0bda01972ff2 [gaim-migrate @ 16833]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1 /**
0bda01972ff2 [gaim-migrate @ 16833]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
2 * @file dnsquery.c DNS query API
0bda01972ff2 [gaim-migrate @ 16833]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
3 * @ingroup core
20147
66f05a854eee applied changes from 8a731bbd0197fbcc91a705c2d8f528154216defa
Richard Laager <rlaager@pidgin.im>
parents: 19859
diff changeset
4 */
66f05a854eee applied changes from 8a731bbd0197fbcc91a705c2d8f528154216defa
Richard Laager <rlaager@pidgin.im>
parents: 19859
diff changeset
5
66f05a854eee applied changes from 8a731bbd0197fbcc91a705c2d8f528154216defa
Richard Laager <rlaager@pidgin.im>
parents: 19859
diff changeset
6 /* purple
14243
0bda01972ff2 [gaim-migrate @ 16833]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
7 *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15775
diff changeset
8 * Purple is the legal property of its developers, whose names are too numerous
14243
0bda01972ff2 [gaim-migrate @ 16833]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
9 * to list here. Please refer to the COPYRIGHT file distributed with this
0bda01972ff2 [gaim-migrate @ 16833]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
10 * source distribution.
0bda01972ff2 [gaim-migrate @ 16833]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
11 *
0bda01972ff2 [gaim-migrate @ 16833]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
12 * This program is free software; you can redistribute it and/or modify
0bda01972ff2 [gaim-migrate @ 16833]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
13 * it under the terms of the GNU General Public License as published by
0bda01972ff2 [gaim-migrate @ 16833]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
14 * the Free Software Foundation; either version 2 of the License, or
0bda01972ff2 [gaim-migrate @ 16833]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
15 * (at your option) any later version.
0bda01972ff2 [gaim-migrate @ 16833]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
16 *
0bda01972ff2 [gaim-migrate @ 16833]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
17 * This program is distributed in the hope that it will be useful,
0bda01972ff2 [gaim-migrate @ 16833]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
0bda01972ff2 [gaim-migrate @ 16833]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
0bda01972ff2 [gaim-migrate @ 16833]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
20 * GNU General Public License for more details.
0bda01972ff2 [gaim-migrate @ 16833]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
21 *
0bda01972ff2 [gaim-migrate @ 16833]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
22 * You should have received a copy of the GNU General Public License
0bda01972ff2 [gaim-migrate @ 16833]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
23 * along with this program; if not, write to the Free Software
19859
71d37b57eff2 The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 16701
diff changeset
24 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
14243
0bda01972ff2 [gaim-migrate @ 16833]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
25 *
0bda01972ff2 [gaim-migrate @ 16833]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
26 */
31738
c0a7971ce0d2 purple: Fix some compiler warnings related to new API and missing prototypes.
Paul Aurich <darkrain42@pidgin.im>
parents: 31678
diff changeset
27 #define _PURPLE_DNSQUERY_C_
14243
0bda01972ff2 [gaim-migrate @ 16833]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
28
0bda01972ff2 [gaim-migrate @ 16833]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
29 #include "internal.h"
0bda01972ff2 [gaim-migrate @ 16833]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
30 #include "debug.h"
14300
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
31 #include "dnsquery.h"
40755
fb2056ce3c58 Implement mitigation for GHSL-2021-045
Gary Kramlich <grim@reaperworld.com>
parents: 36259
diff changeset
32 #include "glibcompat.h"
27898
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27738
diff changeset
33 #include "network.h"
14243
0bda01972ff2 [gaim-migrate @ 16833]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
34 #include "notify.h"
0bda01972ff2 [gaim-migrate @ 16833]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
35 #include "prefs.h"
0bda01972ff2 [gaim-migrate @ 16833]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
36 #include "util.h"
0bda01972ff2 [gaim-migrate @ 16833]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
37
27157
609f187d0ac7 Call res_init() when DNS queries fail in case the failure indicates a timeout
Paul Aurich <darkrain42@pidgin.im>
parents: 27147
diff changeset
38 #ifndef _WIN32
609f187d0ac7 Call res_init() when DNS queries fail in case the failure indicates a timeout
Paul Aurich <darkrain42@pidgin.im>
parents: 27147
diff changeset
39 #include <resolv.h>
609f187d0ac7 Call res_init() when DNS queries fail in case the failure indicates a timeout
Paul Aurich <darkrain42@pidgin.im>
parents: 27147
diff changeset
40 #endif
609f187d0ac7 Call res_init() when DNS queries fail in case the failure indicates a timeout
Paul Aurich <darkrain42@pidgin.im>
parents: 27147
diff changeset
41
35999
5841bd4da162 Fix even more coverity warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 31973
diff changeset
42 #define MAX_ADDR_RESPONSE_LEN 1048576
5841bd4da162 Fix even more coverity warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 31973
diff changeset
43
23352
9714223ca7a7 A patch from Peter O'Gorman at The Written Word, Inc. to fix various
Peter O'Gorman <pogma@thewrittenword.com>
parents: 22622
diff changeset
44 #if (defined(__APPLE__) || defined (__unix__)) && !defined(__osf__)
9714223ca7a7 A patch from Peter O'Gorman at The Written Word, Inc. to fix various
Peter O'Gorman <pogma@thewrittenword.com>
parents: 22622
diff changeset
45 #define PURPLE_DNSQUERY_USE_FORK
9714223ca7a7 A patch from Peter O'Gorman at The Written Word, Inc. to fix various
Peter O'Gorman <pogma@thewrittenword.com>
parents: 22622
diff changeset
46 #endif
14243
0bda01972ff2 [gaim-migrate @ 16833]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
47 /**************************************************************************
0bda01972ff2 [gaim-migrate @ 16833]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
48 * DNS query API
0bda01972ff2 [gaim-migrate @ 16833]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
49 **************************************************************************/
0bda01972ff2 [gaim-migrate @ 16833]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
50
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15775
diff changeset
51 static PurpleDnsQueryUiOps *dns_query_ui_ops = NULL;
15763
2b529e4350bc The UI can now use the GaimDnsQueryUiOps to handle DNS resolving itself; if this is done, the platform-specific DNS query code won't be used. This will be used in Adium to use an efficient threads-based DNS resolve (since Adium is already multithreaded, this is significantly cheaper than fork()).
Evan Schoenberg <evands@pidgin.im>
parents: 15707
diff changeset
52
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15775
diff changeset
53 typedef struct _PurpleDnsQueryResolverProcess PurpleDnsQueryResolverProcess;
14300
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
54
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15775
diff changeset
55 struct _PurpleDnsQueryData {
14300
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
56 char *hostname;
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
57 int port;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15775
diff changeset
58 PurpleDnsQueryConnectFunction callback;
14300
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
59 gpointer data;
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
60 guint timeout;
31678
ad8a9a266b05 Add new DNS-related API to perform lookups in the context of an account.
Daniel Atallah <datallah@pidgin.im>
parents: 31674
diff changeset
61 PurpleAccount *account;
14300
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
62
23352
9714223ca7a7 A patch from Peter O'Gorman at The Written Word, Inc. to fix various
Peter O'Gorman <pogma@thewrittenword.com>
parents: 22622
diff changeset
63 #if defined(PURPLE_DNSQUERY_USE_FORK)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15775
diff changeset
64 PurpleDnsQueryResolverProcess *resolver;
23352
9714223ca7a7 A patch from Peter O'Gorman at The Written Word, Inc. to fix various
Peter O'Gorman <pogma@thewrittenword.com>
parents: 22622
diff changeset
65 #elif defined _WIN32 /* end PURPLE_DNSQUERY_USE_FORK */
14300
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
66 GThread *resolver;
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
67 GSList *hosts;
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
68 gchar *error_message;
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
69 #endif
14245
8a215625c6cb [gaim-migrate @ 16835]
Mark Doliner <markdoliner@pidgin.im>
parents: 14244
diff changeset
70 };
8a215625c6cb [gaim-migrate @ 16835]
Mark Doliner <markdoliner@pidgin.im>
parents: 14244
diff changeset
71
23352
9714223ca7a7 A patch from Peter O'Gorman at The Written Word, Inc. to fix various
Peter O'Gorman <pogma@thewrittenword.com>
parents: 22622
diff changeset
72 #if defined(PURPLE_DNSQUERY_USE_FORK)
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
73
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
74 #define MAX_DNS_CHILDREN 4
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
75
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
76 /*
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
77 * This structure keeps a reference to a child resolver process.
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
78 */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15775
diff changeset
79 struct _PurpleDnsQueryResolverProcess {
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
80 guint inpa;
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
81 int fd_in, fd_out;
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
82 pid_t dns_pid;
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
83 };
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
84
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
85 static GSList *free_dns_children = NULL;
27736
37496418416a Fix a leak of the queued_requests from purple_dnsquery_a.
Aman Gupta <aman@tmm1.net>
parents: 27497
diff changeset
86 /* TODO: Make me a GQueue when we require >= glib 2.4 */
14711
404c5a931bb2 [gaim-migrate @ 17395]
Mark Doliner <markdoliner@pidgin.im>
parents: 14572
diff changeset
87 static GSList *queued_requests = NULL;
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
88
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
89 static int number_of_dns_children = 0;
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
90
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
91 /*
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
92 * This is a convenience struct used to pass data to
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
93 * the child resolver process.
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
94 */
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
95 typedef struct {
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
96 char hostname[512];
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
97 int port;
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
98 } dns_params_t;
24321
0d6d024049eb Improve a few comments
Mark Doliner <markdoliner@pidgin.im>
parents: 24318
diff changeset
99 #endif /* end PURPLE_DNSQUERY_USE_FORK */
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
100
14300
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
101 static void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15775
diff changeset
102 purple_dnsquery_resolved(PurpleDnsQueryData *query_data, GSList *hosts)
14300
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
103 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15775
diff changeset
104 purple_debug_info("dnsquery", "IP resolved for %s\n", query_data->hostname);
14300
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
105 if (query_data->callback != NULL)
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
106 query_data->callback(hosts, query_data->data, NULL);
14420
3c78e468b45a [gaim-migrate @ 17064]
Mark Doliner <markdoliner@pidgin.im>
parents: 14349
diff changeset
107 else
3c78e468b45a [gaim-migrate @ 17064]
Mark Doliner <markdoliner@pidgin.im>
parents: 14349
diff changeset
108 {
3c78e468b45a [gaim-migrate @ 17064]
Mark Doliner <markdoliner@pidgin.im>
parents: 14349
diff changeset
109 /*
3c78e468b45a [gaim-migrate @ 17064]
Mark Doliner <markdoliner@pidgin.im>
parents: 14349
diff changeset
110 * Callback is a required parameter, but it can get set to
3c78e468b45a [gaim-migrate @ 17064]
Mark Doliner <markdoliner@pidgin.im>
parents: 14349
diff changeset
111 * NULL if we cancel a thread-based DNS lookup. So we need
3c78e468b45a [gaim-migrate @ 17064]
Mark Doliner <markdoliner@pidgin.im>
parents: 14349
diff changeset
112 * to free hosts.
3c78e468b45a [gaim-migrate @ 17064]
Mark Doliner <markdoliner@pidgin.im>
parents: 14349
diff changeset
113 */
3c78e468b45a [gaim-migrate @ 17064]
Mark Doliner <markdoliner@pidgin.im>
parents: 14349
diff changeset
114 while (hosts != NULL)
3c78e468b45a [gaim-migrate @ 17064]
Mark Doliner <markdoliner@pidgin.im>
parents: 14349
diff changeset
115 {
3c78e468b45a [gaim-migrate @ 17064]
Mark Doliner <markdoliner@pidgin.im>
parents: 14349
diff changeset
116 hosts = g_slist_remove(hosts, hosts->data);
3c78e468b45a [gaim-migrate @ 17064]
Mark Doliner <markdoliner@pidgin.im>
parents: 14349
diff changeset
117 g_free(hosts->data);
3c78e468b45a [gaim-migrate @ 17064]
Mark Doliner <markdoliner@pidgin.im>
parents: 14349
diff changeset
118 hosts = g_slist_remove(hosts, hosts->data);
3c78e468b45a [gaim-migrate @ 17064]
Mark Doliner <markdoliner@pidgin.im>
parents: 14349
diff changeset
119 }
3c78e468b45a [gaim-migrate @ 17064]
Mark Doliner <markdoliner@pidgin.im>
parents: 14349
diff changeset
120 }
3c78e468b45a [gaim-migrate @ 17064]
Mark Doliner <markdoliner@pidgin.im>
parents: 14349
diff changeset
121
24325
9b63613e82ab Fix DNS resolution. I think I broke this this morning in my revision
Mark Doliner <markdoliner@pidgin.im>
parents: 24324
diff changeset
122 #ifdef PURPLE_DNSQUERY_USE_FORK
24318
b2b1a42a7816 Revert my revision 3777b91f70ab86e67c1e039d08fb6d87e06f20d6, which
Mark Doliner <markdoliner@pidgin.im>
parents: 24287
diff changeset
123 /*
24325
9b63613e82ab Fix DNS resolution. I think I broke this this morning in my revision
Mark Doliner <markdoliner@pidgin.im>
parents: 24324
diff changeset
124 * Add the resolver to the list of available resolvers, and set it
9b63613e82ab Fix DNS resolution. I think I broke this this morning in my revision
Mark Doliner <markdoliner@pidgin.im>
parents: 24324
diff changeset
125 * to NULL so that it doesn't get destroyed along with the query_data
24318
b2b1a42a7816 Revert my revision 3777b91f70ab86e67c1e039d08fb6d87e06f20d6, which
Mark Doliner <markdoliner@pidgin.im>
parents: 24287
diff changeset
126 */
27738
91b067b7563d Don't assume a resolver generated the response.
Aman Gupta <aman@tmm1.net>
parents: 27737
diff changeset
127 if (query_data->resolver)
91b067b7563d Don't assume a resolver generated the response.
Aman Gupta <aman@tmm1.net>
parents: 27737
diff changeset
128 {
91b067b7563d Don't assume a resolver generated the response.
Aman Gupta <aman@tmm1.net>
parents: 27737
diff changeset
129 free_dns_children = g_slist_prepend(free_dns_children, query_data->resolver);
91b067b7563d Don't assume a resolver generated the response.
Aman Gupta <aman@tmm1.net>
parents: 27737
diff changeset
130 query_data->resolver = NULL;
91b067b7563d Don't assume a resolver generated the response.
Aman Gupta <aman@tmm1.net>
parents: 27737
diff changeset
131 }
24325
9b63613e82ab Fix DNS resolution. I think I broke this this morning in my revision
Mark Doliner <markdoliner@pidgin.im>
parents: 24324
diff changeset
132 #endif /* PURPLE_DNSQUERY_USE_FORK */
24318
b2b1a42a7816 Revert my revision 3777b91f70ab86e67c1e039d08fb6d87e06f20d6, which
Mark Doliner <markdoliner@pidgin.im>
parents: 24287
diff changeset
133
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15775
diff changeset
134 purple_dnsquery_destroy(query_data);
14300
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
135 }
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
136
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
137 static void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15775
diff changeset
138 purple_dnsquery_failed(PurpleDnsQueryData *query_data, const gchar *error_message)
14300
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
139 {
27497
2dc5a0e0c4c2 Increase the logging level of some debugging messages that seemed to be a
Mauro Brasil <mauro.brasil@tqi.com.br>
parents: 27157
diff changeset
140 purple_debug_error("dnsquery", "%s\n", error_message);
14300
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
141 if (query_data->callback != NULL)
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
142 query_data->callback(NULL, query_data->data, error_message);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15775
diff changeset
143 purple_dnsquery_destroy(query_data);
14300
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
144 }
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
145
15763
2b529e4350bc The UI can now use the GaimDnsQueryUiOps to handle DNS resolving itself; if this is done, the platform-specific DNS query code won't be used. This will be used in Adium to use an efficient threads-based DNS resolve (since Adium is already multithreaded, this is significantly cheaper than fork()).
Evan Schoenberg <evands@pidgin.im>
parents: 15707
diff changeset
146 static gboolean
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15775
diff changeset
147 purple_dnsquery_ui_resolve(PurpleDnsQueryData *query_data)
15763
2b529e4350bc The UI can now use the GaimDnsQueryUiOps to handle DNS resolving itself; if this is done, the platform-specific DNS query code won't be used. This will be used in Adium to use an efficient threads-based DNS resolve (since Adium is already multithreaded, this is significantly cheaper than fork()).
Evan Schoenberg <evands@pidgin.im>
parents: 15707
diff changeset
148 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15775
diff changeset
149 PurpleDnsQueryUiOps *ops = purple_dnsquery_get_ui_ops();
15763
2b529e4350bc The UI can now use the GaimDnsQueryUiOps to handle DNS resolving itself; if this is done, the platform-specific DNS query code won't be used. This will be used in Adium to use an efficient threads-based DNS resolve (since Adium is already multithreaded, this is significantly cheaper than fork()).
Evan Schoenberg <evands@pidgin.im>
parents: 15707
diff changeset
150
15775
a1aed6d0c33b No changes; fixed a bunch of whitespace problems made by a text editor with 'use tabs' disabled. Sorry for the noise.
Evan Schoenberg <evands@pidgin.im>
parents: 15771
diff changeset
151 if (ops && ops->resolve_host)
24323
fe88d45063e8 Simplify two bits of code a little
Mark Doliner <markdoliner@pidgin.im>
parents: 24322
diff changeset
152 return ops->resolve_host(query_data, purple_dnsquery_resolved, purple_dnsquery_failed);
15763
2b529e4350bc The UI can now use the GaimDnsQueryUiOps to handle DNS resolving itself; if this is done, the platform-specific DNS query code won't be used. This will be used in Adium to use an efficient threads-based DNS resolve (since Adium is already multithreaded, this is significantly cheaper than fork()).
Evan Schoenberg <evands@pidgin.im>
parents: 15707
diff changeset
153
2b529e4350bc The UI can now use the GaimDnsQueryUiOps to handle DNS resolving itself; if this is done, the platform-specific DNS query code won't be used. This will be used in Adium to use an efficient threads-based DNS resolve (since Adium is already multithreaded, this is significantly cheaper than fork()).
Evan Schoenberg <evands@pidgin.im>
parents: 15707
diff changeset
154 return FALSE;
2b529e4350bc The UI can now use the GaimDnsQueryUiOps to handle DNS resolving itself; if this is done, the platform-specific DNS query code won't be used. This will be used in Adium to use an efficient threads-based DNS resolve (since Adium is already multithreaded, this is significantly cheaper than fork()).
Evan Schoenberg <evands@pidgin.im>
parents: 15707
diff changeset
155 }
2b529e4350bc The UI can now use the GaimDnsQueryUiOps to handle DNS resolving itself; if this is done, the platform-specific DNS query code won't be used. This will be used in Adium to use an efficient threads-based DNS resolve (since Adium is already multithreaded, this is significantly cheaper than fork()).
Evan Schoenberg <evands@pidgin.im>
parents: 15707
diff changeset
156
27737
d2abba8c8e1f Don't fork a resolver process for IPs.
Aman Gupta <aman@tmm1.net>
parents: 27736
diff changeset
157 static gboolean
d2abba8c8e1f Don't fork a resolver process for IPs.
Aman Gupta <aman@tmm1.net>
parents: 27736
diff changeset
158 resolve_ip(PurpleDnsQueryData *query_data)
d2abba8c8e1f Don't fork a resolver process for IPs.
Aman Gupta <aman@tmm1.net>
parents: 27736
diff changeset
159 {
31973
15b977ffc25d dnsquery: Behold, automagic conversion of a string IP address into a sockaddr struct, IPv#-independent.
Paul Aurich <darkrain42@pidgin.im>
parents: 31738
diff changeset
160 #if defined(HAVE_GETADDRINFO) && defined(AI_NUMERICHOST)
15b977ffc25d dnsquery: Behold, automagic conversion of a string IP address into a sockaddr struct, IPv#-independent.
Paul Aurich <darkrain42@pidgin.im>
parents: 31738
diff changeset
161 struct addrinfo hints, *res;
15b977ffc25d dnsquery: Behold, automagic conversion of a string IP address into a sockaddr struct, IPv#-independent.
Paul Aurich <darkrain42@pidgin.im>
parents: 31738
diff changeset
162 char servname[20];
15b977ffc25d dnsquery: Behold, automagic conversion of a string IP address into a sockaddr struct, IPv#-independent.
Paul Aurich <darkrain42@pidgin.im>
parents: 31738
diff changeset
163
15b977ffc25d dnsquery: Behold, automagic conversion of a string IP address into a sockaddr struct, IPv#-independent.
Paul Aurich <darkrain42@pidgin.im>
parents: 31738
diff changeset
164 g_snprintf(servname, sizeof(servname), "%d", query_data->port);
15b977ffc25d dnsquery: Behold, automagic conversion of a string IP address into a sockaddr struct, IPv#-independent.
Paul Aurich <darkrain42@pidgin.im>
parents: 31738
diff changeset
165 memset(&hints, 0, sizeof(hints));
15b977ffc25d dnsquery: Behold, automagic conversion of a string IP address into a sockaddr struct, IPv#-independent.
Paul Aurich <darkrain42@pidgin.im>
parents: 31738
diff changeset
166 hints.ai_family = AF_UNSPEC;
15b977ffc25d dnsquery: Behold, automagic conversion of a string IP address into a sockaddr struct, IPv#-independent.
Paul Aurich <darkrain42@pidgin.im>
parents: 31738
diff changeset
167 hints.ai_flags |= AI_NUMERICHOST;
15b977ffc25d dnsquery: Behold, automagic conversion of a string IP address into a sockaddr struct, IPv#-independent.
Paul Aurich <darkrain42@pidgin.im>
parents: 31738
diff changeset
168
15b977ffc25d dnsquery: Behold, automagic conversion of a string IP address into a sockaddr struct, IPv#-independent.
Paul Aurich <darkrain42@pidgin.im>
parents: 31738
diff changeset
169 if (0 == getaddrinfo(query_data->hostname, servname, &hints, &res))
15b977ffc25d dnsquery: Behold, automagic conversion of a string IP address into a sockaddr struct, IPv#-independent.
Paul Aurich <darkrain42@pidgin.im>
parents: 31738
diff changeset
170 {
15b977ffc25d dnsquery: Behold, automagic conversion of a string IP address into a sockaddr struct, IPv#-independent.
Paul Aurich <darkrain42@pidgin.im>
parents: 31738
diff changeset
171 GSList *hosts = NULL;
15b977ffc25d dnsquery: Behold, automagic conversion of a string IP address into a sockaddr struct, IPv#-independent.
Paul Aurich <darkrain42@pidgin.im>
parents: 31738
diff changeset
172 hosts = g_slist_append(hosts, GINT_TO_POINTER(res->ai_addrlen));
40755
fb2056ce3c58 Implement mitigation for GHSL-2021-045
Gary Kramlich <grim@reaperworld.com>
parents: 36259
diff changeset
173 hosts = g_slist_append(hosts, g_memdup2(res->ai_addr, res->ai_addrlen));
31973
15b977ffc25d dnsquery: Behold, automagic conversion of a string IP address into a sockaddr struct, IPv#-independent.
Paul Aurich <darkrain42@pidgin.im>
parents: 31738
diff changeset
174 purple_dnsquery_resolved(query_data, hosts);
15b977ffc25d dnsquery: Behold, automagic conversion of a string IP address into a sockaddr struct, IPv#-independent.
Paul Aurich <darkrain42@pidgin.im>
parents: 31738
diff changeset
175
15b977ffc25d dnsquery: Behold, automagic conversion of a string IP address into a sockaddr struct, IPv#-independent.
Paul Aurich <darkrain42@pidgin.im>
parents: 31738
diff changeset
176 freeaddrinfo(res);
15b977ffc25d dnsquery: Behold, automagic conversion of a string IP address into a sockaddr struct, IPv#-independent.
Paul Aurich <darkrain42@pidgin.im>
parents: 31738
diff changeset
177 return TRUE;
15b977ffc25d dnsquery: Behold, automagic conversion of a string IP address into a sockaddr struct, IPv#-independent.
Paul Aurich <darkrain42@pidgin.im>
parents: 31738
diff changeset
178 }
15b977ffc25d dnsquery: Behold, automagic conversion of a string IP address into a sockaddr struct, IPv#-independent.
Paul Aurich <darkrain42@pidgin.im>
parents: 31738
diff changeset
179 #else /* defined(HAVE_GETADDRINFO) && defined(AI_NUMERICHOST) */
27737
d2abba8c8e1f Don't fork a resolver process for IPs.
Aman Gupta <aman@tmm1.net>
parents: 27736
diff changeset
180 struct sockaddr_in sin;
d2abba8c8e1f Don't fork a resolver process for IPs.
Aman Gupta <aman@tmm1.net>
parents: 27736
diff changeset
181 if (inet_aton(query_data->hostname, &sin.sin_addr))
d2abba8c8e1f Don't fork a resolver process for IPs.
Aman Gupta <aman@tmm1.net>
parents: 27736
diff changeset
182 {
d2abba8c8e1f Don't fork a resolver process for IPs.
Aman Gupta <aman@tmm1.net>
parents: 27736
diff changeset
183 /*
d2abba8c8e1f Don't fork a resolver process for IPs.
Aman Gupta <aman@tmm1.net>
parents: 27736
diff changeset
184 * The given "hostname" is actually an IP address, so we
d2abba8c8e1f Don't fork a resolver process for IPs.
Aman Gupta <aman@tmm1.net>
parents: 27736
diff changeset
185 * don't need to do anything.
d2abba8c8e1f Don't fork a resolver process for IPs.
Aman Gupta <aman@tmm1.net>
parents: 27736
diff changeset
186 */
d2abba8c8e1f Don't fork a resolver process for IPs.
Aman Gupta <aman@tmm1.net>
parents: 27736
diff changeset
187 GSList *hosts = NULL;
d2abba8c8e1f Don't fork a resolver process for IPs.
Aman Gupta <aman@tmm1.net>
parents: 27736
diff changeset
188 sin.sin_family = AF_INET;
d2abba8c8e1f Don't fork a resolver process for IPs.
Aman Gupta <aman@tmm1.net>
parents: 27736
diff changeset
189 sin.sin_port = htons(query_data->port);
d2abba8c8e1f Don't fork a resolver process for IPs.
Aman Gupta <aman@tmm1.net>
parents: 27736
diff changeset
190 hosts = g_slist_append(hosts, GINT_TO_POINTER(sizeof(sin)));
40755
fb2056ce3c58 Implement mitigation for GHSL-2021-045
Gary Kramlich <grim@reaperworld.com>
parents: 36259
diff changeset
191 hosts = g_slist_append(hosts, g_memdup2(&sin, sizeof(sin)));
27737
d2abba8c8e1f Don't fork a resolver process for IPs.
Aman Gupta <aman@tmm1.net>
parents: 27736
diff changeset
192 purple_dnsquery_resolved(query_data, hosts);
d2abba8c8e1f Don't fork a resolver process for IPs.
Aman Gupta <aman@tmm1.net>
parents: 27736
diff changeset
193
d2abba8c8e1f Don't fork a resolver process for IPs.
Aman Gupta <aman@tmm1.net>
parents: 27736
diff changeset
194 return TRUE;
d2abba8c8e1f Don't fork a resolver process for IPs.
Aman Gupta <aman@tmm1.net>
parents: 27736
diff changeset
195 }
31973
15b977ffc25d dnsquery: Behold, automagic conversion of a string IP address into a sockaddr struct, IPv#-independent.
Paul Aurich <darkrain42@pidgin.im>
parents: 31738
diff changeset
196 #endif
27737
d2abba8c8e1f Don't fork a resolver process for IPs.
Aman Gupta <aman@tmm1.net>
parents: 27736
diff changeset
197
d2abba8c8e1f Don't fork a resolver process for IPs.
Aman Gupta <aman@tmm1.net>
parents: 27736
diff changeset
198 return FALSE;
d2abba8c8e1f Don't fork a resolver process for IPs.
Aman Gupta <aman@tmm1.net>
parents: 27736
diff changeset
199 }
d2abba8c8e1f Don't fork a resolver process for IPs.
Aman Gupta <aman@tmm1.net>
parents: 27736
diff changeset
200
28784
0344b94dba21 dns: Avoid two warnings when building with --disable-idn.
Paul Aurich <darkrain42@pidgin.im>
parents: 28592
diff changeset
201 #ifdef USE_IDN
27898
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27738
diff changeset
202 static gboolean
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27738
diff changeset
203 dns_str_is_ascii(const char *name)
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27738
diff changeset
204 {
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27738
diff changeset
205 guchar *c;
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27738
diff changeset
206 for (c = (guchar *)name; c && *c; ++c) {
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27738
diff changeset
207 if (*c > 0x7f)
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27738
diff changeset
208 return FALSE;
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27738
diff changeset
209 }
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27738
diff changeset
210
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27738
diff changeset
211 return TRUE;
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27738
diff changeset
212 }
28784
0344b94dba21 dns: Avoid two warnings when building with --disable-idn.
Paul Aurich <darkrain42@pidgin.im>
parents: 28592
diff changeset
213 #endif
27898
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27738
diff changeset
214
23352
9714223ca7a7 A patch from Peter O'Gorman at The Written Word, Inc. to fix various
Peter O'Gorman <pogma@thewrittenword.com>
parents: 22622
diff changeset
215 #if defined(PURPLE_DNSQUERY_USE_FORK)
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
216
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
217 /*
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
218 * Unix!
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
219 */
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
220
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
221 /*
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
222 * Begin the DNS resolver child process functions.
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
223 */
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
224 #ifdef HAVE_SIGNAL_H
16701
0b41f23396cc Mark two functions as "noreturn"
Mark Doliner <markdoliner@pidgin.im>
parents: 15890
diff changeset
225 G_GNUC_NORETURN static void
22108
cb9819851163 Squash some compiler warnings, some from my -Wstrict-prototypes fixing.
Richard Laager <rlaager@pidgin.im>
parents: 22104
diff changeset
226 trap_gdb_bug(int sig)
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
227 {
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
228 const char *message =
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15775
diff changeset
229 "Purple's DNS child got a SIGTRAP signal.\n"
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15775
diff changeset
230 "This can be caused by trying to run purple inside gdb.\n"
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15775
diff changeset
231 "There is a known gdb bug which prevents this. Supposedly purple\n"
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
232 "should have detected you were using gdb and used an ugly hack,\n"
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
233 "check cope_with_gdb_brokenness() in dnsquery.c.\n\n"
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
234 "For more info about this bug, see http://sources.redhat.com/ml/gdb/2001-07/msg00349.html\n";
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
235 fputs("\n* * *\n",stderr);
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
236 fputs(message,stderr);
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
237 fputs("* * *\n\n",stderr);
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
238 execlp("xmessage","xmessage","-center", message, NULL);
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
239 _exit(1);
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
240 }
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
241 #endif
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
242
22234
4d54e1c5c696 More compiler warning fixes from o_sukhodolsky (with additions by me).
Mark Doliner <markdoliner@pidgin.im>
parents: 22108
diff changeset
243 static void
4d54e1c5c696 More compiler warning fixes from o_sukhodolsky (with additions by me).
Mark Doliner <markdoliner@pidgin.im>
parents: 22108
diff changeset
244 write_to_parent(int fd, const void *buf, size_t count)
4d54e1c5c696 More compiler warning fixes from o_sukhodolsky (with additions by me).
Mark Doliner <markdoliner@pidgin.im>
parents: 22108
diff changeset
245 {
4d54e1c5c696 More compiler warning fixes from o_sukhodolsky (with additions by me).
Mark Doliner <markdoliner@pidgin.im>
parents: 22108
diff changeset
246 ssize_t written;
4d54e1c5c696 More compiler warning fixes from o_sukhodolsky (with additions by me).
Mark Doliner <markdoliner@pidgin.im>
parents: 22108
diff changeset
247
4d54e1c5c696 More compiler warning fixes from o_sukhodolsky (with additions by me).
Mark Doliner <markdoliner@pidgin.im>
parents: 22108
diff changeset
248 written = write(fd, buf, count);
36256
a437550a9308 Remove -Wno-sign-compare and backport fixes from default.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 35999
diff changeset
249 if (written < 0 || (gsize)written != count) {
22234
4d54e1c5c696 More compiler warning fixes from o_sukhodolsky (with additions by me).
Mark Doliner <markdoliner@pidgin.im>
parents: 22108
diff changeset
250 if (written < 0)
4d54e1c5c696 More compiler warning fixes from o_sukhodolsky (with additions by me).
Mark Doliner <markdoliner@pidgin.im>
parents: 22108
diff changeset
251 fprintf(stderr, "dns[%d]: Error writing data to "
4d54e1c5c696 More compiler warning fixes from o_sukhodolsky (with additions by me).
Mark Doliner <markdoliner@pidgin.im>
parents: 22108
diff changeset
252 "parent: %s\n", getpid(), strerror(errno));
4d54e1c5c696 More compiler warning fixes from o_sukhodolsky (with additions by me).
Mark Doliner <markdoliner@pidgin.im>
parents: 22108
diff changeset
253 else
4d54e1c5c696 More compiler warning fixes from o_sukhodolsky (with additions by me).
Mark Doliner <markdoliner@pidgin.im>
parents: 22108
diff changeset
254 fprintf(stderr, "dns[%d]: Error: Tried to write %"
4d54e1c5c696 More compiler warning fixes from o_sukhodolsky (with additions by me).
Mark Doliner <markdoliner@pidgin.im>
parents: 22108
diff changeset
255 G_GSIZE_FORMAT " bytes to parent but instead "
4d54e1c5c696 More compiler warning fixes from o_sukhodolsky (with additions by me).
Mark Doliner <markdoliner@pidgin.im>
parents: 22108
diff changeset
256 "wrote %" G_GSIZE_FORMAT " bytes\n",
4d54e1c5c696 More compiler warning fixes from o_sukhodolsky (with additions by me).
Mark Doliner <markdoliner@pidgin.im>
parents: 22108
diff changeset
257 getpid(), count, written);
4d54e1c5c696 More compiler warning fixes from o_sukhodolsky (with additions by me).
Mark Doliner <markdoliner@pidgin.im>
parents: 22108
diff changeset
258 }
4d54e1c5c696 More compiler warning fixes from o_sukhodolsky (with additions by me).
Mark Doliner <markdoliner@pidgin.im>
parents: 22108
diff changeset
259 }
4d54e1c5c696 More compiler warning fixes from o_sukhodolsky (with additions by me).
Mark Doliner <markdoliner@pidgin.im>
parents: 22108
diff changeset
260
16701
0b41f23396cc Mark two functions as "noreturn"
Mark Doliner <markdoliner@pidgin.im>
parents: 15890
diff changeset
261 G_GNUC_NORETURN static void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15775
diff changeset
262 purple_dnsquery_resolver_run(int child_out, int child_in, gboolean show_debug)
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
263 {
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
264 dns_params_t dns_params;
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
265 const size_t zero = 0;
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
266 int rc;
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
267 #ifdef HAVE_GETADDRINFO
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
268 struct addrinfo hints, *res, *tmp;
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
269 char servname[20];
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
270 #else
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
271 struct sockaddr_in sin;
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
272 const size_t addrlen = sizeof(sin);
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
273 #endif
27898
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27738
diff changeset
274 char *hostname;
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
275
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
276 #ifdef HAVE_SIGNAL_H
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15775
diff changeset
277 purple_restore_default_signal_handlers();
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
278 signal(SIGTRAP, trap_gdb_bug);
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
279 #endif
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
280
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
281 /*
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
282 * We resolve 1 host name for each iteration of this
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
283 * while loop.
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
284 *
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
285 * The top half of this reads in the hostname and port
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
286 * number from the socket with our parent. The bottom
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
287 * half of this resolves the IP (blocking) and sends
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
288 * the result back to our parent, when finished.
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
289 */
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
290 while (1) {
24318
b2b1a42a7816 Revert my revision 3777b91f70ab86e67c1e039d08fb6d87e06f20d6, which
Mark Doliner <markdoliner@pidgin.im>
parents: 24287
diff changeset
291 fd_set fds;
b2b1a42a7816 Revert my revision 3777b91f70ab86e67c1e039d08fb6d87e06f20d6, which
Mark Doliner <markdoliner@pidgin.im>
parents: 24287
diff changeset
292 struct timeval tv = { .tv_sec = 20, .tv_usec = 0 };
b2b1a42a7816 Revert my revision 3777b91f70ab86e67c1e039d08fb6d87e06f20d6, which
Mark Doliner <markdoliner@pidgin.im>
parents: 24287
diff changeset
293 FD_ZERO(&fds);
b2b1a42a7816 Revert my revision 3777b91f70ab86e67c1e039d08fb6d87e06f20d6, which
Mark Doliner <markdoliner@pidgin.im>
parents: 24287
diff changeset
294 FD_SET(child_in, &fds);
b2b1a42a7816 Revert my revision 3777b91f70ab86e67c1e039d08fb6d87e06f20d6, which
Mark Doliner <markdoliner@pidgin.im>
parents: 24287
diff changeset
295 rc = select(child_in + 1, &fds, NULL, NULL, &tv);
b2b1a42a7816 Revert my revision 3777b91f70ab86e67c1e039d08fb6d87e06f20d6, which
Mark Doliner <markdoliner@pidgin.im>
parents: 24287
diff changeset
296 if (!rc) {
b2b1a42a7816 Revert my revision 3777b91f70ab86e67c1e039d08fb6d87e06f20d6, which
Mark Doliner <markdoliner@pidgin.im>
parents: 24287
diff changeset
297 if (show_debug)
b2b1a42a7816 Revert my revision 3777b91f70ab86e67c1e039d08fb6d87e06f20d6, which
Mark Doliner <markdoliner@pidgin.im>
parents: 24287
diff changeset
298 printf("dns[%d]: nobody needs me... =(\n", getpid());
b2b1a42a7816 Revert my revision 3777b91f70ab86e67c1e039d08fb6d87e06f20d6, which
Mark Doliner <markdoliner@pidgin.im>
parents: 24287
diff changeset
299 break;
b2b1a42a7816 Revert my revision 3777b91f70ab86e67c1e039d08fb6d87e06f20d6, which
Mark Doliner <markdoliner@pidgin.im>
parents: 24287
diff changeset
300 }
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
301 rc = read(child_in, &dns_params, sizeof(dns_params_t));
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
302 if (rc < 0) {
22234
4d54e1c5c696 More compiler warning fixes from o_sukhodolsky (with additions by me).
Mark Doliner <markdoliner@pidgin.im>
parents: 22108
diff changeset
303 fprintf(stderr, "dns[%d]: Error: Could not read dns_params: "
4d54e1c5c696 More compiler warning fixes from o_sukhodolsky (with additions by me).
Mark Doliner <markdoliner@pidgin.im>
parents: 22108
diff changeset
304 "%s\n", getpid(), strerror(errno));
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
305 break;
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
306 }
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
307 if (rc == 0) {
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
308 if (show_debug)
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
309 printf("dns[%d]: Oops, father has gone, wait for me, wait...!\n", getpid());
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
310 _exit(0);
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
311 }
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
312 if (dns_params.hostname[0] == '\0') {
22234
4d54e1c5c696 More compiler warning fixes from o_sukhodolsky (with additions by me).
Mark Doliner <markdoliner@pidgin.im>
parents: 22108
diff changeset
313 fprintf(stderr, "dns[%d]: Error: Parent requested resolution "
4d54e1c5c696 More compiler warning fixes from o_sukhodolsky (with additions by me).
Mark Doliner <markdoliner@pidgin.im>
parents: 22108
diff changeset
314 "of an empty hostname (port = %d)!!!\n", getpid(),
4d54e1c5c696 More compiler warning fixes from o_sukhodolsky (with additions by me).
Mark Doliner <markdoliner@pidgin.im>
parents: 22108
diff changeset
315 dns_params.port);
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
316 _exit(1);
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
317 }
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
318
27898
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27738
diff changeset
319 #ifdef USE_IDN
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27738
diff changeset
320 if (!dns_str_is_ascii(dns_params.hostname)) {
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27738
diff changeset
321 rc = purple_network_convert_idn_to_ascii(dns_params.hostname, &hostname);
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27738
diff changeset
322 if (rc != 0) {
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27738
diff changeset
323 write_to_parent(child_out, &rc, sizeof(rc));
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27738
diff changeset
324 if (show_debug)
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27738
diff changeset
325 fprintf(stderr, "dns[%d] Error: IDN conversion returned "
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27738
diff changeset
326 "%d\n", getpid(), rc);
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27738
diff changeset
327 dns_params.hostname[0] = '\0';
28785
5515669c2a62 dns: I don't think this worked correctly before.
Paul Aurich <darkrain42@pidgin.im>
parents: 28784
diff changeset
328 break;
27898
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27738
diff changeset
329 }
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27738
diff changeset
330 } else /* intentional to execute the g_strdup */
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27738
diff changeset
331 #endif
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27738
diff changeset
332 hostname = g_strdup(dns_params.hostname);
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27738
diff changeset
333
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
334 /* We have the hostname and port, now resolve the IP */
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
335
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
336 #ifdef HAVE_GETADDRINFO
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
337 g_snprintf(servname, sizeof(servname), "%d", dns_params.port);
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
338 memset(&hints, 0, sizeof(hints));
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
339
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
340 /* This is only used to convert a service
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
341 * name to a port number. As we know we are
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
342 * passing a number already, we know this
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
343 * value will not be really used by the C
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
344 * library.
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
345 */
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
346 hints.ai_socktype = SOCK_STREAM;
27147
7f09d9398273 Don't do IPv6 AAAA lookups if there is no IPv6 address configured on
Mark Doliner <markdoliner@pidgin.im>
parents: 27116
diff changeset
347 #ifdef AI_ADDRCONFIG
7f09d9398273 Don't do IPv6 AAAA lookups if there is no IPv6 address configured on
Mark Doliner <markdoliner@pidgin.im>
parents: 27116
diff changeset
348 hints.ai_flags |= AI_ADDRCONFIG;
7f09d9398273 Don't do IPv6 AAAA lookups if there is no IPv6 address configured on
Mark Doliner <markdoliner@pidgin.im>
parents: 27116
diff changeset
349 #endif /* AI_ADDRCONFIG */
27898
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27738
diff changeset
350 rc = getaddrinfo(hostname, servname, &hints, &res);
22234
4d54e1c5c696 More compiler warning fixes from o_sukhodolsky (with additions by me).
Mark Doliner <markdoliner@pidgin.im>
parents: 22108
diff changeset
351 write_to_parent(child_out, &rc, sizeof(rc));
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
352 if (rc != 0) {
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
353 if (show_debug)
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
354 printf("dns[%d] Error: getaddrinfo returned %d\n",
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
355 getpid(), rc);
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
356 dns_params.hostname[0] = '\0';
28591
f943daaf368e Minor leak fixes. Probably not too important since they're in DNS resolver
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 28585
diff changeset
357 g_free(hostname);
f943daaf368e Minor leak fixes. Probably not too important since they're in DNS resolver
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 28585
diff changeset
358 hostname = NULL;
28785
5515669c2a62 dns: I don't think this worked correctly before.
Paul Aurich <darkrain42@pidgin.im>
parents: 28784
diff changeset
359 break;
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
360 }
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
361 tmp = res;
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
362 while (res) {
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
363 size_t ai_addrlen = res->ai_addrlen;
22234
4d54e1c5c696 More compiler warning fixes from o_sukhodolsky (with additions by me).
Mark Doliner <markdoliner@pidgin.im>
parents: 22108
diff changeset
364 write_to_parent(child_out, &ai_addrlen, sizeof(ai_addrlen));
4d54e1c5c696 More compiler warning fixes from o_sukhodolsky (with additions by me).
Mark Doliner <markdoliner@pidgin.im>
parents: 22108
diff changeset
365 write_to_parent(child_out, res->ai_addr, res->ai_addrlen);
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
366 res = res->ai_next;
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
367 }
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
368 freeaddrinfo(tmp);
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
369 #else
31674
e381758618dd Further consolidation of dnsquery code.
Daniel Atallah <datallah@pidgin.im>
parents: 31673
diff changeset
370 struct hostent *hp;
e381758618dd Further consolidation of dnsquery code.
Daniel Atallah <datallah@pidgin.im>
parents: 31673
diff changeset
371 if (!(hp = gethostbyname(hostname))) {
e381758618dd Further consolidation of dnsquery code.
Daniel Atallah <datallah@pidgin.im>
parents: 31673
diff changeset
372 write_to_parent(child_out, &h_errno, sizeof(int));
e381758618dd Further consolidation of dnsquery code.
Daniel Atallah <datallah@pidgin.im>
parents: 31673
diff changeset
373 close(child_out);
e381758618dd Further consolidation of dnsquery code.
Daniel Atallah <datallah@pidgin.im>
parents: 31673
diff changeset
374 if (show_debug)
e381758618dd Further consolidation of dnsquery code.
Daniel Atallah <datallah@pidgin.im>
parents: 31673
diff changeset
375 printf("DNS Error: %d\n", h_errno);
e381758618dd Further consolidation of dnsquery code.
Daniel Atallah <datallah@pidgin.im>
parents: 31673
diff changeset
376 _exit(0);
e381758618dd Further consolidation of dnsquery code.
Daniel Atallah <datallah@pidgin.im>
parents: 31673
diff changeset
377 }
e381758618dd Further consolidation of dnsquery code.
Daniel Atallah <datallah@pidgin.im>
parents: 31673
diff changeset
378 memset(&sin, 0, sizeof(struct sockaddr_in));
e381758618dd Further consolidation of dnsquery code.
Daniel Atallah <datallah@pidgin.im>
parents: 31673
diff changeset
379 memcpy(&sin.sin_addr.s_addr, hp->h_addr, hp->h_length);
e381758618dd Further consolidation of dnsquery code.
Daniel Atallah <datallah@pidgin.im>
parents: 31673
diff changeset
380 sin.sin_family = hp->h_addrtype;
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
381
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
382 sin.sin_port = htons(dns_params.port);
25360
4315bf325ab4 Ludovico Cavedon noticed that on 64-bit platforms, when HAVE_GETADDRINFO isn't
Daniel Atallah <datallah@pidgin.im>
parents: 24701
diff changeset
383 rc = 0;
4315bf325ab4 Ludovico Cavedon noticed that on 64-bit platforms, when HAVE_GETADDRINFO isn't
Daniel Atallah <datallah@pidgin.im>
parents: 24701
diff changeset
384 write_to_parent(child_out, &rc, sizeof(rc));
22234
4d54e1c5c696 More compiler warning fixes from o_sukhodolsky (with additions by me).
Mark Doliner <markdoliner@pidgin.im>
parents: 22108
diff changeset
385 write_to_parent(child_out, &addrlen, sizeof(addrlen));
4d54e1c5c696 More compiler warning fixes from o_sukhodolsky (with additions by me).
Mark Doliner <markdoliner@pidgin.im>
parents: 22108
diff changeset
386 write_to_parent(child_out, &sin, addrlen);
25360
4315bf325ab4 Ludovico Cavedon noticed that on 64-bit platforms, when HAVE_GETADDRINFO isn't
Daniel Atallah <datallah@pidgin.im>
parents: 24701
diff changeset
387 #endif
22234
4d54e1c5c696 More compiler warning fixes from o_sukhodolsky (with additions by me).
Mark Doliner <markdoliner@pidgin.im>
parents: 22108
diff changeset
388 write_to_parent(child_out, &zero, sizeof(zero));
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
389 dns_params.hostname[0] = '\0';
27898
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27738
diff changeset
390
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27738
diff changeset
391 g_free(hostname);
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27738
diff changeset
392 hostname = NULL;
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
393 }
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
394
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
395 close(child_out);
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
396 close(child_in);
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
397
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
398 _exit(0);
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
399 }
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
400 /*
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
401 * End the DNS resolver child process functions.
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
402 */
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
403
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
404 /*
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
405 * Begin the functions for dealing with the DNS child processes.
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
406 */
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
407 static void
22104
56970903b8e9 Probe for -Wstrict-prototypes to get some more warnings. I then cleaned up
Richard Laager <rlaager@pidgin.im>
parents: 21977
diff changeset
408 cope_with_gdb_brokenness(void)
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
409 {
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
410 #ifdef __linux__
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
411 static gboolean already_done = FALSE;
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
412 char s[256], e[512];
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
413 int n;
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
414 pid_t ppid;
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
415
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
416 if(already_done)
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
417 return;
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
418 already_done = TRUE;
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
419 ppid = getppid();
27116
19dff7b3ed0f A patch from Scott Wolchok to replace snprintf() with g_snprintf() and
Richard Laager <rlaager@pidgin.im>
parents: 25360
diff changeset
420 g_snprintf(s, sizeof(s), "/proc/%d/exe", ppid);
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
421 n = readlink(s, e, sizeof(e));
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
422 if(n < 0)
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
423 return;
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
424
36259
2c1483188cf5 Fix a couple more signed/unsigned warnings.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 36256
diff changeset
425 e[MIN((gsize)n,sizeof(e)-1)] = '\0';
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
426
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
427 if(strstr(e,"gdb")) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15775
diff changeset
428 purple_debug_info("dns",
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
429 "Debugger detected, performing useless query...\n");
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
430 gethostbyname("x.x.x.x.x");
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
431 }
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
432 #endif
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
433 }
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
434
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
435 static void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15775
diff changeset
436 purple_dnsquery_resolver_destroy(PurpleDnsQueryResolverProcess *resolver)
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
437 {
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
438 g_return_if_fail(resolver != NULL);
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
439
24701
777f269be1b0 Fix a crash Jacky Lam noted on devel@pidgin.im:
Richard Laager <rlaager@pidgin.im>
parents: 24390
diff changeset
440 /* Keep this before the kill() call below. */
777f269be1b0 Fix a crash Jacky Lam noted on devel@pidgin.im:
Richard Laager <rlaager@pidgin.im>
parents: 24390
diff changeset
441 if (resolver->inpa != 0) {
777f269be1b0 Fix a crash Jacky Lam noted on devel@pidgin.im:
Richard Laager <rlaager@pidgin.im>
parents: 24390
diff changeset
442 purple_input_remove(resolver->inpa);
777f269be1b0 Fix a crash Jacky Lam noted on devel@pidgin.im:
Richard Laager <rlaager@pidgin.im>
parents: 24390
diff changeset
443 resolver->inpa = 0;
777f269be1b0 Fix a crash Jacky Lam noted on devel@pidgin.im:
Richard Laager <rlaager@pidgin.im>
parents: 24390
diff changeset
444 }
777f269be1b0 Fix a crash Jacky Lam noted on devel@pidgin.im:
Richard Laager <rlaager@pidgin.im>
parents: 24390
diff changeset
445
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
446 /*
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
447 * We might as well attempt to kill our child process. It really
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
448 * doesn't matter if this fails, because children will expire on
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
449 * their own after a few seconds.
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
450 */
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
451 if (resolver->dns_pid > 0)
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
452 kill(resolver->dns_pid, SIGKILL);
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
453
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
454 close(resolver->fd_in);
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
455 close(resolver->fd_out);
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
456
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
457 g_free(resolver);
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
458
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
459 number_of_dns_children--;
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
460 }
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
461
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15775
diff changeset
462 static PurpleDnsQueryResolverProcess *
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15775
diff changeset
463 purple_dnsquery_resolver_new(gboolean show_debug)
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
464 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15775
diff changeset
465 PurpleDnsQueryResolverProcess *resolver;
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
466 int child_out[2], child_in[2];
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
467
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
468 /* Create pipes for communicating with the child process */
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
469 if (pipe(child_out) || pipe(child_in)) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15775
diff changeset
470 purple_debug_error("dns",
21389
e1dd8142bb87 replace most calls to strerror with calls to g_strerror. strerror will return
Nathan Walp <nwalp@pidgin.im>
parents: 20212
diff changeset
471 "Could not create pipes: %s\n", g_strerror(errno));
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
472 return NULL;
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
473 }
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
474
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15775
diff changeset
475 resolver = g_new(PurpleDnsQueryResolverProcess, 1);
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
476 resolver->inpa = 0;
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
477
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
478 cope_with_gdb_brokenness();
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
479
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
480 /* "Go fork and multiply." --Tommy Caldwell (Emily's dad, not the climber) */
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
481 resolver->dns_pid = fork();
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
482
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
483 /* If we are the child process... */
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
484 if (resolver->dns_pid == 0) {
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
485 /* We should not access the parent's side of the pipes, so close them */
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
486 close(child_out[0]);
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
487 close(child_in[1]);
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
488
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15775
diff changeset
489 purple_dnsquery_resolver_run(child_out[1], child_in[0], show_debug);
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
490 /* The thread calls _exit() rather than returning, so we never get here */
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
491 }
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
492
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
493 /* We should not access the child's side of the pipes, so close them */
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
494 close(child_out[1]);
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
495 close(child_in[0]);
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
496 if (resolver->dns_pid == -1) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15775
diff changeset
497 purple_debug_error("dns",
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
498 "Could not create child process for DNS: %s\n",
21389
e1dd8142bb87 replace most calls to strerror with calls to g_strerror. strerror will return
Nathan Walp <nwalp@pidgin.im>
parents: 20212
diff changeset
499 g_strerror(errno));
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15775
diff changeset
500 purple_dnsquery_resolver_destroy(resolver);
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
501 return NULL;
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
502 }
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
503
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
504 resolver->fd_out = child_out[0];
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
505 resolver->fd_in = child_in[1];
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
506 number_of_dns_children++;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15775
diff changeset
507 purple_debug_info("dns",
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
508 "Created new DNS child %d, there are now %d children.\n",
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
509 resolver->dns_pid, number_of_dns_children);
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
510
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
511 return resolver;
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
512 }
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
513
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
514 /**
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
515 * @return TRUE if the request was sent succesfully. FALSE
24321
0d6d024049eb Improve a few comments
Mark Doliner <markdoliner@pidgin.im>
parents: 24318
diff changeset
516 * if the request could not be sent. This isn't
0d6d024049eb Improve a few comments
Mark Doliner <markdoliner@pidgin.im>
parents: 24318
diff changeset
517 * necessarily an error. If the child has expired,
0d6d024049eb Improve a few comments
Mark Doliner <markdoliner@pidgin.im>
parents: 24318
diff changeset
518 * for example, we won't be able to send the message.
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
519 */
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
520 static gboolean
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15775
diff changeset
521 send_dns_request_to_child(PurpleDnsQueryData *query_data,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15775
diff changeset
522 PurpleDnsQueryResolverProcess *resolver)
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
523 {
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
524 pid_t pid;
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
525 dns_params_t dns_params;
24287
a2e8d72efd34 Fix this g_return_val_if_fail. It should have been returning TRUE or
Mark Doliner <markdoliner@pidgin.im>
parents: 24286
diff changeset
526 ssize_t rc;
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
527
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
528 /* This waitpid might return the child's PID if it has recently
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
529 * exited, or it might return an error if it exited "long
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
530 * enough" ago that it has already been reaped; in either
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
531 * instance, we can't use it. */
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
532 pid = waitpid(resolver->dns_pid, NULL, WNOHANG);
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
533 if (pid > 0) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15775
diff changeset
534 purple_debug_warning("dns", "DNS child %d no longer exists\n",
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
535 resolver->dns_pid);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15775
diff changeset
536 purple_dnsquery_resolver_destroy(resolver);
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
537 return FALSE;
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
538 } else if (pid < 0) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15775
diff changeset
539 purple_debug_warning("dns", "Wait for DNS child %d failed: %s\n",
21389
e1dd8142bb87 replace most calls to strerror with calls to g_strerror. strerror will return
Nathan Walp <nwalp@pidgin.im>
parents: 20212
diff changeset
540 resolver->dns_pid, g_strerror(errno));
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15775
diff changeset
541 purple_dnsquery_resolver_destroy(resolver);
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
542 return FALSE;
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
543 }
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
544
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
545 /* Copy the hostname and port into a single data structure */
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
546 strncpy(dns_params.hostname, query_data->hostname, sizeof(dns_params.hostname) - 1);
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
547 dns_params.hostname[sizeof(dns_params.hostname) - 1] = '\0';
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
548 dns_params.port = query_data->port;
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
549
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
550 /* Send the data structure to the child */
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
551 rc = write(resolver->fd_in, &dns_params, sizeof(dns_params));
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
552 if (rc < 0) {
22622
1ecb840b5101 Fix a bunch of compiler warnings caused by my addition of G_GNUC_PRINTF()
Mark Doliner <markdoliner@pidgin.im>
parents: 22234
diff changeset
553 purple_debug_error("dns", "Unable to write to DNS child %d: %s\n",
21389
e1dd8142bb87 replace most calls to strerror with calls to g_strerror. strerror will return
Nathan Walp <nwalp@pidgin.im>
parents: 20212
diff changeset
554 resolver->dns_pid, g_strerror(errno));
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15775
diff changeset
555 purple_dnsquery_resolver_destroy(resolver);
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
556 return FALSE;
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
557 }
36256
a437550a9308 Remove -Wno-sign-compare and backport fixes from default.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 35999
diff changeset
558 if ((gsize)rc < sizeof(dns_params)) {
24390
24755e1e9f11 Fix this debug message. Thanks to fledermaus who pointed it out.
Mark Doliner <markdoliner@pidgin.im>
parents: 24325
diff changeset
559 purple_debug_error("dns", "Tried to write %" G_GSSIZE_FORMAT
24755e1e9f11 Fix this debug message. Thanks to fledermaus who pointed it out.
Mark Doliner <markdoliner@pidgin.im>
parents: 24325
diff changeset
560 " bytes to child but only wrote %" G_GSSIZE_FORMAT "\n",
24287
a2e8d72efd34 Fix this g_return_val_if_fail. It should have been returning TRUE or
Mark Doliner <markdoliner@pidgin.im>
parents: 24286
diff changeset
561 sizeof(dns_params), rc);
a2e8d72efd34 Fix this g_return_val_if_fail. It should have been returning TRUE or
Mark Doliner <markdoliner@pidgin.im>
parents: 24286
diff changeset
562 purple_dnsquery_resolver_destroy(resolver);
a2e8d72efd34 Fix this g_return_val_if_fail. It should have been returning TRUE or
Mark Doliner <markdoliner@pidgin.im>
parents: 24286
diff changeset
563 return FALSE;
a2e8d72efd34 Fix this g_return_val_if_fail. It should have been returning TRUE or
Mark Doliner <markdoliner@pidgin.im>
parents: 24286
diff changeset
564 }
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
565
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15775
diff changeset
566 purple_debug_info("dns",
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
567 "Successfully sent DNS request to child %d\n",
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
568 resolver->dns_pid);
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
569
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
570 query_data->resolver = resolver;
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
571
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
572 return TRUE;
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
573 }
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
574
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15775
diff changeset
575 static void host_resolved(gpointer data, gint source, PurpleInputCondition cond);
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
576
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
577 static void
22104
56970903b8e9 Probe for -Wstrict-prototypes to get some more warnings. I then cleaned up
Richard Laager <rlaager@pidgin.im>
parents: 21977
diff changeset
578 handle_next_queued_request(void)
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
579 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15775
diff changeset
580 PurpleDnsQueryData *query_data;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15775
diff changeset
581 PurpleDnsQueryResolverProcess *resolver;
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
582
14711
404c5a931bb2 [gaim-migrate @ 17395]
Mark Doliner <markdoliner@pidgin.im>
parents: 14572
diff changeset
583 if (queued_requests == NULL)
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
584 /* No more DNS queries, yay! */
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
585 return;
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
586
14711
404c5a931bb2 [gaim-migrate @ 17395]
Mark Doliner <markdoliner@pidgin.im>
parents: 14572
diff changeset
587 query_data = queued_requests->data;
404c5a931bb2 [gaim-migrate @ 17395]
Mark Doliner <markdoliner@pidgin.im>
parents: 14572
diff changeset
588 queued_requests = g_slist_delete_link(queued_requests, queued_requests);
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
589
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
590 /*
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
591 * If we have any children, attempt to have them perform the DNS
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
592 * query. If we're able to send the query then resolver will be
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15775
diff changeset
593 * set to the PurpleDnsQueryResolverProcess. Otherwise, resolver
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
594 * will be NULL and we'll need to create a new DNS request child.
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
595 */
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
596 while (free_dns_children != NULL)
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
597 {
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
598 resolver = free_dns_children->data;
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
599 free_dns_children = g_slist_remove(free_dns_children, resolver);
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
600
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
601 if (send_dns_request_to_child(query_data, resolver))
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
602 /* We found an acceptable child, yay */
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
603 break;
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
604 }
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
605
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
606 /* We need to create a new DNS request child */
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
607 if (query_data->resolver == NULL)
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
608 {
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
609 if (number_of_dns_children >= MAX_DNS_CHILDREN)
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
610 {
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
611 /* Apparently all our children are busy */
14711
404c5a931bb2 [gaim-migrate @ 17395]
Mark Doliner <markdoliner@pidgin.im>
parents: 14572
diff changeset
612 queued_requests = g_slist_prepend(queued_requests, query_data);
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
613 return;
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
614 }
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
615
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15775
diff changeset
616 resolver = purple_dnsquery_resolver_new(purple_debug_is_enabled());
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
617 if (resolver == NULL)
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
618 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15775
diff changeset
619 purple_dnsquery_failed(query_data, _("Unable to create new resolver process\n"));
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
620 return;
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
621 }
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
622 if (!send_dns_request_to_child(query_data, resolver))
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
623 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15775
diff changeset
624 purple_dnsquery_failed(query_data, _("Unable to send request to resolver process\n"));
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
625 return;
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
626 }
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
627 }
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
628
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15775
diff changeset
629 query_data->resolver->inpa = purple_input_add(query_data->resolver->fd_out,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15775
diff changeset
630 PURPLE_INPUT_READ, host_resolved, query_data);
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
631 }
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
632
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
633 /*
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
634 * End the functions for dealing with the DNS child processes.
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
635 */
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
636
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
637 static void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15775
diff changeset
638 host_resolved(gpointer data, gint source, PurpleInputCondition cond)
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
639 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15775
diff changeset
640 PurpleDnsQueryData *query_data;
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
641 int rc, err;
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
642 GSList *hosts = NULL;
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
643 struct sockaddr *addr = NULL;
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
644 size_t addrlen;
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
645 char message[1024];
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
646
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
647 query_data = data;
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
648
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15775
diff changeset
649 purple_debug_info("dns", "Got response for '%s'\n", query_data->hostname);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15775
diff changeset
650 purple_input_remove(query_data->resolver->inpa);
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
651 query_data->resolver->inpa = 0;
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
652
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
653 rc = read(query_data->resolver->fd_out, &err, sizeof(err));
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
654 if ((rc == 4) && (err != 0))
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
655 {
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
656 #ifdef HAVE_GETADDRINFO
14454
df290cda81a3 [gaim-migrate @ 17099]
Mark Doliner <markdoliner@pidgin.im>
parents: 14420
diff changeset
657 g_snprintf(message, sizeof(message), _("Error resolving %s:\n%s"),
21977
c87889698afb Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <markdoliner@pidgin.im>
parents: 21389
diff changeset
658 query_data->hostname, purple_gai_strerror(err));
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
659 #else
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
660 g_snprintf(message, sizeof(message), _("Error resolving %s: %d"),
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
661 query_data->hostname, err);
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
662 #endif
27157
609f187d0ac7 Call res_init() when DNS queries fail in case the failure indicates a timeout
Paul Aurich <darkrain42@pidgin.im>
parents: 27147
diff changeset
663 /* Re-read resolv.conf and friends in case DNS servers have changed */
609f187d0ac7 Call res_init() when DNS queries fail in case the failure indicates a timeout
Paul Aurich <darkrain42@pidgin.im>
parents: 27147
diff changeset
664 res_init();
609f187d0ac7 Call res_init() when DNS queries fail in case the failure indicates a timeout
Paul Aurich <darkrain42@pidgin.im>
parents: 27147
diff changeset
665
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15775
diff changeset
666 purple_dnsquery_failed(query_data, message);
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
667 } else if (rc > 0) {
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
668 /* Success! */
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
669 while (rc > 0) {
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
670 rc = read(query_data->resolver->fd_out, &addrlen, sizeof(addrlen));
35999
5841bd4da162 Fix even more coverity warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 31973
diff changeset
671 if (rc > 0 && addrlen > 0 && addrlen < MAX_ADDR_RESPONSE_LEN) {
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
672 addr = g_malloc(addrlen);
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
673 rc = read(query_data->resolver->fd_out, addr, addrlen);
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
674 hosts = g_slist_append(hosts, GINT_TO_POINTER(addrlen));
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
675 hosts = g_slist_append(hosts, addr);
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
676 } else {
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
677 break;
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
678 }
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
679 }
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
680 /* wait4(resolver->dns_pid, NULL, WNOHANG, NULL); */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15775
diff changeset
681 purple_dnsquery_resolved(query_data, hosts);
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
682
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
683 } else if (rc == -1) {
21389
e1dd8142bb87 replace most calls to strerror with calls to g_strerror. strerror will return
Nathan Walp <nwalp@pidgin.im>
parents: 20212
diff changeset
684 g_snprintf(message, sizeof(message), _("Error reading from resolver process:\n%s"), g_strerror(errno));
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15775
diff changeset
685 purple_dnsquery_failed(query_data, message);
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
686
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
687 } else if (rc == 0) {
24322
05dd0a880a44 Change a string to be more user friendly (people shouldn't have any idea
Mark Doliner <markdoliner@pidgin.im>
parents: 24321
diff changeset
688 g_snprintf(message, sizeof(message), _("Resolver process exited without answering our request"));
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15775
diff changeset
689 purple_dnsquery_failed(query_data, message);
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
690 }
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
691
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
692 handle_next_queued_request();
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
693 }
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
694
31674
e381758618dd Further consolidation of dnsquery code.
Daniel Atallah <datallah@pidgin.im>
parents: 31673
diff changeset
695 static void
e381758618dd Further consolidation of dnsquery code.
Daniel Atallah <datallah@pidgin.im>
parents: 31673
diff changeset
696 resolve_host(PurpleDnsQueryData *query_data)
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
697 {
27736
37496418416a Fix a leak of the queued_requests from purple_dnsquery_a.
Aman Gupta <aman@tmm1.net>
parents: 27497
diff changeset
698 queued_requests = g_slist_append(queued_requests, query_data);
37496418416a Fix a leak of the queued_requests from purple_dnsquery_a.
Aman Gupta <aman@tmm1.net>
parents: 27497
diff changeset
699
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
700 handle_next_queued_request();
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
701 }
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
702
23352
9714223ca7a7 A patch from Peter O'Gorman at The Written Word, Inc. to fix various
Peter O'Gorman <pogma@thewrittenword.com>
parents: 22622
diff changeset
703 #elif defined _WIN32 /* end PURPLE_DNSQUERY_USE_FORK */
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
704
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
705 /*
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
706 * Windows!
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
707 */
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
708
14300
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
709 static gboolean
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
710 dns_main_thread_cb(gpointer data)
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
711 {
20212
9bf576eeaac0 applied changes from 77376fe079e753b612b3b8c901060e689f3dee11
Luke Schierer <lschiere@pidgin.im>
parents: 20147
diff changeset
712 PurpleDnsQueryData *query_data = data;
14300
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
713
20212
9bf576eeaac0 applied changes from 77376fe079e753b612b3b8c901060e689f3dee11
Luke Schierer <lschiere@pidgin.im>
parents: 20147
diff changeset
714 /* We're done, so purple_dnsquery_destroy() shouldn't think it is canceling an in-progress lookup */
9bf576eeaac0 applied changes from 77376fe079e753b612b3b8c901060e689f3dee11
Luke Schierer <lschiere@pidgin.im>
parents: 20147
diff changeset
715 query_data->resolver = NULL;
14243
0bda01972ff2 [gaim-migrate @ 16833]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
716
14300
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
717 if (query_data->error_message != NULL)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15775
diff changeset
718 purple_dnsquery_failed(query_data, query_data->error_message);
14300
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
719 else
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
720 {
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
721 GSList *hosts;
14306
7c3f2162a897 [gaim-migrate @ 16926]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
722
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15775
diff changeset
723 /* We don't want purple_dns_query_resolved() to free(hosts) */
14300
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
724 hosts = query_data->hosts;
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
725 query_data->hosts = NULL;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15775
diff changeset
726 purple_dnsquery_resolved(query_data, hosts);
14243
0bda01972ff2 [gaim-migrate @ 16833]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
727 }
14300
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
728
14243
0bda01972ff2 [gaim-migrate @ 16833]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
729 return FALSE;
0bda01972ff2 [gaim-migrate @ 16833]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
730 }
0bda01972ff2 [gaim-migrate @ 16833]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
731
14300
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
732 static gpointer
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
733 dns_thread(gpointer data)
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
734 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15775
diff changeset
735 PurpleDnsQueryData *query_data;
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
736 #ifdef HAVE_GETADDRINFO
14243
0bda01972ff2 [gaim-migrate @ 16833]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
737 int rc;
0bda01972ff2 [gaim-migrate @ 16833]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
738 struct addrinfo hints, *res, *tmp;
0bda01972ff2 [gaim-migrate @ 16833]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
739 char servname[20];
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
740 #else
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
741 struct sockaddr_in sin;
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
742 struct hostent *hp;
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
743 #endif
27898
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27738
diff changeset
744 char *hostname;
14300
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
745
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
746 query_data = data;
14243
0bda01972ff2 [gaim-migrate @ 16833]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
747
27898
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27738
diff changeset
748 #ifdef USE_IDN
27901
940e5967eabd Build fix on Windows. Thanks to SuperMMX.
Paul Aurich <darkrain42@pidgin.im>
parents: 27898
diff changeset
749 if (!dns_str_is_ascii(query_data->hostname)) {
940e5967eabd Build fix on Windows. Thanks to SuperMMX.
Paul Aurich <darkrain42@pidgin.im>
parents: 27898
diff changeset
750 rc = purple_network_convert_idn_to_ascii(query_data->hostname, &hostname);
27898
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27738
diff changeset
751 if (rc != 0) {
28590
b0bc7df691c5 Fix a string now that we're not in string freeze. Thanks, QuLogic!
Paul Aurich <darkrain42@pidgin.im>
parents: 28585
diff changeset
752 query_data->error_message = g_strdup_printf(_("Error converting %s "
b0bc7df691c5 Fix a string now that we're not in string freeze. Thanks, QuLogic!
Paul Aurich <darkrain42@pidgin.im>
parents: 28585
diff changeset
753 "to punycode: %d"), query_data->hostname, rc);
27898
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27738
diff changeset
754 /* back to main thread */
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27738
diff changeset
755 purple_timeout_add(0, dns_main_thread_cb, query_data);
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27738
diff changeset
756 return 0;
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27738
diff changeset
757 }
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27738
diff changeset
758 } else /* intentional fallthru */
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27738
diff changeset
759 #endif
27901
940e5967eabd Build fix on Windows. Thanks to SuperMMX.
Paul Aurich <darkrain42@pidgin.im>
parents: 27898
diff changeset
760 hostname = g_strdup(query_data->hostname);
27898
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27738
diff changeset
761
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
762 #ifdef HAVE_GETADDRINFO
14300
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
763 g_snprintf(servname, sizeof(servname), "%d", query_data->port);
14243
0bda01972ff2 [gaim-migrate @ 16833]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
764 memset(&hints,0,sizeof(hints));
0bda01972ff2 [gaim-migrate @ 16833]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
765
14300
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
766 /*
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
767 * This is only used to convert a service
14243
0bda01972ff2 [gaim-migrate @ 16833]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
768 * name to a port number. As we know we are
0bda01972ff2 [gaim-migrate @ 16833]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
769 * passing a number already, we know this
0bda01972ff2 [gaim-migrate @ 16833]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
770 * value will not be really used by the C
0bda01972ff2 [gaim-migrate @ 16833]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
771 * library.
0bda01972ff2 [gaim-migrate @ 16833]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
772 */
0bda01972ff2 [gaim-migrate @ 16833]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
773 hints.ai_socktype = SOCK_STREAM;
27147
7f09d9398273 Don't do IPv6 AAAA lookups if there is no IPv6 address configured on
Mark Doliner <markdoliner@pidgin.im>
parents: 27116
diff changeset
774 #ifdef AI_ADDRCONFIG
7f09d9398273 Don't do IPv6 AAAA lookups if there is no IPv6 address configured on
Mark Doliner <markdoliner@pidgin.im>
parents: 27116
diff changeset
775 hints.ai_flags |= AI_ADDRCONFIG;
7f09d9398273 Don't do IPv6 AAAA lookups if there is no IPv6 address configured on
Mark Doliner <markdoliner@pidgin.im>
parents: 27116
diff changeset
776 #endif /* AI_ADDRCONFIG */
27898
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27738
diff changeset
777 if ((rc = getaddrinfo(hostname, servname, &hints, &res)) == 0) {
14243
0bda01972ff2 [gaim-migrate @ 16833]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
778 tmp = res;
0bda01972ff2 [gaim-migrate @ 16833]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
779 while(res) {
14300
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
780 query_data->hosts = g_slist_append(query_data->hosts,
14243
0bda01972ff2 [gaim-migrate @ 16833]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
781 GSIZE_TO_POINTER(res->ai_addrlen));
14300
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
782 query_data->hosts = g_slist_append(query_data->hosts,
40755
fb2056ce3c58 Implement mitigation for GHSL-2021-045
Gary Kramlich <grim@reaperworld.com>
parents: 36259
diff changeset
783 g_memdup2(res->ai_addr, res->ai_addrlen));
14243
0bda01972ff2 [gaim-migrate @ 16833]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
784 res = res->ai_next;
0bda01972ff2 [gaim-migrate @ 16833]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
785 }
0bda01972ff2 [gaim-migrate @ 16833]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
786 freeaddrinfo(tmp);
0bda01972ff2 [gaim-migrate @ 16833]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
787 } else {
21977
c87889698afb Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <markdoliner@pidgin.im>
parents: 21389
diff changeset
788 query_data->error_message = g_strdup_printf(_("Error resolving %s:\n%s"), query_data->hostname, purple_gai_strerror(rc));
14243
0bda01972ff2 [gaim-migrate @ 16833]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
789 }
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
790 #else
27898
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27738
diff changeset
791 if ((hp = gethostbyname(hostname))) {
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
792 memset(&sin, 0, sizeof(struct sockaddr_in));
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
793 memcpy(&sin.sin_addr.s_addr, hp->h_addr, hp->h_length);
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
794 sin.sin_family = hp->h_addrtype;
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
795 sin.sin_port = htons(query_data->port);
14243
0bda01972ff2 [gaim-migrate @ 16833]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
796
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
797 query_data->hosts = g_slist_append(query_data->hosts,
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
798 GSIZE_TO_POINTER(sizeof(sin)));
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
799 query_data->hosts = g_slist_append(query_data->hosts,
40755
fb2056ce3c58 Implement mitigation for GHSL-2021-045
Gary Kramlich <grim@reaperworld.com>
parents: 36259
diff changeset
800 g_memdup2(&sin, sizeof(sin)));
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
801 } else {
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
802 query_data->error_message = g_strdup_printf(_("Error resolving %s: %d"), query_data->hostname, h_errno);
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
803 }
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
804 #endif
27898
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27738
diff changeset
805 g_free(hostname);
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
806
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
807 /* back to main thread */
20212
9bf576eeaac0 applied changes from 77376fe079e753b612b3b8c901060e689f3dee11
Luke Schierer <lschiere@pidgin.im>
parents: 20147
diff changeset
808 purple_timeout_add(0, dns_main_thread_cb, query_data);
14300
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
809
14243
0bda01972ff2 [gaim-migrate @ 16833]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
810 return 0;
0bda01972ff2 [gaim-migrate @ 16833]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
811 }
0bda01972ff2 [gaim-migrate @ 16833]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
812
31674
e381758618dd Further consolidation of dnsquery code.
Daniel Atallah <datallah@pidgin.im>
parents: 31673
diff changeset
813 static void
e381758618dd Further consolidation of dnsquery code.
Daniel Atallah <datallah@pidgin.im>
parents: 31673
diff changeset
814 resolve_host(PurpleDnsQueryData *query_data)
14243
0bda01972ff2 [gaim-migrate @ 16833]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
815 {
14300
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
816 GError *err = NULL;
14243
0bda01972ff2 [gaim-migrate @ 16833]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
817
31674
e381758618dd Further consolidation of dnsquery code.
Daniel Atallah <datallah@pidgin.im>
parents: 31673
diff changeset
818 /*
e381758618dd Further consolidation of dnsquery code.
Daniel Atallah <datallah@pidgin.im>
parents: 31673
diff changeset
819 * Spin off a separate thread to perform the DNS lookup so
e381758618dd Further consolidation of dnsquery code.
Daniel Atallah <datallah@pidgin.im>
parents: 31673
diff changeset
820 * that we don't block the UI.
e381758618dd Further consolidation of dnsquery code.
Daniel Atallah <datallah@pidgin.im>
parents: 31673
diff changeset
821 */
e381758618dd Further consolidation of dnsquery code.
Daniel Atallah <datallah@pidgin.im>
parents: 31673
diff changeset
822 query_data->resolver = g_thread_create(dns_thread,
e381758618dd Further consolidation of dnsquery code.
Daniel Atallah <datallah@pidgin.im>
parents: 31673
diff changeset
823 query_data, FALSE, &err);
e381758618dd Further consolidation of dnsquery code.
Daniel Atallah <datallah@pidgin.im>
parents: 31673
diff changeset
824 if (query_data->resolver == NULL)
14300
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
825 {
31674
e381758618dd Further consolidation of dnsquery code.
Daniel Atallah <datallah@pidgin.im>
parents: 31673
diff changeset
826 char message[1024];
e381758618dd Further consolidation of dnsquery code.
Daniel Atallah <datallah@pidgin.im>
parents: 31673
diff changeset
827 g_snprintf(message, sizeof(message), _("Thread creation failure: %s"),
e381758618dd Further consolidation of dnsquery code.
Daniel Atallah <datallah@pidgin.im>
parents: 31673
diff changeset
828 (err && err->message) ? err->message : _("Unknown reason"));
e381758618dd Further consolidation of dnsquery code.
Daniel Atallah <datallah@pidgin.im>
parents: 31673
diff changeset
829 g_error_free(err);
e381758618dd Further consolidation of dnsquery code.
Daniel Atallah <datallah@pidgin.im>
parents: 31673
diff changeset
830 purple_dnsquery_failed(query_data, message);
14243
0bda01972ff2 [gaim-migrate @ 16833]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
831 }
0bda01972ff2 [gaim-migrate @ 16833]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
832 }
0bda01972ff2 [gaim-migrate @ 16833]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
833
23352
9714223ca7a7 A patch from Peter O'Gorman at The Written Word, Inc. to fix various
Peter O'Gorman <pogma@thewrittenword.com>
parents: 22622
diff changeset
834 #else /* not PURPLE_DNSQUERY_USE_FORK or _WIN32 */
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
835
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
836 /*
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
837 * We weren't able to do anything fancier above, so use the
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
838 * fail-safe name resolution code, which is blocking.
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
839 */
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
840
31674
e381758618dd Further consolidation of dnsquery code.
Daniel Atallah <datallah@pidgin.im>
parents: 31673
diff changeset
841 static void
e381758618dd Further consolidation of dnsquery code.
Daniel Atallah <datallah@pidgin.im>
parents: 31673
diff changeset
842 resolve_host(PurpleDnsQueryData *query_data)
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
843 {
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
844 struct sockaddr_in sin;
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
845 GSList *hosts = NULL;
31674
e381758618dd Further consolidation of dnsquery code.
Daniel Atallah <datallah@pidgin.im>
parents: 31673
diff changeset
846 struct hostent *hp;
e381758618dd Further consolidation of dnsquery code.
Daniel Atallah <datallah@pidgin.im>
parents: 31673
diff changeset
847 gchar *hostname;
27898
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27738
diff changeset
848 #ifdef USE_IDN
31674
e381758618dd Further consolidation of dnsquery code.
Daniel Atallah <datallah@pidgin.im>
parents: 31673
diff changeset
849 if (!dns_str_is_ascii(query_data->hostname)) {
e381758618dd Further consolidation of dnsquery code.
Daniel Atallah <datallah@pidgin.im>
parents: 31673
diff changeset
850 int ret = purple_network_convert_idn_to_ascii(query_data->hostname,
e381758618dd Further consolidation of dnsquery code.
Daniel Atallah <datallah@pidgin.im>
parents: 31673
diff changeset
851 &hostname);
e381758618dd Further consolidation of dnsquery code.
Daniel Atallah <datallah@pidgin.im>
parents: 31673
diff changeset
852 if (ret != 0) {
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
853 char message[1024];
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
854 g_snprintf(message, sizeof(message), _("Error resolving %s: %d"),
31674
e381758618dd Further consolidation of dnsquery code.
Daniel Atallah <datallah@pidgin.im>
parents: 31673
diff changeset
855 query_data->hostname, ret);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15775
diff changeset
856 purple_dnsquery_failed(query_data, message);
31674
e381758618dd Further consolidation of dnsquery code.
Daniel Atallah <datallah@pidgin.im>
parents: 31673
diff changeset
857 return;
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
858 }
31674
e381758618dd Further consolidation of dnsquery code.
Daniel Atallah <datallah@pidgin.im>
parents: 31673
diff changeset
859 } else /* fallthrough is intentional to the g_strdup */
e381758618dd Further consolidation of dnsquery code.
Daniel Atallah <datallah@pidgin.im>
parents: 31673
diff changeset
860 #endif
e381758618dd Further consolidation of dnsquery code.
Daniel Atallah <datallah@pidgin.im>
parents: 31673
diff changeset
861 hostname = g_strdup(query_data->hostname);
e381758618dd Further consolidation of dnsquery code.
Daniel Atallah <datallah@pidgin.im>
parents: 31673
diff changeset
862
e381758618dd Further consolidation of dnsquery code.
Daniel Atallah <datallah@pidgin.im>
parents: 31673
diff changeset
863 if(!(hp = gethostbyname(hostname))) {
e381758618dd Further consolidation of dnsquery code.
Daniel Atallah <datallah@pidgin.im>
parents: 31673
diff changeset
864 char message[1024];
e381758618dd Further consolidation of dnsquery code.
Daniel Atallah <datallah@pidgin.im>
parents: 31673
diff changeset
865 g_snprintf(message, sizeof(message), _("Error resolving %s: %d"),
e381758618dd Further consolidation of dnsquery code.
Daniel Atallah <datallah@pidgin.im>
parents: 31673
diff changeset
866 query_data->hostname, h_errno);
e381758618dd Further consolidation of dnsquery code.
Daniel Atallah <datallah@pidgin.im>
parents: 31673
diff changeset
867 purple_dnsquery_failed(query_data, message);
28585
e5cbd8a675ac More tightly scope a variable and avoid trying to free an unset variable.
Brian Lu <brian.lu@sun.com>
parents: 27901
diff changeset
868 g_free(hostname);
31674
e381758618dd Further consolidation of dnsquery code.
Daniel Atallah <datallah@pidgin.im>
parents: 31673
diff changeset
869 return;
e381758618dd Further consolidation of dnsquery code.
Daniel Atallah <datallah@pidgin.im>
parents: 31673
diff changeset
870 }
e381758618dd Further consolidation of dnsquery code.
Daniel Atallah <datallah@pidgin.im>
parents: 31673
diff changeset
871 memset(&sin, 0, sizeof(struct sockaddr_in));
e381758618dd Further consolidation of dnsquery code.
Daniel Atallah <datallah@pidgin.im>
parents: 31673
diff changeset
872 memcpy(&sin.sin_addr.s_addr, hp->h_addr, hp->h_length);
e381758618dd Further consolidation of dnsquery code.
Daniel Atallah <datallah@pidgin.im>
parents: 31673
diff changeset
873 sin.sin_family = hp->h_addrtype;
e381758618dd Further consolidation of dnsquery code.
Daniel Atallah <datallah@pidgin.im>
parents: 31673
diff changeset
874 g_free(hostname);
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
875 sin.sin_port = htons(query_data->port);
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
876
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
877 hosts = g_slist_append(hosts, GINT_TO_POINTER(sizeof(sin)));
40755
fb2056ce3c58 Implement mitigation for GHSL-2021-045
Gary Kramlich <grim@reaperworld.com>
parents: 36259
diff changeset
878 hosts = g_slist_append(hosts, g_memdup2(&sin, sizeof(sin)));
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
879
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15775
diff changeset
880 purple_dnsquery_resolved(query_data, hosts);
31674
e381758618dd Further consolidation of dnsquery code.
Daniel Atallah <datallah@pidgin.im>
parents: 31673
diff changeset
881 }
e381758618dd Further consolidation of dnsquery code.
Daniel Atallah <datallah@pidgin.im>
parents: 31673
diff changeset
882
e381758618dd Further consolidation of dnsquery code.
Daniel Atallah <datallah@pidgin.im>
parents: 31673
diff changeset
883 #endif /* not PURPLE_DNSQUERY_USE_FORK or _WIN32 */
e381758618dd Further consolidation of dnsquery code.
Daniel Atallah <datallah@pidgin.im>
parents: 31673
diff changeset
884
e381758618dd Further consolidation of dnsquery code.
Daniel Atallah <datallah@pidgin.im>
parents: 31673
diff changeset
885 static gboolean
e381758618dd Further consolidation of dnsquery code.
Daniel Atallah <datallah@pidgin.im>
parents: 31673
diff changeset
886 initiate_resolving(gpointer data)
e381758618dd Further consolidation of dnsquery code.
Daniel Atallah <datallah@pidgin.im>
parents: 31673
diff changeset
887 {
e381758618dd Further consolidation of dnsquery code.
Daniel Atallah <datallah@pidgin.im>
parents: 31673
diff changeset
888 PurpleDnsQueryData *query_data;
31678
ad8a9a266b05 Add new DNS-related API to perform lookups in the context of an account.
Daniel Atallah <datallah@pidgin.im>
parents: 31674
diff changeset
889 PurpleProxyType proxy_type;
31674
e381758618dd Further consolidation of dnsquery code.
Daniel Atallah <datallah@pidgin.im>
parents: 31673
diff changeset
890
e381758618dd Further consolidation of dnsquery code.
Daniel Atallah <datallah@pidgin.im>
parents: 31673
diff changeset
891 query_data = data;
e381758618dd Further consolidation of dnsquery code.
Daniel Atallah <datallah@pidgin.im>
parents: 31673
diff changeset
892 query_data->timeout = 0;
e381758618dd Further consolidation of dnsquery code.
Daniel Atallah <datallah@pidgin.im>
parents: 31673
diff changeset
893
e381758618dd Further consolidation of dnsquery code.
Daniel Atallah <datallah@pidgin.im>
parents: 31673
diff changeset
894 if (resolve_ip(query_data))
e381758618dd Further consolidation of dnsquery code.
Daniel Atallah <datallah@pidgin.im>
parents: 31673
diff changeset
895 /* resolve_ip calls purple_dnsquery_resolved */
e381758618dd Further consolidation of dnsquery code.
Daniel Atallah <datallah@pidgin.im>
parents: 31673
diff changeset
896 return FALSE;
e381758618dd Further consolidation of dnsquery code.
Daniel Atallah <datallah@pidgin.im>
parents: 31673
diff changeset
897
31678
ad8a9a266b05 Add new DNS-related API to perform lookups in the context of an account.
Daniel Atallah <datallah@pidgin.im>
parents: 31674
diff changeset
898 proxy_type = purple_proxy_info_get_type(
ad8a9a266b05 Add new DNS-related API to perform lookups in the context of an account.
Daniel Atallah <datallah@pidgin.im>
parents: 31674
diff changeset
899 purple_proxy_get_setup(query_data->account));
ad8a9a266b05 Add new DNS-related API to perform lookups in the context of an account.
Daniel Atallah <datallah@pidgin.im>
parents: 31674
diff changeset
900 if (proxy_type == PURPLE_PROXY_TOR) {
ad8a9a266b05 Add new DNS-related API to perform lookups in the context of an account.
Daniel Atallah <datallah@pidgin.im>
parents: 31674
diff changeset
901 purple_dnsquery_failed(query_data,
ad8a9a266b05 Add new DNS-related API to perform lookups in the context of an account.
Daniel Atallah <datallah@pidgin.im>
parents: 31674
diff changeset
902 _("Aborting DNS lookup in Tor Proxy mode."));
ad8a9a266b05 Add new DNS-related API to perform lookups in the context of an account.
Daniel Atallah <datallah@pidgin.im>
parents: 31674
diff changeset
903 return FALSE;
ad8a9a266b05 Add new DNS-related API to perform lookups in the context of an account.
Daniel Atallah <datallah@pidgin.im>
parents: 31674
diff changeset
904 }
ad8a9a266b05 Add new DNS-related API to perform lookups in the context of an account.
Daniel Atallah <datallah@pidgin.im>
parents: 31674
diff changeset
905
31674
e381758618dd Further consolidation of dnsquery code.
Daniel Atallah <datallah@pidgin.im>
parents: 31673
diff changeset
906 if (purple_dnsquery_ui_resolve(query_data))
e381758618dd Further consolidation of dnsquery code.
Daniel Atallah <datallah@pidgin.im>
parents: 31673
diff changeset
907 /* The UI is handling the resolve; we're done */
e381758618dd Further consolidation of dnsquery code.
Daniel Atallah <datallah@pidgin.im>
parents: 31673
diff changeset
908 return FALSE;
e381758618dd Further consolidation of dnsquery code.
Daniel Atallah <datallah@pidgin.im>
parents: 31673
diff changeset
909
e381758618dd Further consolidation of dnsquery code.
Daniel Atallah <datallah@pidgin.im>
parents: 31673
diff changeset
910 resolve_host(query_data);
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
911
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
912 return FALSE;
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
913 }
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
914
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15775
diff changeset
915 PurpleDnsQueryData *
31678
ad8a9a266b05 Add new DNS-related API to perform lookups in the context of an account.
Daniel Atallah <datallah@pidgin.im>
parents: 31674
diff changeset
916 purple_dnsquery_a_account(PurpleAccount *account, const char *hostname, int port,
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15775
diff changeset
917 PurpleDnsQueryConnectFunction callback, gpointer data)
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
918 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15775
diff changeset
919 PurpleDnsQueryData *query_data;
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
920
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
921 g_return_val_if_fail(hostname != NULL, NULL);
31673
acb4b08defe2 Consolidate duplicated implementations of purple_dnsquery_a
Daniel Atallah <datallah@pidgin.im>
parents: 28785
diff changeset
922 g_return_val_if_fail(port != 0, NULL);
14528
b8e4715b2953 [gaim-migrate @ 17180]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
923 g_return_val_if_fail(callback != NULL, NULL);
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
924
31673
acb4b08defe2 Consolidate duplicated implementations of purple_dnsquery_a
Daniel Atallah <datallah@pidgin.im>
parents: 28785
diff changeset
925 purple_debug_info("dnsquery", "Performing DNS lookup for %s\n", hostname);
acb4b08defe2 Consolidate duplicated implementations of purple_dnsquery_a
Daniel Atallah <datallah@pidgin.im>
parents: 28785
diff changeset
926
acb4b08defe2 Consolidate duplicated implementations of purple_dnsquery_a
Daniel Atallah <datallah@pidgin.im>
parents: 28785
diff changeset
927 query_data = g_new0(PurpleDnsQueryData, 1);
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
928 query_data->hostname = g_strdup(hostname);
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
929 g_strstrip(query_data->hostname);
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
930 query_data->port = port;
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
931 query_data->callback = callback;
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
932 query_data->data = data;
31678
ad8a9a266b05 Add new DNS-related API to perform lookups in the context of an account.
Daniel Atallah <datallah@pidgin.im>
parents: 31674
diff changeset
933 query_data->account = account;
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
934
31673
acb4b08defe2 Consolidate duplicated implementations of purple_dnsquery_a
Daniel Atallah <datallah@pidgin.im>
parents: 28785
diff changeset
935 if (*query_data->hostname == '\0')
14528
b8e4715b2953 [gaim-migrate @ 17180]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
936 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15775
diff changeset
937 purple_dnsquery_destroy(query_data);
14528
b8e4715b2953 [gaim-migrate @ 17180]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
938 g_return_val_if_reached(NULL);
b8e4715b2953 [gaim-migrate @ 17180]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
939 }
b8e4715b2953 [gaim-migrate @ 17180]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
940
31674
e381758618dd Further consolidation of dnsquery code.
Daniel Atallah <datallah@pidgin.im>
parents: 31673
diff changeset
941 query_data->timeout = purple_timeout_add(0, initiate_resolving, query_data);
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
942
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
943 return query_data;
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
944 }
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
945
31678
ad8a9a266b05 Add new DNS-related API to perform lookups in the context of an account.
Daniel Atallah <datallah@pidgin.im>
parents: 31674
diff changeset
946 PurpleDnsQueryData *
ad8a9a266b05 Add new DNS-related API to perform lookups in the context of an account.
Daniel Atallah <datallah@pidgin.im>
parents: 31674
diff changeset
947 purple_dnsquery_a(const char *hostname, int port,
ad8a9a266b05 Add new DNS-related API to perform lookups in the context of an account.
Daniel Atallah <datallah@pidgin.im>
parents: 31674
diff changeset
948 PurpleDnsQueryConnectFunction callback, gpointer data)
ad8a9a266b05 Add new DNS-related API to perform lookups in the context of an account.
Daniel Atallah <datallah@pidgin.im>
parents: 31674
diff changeset
949 {
ad8a9a266b05 Add new DNS-related API to perform lookups in the context of an account.
Daniel Atallah <datallah@pidgin.im>
parents: 31674
diff changeset
950 return purple_dnsquery_a_account(NULL, hostname, port, callback, data);
ad8a9a266b05 Add new DNS-related API to perform lookups in the context of an account.
Daniel Atallah <datallah@pidgin.im>
parents: 31674
diff changeset
951 }
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
952
14300
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
953 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15775
diff changeset
954 purple_dnsquery_destroy(PurpleDnsQueryData *query_data)
14300
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
955 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15775
diff changeset
956 PurpleDnsQueryUiOps *ops = purple_dnsquery_get_ui_ops();
15763
2b529e4350bc The UI can now use the GaimDnsQueryUiOps to handle DNS resolving itself; if this is done, the platform-specific DNS query code won't be used. This will be used in Adium to use an efficient threads-based DNS resolve (since Adium is already multithreaded, this is significantly cheaper than fork()).
Evan Schoenberg <evands@pidgin.im>
parents: 15707
diff changeset
957
15775
a1aed6d0c33b No changes; fixed a bunch of whitespace problems made by a text editor with 'use tabs' disabled. Sorry for the noise.
Evan Schoenberg <evands@pidgin.im>
parents: 15771
diff changeset
958 if (ops && ops->destroy)
a1aed6d0c33b No changes; fixed a bunch of whitespace problems made by a text editor with 'use tabs' disabled. Sorry for the noise.
Evan Schoenberg <evands@pidgin.im>
parents: 15771
diff changeset
959 ops->destroy(query_data);
15763
2b529e4350bc The UI can now use the GaimDnsQueryUiOps to handle DNS resolving itself; if this is done, the platform-specific DNS query code won't be used. This will be used in Adium to use an efficient threads-based DNS resolve (since Adium is already multithreaded, this is significantly cheaper than fork()).
Evan Schoenberg <evands@pidgin.im>
parents: 15707
diff changeset
960
23352
9714223ca7a7 A patch from Peter O'Gorman at The Written Word, Inc. to fix various
Peter O'Gorman <pogma@thewrittenword.com>
parents: 22622
diff changeset
961 #if defined(PURPLE_DNSQUERY_USE_FORK)
14711
404c5a931bb2 [gaim-migrate @ 17395]
Mark Doliner <markdoliner@pidgin.im>
parents: 14572
diff changeset
962 queued_requests = g_slist_remove(queued_requests, query_data);
14572
80e79a4926b4 [gaim-migrate @ 17230]
Mark Doliner <markdoliner@pidgin.im>
parents: 14528
diff changeset
963
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
964 if (query_data->resolver != NULL)
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
965 /*
24321
0d6d024049eb Improve a few comments
Mark Doliner <markdoliner@pidgin.im>
parents: 24318
diff changeset
966 * This is only non-NULL when we're cancelling an in-progress
0d6d024049eb Improve a few comments
Mark Doliner <markdoliner@pidgin.im>
parents: 24318
diff changeset
967 * query. Ideally we would tell our resolver child to stop
0d6d024049eb Improve a few comments
Mark Doliner <markdoliner@pidgin.im>
parents: 24318
diff changeset
968 * resolving shit and then we would add it back to the
0d6d024049eb Improve a few comments
Mark Doliner <markdoliner@pidgin.im>
parents: 24318
diff changeset
969 * free_dns_children linked list. However, it's hard to tell
0d6d024049eb Improve a few comments
Mark Doliner <markdoliner@pidgin.im>
parents: 24318
diff changeset
970 * children stuff, they just don't listen. So we'll just
0d6d024049eb Improve a few comments
Mark Doliner <markdoliner@pidgin.im>
parents: 24318
diff changeset
971 * kill the process and allow a new child to be started if we
0d6d024049eb Improve a few comments
Mark Doliner <markdoliner@pidgin.im>
parents: 24318
diff changeset
972 * have more stuff to resolve.
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
973 */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15775
diff changeset
974 purple_dnsquery_resolver_destroy(query_data->resolver);
23352
9714223ca7a7 A patch from Peter O'Gorman at The Written Word, Inc. to fix various
Peter O'Gorman <pogma@thewrittenword.com>
parents: 22622
diff changeset
975 #elif defined _WIN32 /* end PURPLE_DNSQUERY_USE_FORK */
14300
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
976 if (query_data->resolver != NULL)
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
977 {
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
978 /*
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
979 * It's not really possible to kill a thread. So instead we
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
980 * just set the callback to NULL and let the DNS lookup
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
981 * finish.
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
982 */
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
983 query_data->callback = NULL;
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
984 return;
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
985 }
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
986
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
987 while (query_data->hosts != NULL)
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
988 {
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
989 /* Discard the length... */
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
990 query_data->hosts = g_slist_remove(query_data->hosts, query_data->hosts->data);
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
991 /* Free the address... */
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
992 g_free(query_data->hosts->data);
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
993 query_data->hosts = g_slist_remove(query_data->hosts, query_data->hosts->data);
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
994 }
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
995 g_free(query_data->error_message);
24321
0d6d024049eb Improve a few comments
Mark Doliner <markdoliner@pidgin.im>
parents: 24318
diff changeset
996 #endif /* end _WIN32 */
14300
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
997
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
998 if (query_data->timeout > 0)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15775
diff changeset
999 purple_timeout_remove(query_data->timeout);
14300
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
1000
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
1001 g_free(query_data->hostname);
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
1002 g_free(query_data);
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
1003 }
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
1004
15763
2b529e4350bc The UI can now use the GaimDnsQueryUiOps to handle DNS resolving itself; if this is done, the platform-specific DNS query code won't be used. This will be used in Adium to use an efficient threads-based DNS resolve (since Adium is already multithreaded, this is significantly cheaper than fork()).
Evan Schoenberg <evands@pidgin.im>
parents: 15707
diff changeset
1005 char *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15775
diff changeset
1006 purple_dnsquery_get_host(PurpleDnsQueryData *query_data)
15763
2b529e4350bc The UI can now use the GaimDnsQueryUiOps to handle DNS resolving itself; if this is done, the platform-specific DNS query code won't be used. This will be used in Adium to use an efficient threads-based DNS resolve (since Adium is already multithreaded, this is significantly cheaper than fork()).
Evan Schoenberg <evands@pidgin.im>
parents: 15707
diff changeset
1007 {
2b529e4350bc The UI can now use the GaimDnsQueryUiOps to handle DNS resolving itself; if this is done, the platform-specific DNS query code won't be used. This will be used in Adium to use an efficient threads-based DNS resolve (since Adium is already multithreaded, this is significantly cheaper than fork()).
Evan Schoenberg <evands@pidgin.im>
parents: 15707
diff changeset
1008 g_return_val_if_fail(query_data != NULL, NULL);
2b529e4350bc The UI can now use the GaimDnsQueryUiOps to handle DNS resolving itself; if this is done, the platform-specific DNS query code won't be used. This will be used in Adium to use an efficient threads-based DNS resolve (since Adium is already multithreaded, this is significantly cheaper than fork()).
Evan Schoenberg <evands@pidgin.im>
parents: 15707
diff changeset
1009
2b529e4350bc The UI can now use the GaimDnsQueryUiOps to handle DNS resolving itself; if this is done, the platform-specific DNS query code won't be used. This will be used in Adium to use an efficient threads-based DNS resolve (since Adium is already multithreaded, this is significantly cheaper than fork()).
Evan Schoenberg <evands@pidgin.im>
parents: 15707
diff changeset
1010 return query_data->hostname;
2b529e4350bc The UI can now use the GaimDnsQueryUiOps to handle DNS resolving itself; if this is done, the platform-specific DNS query code won't be used. This will be used in Adium to use an efficient threads-based DNS resolve (since Adium is already multithreaded, this is significantly cheaper than fork()).
Evan Schoenberg <evands@pidgin.im>
parents: 15707
diff changeset
1011 }
2b529e4350bc The UI can now use the GaimDnsQueryUiOps to handle DNS resolving itself; if this is done, the platform-specific DNS query code won't be used. This will be used in Adium to use an efficient threads-based DNS resolve (since Adium is already multithreaded, this is significantly cheaper than fork()).
Evan Schoenberg <evands@pidgin.im>
parents: 15707
diff changeset
1012
15771
848371e40d86 Remove a g_return_val_if_fail() which isn't needed, made gaim_dnsquery_get_port() return an unsigned short and return 0 if query_data is NULL, and fixed a whitespace mistake
Evan Schoenberg <evands@pidgin.im>
parents: 15764
diff changeset
1013 unsigned short
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15775
diff changeset
1014 purple_dnsquery_get_port(PurpleDnsQueryData *query_data)
15763
2b529e4350bc The UI can now use the GaimDnsQueryUiOps to handle DNS resolving itself; if this is done, the platform-specific DNS query code won't be used. This will be used in Adium to use an efficient threads-based DNS resolve (since Adium is already multithreaded, this is significantly cheaper than fork()).
Evan Schoenberg <evands@pidgin.im>
parents: 15707
diff changeset
1015 {
15771
848371e40d86 Remove a g_return_val_if_fail() which isn't needed, made gaim_dnsquery_get_port() return an unsigned short and return 0 if query_data is NULL, and fixed a whitespace mistake
Evan Schoenberg <evands@pidgin.im>
parents: 15764
diff changeset
1016 g_return_val_if_fail(query_data != NULL, 0);
15763
2b529e4350bc The UI can now use the GaimDnsQueryUiOps to handle DNS resolving itself; if this is done, the platform-specific DNS query code won't be used. This will be used in Adium to use an efficient threads-based DNS resolve (since Adium is already multithreaded, this is significantly cheaper than fork()).
Evan Schoenberg <evands@pidgin.im>
parents: 15707
diff changeset
1017
15775
a1aed6d0c33b No changes; fixed a bunch of whitespace problems made by a text editor with 'use tabs' disabled. Sorry for the noise.
Evan Schoenberg <evands@pidgin.im>
parents: 15771
diff changeset
1018 return query_data->port;
15763
2b529e4350bc The UI can now use the GaimDnsQueryUiOps to handle DNS resolving itself; if this is done, the platform-specific DNS query code won't be used. This will be used in Adium to use an efficient threads-based DNS resolve (since Adium is already multithreaded, this is significantly cheaper than fork()).
Evan Schoenberg <evands@pidgin.im>
parents: 15707
diff changeset
1019 }
2b529e4350bc The UI can now use the GaimDnsQueryUiOps to handle DNS resolving itself; if this is done, the platform-specific DNS query code won't be used. This will be used in Adium to use an efficient threads-based DNS resolve (since Adium is already multithreaded, this is significantly cheaper than fork()).
Evan Schoenberg <evands@pidgin.im>
parents: 15707
diff changeset
1020
2b529e4350bc The UI can now use the GaimDnsQueryUiOps to handle DNS resolving itself; if this is done, the platform-specific DNS query code won't be used. This will be used in Adium to use an efficient threads-based DNS resolve (since Adium is already multithreaded, this is significantly cheaper than fork()).
Evan Schoenberg <evands@pidgin.im>
parents: 15707
diff changeset
1021 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15775
diff changeset
1022 purple_dnsquery_set_ui_ops(PurpleDnsQueryUiOps *ops)
15763
2b529e4350bc The UI can now use the GaimDnsQueryUiOps to handle DNS resolving itself; if this is done, the platform-specific DNS query code won't be used. This will be used in Adium to use an efficient threads-based DNS resolve (since Adium is already multithreaded, this is significantly cheaper than fork()).
Evan Schoenberg <evands@pidgin.im>
parents: 15707
diff changeset
1023 {
2b529e4350bc The UI can now use the GaimDnsQueryUiOps to handle DNS resolving itself; if this is done, the platform-specific DNS query code won't be used. This will be used in Adium to use an efficient threads-based DNS resolve (since Adium is already multithreaded, this is significantly cheaper than fork()).
Evan Schoenberg <evands@pidgin.im>
parents: 15707
diff changeset
1024 dns_query_ui_ops = ops;
2b529e4350bc The UI can now use the GaimDnsQueryUiOps to handle DNS resolving itself; if this is done, the platform-specific DNS query code won't be used. This will be used in Adium to use an efficient threads-based DNS resolve (since Adium is already multithreaded, this is significantly cheaper than fork()).
Evan Schoenberg <evands@pidgin.im>
parents: 15707
diff changeset
1025 }
2b529e4350bc The UI can now use the GaimDnsQueryUiOps to handle DNS resolving itself; if this is done, the platform-specific DNS query code won't be used. This will be used in Adium to use an efficient threads-based DNS resolve (since Adium is already multithreaded, this is significantly cheaper than fork()).
Evan Schoenberg <evands@pidgin.im>
parents: 15707
diff changeset
1026
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15775
diff changeset
1027 PurpleDnsQueryUiOps *
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15775
diff changeset
1028 purple_dnsquery_get_ui_ops(void)
15763
2b529e4350bc The UI can now use the GaimDnsQueryUiOps to handle DNS resolving itself; if this is done, the platform-specific DNS query code won't be used. This will be used in Adium to use an efficient threads-based DNS resolve (since Adium is already multithreaded, this is significantly cheaper than fork()).
Evan Schoenberg <evands@pidgin.im>
parents: 15707
diff changeset
1029 {
15771
848371e40d86 Remove a g_return_val_if_fail() which isn't needed, made gaim_dnsquery_get_port() return an unsigned short and return 0 if query_data is NULL, and fixed a whitespace mistake
Evan Schoenberg <evands@pidgin.im>
parents: 15764
diff changeset
1030 /* It is perfectly acceptable for dns_query_ui_ops to be NULL; this just
848371e40d86 Remove a g_return_val_if_fail() which isn't needed, made gaim_dnsquery_get_port() return an unsigned short and return 0 if query_data is NULL, and fixed a whitespace mistake
Evan Schoenberg <evands@pidgin.im>
parents: 15764
diff changeset
1031 * means that the default platform-specific implementation will be used.
848371e40d86 Remove a g_return_val_if_fail() which isn't needed, made gaim_dnsquery_get_port() return an unsigned short and return 0 if query_data is NULL, and fixed a whitespace mistake
Evan Schoenberg <evands@pidgin.im>
parents: 15764
diff changeset
1032 */
15763
2b529e4350bc The UI can now use the GaimDnsQueryUiOps to handle DNS resolving itself; if this is done, the platform-specific DNS query code won't be used. This will be used in Adium to use an efficient threads-based DNS resolve (since Adium is already multithreaded, this is significantly cheaper than fork()).
Evan Schoenberg <evands@pidgin.im>
parents: 15707
diff changeset
1033 return dns_query_ui_ops;
2b529e4350bc The UI can now use the GaimDnsQueryUiOps to handle DNS resolving itself; if this is done, the platform-specific DNS query code won't be used. This will be used in Adium to use an efficient threads-based DNS resolve (since Adium is already multithreaded, this is significantly cheaper than fork()).
Evan Schoenberg <evands@pidgin.im>
parents: 15707
diff changeset
1034 }
2b529e4350bc The UI can now use the GaimDnsQueryUiOps to handle DNS resolving itself; if this is done, the platform-specific DNS query code won't be used. This will be used in Adium to use an efficient threads-based DNS resolve (since Adium is already multithreaded, this is significantly cheaper than fork()).
Evan Schoenberg <evands@pidgin.im>
parents: 15707
diff changeset
1035
14300
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
1036 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15775
diff changeset
1037 purple_dnsquery_init(void)
14300
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
1038 {
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
1039 }
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
1040
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
1041 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15775
diff changeset
1042 purple_dnsquery_uninit(void)
14300
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
1043 {
23352
9714223ca7a7 A patch from Peter O'Gorman at The Written Word, Inc. to fix various
Peter O'Gorman <pogma@thewrittenword.com>
parents: 22622
diff changeset
1044 #if defined(PURPLE_DNSQUERY_USE_FORK)
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
1045 while (free_dns_children != NULL)
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
1046 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15775
diff changeset
1047 purple_dnsquery_resolver_destroy(free_dns_children->data);
14349
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
1048 free_dns_children = g_slist_remove(free_dns_children, free_dns_children->data);
6b7a67b5f56d [gaim-migrate @ 16974]
Mark Doliner <markdoliner@pidgin.im>
parents: 14325
diff changeset
1049 }
24321
0d6d024049eb Improve a few comments
Mark Doliner <markdoliner@pidgin.im>
parents: 24318
diff changeset
1050 #endif /* end PURPLE_DNSQUERY_USE_FORK */
14300
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
1051 }

mercurial