Thu, 21 May 2020 21:21:54 -0500
Make sure we're not including the gettext macros in header files and deal with the repercussions of that.
| 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 |