Sat, 13 Mar 2021 15:33:49 -0600
Fix building on glib < 2.58.0 as we have a minimum of 2.52.0
Add compatibility for G_SOURCE_FUNC and g_time_zone_new_offset that were added in 2.58.0
g_time_zone_new_offset is from 2.58.0 which might be buggy, the version of it
from glib git has some fixes it but it is much more involved so using the older
version is a calculated risk.
Testing Done:
Built on ubuntu:bionic.
Reviewed at https://reviews.imfreedom.org/r/573/
| 7014 | 1 | /* |
| 15884 | 2 | * purple - Jabber Protocol Plugin |
| 3127 | 3 | * |
|
28322
ac8fec1d2234
Remove specific copyright lines from the XMPP prpl.
Paul Aurich <darkrain42@pidgin.im>
parents:
27899
diff
changeset
|
4 | * Purple is the legal property of its developers, whose names are too numerous |
|
ac8fec1d2234
Remove specific copyright lines from the XMPP prpl.
Paul Aurich <darkrain42@pidgin.im>
parents:
27899
diff
changeset
|
5 | * to list here. Please refer to the COPYRIGHT file distributed with this |
|
ac8fec1d2234
Remove specific copyright lines from the XMPP prpl.
Paul Aurich <darkrain42@pidgin.im>
parents:
27899
diff
changeset
|
6 | * source distribution. |
| 3127 | 7 | * |
| 7014 | 8 | * This program is free software; you can redistribute it and/or modify |
| 9 | * it under the terms of the GNU General Public License as published by | |
| 10 | * the Free Software Foundation; either version 2 of the License, or | |
| 11 | * (at your option) any later version. | |
| 3127 | 12 | * |
| 7014 | 13 | * This program is distributed in the hope that it will be useful, |
| 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 16 | * GNU General Public License for more details. | |
| 17 | * | |
| 18 | * You should have received a copy of the GNU General Public License | |
| 19 | * 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:
15952
diff
changeset
|
20 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA |
| 3127 | 21 | * |
| 7014 | 22 | */ |
|
40441
f23c7e772667
Make sure we're not including the gettext macros in header files and deal with the repercussions of that.
Gary Kramlich <grim@reaperworld.com>
parents:
40439
diff
changeset
|
23 | |
|
f23c7e772667
Make sure we're not including the gettext macros in header files and deal with the repercussions of that.
Gary Kramlich <grim@reaperworld.com>
parents:
40439
diff
changeset
|
24 | #include <glib/gi18n-lib.h> |
|
f23c7e772667
Make sure we're not including the gettext macros in header files and deal with the repercussions of that.
Gary Kramlich <grim@reaperworld.com>
parents:
40439
diff
changeset
|
25 | |
|
40358
e6fe6fc1f516
move all protocols, purple plugins, and purple tests to use purple.h instead of including files individually
Gary Kramlich <grim@reaperworld.com>
parents:
40282
diff
changeset
|
26 | #include <purple.h> |
| 7014 | 27 | |
| 7322 | 28 | #include "chat.h" |
| 7014 | 29 | #include "presence.h" |
| 30 | #include "jutil.h" | |
| 3127 | 31 | |
|
27849
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
32 | #include <idna.h> |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
33 | #include <stringprep.h> |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
34 | static char idn_buffer[1024]; |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
35 | |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
36 | static gboolean jabber_nodeprep(char *str, size_t buflen) |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
37 | { |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
38 | return stringprep_xmpp_nodeprep(str, buflen) == STRINGPREP_OK; |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
39 | } |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
40 | |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
41 | static gboolean jabber_resourceprep(char *str, size_t buflen) |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
42 | { |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
43 | return stringprep_xmpp_resourceprep(str, buflen) == STRINGPREP_OK; |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
44 | } |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
45 | |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
46 | static JabberID* |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
47 | jabber_idn_validate(const char *str, const char *at, const char *slash, |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
48 | const char *null) |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
49 | { |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
50 | const char *node = NULL; |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
51 | const char *domain = NULL; |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
52 | const char *resource = NULL; |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
53 | int node_len = 0; |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
54 | int domain_len = 0; |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
55 | int resource_len = 0; |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
56 | char *out; |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
57 | JabberID *jid; |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
58 | |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
59 | /* Ensure no parts are > 1023 bytes */ |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
60 | if (at) { |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
61 | node = str; |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
62 | node_len = at - str; |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
63 | |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
64 | domain = at + 1; |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
65 | if (slash) { |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
66 | domain_len = slash - (at + 1); |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
67 | resource = slash + 1; |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
68 | resource_len = null - (slash + 1); |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
69 | } else { |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
70 | domain_len = null - (at + 1); |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
71 | } |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
72 | } else { |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
73 | domain = str; |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
74 | |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
75 | if (slash) { |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
76 | domain_len = slash - str; |
|
36193
ea46ab68f0dc
Fix a possible information leak when preping XMPP JIDs.
Mark Doliner <mark@kingant.net>
parents:
35308
diff
changeset
|
77 | resource = slash + 1; |
|
27849
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
78 | resource_len = null - (slash + 1); |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
79 | } else { |
|
36193
ea46ab68f0dc
Fix a possible information leak when preping XMPP JIDs.
Mark Doliner <mark@kingant.net>
parents:
35308
diff
changeset
|
80 | domain_len = null - str; |
|
27849
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
81 | } |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
82 | } |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
83 | |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
84 | if (node && node_len > 1023) |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
85 | return NULL; |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
86 | if (domain_len > 1023) |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
87 | return NULL; |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
88 | if (resource && resource_len > 1023) |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
89 | return NULL; |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
90 | |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
91 | jid = g_new0(JabberID, 1); |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
92 | |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
93 | if (node) { |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
94 | strncpy(idn_buffer, node, node_len); |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
95 | idn_buffer[node_len] = '\0'; |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
96 | |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
97 | if (!jabber_nodeprep(idn_buffer, sizeof(idn_buffer))) { |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
98 | jabber_id_free(jid); |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
99 | jid = NULL; |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
100 | goto out; |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
101 | } |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
102 | |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
103 | jid->node = g_strdup(idn_buffer); |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
104 | } |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
105 | |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
106 | /* domain *must* be here */ |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
107 | strncpy(idn_buffer, domain, domain_len); |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
108 | idn_buffer[domain_len] = '\0'; |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
109 | if (domain[0] == '[') { /* IPv6 address */ |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
110 | gboolean valid = FALSE; |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
111 | |
|
39987
9aea69045c1f
Replace purple_ip*_address_is_valid by GLib functions.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
39833
diff
changeset
|
112 | if (domain_len > 2 && idn_buffer[domain_len - 1] == ']') { |
|
9aea69045c1f
Replace purple_ip*_address_is_valid by GLib functions.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
39833
diff
changeset
|
113 | GInetAddress *addr; |
|
27849
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
114 | idn_buffer[domain_len - 1] = '\0'; |
|
39987
9aea69045c1f
Replace purple_ip*_address_is_valid by GLib functions.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
39833
diff
changeset
|
115 | addr = g_inet_address_new_from_string(idn_buffer + 1); |
|
9aea69045c1f
Replace purple_ip*_address_is_valid by GLib functions.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
39833
diff
changeset
|
116 | if (addr != NULL) { |
|
9aea69045c1f
Replace purple_ip*_address_is_valid by GLib functions.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
39833
diff
changeset
|
117 | valid = (g_inet_address_get_family(addr) == |
|
9aea69045c1f
Replace purple_ip*_address_is_valid by GLib functions.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
39833
diff
changeset
|
118 | G_SOCKET_FAMILY_IPV6); |
|
9aea69045c1f
Replace purple_ip*_address_is_valid by GLib functions.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
39833
diff
changeset
|
119 | g_object_unref(addr); |
|
9aea69045c1f
Replace purple_ip*_address_is_valid by GLib functions.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
39833
diff
changeset
|
120 | } |
|
27849
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
121 | } |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
122 | |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
123 | if (!valid) { |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
124 | jabber_id_free(jid); |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
125 | jid = NULL; |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
126 | goto out; |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
127 | } |
|
36193
ea46ab68f0dc
Fix a possible information leak when preping XMPP JIDs.
Mark Doliner <mark@kingant.net>
parents:
35308
diff
changeset
|
128 | |
|
ea46ab68f0dc
Fix a possible information leak when preping XMPP JIDs.
Mark Doliner <mark@kingant.net>
parents:
35308
diff
changeset
|
129 | jid->domain = g_strndup(domain, domain_len); |
|
27849
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
130 | } else { |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
131 | /* Apply nameprep */ |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
132 | if (stringprep_nameprep(idn_buffer, sizeof(idn_buffer)) != STRINGPREP_OK) { |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
133 | jabber_id_free(jid); |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
134 | jid = NULL; |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
135 | goto out; |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
136 | } |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
137 | |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
138 | /* And now ToASCII */ |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
139 | if (idna_to_ascii_8z(idn_buffer, &out, IDNA_USE_STD3_ASCII_RULES) != IDNA_SUCCESS) { |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
140 | jabber_id_free(jid); |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
141 | jid = NULL; |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
142 | goto out; |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
143 | } |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
144 | |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
145 | /* This *MUST* be freed using 'free', not 'g_free' */ |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
146 | free(out); |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
147 | jid->domain = g_strdup(idn_buffer); |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
148 | } |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
149 | |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
150 | if (resource) { |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
151 | strncpy(idn_buffer, resource, resource_len); |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
152 | idn_buffer[resource_len] = '\0'; |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
153 | |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
154 | if (!jabber_resourceprep(idn_buffer, sizeof(idn_buffer))) { |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
155 | jabber_id_free(jid); |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
156 | jid = NULL; |
|
28535
2c150600a9e9
Fix a crash when attempting to validate a JID with an invalid resource.
Paul Aurich <darkrain42@pidgin.im>
parents:
28431
diff
changeset
|
157 | goto out; |
|
2c150600a9e9
Fix a crash when attempting to validate a JID with an invalid resource.
Paul Aurich <darkrain42@pidgin.im>
parents:
28431
diff
changeset
|
158 | } else |
|
2c150600a9e9
Fix a crash when attempting to validate a JID with an invalid resource.
Paul Aurich <darkrain42@pidgin.im>
parents:
28431
diff
changeset
|
159 | jid->resource = g_strdup(idn_buffer); |
|
27849
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
160 | } |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
161 | |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
162 | out: |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
163 | return jid; |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
164 | } |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
165 | |
| 7310 | 166 | gboolean jabber_nodeprep_validate(const char *str) |
| 167 | { | |
|
27849
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
168 | gboolean result; |
| 7310 | 169 | |
| 170 | if(!str) | |
| 171 | return TRUE; | |
| 172 | ||
| 173 | if(strlen(str) > 1023) | |
| 174 | return FALSE; | |
| 175 | ||
|
27849
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
176 | strncpy(idn_buffer, str, sizeof(idn_buffer) - 1); |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
177 | idn_buffer[sizeof(idn_buffer) - 1] = '\0'; |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
178 | result = jabber_nodeprep(idn_buffer, sizeof(idn_buffer)); |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
179 | return result; |
| 7310 | 180 | } |
| 181 | ||
|
27728
03b2a20ba465
Validate IPv6 identifiers in the domain portion of a JID.
Paul Aurich <darkrain42@pidgin.im>
parents:
27723
diff
changeset
|
182 | gboolean jabber_domain_validate(const char *str) |
| 7310 | 183 | { |
| 184 | const char *c; | |
|
27731
53ddfbc48e11
Save one traversal of the domain for IPv6 validation.
Paul Aurich <darkrain42@pidgin.im>
parents:
27728
diff
changeset
|
185 | size_t len; |
| 7310 | 186 | |
| 187 | if(!str) | |
| 188 | return TRUE; | |
| 189 | ||
|
27731
53ddfbc48e11
Save one traversal of the domain for IPv6 validation.
Paul Aurich <darkrain42@pidgin.im>
parents:
27728
diff
changeset
|
190 | len = strlen(str); |
|
53ddfbc48e11
Save one traversal of the domain for IPv6 validation.
Paul Aurich <darkrain42@pidgin.im>
parents:
27728
diff
changeset
|
191 | if (len > 1023) |
| 7310 | 192 | return FALSE; |
| 193 | ||
| 194 | c = str; | |
|
27728
03b2a20ba465
Validate IPv6 identifiers in the domain portion of a JID.
Paul Aurich <darkrain42@pidgin.im>
parents:
27723
diff
changeset
|
195 | |
|
03b2a20ba465
Validate IPv6 identifiers in the domain portion of a JID.
Paul Aurich <darkrain42@pidgin.im>
parents:
27723
diff
changeset
|
196 | if (*c == '[') { |
|
03b2a20ba465
Validate IPv6 identifiers in the domain portion of a JID.
Paul Aurich <darkrain42@pidgin.im>
parents:
27723
diff
changeset
|
197 | /* Check if str is a valid IPv6 identifier */ |
|
39987
9aea69045c1f
Replace purple_ip*_address_is_valid by GLib functions.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
39833
diff
changeset
|
198 | GInetAddress *addr; |
|
27728
03b2a20ba465
Validate IPv6 identifiers in the domain portion of a JID.
Paul Aurich <darkrain42@pidgin.im>
parents:
27723
diff
changeset
|
199 | gboolean valid = FALSE; |
|
03b2a20ba465
Validate IPv6 identifiers in the domain portion of a JID.
Paul Aurich <darkrain42@pidgin.im>
parents:
27723
diff
changeset
|
200 | |
|
39987
9aea69045c1f
Replace purple_ip*_address_is_valid by GLib functions.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
39833
diff
changeset
|
201 | if (len <= 2 || *(c + len - 1) != ']') { |
|
27728
03b2a20ba465
Validate IPv6 identifiers in the domain portion of a JID.
Paul Aurich <darkrain42@pidgin.im>
parents:
27723
diff
changeset
|
202 | return FALSE; |
|
39987
9aea69045c1f
Replace purple_ip*_address_is_valid by GLib functions.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
39833
diff
changeset
|
203 | } |
|
27728
03b2a20ba465
Validate IPv6 identifiers in the domain portion of a JID.
Paul Aurich <darkrain42@pidgin.im>
parents:
27723
diff
changeset
|
204 | |
|
03b2a20ba465
Validate IPv6 identifiers in the domain portion of a JID.
Paul Aurich <darkrain42@pidgin.im>
parents:
27723
diff
changeset
|
205 | /* Ugly, but in-place */ |
|
27731
53ddfbc48e11
Save one traversal of the domain for IPv6 validation.
Paul Aurich <darkrain42@pidgin.im>
parents:
27728
diff
changeset
|
206 | *(gchar *)(c + len - 1) = '\0'; |
|
39987
9aea69045c1f
Replace purple_ip*_address_is_valid by GLib functions.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
39833
diff
changeset
|
207 | addr = g_inet_address_new_from_string(c + 1); |
|
9aea69045c1f
Replace purple_ip*_address_is_valid by GLib functions.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
39833
diff
changeset
|
208 | if (addr != NULL) { |
|
9aea69045c1f
Replace purple_ip*_address_is_valid by GLib functions.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
39833
diff
changeset
|
209 | valid = (g_inet_address_get_family(addr) == G_SOCKET_FAMILY_IPV6); |
|
9aea69045c1f
Replace purple_ip*_address_is_valid by GLib functions.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
39833
diff
changeset
|
210 | g_object_unref(addr); |
|
9aea69045c1f
Replace purple_ip*_address_is_valid by GLib functions.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
39833
diff
changeset
|
211 | } |
|
27731
53ddfbc48e11
Save one traversal of the domain for IPv6 validation.
Paul Aurich <darkrain42@pidgin.im>
parents:
27728
diff
changeset
|
212 | *(gchar *)(c + len - 1) = ']'; |
|
27728
03b2a20ba465
Validate IPv6 identifiers in the domain portion of a JID.
Paul Aurich <darkrain42@pidgin.im>
parents:
27723
diff
changeset
|
213 | |
|
03b2a20ba465
Validate IPv6 identifiers in the domain portion of a JID.
Paul Aurich <darkrain42@pidgin.im>
parents:
27723
diff
changeset
|
214 | return valid; |
|
03b2a20ba465
Validate IPv6 identifiers in the domain portion of a JID.
Paul Aurich <darkrain42@pidgin.im>
parents:
27723
diff
changeset
|
215 | } |
|
03b2a20ba465
Validate IPv6 identifiers in the domain portion of a JID.
Paul Aurich <darkrain42@pidgin.im>
parents:
27723
diff
changeset
|
216 | |
| 7310 | 217 | while(c && *c) { |
| 218 | gunichar ch = g_utf8_get_char(c); | |
|
27720
a809853d8d46
Be more restrictive in the characters allowed by jabber_nameprep_validate()
Mark Doliner <markdoliner@pidgin.im>
parents:
27719
diff
changeset
|
219 | /* The list of characters allowed in domain names is pretty small */ |
|
27722
3f93427031cd
XMPP allows for internationalized domain names.
Paul Aurich <darkrain42@pidgin.im>
parents:
27721
diff
changeset
|
220 | if ((ch <= 0x7F && !( (ch >= 'a' && ch <= 'z') |
|
27720
a809853d8d46
Be more restrictive in the characters allowed by jabber_nameprep_validate()
Mark Doliner <markdoliner@pidgin.im>
parents:
27719
diff
changeset
|
221 | || (ch >= '0' && ch <= '9') |
|
a809853d8d46
Be more restrictive in the characters allowed by jabber_nameprep_validate()
Mark Doliner <markdoliner@pidgin.im>
parents:
27719
diff
changeset
|
222 | || (ch >= 'A' && ch <= 'Z') |
|
a809853d8d46
Be more restrictive in the characters allowed by jabber_nameprep_validate()
Mark Doliner <markdoliner@pidgin.im>
parents:
27719
diff
changeset
|
223 | || ch == '.' |
|
27722
3f93427031cd
XMPP allows for internationalized domain names.
Paul Aurich <darkrain42@pidgin.im>
parents:
27721
diff
changeset
|
224 | || ch == '-' )) || (ch >= 0x80 && !g_unichar_isgraph(ch))) |
| 7310 | 225 | return FALSE; |
| 226 | ||
| 227 | c = g_utf8_next_char(c); | |
| 228 | } | |
| 229 | ||
| 230 | return TRUE; | |
| 231 | } | |
| 232 | ||
| 233 | gboolean jabber_resourceprep_validate(const char *str) | |
| 234 | { | |
|
27849
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
235 | gboolean result; |
| 7310 | 236 | |
| 237 | if(!str) | |
| 238 | return TRUE; | |
| 239 | ||
| 240 | if(strlen(str) > 1023) | |
| 241 | return FALSE; | |
| 242 | ||
|
27849
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
243 | strncpy(idn_buffer, str, sizeof(idn_buffer) - 1); |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
244 | idn_buffer[sizeof(idn_buffer) - 1] = '\0'; |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
245 | result = jabber_resourceprep(idn_buffer, sizeof(idn_buffer)); |
|
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
246 | return result; |
| 7310 | 247 | } |
| 248 | ||
|
29027
6af29b140195
jabber: Add SASLprep and the username substitution called for in draft-ietf-sasl-scram-10 5.1.
Paul Aurich <darkrain42@pidgin.im>
parents:
28535
diff
changeset
|
249 | char *jabber_saslprep(const char *in) |
|
6af29b140195
jabber: Add SASLprep and the username substitution called for in draft-ietf-sasl-scram-10 5.1.
Paul Aurich <darkrain42@pidgin.im>
parents:
28535
diff
changeset
|
250 | { |
|
6af29b140195
jabber: Add SASLprep and the username substitution called for in draft-ietf-sasl-scram-10 5.1.
Paul Aurich <darkrain42@pidgin.im>
parents:
28535
diff
changeset
|
251 | char *out; |
|
6af29b140195
jabber: Add SASLprep and the username substitution called for in draft-ietf-sasl-scram-10 5.1.
Paul Aurich <darkrain42@pidgin.im>
parents:
28535
diff
changeset
|
252 | |
|
6af29b140195
jabber: Add SASLprep and the username substitution called for in draft-ietf-sasl-scram-10 5.1.
Paul Aurich <darkrain42@pidgin.im>
parents:
28535
diff
changeset
|
253 | g_return_val_if_fail(in != NULL, NULL); |
|
6af29b140195
jabber: Add SASLprep and the username substitution called for in draft-ietf-sasl-scram-10 5.1.
Paul Aurich <darkrain42@pidgin.im>
parents:
28535
diff
changeset
|
254 | g_return_val_if_fail(strlen(in) <= sizeof(idn_buffer) - 1, NULL); |
|
6af29b140195
jabber: Add SASLprep and the username substitution called for in draft-ietf-sasl-scram-10 5.1.
Paul Aurich <darkrain42@pidgin.im>
parents:
28535
diff
changeset
|
255 | |
|
6af29b140195
jabber: Add SASLprep and the username substitution called for in draft-ietf-sasl-scram-10 5.1.
Paul Aurich <darkrain42@pidgin.im>
parents:
28535
diff
changeset
|
256 | strncpy(idn_buffer, in, sizeof(idn_buffer) - 1); |
|
6af29b140195
jabber: Add SASLprep and the username substitution called for in draft-ietf-sasl-scram-10 5.1.
Paul Aurich <darkrain42@pidgin.im>
parents:
28535
diff
changeset
|
257 | idn_buffer[sizeof(idn_buffer) - 1] = '\0'; |
|
6af29b140195
jabber: Add SASLprep and the username substitution called for in draft-ietf-sasl-scram-10 5.1.
Paul Aurich <darkrain42@pidgin.im>
parents:
28535
diff
changeset
|
258 | |
|
6af29b140195
jabber: Add SASLprep and the username substitution called for in draft-ietf-sasl-scram-10 5.1.
Paul Aurich <darkrain42@pidgin.im>
parents:
28535
diff
changeset
|
259 | if (STRINGPREP_OK != stringprep(idn_buffer, sizeof(idn_buffer), 0, |
|
6af29b140195
jabber: Add SASLprep and the username substitution called for in draft-ietf-sasl-scram-10 5.1.
Paul Aurich <darkrain42@pidgin.im>
parents:
28535
diff
changeset
|
260 | stringprep_saslprep)) { |
|
6af29b140195
jabber: Add SASLprep and the username substitution called for in draft-ietf-sasl-scram-10 5.1.
Paul Aurich <darkrain42@pidgin.im>
parents:
28535
diff
changeset
|
261 | memset(idn_buffer, 0, sizeof(idn_buffer)); |
|
6af29b140195
jabber: Add SASLprep and the username substitution called for in draft-ietf-sasl-scram-10 5.1.
Paul Aurich <darkrain42@pidgin.im>
parents:
28535
diff
changeset
|
262 | return NULL; |
|
6af29b140195
jabber: Add SASLprep and the username substitution called for in draft-ietf-sasl-scram-10 5.1.
Paul Aurich <darkrain42@pidgin.im>
parents:
28535
diff
changeset
|
263 | } |
|
6af29b140195
jabber: Add SASLprep and the username substitution called for in draft-ietf-sasl-scram-10 5.1.
Paul Aurich <darkrain42@pidgin.im>
parents:
28535
diff
changeset
|
264 | |
|
6af29b140195
jabber: Add SASLprep and the username substitution called for in draft-ietf-sasl-scram-10 5.1.
Paul Aurich <darkrain42@pidgin.im>
parents:
28535
diff
changeset
|
265 | out = g_strdup(idn_buffer); |
|
6af29b140195
jabber: Add SASLprep and the username substitution called for in draft-ietf-sasl-scram-10 5.1.
Paul Aurich <darkrain42@pidgin.im>
parents:
28535
diff
changeset
|
266 | memset(idn_buffer, 0, sizeof(idn_buffer)); |
|
6af29b140195
jabber: Add SASLprep and the username substitution called for in draft-ietf-sasl-scram-10 5.1.
Paul Aurich <darkrain42@pidgin.im>
parents:
28535
diff
changeset
|
267 | return out; |
|
6af29b140195
jabber: Add SASLprep and the username substitution called for in draft-ietf-sasl-scram-10 5.1.
Paul Aurich <darkrain42@pidgin.im>
parents:
28535
diff
changeset
|
268 | } |
|
6af29b140195
jabber: Add SASLprep and the username substitution called for in draft-ietf-sasl-scram-10 5.1.
Paul Aurich <darkrain42@pidgin.im>
parents:
28535
diff
changeset
|
269 | |
|
28414
5093c1a49d5c
jabber: Use a better method for dealing with terminating slashes in JIDs.
Paul Aurich <darkrain42@pidgin.im>
parents:
28336
diff
changeset
|
270 | static JabberID* |
|
5093c1a49d5c
jabber: Use a better method for dealing with terminating slashes in JIDs.
Paul Aurich <darkrain42@pidgin.im>
parents:
28336
diff
changeset
|
271 | jabber_id_new_internal(const char *str, gboolean allow_terminating_slash) |
| 2086 | 272 | { |
|
27713
9985f2f358c9
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <markdoliner@pidgin.im>
parents:
27689
diff
changeset
|
273 | const char *at = NULL; |
|
9985f2f358c9
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <markdoliner@pidgin.im>
parents:
27689
diff
changeset
|
274 | const char *slash = NULL; |
|
27714
c86eb4fefae2
Change jabber_id_new() to iterate byte by byte instead of character
Mark Doliner <markdoliner@pidgin.im>
parents:
27713
diff
changeset
|
275 | const char *c; |
|
27713
9985f2f358c9
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <markdoliner@pidgin.im>
parents:
27689
diff
changeset
|
276 | gboolean needs_validation = FALSE; |
| 7014 | 277 | JabberID *jid; |
| 2086 | 278 | |
|
27713
9985f2f358c9
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <markdoliner@pidgin.im>
parents:
27689
diff
changeset
|
279 | if (!str) |
|
9985f2f358c9
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <markdoliner@pidgin.im>
parents:
27689
diff
changeset
|
280 | return NULL; |
|
9985f2f358c9
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <markdoliner@pidgin.im>
parents:
27689
diff
changeset
|
281 | |
|
27714
c86eb4fefae2
Change jabber_id_new() to iterate byte by byte instead of character
Mark Doliner <markdoliner@pidgin.im>
parents:
27713
diff
changeset
|
282 | for (c = str; *c != '\0'; c++) |
|
27713
9985f2f358c9
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <markdoliner@pidgin.im>
parents:
27689
diff
changeset
|
283 | { |
|
27714
c86eb4fefae2
Change jabber_id_new() to iterate byte by byte instead of character
Mark Doliner <markdoliner@pidgin.im>
parents:
27713
diff
changeset
|
284 | switch (*c) { |
|
27713
9985f2f358c9
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <markdoliner@pidgin.im>
parents:
27689
diff
changeset
|
285 | case '@': |
|
9985f2f358c9
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <markdoliner@pidgin.im>
parents:
27689
diff
changeset
|
286 | if (!slash) { |
|
9985f2f358c9
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <markdoliner@pidgin.im>
parents:
27689
diff
changeset
|
287 | if (at) { |
|
9985f2f358c9
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <markdoliner@pidgin.im>
parents:
27689
diff
changeset
|
288 | /* Multiple @'s in the node/domain portion, not a valid JID! */ |
|
9985f2f358c9
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <markdoliner@pidgin.im>
parents:
27689
diff
changeset
|
289 | return NULL; |
|
9985f2f358c9
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <markdoliner@pidgin.im>
parents:
27689
diff
changeset
|
290 | } |
|
27714
c86eb4fefae2
Change jabber_id_new() to iterate byte by byte instead of character
Mark Doliner <markdoliner@pidgin.im>
parents:
27713
diff
changeset
|
291 | if (c == str) { |
|
27713
9985f2f358c9
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <markdoliner@pidgin.im>
parents:
27689
diff
changeset
|
292 | /* JIDs cannot start with @ */ |
|
9985f2f358c9
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <markdoliner@pidgin.im>
parents:
27689
diff
changeset
|
293 | return NULL; |
|
9985f2f358c9
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <markdoliner@pidgin.im>
parents:
27689
diff
changeset
|
294 | } |
|
27714
c86eb4fefae2
Change jabber_id_new() to iterate byte by byte instead of character
Mark Doliner <markdoliner@pidgin.im>
parents:
27713
diff
changeset
|
295 | if (c[1] == '\0') { |
|
27713
9985f2f358c9
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <markdoliner@pidgin.im>
parents:
27689
diff
changeset
|
296 | /* JIDs cannot end with @ */ |
|
9985f2f358c9
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <markdoliner@pidgin.im>
parents:
27689
diff
changeset
|
297 | return NULL; |
|
9985f2f358c9
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <markdoliner@pidgin.im>
parents:
27689
diff
changeset
|
298 | } |
|
27714
c86eb4fefae2
Change jabber_id_new() to iterate byte by byte instead of character
Mark Doliner <markdoliner@pidgin.im>
parents:
27713
diff
changeset
|
299 | at = c; |
|
27713
9985f2f358c9
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <markdoliner@pidgin.im>
parents:
27689
diff
changeset
|
300 | } |
|
9985f2f358c9
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <markdoliner@pidgin.im>
parents:
27689
diff
changeset
|
301 | break; |
|
9985f2f358c9
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <markdoliner@pidgin.im>
parents:
27689
diff
changeset
|
302 | |
|
9985f2f358c9
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <markdoliner@pidgin.im>
parents:
27689
diff
changeset
|
303 | case '/': |
|
9985f2f358c9
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <markdoliner@pidgin.im>
parents:
27689
diff
changeset
|
304 | if (!slash) { |
|
27714
c86eb4fefae2
Change jabber_id_new() to iterate byte by byte instead of character
Mark Doliner <markdoliner@pidgin.im>
parents:
27713
diff
changeset
|
305 | if (c == str) { |
|
27713
9985f2f358c9
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <markdoliner@pidgin.im>
parents:
27689
diff
changeset
|
306 | /* JIDs cannot start with / */ |
|
9985f2f358c9
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <markdoliner@pidgin.im>
parents:
27689
diff
changeset
|
307 | return NULL; |
|
9985f2f358c9
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <markdoliner@pidgin.im>
parents:
27689
diff
changeset
|
308 | } |
|
28414
5093c1a49d5c
jabber: Use a better method for dealing with terminating slashes in JIDs.
Paul Aurich <darkrain42@pidgin.im>
parents:
28336
diff
changeset
|
309 | if (c[1] == '\0' && !allow_terminating_slash) { |
|
27713
9985f2f358c9
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <markdoliner@pidgin.im>
parents:
27689
diff
changeset
|
310 | /* JIDs cannot end with / */ |
|
9985f2f358c9
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <markdoliner@pidgin.im>
parents:
27689
diff
changeset
|
311 | return NULL; |
|
9985f2f358c9
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <markdoliner@pidgin.im>
parents:
27689
diff
changeset
|
312 | } |
|
27714
c86eb4fefae2
Change jabber_id_new() to iterate byte by byte instead of character
Mark Doliner <markdoliner@pidgin.im>
parents:
27713
diff
changeset
|
313 | slash = c; |
|
27713
9985f2f358c9
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <markdoliner@pidgin.im>
parents:
27689
diff
changeset
|
314 | } |
|
9985f2f358c9
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <markdoliner@pidgin.im>
parents:
27689
diff
changeset
|
315 | break; |
|
9985f2f358c9
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <markdoliner@pidgin.im>
parents:
27689
diff
changeset
|
316 | |
|
9985f2f358c9
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <markdoliner@pidgin.im>
parents:
27689
diff
changeset
|
317 | default: |
|
9985f2f358c9
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <markdoliner@pidgin.im>
parents:
27689
diff
changeset
|
318 | /* characters allowed everywhere */ |
|
27719
cc4aea1fd74c
Of course, these should be >= and <=
Mark Doliner <markdoliner@pidgin.im>
parents:
27714
diff
changeset
|
319 | if ((*c >= 'a' && *c <= 'z') |
|
cc4aea1fd74c
Of course, these should be >= and <=
Mark Doliner <markdoliner@pidgin.im>
parents:
27714
diff
changeset
|
320 | || (*c >= '0' && *c <= '9') |
|
cc4aea1fd74c
Of course, these should be >= and <=
Mark Doliner <markdoliner@pidgin.im>
parents:
27714
diff
changeset
|
321 | || (*c >= 'A' && *c <= 'Z') |
|
27714
c86eb4fefae2
Change jabber_id_new() to iterate byte by byte instead of character
Mark Doliner <markdoliner@pidgin.im>
parents:
27713
diff
changeset
|
322 | || *c == '.' || *c == '-') |
|
27713
9985f2f358c9
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <markdoliner@pidgin.im>
parents:
27689
diff
changeset
|
323 | /* We're good */ |
|
9985f2f358c9
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <markdoliner@pidgin.im>
parents:
27689
diff
changeset
|
324 | break; |
|
9985f2f358c9
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <markdoliner@pidgin.im>
parents:
27689
diff
changeset
|
325 | |
|
9985f2f358c9
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <markdoliner@pidgin.im>
parents:
27689
diff
changeset
|
326 | /* |
|
9985f2f358c9
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <markdoliner@pidgin.im>
parents:
27689
diff
changeset
|
327 | * Hmm, this character is a bit more exotic. Better fall |
|
9985f2f358c9
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <markdoliner@pidgin.im>
parents:
27689
diff
changeset
|
328 | * back to using the more expensive UTF-8 compliant |
|
9985f2f358c9
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <markdoliner@pidgin.im>
parents:
27689
diff
changeset
|
329 | * stringprep functions. |
|
9985f2f358c9
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <markdoliner@pidgin.im>
parents:
27689
diff
changeset
|
330 | */ |
|
9985f2f358c9
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <markdoliner@pidgin.im>
parents:
27689
diff
changeset
|
331 | needs_validation = TRUE; |
|
9985f2f358c9
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <markdoliner@pidgin.im>
parents:
27689
diff
changeset
|
332 | break; |
|
9985f2f358c9
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <markdoliner@pidgin.im>
parents:
27689
diff
changeset
|
333 | } |
|
9985f2f358c9
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <markdoliner@pidgin.im>
parents:
27689
diff
changeset
|
334 | } |
|
9985f2f358c9
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <markdoliner@pidgin.im>
parents:
27689
diff
changeset
|
335 | |
|
9985f2f358c9
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <markdoliner@pidgin.im>
parents:
27689
diff
changeset
|
336 | if (!needs_validation) { |
|
9985f2f358c9
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <markdoliner@pidgin.im>
parents:
27689
diff
changeset
|
337 | /* JID is made of only ASCII characters--just lowercase and return */ |
|
9985f2f358c9
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <markdoliner@pidgin.im>
parents:
27689
diff
changeset
|
338 | jid = g_new0(JabberID, 1); |
|
9985f2f358c9
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <markdoliner@pidgin.im>
parents:
27689
diff
changeset
|
339 | |
|
9985f2f358c9
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <markdoliner@pidgin.im>
parents:
27689
diff
changeset
|
340 | if (at) { |
|
9985f2f358c9
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <markdoliner@pidgin.im>
parents:
27689
diff
changeset
|
341 | jid->node = g_ascii_strdown(str, at - str); |
|
9985f2f358c9
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <markdoliner@pidgin.im>
parents:
27689
diff
changeset
|
342 | if (slash) { |
|
9985f2f358c9
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <markdoliner@pidgin.im>
parents:
27689
diff
changeset
|
343 | jid->domain = g_ascii_strdown(at + 1, slash - (at + 1)); |
|
28414
5093c1a49d5c
jabber: Use a better method for dealing with terminating slashes in JIDs.
Paul Aurich <darkrain42@pidgin.im>
parents:
28336
diff
changeset
|
344 | if (*(slash + 1)) |
|
5093c1a49d5c
jabber: Use a better method for dealing with terminating slashes in JIDs.
Paul Aurich <darkrain42@pidgin.im>
parents:
28336
diff
changeset
|
345 | jid->resource = g_strdup(slash + 1); |
|
27713
9985f2f358c9
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <markdoliner@pidgin.im>
parents:
27689
diff
changeset
|
346 | } else { |
|
9985f2f358c9
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <markdoliner@pidgin.im>
parents:
27689
diff
changeset
|
347 | jid->domain = g_ascii_strdown(at + 1, -1); |
|
9985f2f358c9
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <markdoliner@pidgin.im>
parents:
27689
diff
changeset
|
348 | } |
|
9985f2f358c9
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <markdoliner@pidgin.im>
parents:
27689
diff
changeset
|
349 | } else { |
|
9985f2f358c9
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <markdoliner@pidgin.im>
parents:
27689
diff
changeset
|
350 | if (slash) { |
|
9985f2f358c9
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <markdoliner@pidgin.im>
parents:
27689
diff
changeset
|
351 | jid->domain = g_ascii_strdown(str, slash - str); |
|
28414
5093c1a49d5c
jabber: Use a better method for dealing with terminating slashes in JIDs.
Paul Aurich <darkrain42@pidgin.im>
parents:
28336
diff
changeset
|
352 | if (*(slash + 1)) |
|
5093c1a49d5c
jabber: Use a better method for dealing with terminating slashes in JIDs.
Paul Aurich <darkrain42@pidgin.im>
parents:
28336
diff
changeset
|
353 | jid->resource = g_strdup(slash + 1); |
|
27713
9985f2f358c9
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <markdoliner@pidgin.im>
parents:
27689
diff
changeset
|
354 | } else { |
|
9985f2f358c9
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <markdoliner@pidgin.im>
parents:
27689
diff
changeset
|
355 | jid->domain = g_ascii_strdown(str, -1); |
|
9985f2f358c9
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <markdoliner@pidgin.im>
parents:
27689
diff
changeset
|
356 | } |
|
9985f2f358c9
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <markdoliner@pidgin.im>
parents:
27689
diff
changeset
|
357 | } |
|
9985f2f358c9
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <markdoliner@pidgin.im>
parents:
27689
diff
changeset
|
358 | return jid; |
|
9985f2f358c9
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <markdoliner@pidgin.im>
parents:
27689
diff
changeset
|
359 | } |
|
9985f2f358c9
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <markdoliner@pidgin.im>
parents:
27689
diff
changeset
|
360 | |
|
9985f2f358c9
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <markdoliner@pidgin.im>
parents:
27689
diff
changeset
|
361 | /* |
|
9985f2f358c9
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <markdoliner@pidgin.im>
parents:
27689
diff
changeset
|
362 | * If we get here, there are some non-ASCII chars in the string, so |
|
9985f2f358c9
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <markdoliner@pidgin.im>
parents:
27689
diff
changeset
|
363 | * we'll need to validate it, normalize, and finally do a full jabber |
|
9985f2f358c9
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <markdoliner@pidgin.im>
parents:
27689
diff
changeset
|
364 | * nodeprep on the jid. |
|
9985f2f358c9
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <markdoliner@pidgin.im>
parents:
27689
diff
changeset
|
365 | */ |
|
9985f2f358c9
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <markdoliner@pidgin.im>
parents:
27689
diff
changeset
|
366 | |
|
9985f2f358c9
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <markdoliner@pidgin.im>
parents:
27689
diff
changeset
|
367 | if (!g_utf8_validate(str, -1, NULL)) |
| 7014 | 368 | return NULL; |
| 2086 | 369 | |
|
27849
7f7428cb8309
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <darkrain42@pidgin.im>
parents:
27819
diff
changeset
|
370 | return jabber_idn_validate(str, at, slash, c /* points to the null */); |
| 2086 | 371 | } |
| 372 | ||
| 7014 | 373 | void |
| 374 | jabber_id_free(JabberID *jid) | |
| 2086 | 375 | { |
| 7014 | 376 | if(jid) { |
|
31509
992ad686ba0b
jabber: if (foo) g_free(foo) -> g_free(foo)
Paul Aurich <darkrain42@pidgin.im>
parents:
31294
diff
changeset
|
377 | g_free(jid->node); |
|
992ad686ba0b
jabber: if (foo) g_free(foo) -> g_free(foo)
Paul Aurich <darkrain42@pidgin.im>
parents:
31294
diff
changeset
|
378 | g_free(jid->domain); |
|
992ad686ba0b
jabber: if (foo) g_free(foo) -> g_free(foo)
Paul Aurich <darkrain42@pidgin.im>
parents:
31294
diff
changeset
|
379 | g_free(jid->resource); |
| 7014 | 380 | g_free(jid); |
| 381 | } | |
| 2086 | 382 | } |
| 383 | ||
|
35235
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
31509
diff
changeset
|
384 | |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
31509
diff
changeset
|
385 | gboolean |
|
35308
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
386 | jabber_id_equal(const JabberID *jid1, const JabberID *jid2) |
|
35235
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
31509
diff
changeset
|
387 | { |
|
35308
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
388 | if (!jid1 && !jid2) { |
|
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
389 | /* Both are null therefore equal */ |
|
35235
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
31509
diff
changeset
|
390 | return TRUE; |
|
35308
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
391 | } |
|
35235
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
31509
diff
changeset
|
392 | |
|
35308
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
393 | if (!jid1 || !jid2) { |
|
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
394 | /* One is null, other is non-null, therefore not equal */ |
|
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
395 | return FALSE; |
|
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
396 | } |
|
35235
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
31509
diff
changeset
|
397 | |
|
35308
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
398 | return purple_strequal(jid1->node, jid2->node) && |
|
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
399 | purple_strequal(jid1->domain, jid2->domain) && |
|
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
400 | purple_strequal(jid1->resource, jid2->resource); |
|
35235
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
31509
diff
changeset
|
401 | } |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
31509
diff
changeset
|
402 | |
|
29063
f245c5e9e9f3
jabber: When getting info on a "bare" domain JID, interpret the value of "last"
Marcus Lundblad <malu@pidgin.im>
parents:
28535
diff
changeset
|
403 | char *jabber_get_domain(const char *in) |
|
f245c5e9e9f3
jabber: When getting info on a "bare" domain JID, interpret the value of "last"
Marcus Lundblad <malu@pidgin.im>
parents:
28535
diff
changeset
|
404 | { |
|
f245c5e9e9f3
jabber: When getting info on a "bare" domain JID, interpret the value of "last"
Marcus Lundblad <malu@pidgin.im>
parents:
28535
diff
changeset
|
405 | JabberID *jid = jabber_id_new(in); |
|
f245c5e9e9f3
jabber: When getting info on a "bare" domain JID, interpret the value of "last"
Marcus Lundblad <malu@pidgin.im>
parents:
28535
diff
changeset
|
406 | char *out; |
|
f245c5e9e9f3
jabber: When getting info on a "bare" domain JID, interpret the value of "last"
Marcus Lundblad <malu@pidgin.im>
parents:
28535
diff
changeset
|
407 | |
|
f245c5e9e9f3
jabber: When getting info on a "bare" domain JID, interpret the value of "last"
Marcus Lundblad <malu@pidgin.im>
parents:
28535
diff
changeset
|
408 | if (!jid) |
|
f245c5e9e9f3
jabber: When getting info on a "bare" domain JID, interpret the value of "last"
Marcus Lundblad <malu@pidgin.im>
parents:
28535
diff
changeset
|
409 | return NULL; |
|
f245c5e9e9f3
jabber: When getting info on a "bare" domain JID, interpret the value of "last"
Marcus Lundblad <malu@pidgin.im>
parents:
28535
diff
changeset
|
410 | |
|
f245c5e9e9f3
jabber: When getting info on a "bare" domain JID, interpret the value of "last"
Marcus Lundblad <malu@pidgin.im>
parents:
28535
diff
changeset
|
411 | out = g_strdup(jid->domain); |
|
f245c5e9e9f3
jabber: When getting info on a "bare" domain JID, interpret the value of "last"
Marcus Lundblad <malu@pidgin.im>
parents:
28535
diff
changeset
|
412 | jabber_id_free(jid); |
|
f245c5e9e9f3
jabber: When getting info on a "bare" domain JID, interpret the value of "last"
Marcus Lundblad <malu@pidgin.im>
parents:
28535
diff
changeset
|
413 | |
|
f245c5e9e9f3
jabber: When getting info on a "bare" domain JID, interpret the value of "last"
Marcus Lundblad <malu@pidgin.im>
parents:
28535
diff
changeset
|
414 | return out; |
|
f245c5e9e9f3
jabber: When getting info on a "bare" domain JID, interpret the value of "last"
Marcus Lundblad <malu@pidgin.im>
parents:
28535
diff
changeset
|
415 | } |
| 7014 | 416 | |
| 7306 | 417 | char *jabber_get_resource(const char *in) |
| 7014 | 418 | { |
| 7306 | 419 | JabberID *jid = jabber_id_new(in); |
| 420 | char *out; | |
| 7014 | 421 | |
| 7306 | 422 | if(!jid) |
| 7014 | 423 | return NULL; |
| 7306 | 424 | |
| 425 | out = g_strdup(jid->resource); | |
| 426 | jabber_id_free(jid); | |
| 427 | ||
| 428 | return out; | |
| 7014 | 429 | } |
| 430 | ||
|
35235
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
31509
diff
changeset
|
431 | JabberID * |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
31509
diff
changeset
|
432 | jabber_id_to_bare_jid(const JabberID *jid) |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
31509
diff
changeset
|
433 | { |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
31509
diff
changeset
|
434 | JabberID *result = g_new0(JabberID, 1); |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
31509
diff
changeset
|
435 | |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
31509
diff
changeset
|
436 | result->node = g_strdup(jid->node); |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
31509
diff
changeset
|
437 | result->domain = g_strdup(jid->domain); |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
31509
diff
changeset
|
438 | |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
31509
diff
changeset
|
439 | return result; |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
31509
diff
changeset
|
440 | } |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
31509
diff
changeset
|
441 | |
|
28431
8450418b5abd
jabber: Properly handle adding buddies that contain a resource. Closes #10151.
Paul Aurich <darkrain42@pidgin.im>
parents:
28414
diff
changeset
|
442 | char * |
|
8450418b5abd
jabber: Properly handle adding buddies that contain a resource. Closes #10151.
Paul Aurich <darkrain42@pidgin.im>
parents:
28414
diff
changeset
|
443 | jabber_get_bare_jid(const char *in) |
| 7014 | 444 | { |
| 7306 | 445 | JabberID *jid = jabber_id_new(in); |
| 446 | char *out; | |
| 7014 | 447 | |
|
28431
8450418b5abd
jabber: Properly handle adding buddies that contain a resource. Closes #10151.
Paul Aurich <darkrain42@pidgin.im>
parents:
28414
diff
changeset
|
448 | if (!jid) |
| 7306 | 449 | return NULL; |
|
28431
8450418b5abd
jabber: Properly handle adding buddies that contain a resource. Closes #10151.
Paul Aurich <darkrain42@pidgin.im>
parents:
28414
diff
changeset
|
450 | out = jabber_id_get_bare_jid(jid); |
| 7306 | 451 | jabber_id_free(jid); |
| 452 | ||
| 453 | return out; | |
| 7014 | 454 | } |
| 7261 | 455 | |
|
28431
8450418b5abd
jabber: Properly handle adding buddies that contain a resource. Closes #10151.
Paul Aurich <darkrain42@pidgin.im>
parents:
28414
diff
changeset
|
456 | char * |
|
8450418b5abd
jabber: Properly handle adding buddies that contain a resource. Closes #10151.
Paul Aurich <darkrain42@pidgin.im>
parents:
28414
diff
changeset
|
457 | jabber_id_get_bare_jid(const JabberID *jid) |
|
8450418b5abd
jabber: Properly handle adding buddies that contain a resource. Closes #10151.
Paul Aurich <darkrain42@pidgin.im>
parents:
28414
diff
changeset
|
458 | { |
|
8450418b5abd
jabber: Properly handle adding buddies that contain a resource. Closes #10151.
Paul Aurich <darkrain42@pidgin.im>
parents:
28414
diff
changeset
|
459 | g_return_val_if_fail(jid != NULL, NULL); |
|
8450418b5abd
jabber: Properly handle adding buddies that contain a resource. Closes #10151.
Paul Aurich <darkrain42@pidgin.im>
parents:
28414
diff
changeset
|
460 | |
|
8450418b5abd
jabber: Properly handle adding buddies that contain a resource. Closes #10151.
Paul Aurich <darkrain42@pidgin.im>
parents:
28414
diff
changeset
|
461 | return g_strconcat(jid->node ? jid->node : "", |
|
8450418b5abd
jabber: Properly handle adding buddies that contain a resource. Closes #10151.
Paul Aurich <darkrain42@pidgin.im>
parents:
28414
diff
changeset
|
462 | jid->node ? "@" : "", |
|
8450418b5abd
jabber: Properly handle adding buddies that contain a resource. Closes #10151.
Paul Aurich <darkrain42@pidgin.im>
parents:
28414
diff
changeset
|
463 | jid->domain, |
|
8450418b5abd
jabber: Properly handle adding buddies that contain a resource. Closes #10151.
Paul Aurich <darkrain42@pidgin.im>
parents:
28414
diff
changeset
|
464 | NULL); |
|
8450418b5abd
jabber: Properly handle adding buddies that contain a resource. Closes #10151.
Paul Aurich <darkrain42@pidgin.im>
parents:
28414
diff
changeset
|
465 | } |
|
8450418b5abd
jabber: Properly handle adding buddies that contain a resource. Closes #10151.
Paul Aurich <darkrain42@pidgin.im>
parents:
28414
diff
changeset
|
466 | |
|
35235
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
31509
diff
changeset
|
467 | char * |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
31509
diff
changeset
|
468 | jabber_id_get_full_jid(const JabberID *jid) |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
31509
diff
changeset
|
469 | { |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
31509
diff
changeset
|
470 | g_return_val_if_fail(jid != NULL, NULL); |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
31509
diff
changeset
|
471 | |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
31509
diff
changeset
|
472 | return g_strconcat(jid->node ? jid->node : "", |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
31509
diff
changeset
|
473 | jid->node ? "@" : "", |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
31509
diff
changeset
|
474 | jid->domain, |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
31509
diff
changeset
|
475 | jid->resource ? "/" : "", |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
31509
diff
changeset
|
476 | jid->resource ? jid->resource : "", |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
31509
diff
changeset
|
477 | NULL); |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
31509
diff
changeset
|
478 | } |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
31509
diff
changeset
|
479 | |
|
29063
f245c5e9e9f3
jabber: When getting info on a "bare" domain JID, interpret the value of "last"
Marcus Lundblad <malu@pidgin.im>
parents:
28535
diff
changeset
|
480 | gboolean |
|
f245c5e9e9f3
jabber: When getting info on a "bare" domain JID, interpret the value of "last"
Marcus Lundblad <malu@pidgin.im>
parents:
28535
diff
changeset
|
481 | jabber_jid_is_domain(const char *jid) |
|
f245c5e9e9f3
jabber: When getting info on a "bare" domain JID, interpret the value of "last"
Marcus Lundblad <malu@pidgin.im>
parents:
28535
diff
changeset
|
482 | { |
|
29097
0834410aa178
Tighter scoping and slightly less memory usage.
Paul Aurich <darkrain42@pidgin.im>
parents:
29085
diff
changeset
|
483 | const char *c; |
|
29063
f245c5e9e9f3
jabber: When getting info on a "bare" domain JID, interpret the value of "last"
Marcus Lundblad <malu@pidgin.im>
parents:
28535
diff
changeset
|
484 | |
|
29097
0834410aa178
Tighter scoping and slightly less memory usage.
Paul Aurich <darkrain42@pidgin.im>
parents:
29085
diff
changeset
|
485 | for (c = jid; *c; ++c) { |
|
0834410aa178
Tighter scoping and slightly less memory usage.
Paul Aurich <darkrain42@pidgin.im>
parents:
29085
diff
changeset
|
486 | if (*c == '@' || *c == '/') |
|
0834410aa178
Tighter scoping and slightly less memory usage.
Paul Aurich <darkrain42@pidgin.im>
parents:
29085
diff
changeset
|
487 | return FALSE; |
|
0834410aa178
Tighter scoping and slightly less memory usage.
Paul Aurich <darkrain42@pidgin.im>
parents:
29085
diff
changeset
|
488 | } |
|
0834410aa178
Tighter scoping and slightly less memory usage.
Paul Aurich <darkrain42@pidgin.im>
parents:
29085
diff
changeset
|
489 | |
|
0834410aa178
Tighter scoping and slightly less memory usage.
Paul Aurich <darkrain42@pidgin.im>
parents:
29085
diff
changeset
|
490 | return TRUE; |
|
29063
f245c5e9e9f3
jabber: When getting info on a "bare" domain JID, interpret the value of "last"
Marcus Lundblad <malu@pidgin.im>
parents:
28535
diff
changeset
|
491 | } |
|
f245c5e9e9f3
jabber: When getting info on a "bare" domain JID, interpret the value of "last"
Marcus Lundblad <malu@pidgin.im>
parents:
28535
diff
changeset
|
492 | |
|
f245c5e9e9f3
jabber: When getting info on a "bare" domain JID, interpret the value of "last"
Marcus Lundblad <malu@pidgin.im>
parents:
28535
diff
changeset
|
493 | |
|
28414
5093c1a49d5c
jabber: Use a better method for dealing with terminating slashes in JIDs.
Paul Aurich <darkrain42@pidgin.im>
parents:
28336
diff
changeset
|
494 | JabberID * |
|
5093c1a49d5c
jabber: Use a better method for dealing with terminating slashes in JIDs.
Paul Aurich <darkrain42@pidgin.im>
parents:
28336
diff
changeset
|
495 | jabber_id_new(const char *str) |
|
5093c1a49d5c
jabber: Use a better method for dealing with terminating slashes in JIDs.
Paul Aurich <darkrain42@pidgin.im>
parents:
28336
diff
changeset
|
496 | { |
|
5093c1a49d5c
jabber: Use a better method for dealing with terminating slashes in JIDs.
Paul Aurich <darkrain42@pidgin.im>
parents:
28336
diff
changeset
|
497 | return jabber_id_new_internal(str, FALSE); |
|
5093c1a49d5c
jabber: Use a better method for dealing with terminating slashes in JIDs.
Paul Aurich <darkrain42@pidgin.im>
parents:
28336
diff
changeset
|
498 | } |
|
5093c1a49d5c
jabber: Use a better method for dealing with terminating slashes in JIDs.
Paul Aurich <darkrain42@pidgin.im>
parents:
28336
diff
changeset
|
499 | |
| 15884 | 500 | const char *jabber_normalize(const PurpleAccount *account, const char *in) |
| 7261 | 501 | { |
|
32277
97f16af01a05
Convert jabber prpl to use accessor functions purple_connection_get_protocol_data() and purple_connection_set_protocol_data().
Andrew Victor <andrew.victor@mxit.com>
parents:
31509
diff
changeset
|
502 | PurpleConnection *gc = NULL; |
|
97f16af01a05
Convert jabber prpl to use accessor functions purple_connection_get_protocol_data() and purple_connection_set_protocol_data().
Andrew Victor <andrew.victor@mxit.com>
parents:
31509
diff
changeset
|
503 | JabberStream *js = NULL; |
| 7322 | 504 | static char buf[3072]; /* maximum legal length of a jabber jid */ |
| 505 | JabberID *jid; | |
| 7261 | 506 | |
|
39833
cd90938cd6f7
Silence various discarded const warnings.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
38854
diff
changeset
|
507 | if (account) { |
|
cd90938cd6f7
Silence various discarded const warnings.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
38854
diff
changeset
|
508 | gc = purple_account_get_connection((PurpleAccount *)account); |
|
cd90938cd6f7
Silence various discarded const warnings.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
38854
diff
changeset
|
509 | } |
|
32277
97f16af01a05
Convert jabber prpl to use accessor functions purple_connection_get_protocol_data() and purple_connection_set_protocol_data().
Andrew Victor <andrew.victor@mxit.com>
parents:
31509
diff
changeset
|
510 | if (gc) |
|
97f16af01a05
Convert jabber prpl to use accessor functions purple_connection_get_protocol_data() and purple_connection_set_protocol_data().
Andrew Victor <andrew.victor@mxit.com>
parents:
31509
diff
changeset
|
511 | js = purple_connection_get_protocol_data(gc); |
|
97f16af01a05
Convert jabber prpl to use accessor functions purple_connection_get_protocol_data() and purple_connection_set_protocol_data().
Andrew Victor <andrew.victor@mxit.com>
parents:
31509
diff
changeset
|
512 | |
|
28414
5093c1a49d5c
jabber: Use a better method for dealing with terminating slashes in JIDs.
Paul Aurich <darkrain42@pidgin.im>
parents:
28336
diff
changeset
|
513 | jid = jabber_id_new_internal(in, TRUE); |
| 7322 | 514 | if(!jid) |
| 7310 | 515 | return NULL; |
| 516 | ||
|
27130
9cb09f3df8c7
jabber_id_new() needs to be case-folding the node and domain.
Paul Aurich <darkrain42@pidgin.im>
parents:
25110
diff
changeset
|
517 | if(js && jid->node && jid->resource && |
|
9cb09f3df8c7
jabber_id_new() needs to be case-folding the node and domain.
Paul Aurich <darkrain42@pidgin.im>
parents:
25110
diff
changeset
|
518 | jabber_chat_find(js, jid->node, jid->domain)) |
|
9cb09f3df8c7
jabber_id_new() needs to be case-folding the node and domain.
Paul Aurich <darkrain42@pidgin.im>
parents:
25110
diff
changeset
|
519 | g_snprintf(buf, sizeof(buf), "%s@%s/%s", jid->node, jid->domain, |
| 7322 | 520 | jid->resource); |
| 521 | else | |
|
27130
9cb09f3df8c7
jabber_id_new() needs to be case-folding the node and domain.
Paul Aurich <darkrain42@pidgin.im>
parents:
25110
diff
changeset
|
522 | g_snprintf(buf, sizeof(buf), "%s%s%s", jid->node ? jid->node : "", |
|
9cb09f3df8c7
jabber_id_new() needs to be case-folding the node and domain.
Paul Aurich <darkrain42@pidgin.im>
parents:
25110
diff
changeset
|
523 | jid->node ? "@" : "", jid->domain); |
| 7322 | 524 | |
| 7429 | 525 | jabber_id_free(jid); |
| 526 | ||
| 7261 | 527 | return buf; |
| 528 | } | |
| 7306 | 529 | |
|
27163
398d47149e2f
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <darkrain42@pidgin.im>
parents:
27130
diff
changeset
|
530 | gboolean |
|
398d47149e2f
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <darkrain42@pidgin.im>
parents:
27130
diff
changeset
|
531 | jabber_is_own_server(JabberStream *js, const char *str) |
|
398d47149e2f
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <darkrain42@pidgin.im>
parents:
27130
diff
changeset
|
532 | { |
|
398d47149e2f
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <darkrain42@pidgin.im>
parents:
27130
diff
changeset
|
533 | JabberID *jid; |
|
398d47149e2f
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <darkrain42@pidgin.im>
parents:
27130
diff
changeset
|
534 | gboolean equal; |
|
398d47149e2f
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <darkrain42@pidgin.im>
parents:
27130
diff
changeset
|
535 | |
|
398d47149e2f
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <darkrain42@pidgin.im>
parents:
27130
diff
changeset
|
536 | if (str == NULL) |
|
398d47149e2f
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <darkrain42@pidgin.im>
parents:
27130
diff
changeset
|
537 | return FALSE; |
|
398d47149e2f
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <darkrain42@pidgin.im>
parents:
27130
diff
changeset
|
538 | |
|
398d47149e2f
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <darkrain42@pidgin.im>
parents:
27130
diff
changeset
|
539 | g_return_val_if_fail(*str != '\0', FALSE); |
|
398d47149e2f
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <darkrain42@pidgin.im>
parents:
27130
diff
changeset
|
540 | |
|
398d47149e2f
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <darkrain42@pidgin.im>
parents:
27130
diff
changeset
|
541 | jid = jabber_id_new(str); |
|
398d47149e2f
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <darkrain42@pidgin.im>
parents:
27130
diff
changeset
|
542 | if (!jid) |
|
398d47149e2f
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <darkrain42@pidgin.im>
parents:
27130
diff
changeset
|
543 | return FALSE; |
|
398d47149e2f
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <darkrain42@pidgin.im>
parents:
27130
diff
changeset
|
544 | |
|
398d47149e2f
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <darkrain42@pidgin.im>
parents:
27130
diff
changeset
|
545 | equal = (jid->node == NULL && |
|
38256
035f00c4fd87
Replace misused g_str_equal() with purple_strequal()
qarkai <qarkai@gmail.com>
parents:
36256
diff
changeset
|
546 | purple_strequal(jid->domain, js->user->domain) && |
|
27163
398d47149e2f
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <darkrain42@pidgin.im>
parents:
27130
diff
changeset
|
547 | jid->resource == NULL); |
|
398d47149e2f
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <darkrain42@pidgin.im>
parents:
27130
diff
changeset
|
548 | jabber_id_free(jid); |
|
398d47149e2f
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <darkrain42@pidgin.im>
parents:
27130
diff
changeset
|
549 | return equal; |
|
398d47149e2f
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <darkrain42@pidgin.im>
parents:
27130
diff
changeset
|
550 | } |
|
398d47149e2f
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <darkrain42@pidgin.im>
parents:
27130
diff
changeset
|
551 | |
|
398d47149e2f
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <darkrain42@pidgin.im>
parents:
27130
diff
changeset
|
552 | gboolean |
|
398d47149e2f
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <darkrain42@pidgin.im>
parents:
27130
diff
changeset
|
553 | jabber_is_own_account(JabberStream *js, const char *str) |
|
398d47149e2f
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <darkrain42@pidgin.im>
parents:
27130
diff
changeset
|
554 | { |
|
398d47149e2f
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <darkrain42@pidgin.im>
parents:
27130
diff
changeset
|
555 | JabberID *jid; |
|
398d47149e2f
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <darkrain42@pidgin.im>
parents:
27130
diff
changeset
|
556 | gboolean equal; |
|
398d47149e2f
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <darkrain42@pidgin.im>
parents:
27130
diff
changeset
|
557 | |
|
398d47149e2f
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <darkrain42@pidgin.im>
parents:
27130
diff
changeset
|
558 | if (str == NULL) |
|
398d47149e2f
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <darkrain42@pidgin.im>
parents:
27130
diff
changeset
|
559 | return TRUE; |
|
398d47149e2f
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <darkrain42@pidgin.im>
parents:
27130
diff
changeset
|
560 | |
|
398d47149e2f
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <darkrain42@pidgin.im>
parents:
27130
diff
changeset
|
561 | g_return_val_if_fail(*str != '\0', FALSE); |
|
398d47149e2f
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <darkrain42@pidgin.im>
parents:
27130
diff
changeset
|
562 | |
|
398d47149e2f
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <darkrain42@pidgin.im>
parents:
27130
diff
changeset
|
563 | jid = jabber_id_new(str); |
|
398d47149e2f
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <darkrain42@pidgin.im>
parents:
27130
diff
changeset
|
564 | if (!jid) |
|
398d47149e2f
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <darkrain42@pidgin.im>
parents:
27130
diff
changeset
|
565 | return FALSE; |
|
398d47149e2f
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <darkrain42@pidgin.im>
parents:
27130
diff
changeset
|
566 | |
|
27191
09b3a16e7330
Allow incoming stanzas to match 'our account' if they come from our resource.
Paul Aurich <darkrain42@pidgin.im>
parents:
27163
diff
changeset
|
567 | equal = (purple_strequal(jid->node, js->user->node) && |
|
38256
035f00c4fd87
Replace misused g_str_equal() with purple_strequal()
qarkai <qarkai@gmail.com>
parents:
36256
diff
changeset
|
568 | purple_strequal(jid->domain, js->user->domain) && |
|
27191
09b3a16e7330
Allow incoming stanzas to match 'our account' if they come from our resource.
Paul Aurich <darkrain42@pidgin.im>
parents:
27163
diff
changeset
|
569 | (jid->resource == NULL || |
|
38256
035f00c4fd87
Replace misused g_str_equal() with purple_strequal()
qarkai <qarkai@gmail.com>
parents:
36256
diff
changeset
|
570 | purple_strequal(jid->resource, js->user->resource))); |
|
27163
398d47149e2f
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <darkrain42@pidgin.im>
parents:
27130
diff
changeset
|
571 | jabber_id_free(jid); |
|
398d47149e2f
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <darkrain42@pidgin.im>
parents:
27130
diff
changeset
|
572 | return equal; |
|
398d47149e2f
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <darkrain42@pidgin.im>
parents:
27130
diff
changeset
|
573 | } |
|
398d47149e2f
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <darkrain42@pidgin.im>
parents:
27130
diff
changeset
|
574 | |
|
29384
b7b6be8f77fd
jabber: Move those functions to jutil.[ch]
Paul Aurich <darkrain42@pidgin.im>
parents:
29336
diff
changeset
|
575 | static const struct { |
|
b7b6be8f77fd
jabber: Move those functions to jutil.[ch]
Paul Aurich <darkrain42@pidgin.im>
parents:
29336
diff
changeset
|
576 | const char *status_id; /* link to core */ |
|
b7b6be8f77fd
jabber: Move those functions to jutil.[ch]
Paul Aurich <darkrain42@pidgin.im>
parents:
29336
diff
changeset
|
577 | const char *show; /* The show child's cdata in a presence stanza */ |
|
b7b6be8f77fd
jabber: Move those functions to jutil.[ch]
Paul Aurich <darkrain42@pidgin.im>
parents:
29336
diff
changeset
|
578 | const char *readable; /* readable representation */ |
|
b7b6be8f77fd
jabber: Move those functions to jutil.[ch]
Paul Aurich <darkrain42@pidgin.im>
parents:
29336
diff
changeset
|
579 | JabberBuddyState state; |
|
b7b6be8f77fd
jabber: Move those functions to jutil.[ch]
Paul Aurich <darkrain42@pidgin.im>
parents:
29336
diff
changeset
|
580 | } jabber_statuses[] = { |
|
b7b6be8f77fd
jabber: Move those functions to jutil.[ch]
Paul Aurich <darkrain42@pidgin.im>
parents:
29336
diff
changeset
|
581 | { "offline", NULL, N_("Offline"), JABBER_BUDDY_STATE_UNAVAILABLE }, |
|
b7b6be8f77fd
jabber: Move those functions to jutil.[ch]
Paul Aurich <darkrain42@pidgin.im>
parents:
29336
diff
changeset
|
582 | { "available", NULL, N_("Available"), JABBER_BUDDY_STATE_ONLINE}, |
|
b7b6be8f77fd
jabber: Move those functions to jutil.[ch]
Paul Aurich <darkrain42@pidgin.im>
parents:
29336
diff
changeset
|
583 | { "freeforchat", "chat", N_("Chatty"), JABBER_BUDDY_STATE_CHAT }, |
|
b7b6be8f77fd
jabber: Move those functions to jutil.[ch]
Paul Aurich <darkrain42@pidgin.im>
parents:
29336
diff
changeset
|
584 | { "away", "away", N_("Away"), JABBER_BUDDY_STATE_AWAY }, |
|
b7b6be8f77fd
jabber: Move those functions to jutil.[ch]
Paul Aurich <darkrain42@pidgin.im>
parents:
29336
diff
changeset
|
585 | { "extended_away", "xa", N_("Extended Away"), JABBER_BUDDY_STATE_XA }, |
|
b7b6be8f77fd
jabber: Move those functions to jutil.[ch]
Paul Aurich <darkrain42@pidgin.im>
parents:
29336
diff
changeset
|
586 | { "dnd", "dnd", N_("Do Not Disturb"), JABBER_BUDDY_STATE_DND }, |
|
b7b6be8f77fd
jabber: Move those functions to jutil.[ch]
Paul Aurich <darkrain42@pidgin.im>
parents:
29336
diff
changeset
|
587 | { "error", NULL, N_("Error"), JABBER_BUDDY_STATE_ERROR } |
|
b7b6be8f77fd
jabber: Move those functions to jutil.[ch]
Paul Aurich <darkrain42@pidgin.im>
parents:
29336
diff
changeset
|
588 | }; |
|
b7b6be8f77fd
jabber: Move those functions to jutil.[ch]
Paul Aurich <darkrain42@pidgin.im>
parents:
29336
diff
changeset
|
589 | |
|
b7b6be8f77fd
jabber: Move those functions to jutil.[ch]
Paul Aurich <darkrain42@pidgin.im>
parents:
29336
diff
changeset
|
590 | const char * |
|
b7b6be8f77fd
jabber: Move those functions to jutil.[ch]
Paul Aurich <darkrain42@pidgin.im>
parents:
29336
diff
changeset
|
591 | jabber_buddy_state_get_name(const JabberBuddyState state) |
|
b7b6be8f77fd
jabber: Move those functions to jutil.[ch]
Paul Aurich <darkrain42@pidgin.im>
parents:
29336
diff
changeset
|
592 | { |
|
36256
a437550a9308
Remove -Wno-sign-compare and backport fixes from default.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
36193
diff
changeset
|
593 | gsize i; |
|
29384
b7b6be8f77fd
jabber: Move those functions to jutil.[ch]
Paul Aurich <darkrain42@pidgin.im>
parents:
29336
diff
changeset
|
594 | for (i = 0; i < G_N_ELEMENTS(jabber_statuses); ++i) |
|
b7b6be8f77fd
jabber: Move those functions to jutil.[ch]
Paul Aurich <darkrain42@pidgin.im>
parents:
29336
diff
changeset
|
595 | if (jabber_statuses[i].state == state) |
|
b7b6be8f77fd
jabber: Move those functions to jutil.[ch]
Paul Aurich <darkrain42@pidgin.im>
parents:
29336
diff
changeset
|
596 | return _(jabber_statuses[i].readable); |
|
b7b6be8f77fd
jabber: Move those functions to jutil.[ch]
Paul Aurich <darkrain42@pidgin.im>
parents:
29336
diff
changeset
|
597 | |
|
b7b6be8f77fd
jabber: Move those functions to jutil.[ch]
Paul Aurich <darkrain42@pidgin.im>
parents:
29336
diff
changeset
|
598 | return _("Unknown"); |
|
b7b6be8f77fd
jabber: Move those functions to jutil.[ch]
Paul Aurich <darkrain42@pidgin.im>
parents:
29336
diff
changeset
|
599 | } |
|
b7b6be8f77fd
jabber: Move those functions to jutil.[ch]
Paul Aurich <darkrain42@pidgin.im>
parents:
29336
diff
changeset
|
600 | |
|
b7b6be8f77fd
jabber: Move those functions to jutil.[ch]
Paul Aurich <darkrain42@pidgin.im>
parents:
29336
diff
changeset
|
601 | JabberBuddyState |
|
b7b6be8f77fd
jabber: Move those functions to jutil.[ch]
Paul Aurich <darkrain42@pidgin.im>
parents:
29336
diff
changeset
|
602 | jabber_buddy_status_id_get_state(const char *id) |
|
b7b6be8f77fd
jabber: Move those functions to jutil.[ch]
Paul Aurich <darkrain42@pidgin.im>
parents:
29336
diff
changeset
|
603 | { |
|
36256
a437550a9308
Remove -Wno-sign-compare and backport fixes from default.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
36193
diff
changeset
|
604 | gsize i; |
|
29384
b7b6be8f77fd
jabber: Move those functions to jutil.[ch]
Paul Aurich <darkrain42@pidgin.im>
parents:
29336
diff
changeset
|
605 | if (!id) |
|
b7b6be8f77fd
jabber: Move those functions to jutil.[ch]
Paul Aurich <darkrain42@pidgin.im>
parents:
29336
diff
changeset
|
606 | return JABBER_BUDDY_STATE_UNKNOWN; |
|
b7b6be8f77fd
jabber: Move those functions to jutil.[ch]
Paul Aurich <darkrain42@pidgin.im>
parents:
29336
diff
changeset
|
607 | |
|
b7b6be8f77fd
jabber: Move those functions to jutil.[ch]
Paul Aurich <darkrain42@pidgin.im>
parents:
29336
diff
changeset
|
608 | for (i = 0; i < G_N_ELEMENTS(jabber_statuses); ++i) |
|
38256
035f00c4fd87
Replace misused g_str_equal() with purple_strequal()
qarkai <qarkai@gmail.com>
parents:
36256
diff
changeset
|
609 | if (purple_strequal(id, jabber_statuses[i].status_id)) |
|
29384
b7b6be8f77fd
jabber: Move those functions to jutil.[ch]
Paul Aurich <darkrain42@pidgin.im>
parents:
29336
diff
changeset
|
610 | return jabber_statuses[i].state; |
|
b7b6be8f77fd
jabber: Move those functions to jutil.[ch]
Paul Aurich <darkrain42@pidgin.im>
parents:
29336
diff
changeset
|
611 | |
|
b7b6be8f77fd
jabber: Move those functions to jutil.[ch]
Paul Aurich <darkrain42@pidgin.im>
parents:
29336
diff
changeset
|
612 | return JABBER_BUDDY_STATE_UNKNOWN; |
|
b7b6be8f77fd
jabber: Move those functions to jutil.[ch]
Paul Aurich <darkrain42@pidgin.im>
parents:
29336
diff
changeset
|
613 | } |
|
b7b6be8f77fd
jabber: Move those functions to jutil.[ch]
Paul Aurich <darkrain42@pidgin.im>
parents:
29336
diff
changeset
|
614 | |
|
b7b6be8f77fd
jabber: Move those functions to jutil.[ch]
Paul Aurich <darkrain42@pidgin.im>
parents:
29336
diff
changeset
|
615 | JabberBuddyState jabber_buddy_show_get_state(const char *id) |
|
b7b6be8f77fd
jabber: Move those functions to jutil.[ch]
Paul Aurich <darkrain42@pidgin.im>
parents:
29336
diff
changeset
|
616 | { |
|
36256
a437550a9308
Remove -Wno-sign-compare and backport fixes from default.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
36193
diff
changeset
|
617 | gsize i; |
|
29384
b7b6be8f77fd
jabber: Move those functions to jutil.[ch]
Paul Aurich <darkrain42@pidgin.im>
parents:
29336
diff
changeset
|
618 | |
|
b7b6be8f77fd
jabber: Move those functions to jutil.[ch]
Paul Aurich <darkrain42@pidgin.im>
parents:
29336
diff
changeset
|
619 | g_return_val_if_fail(id != NULL, JABBER_BUDDY_STATE_UNKNOWN); |
|
b7b6be8f77fd
jabber: Move those functions to jutil.[ch]
Paul Aurich <darkrain42@pidgin.im>
parents:
29336
diff
changeset
|
620 | |
|
b7b6be8f77fd
jabber: Move those functions to jutil.[ch]
Paul Aurich <darkrain42@pidgin.im>
parents:
29336
diff
changeset
|
621 | for (i = 0; i < G_N_ELEMENTS(jabber_statuses); ++i) |
|
38256
035f00c4fd87
Replace misused g_str_equal() with purple_strequal()
qarkai <qarkai@gmail.com>
parents:
36256
diff
changeset
|
622 | if (jabber_statuses[i].show && purple_strequal(id, jabber_statuses[i].show)) |
|
29384
b7b6be8f77fd
jabber: Move those functions to jutil.[ch]
Paul Aurich <darkrain42@pidgin.im>
parents:
29336
diff
changeset
|
623 | return jabber_statuses[i].state; |
|
b7b6be8f77fd
jabber: Move those functions to jutil.[ch]
Paul Aurich <darkrain42@pidgin.im>
parents:
29336
diff
changeset
|
624 | |
|
b7b6be8f77fd
jabber: Move those functions to jutil.[ch]
Paul Aurich <darkrain42@pidgin.im>
parents:
29336
diff
changeset
|
625 | purple_debug_warning("jabber", "Invalid value of presence <show/> " |
|
b7b6be8f77fd
jabber: Move those functions to jutil.[ch]
Paul Aurich <darkrain42@pidgin.im>
parents:
29336
diff
changeset
|
626 | "attribute: %s\n", id); |
|
b7b6be8f77fd
jabber: Move those functions to jutil.[ch]
Paul Aurich <darkrain42@pidgin.im>
parents:
29336
diff
changeset
|
627 | return JABBER_BUDDY_STATE_UNKNOWN; |
|
b7b6be8f77fd
jabber: Move those functions to jutil.[ch]
Paul Aurich <darkrain42@pidgin.im>
parents:
29336
diff
changeset
|
628 | } |
|
b7b6be8f77fd
jabber: Move those functions to jutil.[ch]
Paul Aurich <darkrain42@pidgin.im>
parents:
29336
diff
changeset
|
629 | |
|
b7b6be8f77fd
jabber: Move those functions to jutil.[ch]
Paul Aurich <darkrain42@pidgin.im>
parents:
29336
diff
changeset
|
630 | const char * |
|
b7b6be8f77fd
jabber: Move those functions to jutil.[ch]
Paul Aurich <darkrain42@pidgin.im>
parents:
29336
diff
changeset
|
631 | jabber_buddy_state_get_show(JabberBuddyState state) |
|
b7b6be8f77fd
jabber: Move those functions to jutil.[ch]
Paul Aurich <darkrain42@pidgin.im>
parents:
29336
diff
changeset
|
632 | { |
|
36256
a437550a9308
Remove -Wno-sign-compare and backport fixes from default.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
36193
diff
changeset
|
633 | gsize i; |
|
29384
b7b6be8f77fd
jabber: Move those functions to jutil.[ch]
Paul Aurich <darkrain42@pidgin.im>
parents:
29336
diff
changeset
|
634 | for (i = 0; i < G_N_ELEMENTS(jabber_statuses); ++i) |
|
b7b6be8f77fd
jabber: Move those functions to jutil.[ch]
Paul Aurich <darkrain42@pidgin.im>
parents:
29336
diff
changeset
|
635 | if (state == jabber_statuses[i].state) |
|
b7b6be8f77fd
jabber: Move those functions to jutil.[ch]
Paul Aurich <darkrain42@pidgin.im>
parents:
29336
diff
changeset
|
636 | return jabber_statuses[i].show; |
|
b7b6be8f77fd
jabber: Move those functions to jutil.[ch]
Paul Aurich <darkrain42@pidgin.im>
parents:
29336
diff
changeset
|
637 | |
|
b7b6be8f77fd
jabber: Move those functions to jutil.[ch]
Paul Aurich <darkrain42@pidgin.im>
parents:
29336
diff
changeset
|
638 | return NULL; |
|
b7b6be8f77fd
jabber: Move those functions to jutil.[ch]
Paul Aurich <darkrain42@pidgin.im>
parents:
29336
diff
changeset
|
639 | } |
|
b7b6be8f77fd
jabber: Move those functions to jutil.[ch]
Paul Aurich <darkrain42@pidgin.im>
parents:
29336
diff
changeset
|
640 | |
|
b7b6be8f77fd
jabber: Move those functions to jutil.[ch]
Paul Aurich <darkrain42@pidgin.im>
parents:
29336
diff
changeset
|
641 | const char * |
|
b7b6be8f77fd
jabber: Move those functions to jutil.[ch]
Paul Aurich <darkrain42@pidgin.im>
parents:
29336
diff
changeset
|
642 | jabber_buddy_state_get_status_id(JabberBuddyState state) |
|
b7b6be8f77fd
jabber: Move those functions to jutil.[ch]
Paul Aurich <darkrain42@pidgin.im>
parents:
29336
diff
changeset
|
643 | { |
|
36256
a437550a9308
Remove -Wno-sign-compare and backport fixes from default.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
36193
diff
changeset
|
644 | gsize i; |
|
29384
b7b6be8f77fd
jabber: Move those functions to jutil.[ch]
Paul Aurich <darkrain42@pidgin.im>
parents:
29336
diff
changeset
|
645 | for (i = 0; i < G_N_ELEMENTS(jabber_statuses); ++i) |
|
b7b6be8f77fd
jabber: Move those functions to jutil.[ch]
Paul Aurich <darkrain42@pidgin.im>
parents:
29336
diff
changeset
|
646 | if (state == jabber_statuses[i].state) |
|
b7b6be8f77fd
jabber: Move those functions to jutil.[ch]
Paul Aurich <darkrain42@pidgin.im>
parents:
29336
diff
changeset
|
647 | return jabber_statuses[i].status_id; |
|
b7b6be8f77fd
jabber: Move those functions to jutil.[ch]
Paul Aurich <darkrain42@pidgin.im>
parents:
29336
diff
changeset
|
648 | |
|
b7b6be8f77fd
jabber: Move those functions to jutil.[ch]
Paul Aurich <darkrain42@pidgin.im>
parents:
29336
diff
changeset
|
649 | return NULL; |
|
b7b6be8f77fd
jabber: Move those functions to jutil.[ch]
Paul Aurich <darkrain42@pidgin.im>
parents:
29336
diff
changeset
|
650 | } |
|
b7b6be8f77fd
jabber: Move those functions to jutil.[ch]
Paul Aurich <darkrain42@pidgin.im>
parents:
29336
diff
changeset
|
651 |