Mercurial > pidgin
annotate libpurple/protocols/jabber/jutil.c @ 28717:464d022d7d6e
jabber: Add SASLprep and the username substitution called for in draft-ietf-sasl-scram-10 5.1.
The non-libidn code has not been tested.
author | Paul Aurich <paul@darkrain42.org> |
---|---|
date | Mon, 30 Nov 2009 20:34:54 +0000 |
parents | 4cb882afbd6f |
children | d558d141aaae |
rev | line source |
---|---|
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1 /* |
15822 | 2 * purple - Jabber Protocol Plugin |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3 * |
28048
c585572e80dd
Remove specific copyright lines from the XMPP prpl.
Paul Aurich <paul@darkrain42.org>
parents:
27636
diff
changeset
|
4 * Purple is the legal property of its developers, whose names are too numerous |
c585572e80dd
Remove specific copyright lines from the XMPP prpl.
Paul Aurich <paul@darkrain42.org>
parents:
27636
diff
changeset
|
5 * to list here. Please refer to the COPYRIGHT file distributed with this |
c585572e80dd
Remove specific copyright lines from the XMPP prpl.
Paul Aurich <paul@darkrain42.org>
parents:
27636
diff
changeset
|
6 * source distribution. |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
7 * |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
8 * This program is free software; you can redistribute it and/or modify |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
9 * it under the terms of the GNU General Public License as published by |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
10 * the Free Software Foundation; either version 2 of the License, or |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
11 * (at your option) any later version. |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
12 * |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
13 * This program is distributed in the hope that it will be useful, |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
16 * GNU General Public License for more details. |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
17 * |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
18 * You should have received a copy of the GNU General Public License |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
19 * along with this program; if not, write to the Free Software |
19681
44b4e8bd759b
The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
15889
diff
changeset
|
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
21 * |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
22 */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
23 #include "internal.h" |
15889
87ea711b9781
Re-arrange #includes so 'make check' stands a chance of passing during
Stu Tomlinson <stu@nosnilmot.com>
parents:
15822
diff
changeset
|
24 #include "account.h" |
24693
61e0924de04a
Fix up the XMPP User Avatar SHA1 hashing so that we don't mess up the checksum
Paul Aurich <paul@darkrain42.org>
parents:
19681
diff
changeset
|
25 #include "cipher.h" |
15889
87ea711b9781
Re-arrange #includes so 'make check' stands a chance of passing during
Stu Tomlinson <stu@nosnilmot.com>
parents:
15822
diff
changeset
|
26 #include "conversation.h" |
24693
61e0924de04a
Fix up the XMPP User Avatar SHA1 hashing so that we don't mess up the checksum
Paul Aurich <paul@darkrain42.org>
parents:
19681
diff
changeset
|
27 #include "debug.h" |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
28 #include "server.h" |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
29 #include "util.h" |
15889
87ea711b9781
Re-arrange #includes so 'make check' stands a chance of passing during
Stu Tomlinson <stu@nosnilmot.com>
parents:
15822
diff
changeset
|
30 #include "xmlnode.h" |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
31 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
32 #include "chat.h" |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
33 #include "presence.h" |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
34 #include "jutil.h" |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
35 |
27598
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
36 #ifdef USE_IDN |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
37 #include <idna.h> |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
38 #include <stringprep.h> |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
39 static char idn_buffer[1024]; |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
40 #endif |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
41 |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
42 #ifdef USE_IDN |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
43 static gboolean jabber_nodeprep(char *str, size_t buflen) |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
44 { |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
45 return stringprep_xmpp_nodeprep(str, buflen) == STRINGPREP_OK; |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
46 } |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
47 |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
48 static gboolean jabber_resourceprep(char *str, size_t buflen) |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
49 { |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
50 return stringprep_xmpp_resourceprep(str, buflen) == STRINGPREP_OK; |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
51 } |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
52 |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
53 static JabberID* |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
54 jabber_idn_validate(const char *str, const char *at, const char *slash, |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
55 const char *null) |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
56 { |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
57 const char *node = NULL; |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
58 const char *domain = NULL; |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
59 const char *resource = NULL; |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
60 int node_len = 0; |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
61 int domain_len = 0; |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
62 int resource_len = 0; |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
63 char *out; |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
64 JabberID *jid; |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
65 |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
66 /* Ensure no parts are > 1023 bytes */ |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
67 if (at) { |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
68 node = str; |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
69 node_len = at - str; |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
70 |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
71 domain = at + 1; |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
72 if (slash) { |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
73 domain_len = slash - (at + 1); |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
74 resource = slash + 1; |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
75 resource_len = null - (slash + 1); |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
76 } else { |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
77 domain_len = null - (at + 1); |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
78 } |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
79 } else { |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
80 domain = str; |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
81 |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
82 if (slash) { |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
83 domain_len = slash - str; |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
84 resource = slash; |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
85 resource_len = null - (slash + 1); |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
86 } else { |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
87 domain_len = null - (str + 1); |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
88 } |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
89 } |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
90 |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
91 if (node && node_len > 1023) |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
92 return NULL; |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
93 if (domain_len > 1023) |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
94 return NULL; |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
95 if (resource && resource_len > 1023) |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
96 return NULL; |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
97 |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
98 jid = g_new0(JabberID, 1); |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
99 |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
100 if (node) { |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
101 strncpy(idn_buffer, node, node_len); |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
102 idn_buffer[node_len] = '\0'; |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
103 |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
104 if (!jabber_nodeprep(idn_buffer, sizeof(idn_buffer))) { |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
105 jabber_id_free(jid); |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
106 jid = NULL; |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
107 goto out; |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
108 } |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
109 |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
110 jid->node = g_strdup(idn_buffer); |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
111 } |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
112 |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
113 /* domain *must* be here */ |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
114 strncpy(idn_buffer, domain, domain_len); |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
115 idn_buffer[domain_len] = '\0'; |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
116 if (domain[0] == '[') { /* IPv6 address */ |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
117 gboolean valid = FALSE; |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
118 |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
119 if (idn_buffer[domain_len - 1] == ']') { |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
120 idn_buffer[domain_len - 1] = '\0'; |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
121 valid = purple_ipv6_address_is_valid(idn_buffer + 1); |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
122 } |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
123 |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
124 if (!valid) { |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
125 jabber_id_free(jid); |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
126 jid = NULL; |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
127 goto out; |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
128 } |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
129 } else { |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
130 /* Apply nameprep */ |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
131 if (stringprep_nameprep(idn_buffer, sizeof(idn_buffer)) != STRINGPREP_OK) { |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
132 jabber_id_free(jid); |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
133 jid = NULL; |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
134 goto out; |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
135 } |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
136 |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
137 /* And now ToASCII */ |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
138 if (idna_to_ascii_8z(idn_buffer, &out, IDNA_USE_STD3_ASCII_RULES) != IDNA_SUCCESS) { |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
139 jabber_id_free(jid); |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
140 jid = NULL; |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
141 goto out; |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
142 } |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
143 |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
144 /* This *MUST* be freed using 'free', not 'g_free' */ |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
145 free(out); |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
146 jid->domain = g_strdup(idn_buffer); |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
147 } |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
148 |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
149 if (resource) { |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
150 strncpy(idn_buffer, resource, resource_len); |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
151 idn_buffer[resource_len] = '\0'; |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
152 |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
153 if (!jabber_resourceprep(idn_buffer, sizeof(idn_buffer))) { |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
154 jabber_id_free(jid); |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
155 jid = NULL; |
28252
4cb882afbd6f
Fix a crash when attempting to validate a JID with an invalid resource.
Paul Aurich <paul@darkrain42.org>
parents:
28150
diff
changeset
|
156 goto out; |
4cb882afbd6f
Fix a crash when attempting to validate a JID with an invalid resource.
Paul Aurich <paul@darkrain42.org>
parents:
28150
diff
changeset
|
157 } else |
4cb882afbd6f
Fix a crash when attempting to validate a JID with an invalid resource.
Paul Aurich <paul@darkrain42.org>
parents:
28150
diff
changeset
|
158 jid->resource = g_strdup(idn_buffer); |
27598
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
159 } |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
160 |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
161 out: |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
162 return jid; |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
163 } |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
164 |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
165 #endif /* USE_IDN */ |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
166 |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
167 gboolean jabber_nodeprep_validate(const char *str) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
168 { |
27598
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
169 #ifdef USE_IDN |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
170 gboolean result; |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
171 #else |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
172 const char *c; |
27598
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
173 #endif |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
174 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
175 if(!str) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
176 return TRUE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
177 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
178 if(strlen(str) > 1023) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
179 return FALSE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
180 |
27598
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
181 #ifdef USE_IDN |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
182 strncpy(idn_buffer, str, sizeof(idn_buffer) - 1); |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
183 idn_buffer[sizeof(idn_buffer) - 1] = '\0'; |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
184 result = jabber_nodeprep(idn_buffer, sizeof(idn_buffer)); |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
185 return result; |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
186 #else /* USE_IDN */ |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
187 c = str; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
188 while(c && *c) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
189 gunichar ch = g_utf8_get_char(c); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
190 if(ch == '\"' || ch == '&' || ch == '\'' || ch == '/' || ch == ':' || |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
191 ch == '<' || ch == '>' || ch == '@' || !g_unichar_isgraph(ch)) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
192 return FALSE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
193 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
194 c = g_utf8_next_char(c); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
195 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
196 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
197 return TRUE; |
27598
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
198 #endif /* USE_IDN */ |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
199 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
200 |
27470
e90fa379fcec
Validate IPv6 identifiers in the domain portion of a JID.
Paul Aurich <paul@darkrain42.org>
parents:
27464
diff
changeset
|
201 gboolean jabber_domain_validate(const char *str) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
202 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
203 const char *c; |
27472
f1f901b3d6f2
Save one traversal of the domain for IPv6 validation.
Paul Aurich <paul@darkrain42.org>
parents:
27470
diff
changeset
|
204 size_t len; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
205 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
206 if(!str) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
207 return TRUE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
208 |
27472
f1f901b3d6f2
Save one traversal of the domain for IPv6 validation.
Paul Aurich <paul@darkrain42.org>
parents:
27470
diff
changeset
|
209 len = strlen(str); |
f1f901b3d6f2
Save one traversal of the domain for IPv6 validation.
Paul Aurich <paul@darkrain42.org>
parents:
27470
diff
changeset
|
210 if (len > 1023) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
211 return FALSE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
212 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
213 c = str; |
27470
e90fa379fcec
Validate IPv6 identifiers in the domain portion of a JID.
Paul Aurich <paul@darkrain42.org>
parents:
27464
diff
changeset
|
214 |
e90fa379fcec
Validate IPv6 identifiers in the domain portion of a JID.
Paul Aurich <paul@darkrain42.org>
parents:
27464
diff
changeset
|
215 if (*c == '[') { |
e90fa379fcec
Validate IPv6 identifiers in the domain portion of a JID.
Paul Aurich <paul@darkrain42.org>
parents:
27464
diff
changeset
|
216 /* Check if str is a valid IPv6 identifier */ |
e90fa379fcec
Validate IPv6 identifiers in the domain portion of a JID.
Paul Aurich <paul@darkrain42.org>
parents:
27464
diff
changeset
|
217 gboolean valid = FALSE; |
e90fa379fcec
Validate IPv6 identifiers in the domain portion of a JID.
Paul Aurich <paul@darkrain42.org>
parents:
27464
diff
changeset
|
218 |
27472
f1f901b3d6f2
Save one traversal of the domain for IPv6 validation.
Paul Aurich <paul@darkrain42.org>
parents:
27470
diff
changeset
|
219 if (*(c + len - 1) != ']') |
27470
e90fa379fcec
Validate IPv6 identifiers in the domain portion of a JID.
Paul Aurich <paul@darkrain42.org>
parents:
27464
diff
changeset
|
220 return FALSE; |
e90fa379fcec
Validate IPv6 identifiers in the domain portion of a JID.
Paul Aurich <paul@darkrain42.org>
parents:
27464
diff
changeset
|
221 |
e90fa379fcec
Validate IPv6 identifiers in the domain portion of a JID.
Paul Aurich <paul@darkrain42.org>
parents:
27464
diff
changeset
|
222 /* Ugly, but in-place */ |
27472
f1f901b3d6f2
Save one traversal of the domain for IPv6 validation.
Paul Aurich <paul@darkrain42.org>
parents:
27470
diff
changeset
|
223 *(gchar *)(c + len - 1) = '\0'; |
27470
e90fa379fcec
Validate IPv6 identifiers in the domain portion of a JID.
Paul Aurich <paul@darkrain42.org>
parents:
27464
diff
changeset
|
224 valid = purple_ipv6_address_is_valid(c + 1); |
27472
f1f901b3d6f2
Save one traversal of the domain for IPv6 validation.
Paul Aurich <paul@darkrain42.org>
parents:
27470
diff
changeset
|
225 *(gchar *)(c + len - 1) = ']'; |
27470
e90fa379fcec
Validate IPv6 identifiers in the domain portion of a JID.
Paul Aurich <paul@darkrain42.org>
parents:
27464
diff
changeset
|
226 |
e90fa379fcec
Validate IPv6 identifiers in the domain portion of a JID.
Paul Aurich <paul@darkrain42.org>
parents:
27464
diff
changeset
|
227 return valid; |
e90fa379fcec
Validate IPv6 identifiers in the domain portion of a JID.
Paul Aurich <paul@darkrain42.org>
parents:
27464
diff
changeset
|
228 } |
e90fa379fcec
Validate IPv6 identifiers in the domain portion of a JID.
Paul Aurich <paul@darkrain42.org>
parents:
27464
diff
changeset
|
229 |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
230 while(c && *c) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
231 gunichar ch = g_utf8_get_char(c); |
27461
7e79102cda40
Be more restrictive in the characters allowed by jabber_nameprep_validate()
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
232 /* The list of characters allowed in domain names is pretty small */ |
27463
167d7c3a4f7b
XMPP allows for internationalized domain names.
Paul Aurich <paul@darkrain42.org>
parents:
27462
diff
changeset
|
233 if ((ch <= 0x7F && !( (ch >= 'a' && ch <= 'z') |
27461
7e79102cda40
Be more restrictive in the characters allowed by jabber_nameprep_validate()
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
234 || (ch >= '0' && ch <= '9') |
7e79102cda40
Be more restrictive in the characters allowed by jabber_nameprep_validate()
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
235 || (ch >= 'A' && ch <= 'Z') |
7e79102cda40
Be more restrictive in the characters allowed by jabber_nameprep_validate()
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
236 || ch == '.' |
27463
167d7c3a4f7b
XMPP allows for internationalized domain names.
Paul Aurich <paul@darkrain42.org>
parents:
27462
diff
changeset
|
237 || ch == '-' )) || (ch >= 0x80 && !g_unichar_isgraph(ch))) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
238 return FALSE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
239 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
240 c = g_utf8_next_char(c); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
241 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
242 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
243 return TRUE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
244 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
245 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
246 gboolean jabber_resourceprep_validate(const char *str) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
247 { |
27598
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
248 #ifdef USE_IDN |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
249 gboolean result; |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
250 #else |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
251 const char *c; |
27598
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
252 #endif |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
253 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
254 if(!str) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
255 return TRUE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
256 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
257 if(strlen(str) > 1023) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
258 return FALSE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
259 |
27598
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
260 #ifdef USE_IDN |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
261 strncpy(idn_buffer, str, sizeof(idn_buffer) - 1); |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
262 idn_buffer[sizeof(idn_buffer) - 1] = '\0'; |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
263 result = jabber_resourceprep(idn_buffer, sizeof(idn_buffer)); |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
264 return result; |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
265 #else /* USE_IDN */ |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
266 c = str; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
267 while(c && *c) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
268 gunichar ch = g_utf8_get_char(c); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
269 if(!g_unichar_isgraph(ch) && ch != ' ') |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
270 return FALSE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
271 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
272 c = g_utf8_next_char(c); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
273 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
274 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
275 return TRUE; |
27598
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
276 #endif /* USE_IDN */ |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
277 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
278 |
28717
464d022d7d6e
jabber: Add SASLprep and the username substitution called for in draft-ietf-sasl-scram-10 5.1.
Paul Aurich <paul@darkrain42.org>
parents:
28252
diff
changeset
|
279 char *jabber_saslprep(const char *in) |
464d022d7d6e
jabber: Add SASLprep and the username substitution called for in draft-ietf-sasl-scram-10 5.1.
Paul Aurich <paul@darkrain42.org>
parents:
28252
diff
changeset
|
280 { |
464d022d7d6e
jabber: Add SASLprep and the username substitution called for in draft-ietf-sasl-scram-10 5.1.
Paul Aurich <paul@darkrain42.org>
parents:
28252
diff
changeset
|
281 #ifdef USE_IDN |
464d022d7d6e
jabber: Add SASLprep and the username substitution called for in draft-ietf-sasl-scram-10 5.1.
Paul Aurich <paul@darkrain42.org>
parents:
28252
diff
changeset
|
282 char *out; |
464d022d7d6e
jabber: Add SASLprep and the username substitution called for in draft-ietf-sasl-scram-10 5.1.
Paul Aurich <paul@darkrain42.org>
parents:
28252
diff
changeset
|
283 |
464d022d7d6e
jabber: Add SASLprep and the username substitution called for in draft-ietf-sasl-scram-10 5.1.
Paul Aurich <paul@darkrain42.org>
parents:
28252
diff
changeset
|
284 g_return_val_if_fail(in != NULL, NULL); |
464d022d7d6e
jabber: Add SASLprep and the username substitution called for in draft-ietf-sasl-scram-10 5.1.
Paul Aurich <paul@darkrain42.org>
parents:
28252
diff
changeset
|
285 g_return_val_if_fail(strlen(in) <= sizeof(idn_buffer) - 1, NULL); |
464d022d7d6e
jabber: Add SASLprep and the username substitution called for in draft-ietf-sasl-scram-10 5.1.
Paul Aurich <paul@darkrain42.org>
parents:
28252
diff
changeset
|
286 |
464d022d7d6e
jabber: Add SASLprep and the username substitution called for in draft-ietf-sasl-scram-10 5.1.
Paul Aurich <paul@darkrain42.org>
parents:
28252
diff
changeset
|
287 strncpy(idn_buffer, in, sizeof(idn_buffer) - 1); |
464d022d7d6e
jabber: Add SASLprep and the username substitution called for in draft-ietf-sasl-scram-10 5.1.
Paul Aurich <paul@darkrain42.org>
parents:
28252
diff
changeset
|
288 idn_buffer[sizeof(idn_buffer) - 1] = '\0'; |
464d022d7d6e
jabber: Add SASLprep and the username substitution called for in draft-ietf-sasl-scram-10 5.1.
Paul Aurich <paul@darkrain42.org>
parents:
28252
diff
changeset
|
289 |
464d022d7d6e
jabber: Add SASLprep and the username substitution called for in draft-ietf-sasl-scram-10 5.1.
Paul Aurich <paul@darkrain42.org>
parents:
28252
diff
changeset
|
290 if (STRINGPREP_OK != stringprep(idn_buffer, sizeof(idn_buffer), 0, |
464d022d7d6e
jabber: Add SASLprep and the username substitution called for in draft-ietf-sasl-scram-10 5.1.
Paul Aurich <paul@darkrain42.org>
parents:
28252
diff
changeset
|
291 stringprep_saslprep)) { |
464d022d7d6e
jabber: Add SASLprep and the username substitution called for in draft-ietf-sasl-scram-10 5.1.
Paul Aurich <paul@darkrain42.org>
parents:
28252
diff
changeset
|
292 memset(idn_buffer, 0, sizeof(idn_buffer)); |
464d022d7d6e
jabber: Add SASLprep and the username substitution called for in draft-ietf-sasl-scram-10 5.1.
Paul Aurich <paul@darkrain42.org>
parents:
28252
diff
changeset
|
293 return NULL; |
464d022d7d6e
jabber: Add SASLprep and the username substitution called for in draft-ietf-sasl-scram-10 5.1.
Paul Aurich <paul@darkrain42.org>
parents:
28252
diff
changeset
|
294 } |
464d022d7d6e
jabber: Add SASLprep and the username substitution called for in draft-ietf-sasl-scram-10 5.1.
Paul Aurich <paul@darkrain42.org>
parents:
28252
diff
changeset
|
295 |
464d022d7d6e
jabber: Add SASLprep and the username substitution called for in draft-ietf-sasl-scram-10 5.1.
Paul Aurich <paul@darkrain42.org>
parents:
28252
diff
changeset
|
296 out = g_strdup(idn_buffer); |
464d022d7d6e
jabber: Add SASLprep and the username substitution called for in draft-ietf-sasl-scram-10 5.1.
Paul Aurich <paul@darkrain42.org>
parents:
28252
diff
changeset
|
297 memset(idn_buffer, 0, sizeof(idn_buffer)); |
464d022d7d6e
jabber: Add SASLprep and the username substitution called for in draft-ietf-sasl-scram-10 5.1.
Paul Aurich <paul@darkrain42.org>
parents:
28252
diff
changeset
|
298 return out; |
464d022d7d6e
jabber: Add SASLprep and the username substitution called for in draft-ietf-sasl-scram-10 5.1.
Paul Aurich <paul@darkrain42.org>
parents:
28252
diff
changeset
|
299 #else /* USE_IDN */ |
464d022d7d6e
jabber: Add SASLprep and the username substitution called for in draft-ietf-sasl-scram-10 5.1.
Paul Aurich <paul@darkrain42.org>
parents:
28252
diff
changeset
|
300 /* TODO: Something better than disallowing all non-ASCII characters */ |
464d022d7d6e
jabber: Add SASLprep and the username substitution called for in draft-ietf-sasl-scram-10 5.1.
Paul Aurich <paul@darkrain42.org>
parents:
28252
diff
changeset
|
301 /* TODO: Is this even correct? */ |
464d022d7d6e
jabber: Add SASLprep and the username substitution called for in draft-ietf-sasl-scram-10 5.1.
Paul Aurich <paul@darkrain42.org>
parents:
28252
diff
changeset
|
302 const guchar *c; |
464d022d7d6e
jabber: Add SASLprep and the username substitution called for in draft-ietf-sasl-scram-10 5.1.
Paul Aurich <paul@darkrain42.org>
parents:
28252
diff
changeset
|
303 |
464d022d7d6e
jabber: Add SASLprep and the username substitution called for in draft-ietf-sasl-scram-10 5.1.
Paul Aurich <paul@darkrain42.org>
parents:
28252
diff
changeset
|
304 c = (const guchar *)in; |
464d022d7d6e
jabber: Add SASLprep and the username substitution called for in draft-ietf-sasl-scram-10 5.1.
Paul Aurich <paul@darkrain42.org>
parents:
28252
diff
changeset
|
305 while (*c) { |
464d022d7d6e
jabber: Add SASLprep and the username substitution called for in draft-ietf-sasl-scram-10 5.1.
Paul Aurich <paul@darkrain42.org>
parents:
28252
diff
changeset
|
306 if (*c > 0x7f || |
464d022d7d6e
jabber: Add SASLprep and the username substitution called for in draft-ietf-sasl-scram-10 5.1.
Paul Aurich <paul@darkrain42.org>
parents:
28252
diff
changeset
|
307 (*c < 0x20 && *c != '\t' && *c != '\n' && *c != '\r')) |
464d022d7d6e
jabber: Add SASLprep and the username substitution called for in draft-ietf-sasl-scram-10 5.1.
Paul Aurich <paul@darkrain42.org>
parents:
28252
diff
changeset
|
308 return NULL; |
464d022d7d6e
jabber: Add SASLprep and the username substitution called for in draft-ietf-sasl-scram-10 5.1.
Paul Aurich <paul@darkrain42.org>
parents:
28252
diff
changeset
|
309 } |
464d022d7d6e
jabber: Add SASLprep and the username substitution called for in draft-ietf-sasl-scram-10 5.1.
Paul Aurich <paul@darkrain42.org>
parents:
28252
diff
changeset
|
310 |
464d022d7d6e
jabber: Add SASLprep and the username substitution called for in draft-ietf-sasl-scram-10 5.1.
Paul Aurich <paul@darkrain42.org>
parents:
28252
diff
changeset
|
311 return g_strdup(in); |
464d022d7d6e
jabber: Add SASLprep and the username substitution called for in draft-ietf-sasl-scram-10 5.1.
Paul Aurich <paul@darkrain42.org>
parents:
28252
diff
changeset
|
312 #endif /* USE_IDN */ |
464d022d7d6e
jabber: Add SASLprep and the username substitution called for in draft-ietf-sasl-scram-10 5.1.
Paul Aurich <paul@darkrain42.org>
parents:
28252
diff
changeset
|
313 } |
464d022d7d6e
jabber: Add SASLprep and the username substitution called for in draft-ietf-sasl-scram-10 5.1.
Paul Aurich <paul@darkrain42.org>
parents:
28252
diff
changeset
|
314 |
28129
22c65c1090a8
jabber: Use a better method for dealing with terminating slashes in JIDs.
Paul Aurich <paul@darkrain42.org>
parents:
28055
diff
changeset
|
315 static JabberID* |
22c65c1090a8
jabber: Use a better method for dealing with terminating slashes in JIDs.
Paul Aurich <paul@darkrain42.org>
parents:
28055
diff
changeset
|
316 jabber_id_new_internal(const char *str, gboolean allow_terminating_slash) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
317 { |
27454
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
318 const char *at = NULL; |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
319 const char *slash = NULL; |
27456
04d8452dee48
Change jabber_id_new() to iterate byte by byte instead of character
Mark Doliner <mark@kingant.net>
parents:
27454
diff
changeset
|
320 const char *c; |
27454
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
321 gboolean needs_validation = FALSE; |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
322 #if 0 |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
323 gboolean node_is_required = FALSE; |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
324 #endif |
27598
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
325 #ifndef USE_IDN |
26897
34e4e2ca7db9
jabber_id_new() needs to be case-folding the node and domain.
Paul Aurich <paul@darkrain42.org>
parents:
24693
diff
changeset
|
326 char *node = NULL; |
34e4e2ca7db9
jabber_id_new() needs to be case-folding the node and domain.
Paul Aurich <paul@darkrain42.org>
parents:
24693
diff
changeset
|
327 char *domain; |
27598
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
328 #endif |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
329 JabberID *jid; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
330 |
27454
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
331 if (!str) |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
332 return NULL; |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
333 |
27456
04d8452dee48
Change jabber_id_new() to iterate byte by byte instead of character
Mark Doliner <mark@kingant.net>
parents:
27454
diff
changeset
|
334 for (c = str; *c != '\0'; c++) |
27454
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
335 { |
27456
04d8452dee48
Change jabber_id_new() to iterate byte by byte instead of character
Mark Doliner <mark@kingant.net>
parents:
27454
diff
changeset
|
336 switch (*c) { |
27454
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
337 case '@': |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
338 if (!slash) { |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
339 if (at) { |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
340 /* Multiple @'s in the node/domain portion, not a valid JID! */ |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
341 return NULL; |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
342 } |
27456
04d8452dee48
Change jabber_id_new() to iterate byte by byte instead of character
Mark Doliner <mark@kingant.net>
parents:
27454
diff
changeset
|
343 if (c == str) { |
27454
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
344 /* JIDs cannot start with @ */ |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
345 return NULL; |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
346 } |
27456
04d8452dee48
Change jabber_id_new() to iterate byte by byte instead of character
Mark Doliner <mark@kingant.net>
parents:
27454
diff
changeset
|
347 if (c[1] == '\0') { |
27454
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
348 /* JIDs cannot end with @ */ |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
349 return NULL; |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
350 } |
27456
04d8452dee48
Change jabber_id_new() to iterate byte by byte instead of character
Mark Doliner <mark@kingant.net>
parents:
27454
diff
changeset
|
351 at = c; |
27454
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
352 } |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
353 break; |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
354 |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
355 case '/': |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
356 if (!slash) { |
27456
04d8452dee48
Change jabber_id_new() to iterate byte by byte instead of character
Mark Doliner <mark@kingant.net>
parents:
27454
diff
changeset
|
357 if (c == str) { |
27454
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
358 /* JIDs cannot start with / */ |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
359 return NULL; |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
360 } |
28129
22c65c1090a8
jabber: Use a better method for dealing with terminating slashes in JIDs.
Paul Aurich <paul@darkrain42.org>
parents:
28055
diff
changeset
|
361 if (c[1] == '\0' && !allow_terminating_slash) { |
27454
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
362 /* JIDs cannot end with / */ |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
363 return NULL; |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
364 } |
27456
04d8452dee48
Change jabber_id_new() to iterate byte by byte instead of character
Mark Doliner <mark@kingant.net>
parents:
27454
diff
changeset
|
365 slash = c; |
27454
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
366 } |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
367 break; |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
368 |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
369 default: |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
370 /* characters allowed everywhere */ |
27460
8f2dfa6ef2f7
Of course, these should be >= and <=
Mark Doliner <mark@kingant.net>
parents:
27456
diff
changeset
|
371 if ((*c >= 'a' && *c <= 'z') |
8f2dfa6ef2f7
Of course, these should be >= and <=
Mark Doliner <mark@kingant.net>
parents:
27456
diff
changeset
|
372 || (*c >= '0' && *c <= '9') |
8f2dfa6ef2f7
Of course, these should be >= and <=
Mark Doliner <mark@kingant.net>
parents:
27456
diff
changeset
|
373 || (*c >= 'A' && *c <= 'Z') |
27456
04d8452dee48
Change jabber_id_new() to iterate byte by byte instead of character
Mark Doliner <mark@kingant.net>
parents:
27454
diff
changeset
|
374 || *c == '.' || *c == '-') |
27454
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
375 /* We're good */ |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
376 break; |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
377 |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
378 #if 0 |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
379 if (slash != NULL) { |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
380 /* characters allowed only in the resource */ |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
381 if (implement_me) |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
382 /* We're good */ |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
383 break; |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
384 } |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
385 |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
386 /* characters allowed only in the node */ |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
387 if (implement_me) { |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
388 /* |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
389 * Ok, this character is valid, but only if it's a part |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
390 * of the node and not the domain. But we don't know |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
391 * if "c" is a part of the node or the domain until after |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
392 * we've found the @. So set a flag for now and check |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
393 * that we found an @ later. |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
394 */ |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
395 node_is_required = TRUE; |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
396 break; |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
397 } |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
398 #endif |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
399 |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
400 /* |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
401 * Hmm, this character is a bit more exotic. Better fall |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
402 * back to using the more expensive UTF-8 compliant |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
403 * stringprep functions. |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
404 */ |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
405 needs_validation = TRUE; |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
406 break; |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
407 } |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
408 } |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
409 |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
410 #if 0 |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
411 if (node_is_required && at == NULL) |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
412 /* Found invalid characters in the domain */ |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
413 return NULL; |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
414 #endif |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
415 |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
416 if (!needs_validation) { |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
417 /* JID is made of only ASCII characters--just lowercase and return */ |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
418 jid = g_new0(JabberID, 1); |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
419 |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
420 if (at) { |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
421 jid->node = g_ascii_strdown(str, at - str); |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
422 if (slash) { |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
423 jid->domain = g_ascii_strdown(at + 1, slash - (at + 1)); |
28129
22c65c1090a8
jabber: Use a better method for dealing with terminating slashes in JIDs.
Paul Aurich <paul@darkrain42.org>
parents:
28055
diff
changeset
|
424 if (*(slash + 1)) |
22c65c1090a8
jabber: Use a better method for dealing with terminating slashes in JIDs.
Paul Aurich <paul@darkrain42.org>
parents:
28055
diff
changeset
|
425 jid->resource = g_strdup(slash + 1); |
27454
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
426 } else { |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
427 jid->domain = g_ascii_strdown(at + 1, -1); |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
428 } |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
429 } else { |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
430 if (slash) { |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
431 jid->domain = g_ascii_strdown(str, slash - str); |
28129
22c65c1090a8
jabber: Use a better method for dealing with terminating slashes in JIDs.
Paul Aurich <paul@darkrain42.org>
parents:
28055
diff
changeset
|
432 if (*(slash + 1)) |
22c65c1090a8
jabber: Use a better method for dealing with terminating slashes in JIDs.
Paul Aurich <paul@darkrain42.org>
parents:
28055
diff
changeset
|
433 jid->resource = g_strdup(slash + 1); |
27454
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
434 } else { |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
435 jid->domain = g_ascii_strdown(str, -1); |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
436 } |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
437 } |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
438 return jid; |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
439 } |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
440 |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
441 /* |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
442 * If we get here, there are some non-ASCII chars in the string, so |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
443 * we'll need to validate it, normalize, and finally do a full jabber |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
444 * nodeprep on the jid. |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
445 */ |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
446 |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
447 if (!g_utf8_validate(str, -1, NULL)) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
448 return NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
449 |
27598
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
450 #ifdef USE_IDN |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
451 return jabber_idn_validate(str, at, slash, c /* points to the null */); |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
452 #else /* USE_IDN */ |
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
453 |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
454 jid = g_new0(JabberID, 1); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
455 |
27454
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
456 /* normalization */ |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
457 if(at) { |
27598
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
458 node = g_utf8_casefold(str, at-str); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
459 if(slash) { |
27598
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
460 domain = g_utf8_casefold(at+1, slash-(at+1)); |
28129
22c65c1090a8
jabber: Use a better method for dealing with terminating slashes in JIDs.
Paul Aurich <paul@darkrain42.org>
parents:
28055
diff
changeset
|
461 if (*(slash + 1)) |
22c65c1090a8
jabber: Use a better method for dealing with terminating slashes in JIDs.
Paul Aurich <paul@darkrain42.org>
parents:
28055
diff
changeset
|
462 jid->resource = g_utf8_normalize(slash+1, -1, G_NORMALIZE_NFKC); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
463 } else { |
27598
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
464 domain = g_utf8_casefold(at+1, -1); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
465 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
466 } else { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
467 if(slash) { |
27598
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
468 domain = g_utf8_casefold(str, slash-str); |
28129
22c65c1090a8
jabber: Use a better method for dealing with terminating slashes in JIDs.
Paul Aurich <paul@darkrain42.org>
parents:
28055
diff
changeset
|
469 if (*(slash + 1)) |
22c65c1090a8
jabber: Use a better method for dealing with terminating slashes in JIDs.
Paul Aurich <paul@darkrain42.org>
parents:
28055
diff
changeset
|
470 jid->resource = g_utf8_normalize(slash+1, -1, G_NORMALIZE_NFKC); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
471 } else { |
27598
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
472 domain = g_utf8_casefold(str, -1); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
473 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
474 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
475 |
26897
34e4e2ca7db9
jabber_id_new() needs to be case-folding the node and domain.
Paul Aurich <paul@darkrain42.org>
parents:
24693
diff
changeset
|
476 if (node) { |
27561
aac25c66a843
For JIDs, do strdown before normalization.
Paul Aurich <paul@darkrain42.org>
parents:
27472
diff
changeset
|
477 jid->node = g_utf8_normalize(node, -1, G_NORMALIZE_NFKC); |
26897
34e4e2ca7db9
jabber_id_new() needs to be case-folding the node and domain.
Paul Aurich <paul@darkrain42.org>
parents:
24693
diff
changeset
|
478 g_free(node); |
34e4e2ca7db9
jabber_id_new() needs to be case-folding the node and domain.
Paul Aurich <paul@darkrain42.org>
parents:
24693
diff
changeset
|
479 } |
34e4e2ca7db9
jabber_id_new() needs to be case-folding the node and domain.
Paul Aurich <paul@darkrain42.org>
parents:
24693
diff
changeset
|
480 |
34e4e2ca7db9
jabber_id_new() needs to be case-folding the node and domain.
Paul Aurich <paul@darkrain42.org>
parents:
24693
diff
changeset
|
481 if (domain) { |
27561
aac25c66a843
For JIDs, do strdown before normalization.
Paul Aurich <paul@darkrain42.org>
parents:
27472
diff
changeset
|
482 jid->domain = g_utf8_normalize(domain, -1, G_NORMALIZE_NFKC); |
26897
34e4e2ca7db9
jabber_id_new() needs to be case-folding the node and domain.
Paul Aurich <paul@darkrain42.org>
parents:
24693
diff
changeset
|
483 g_free(domain); |
34e4e2ca7db9
jabber_id_new() needs to be case-folding the node and domain.
Paul Aurich <paul@darkrain42.org>
parents:
24693
diff
changeset
|
484 } |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
485 |
27454
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
486 /* and finally the jabber nodeprep */ |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
487 if(!jabber_nodeprep_validate(jid->node) || |
27470
e90fa379fcec
Validate IPv6 identifiers in the domain portion of a JID.
Paul Aurich <paul@darkrain42.org>
parents:
27464
diff
changeset
|
488 !jabber_domain_validate(jid->domain) || |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
489 !jabber_resourceprep_validate(jid->resource)) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
490 jabber_id_free(jid); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
491 return NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
492 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
493 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
494 return jid; |
27598
e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
Paul Aurich <paul@darkrain42.org>
parents:
27561
diff
changeset
|
495 #endif /* USE_IDN */ |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
496 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
497 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
498 void |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
499 jabber_id_free(JabberID *jid) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
500 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
501 if(jid) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
502 if(jid->node) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
503 g_free(jid->node); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
504 if(jid->domain) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
505 g_free(jid->domain); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
506 if(jid->resource) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
507 g_free(jid->resource); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
508 g_free(jid); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
509 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
510 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
511 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
512 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
513 char *jabber_get_resource(const char *in) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
514 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
515 JabberID *jid = jabber_id_new(in); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
516 char *out; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
517 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
518 if(!jid) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
519 return NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
520 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
521 out = g_strdup(jid->resource); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
522 jabber_id_free(jid); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
523 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
524 return out; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
525 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
526 |
28150
2e3678cd33a0
jabber: Properly handle adding buddies that contain a resource. Closes #10151.
Paul Aurich <paul@darkrain42.org>
parents:
28129
diff
changeset
|
527 char * |
2e3678cd33a0
jabber: Properly handle adding buddies that contain a resource. Closes #10151.
Paul Aurich <paul@darkrain42.org>
parents:
28129
diff
changeset
|
528 jabber_get_bare_jid(const char *in) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
529 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
530 JabberID *jid = jabber_id_new(in); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
531 char *out; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
532 |
28150
2e3678cd33a0
jabber: Properly handle adding buddies that contain a resource. Closes #10151.
Paul Aurich <paul@darkrain42.org>
parents:
28129
diff
changeset
|
533 if (!jid) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
534 return NULL; |
28150
2e3678cd33a0
jabber: Properly handle adding buddies that contain a resource. Closes #10151.
Paul Aurich <paul@darkrain42.org>
parents:
28129
diff
changeset
|
535 out = jabber_id_get_bare_jid(jid); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
536 jabber_id_free(jid); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
537 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
538 return out; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
539 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
540 |
28150
2e3678cd33a0
jabber: Properly handle adding buddies that contain a resource. Closes #10151.
Paul Aurich <paul@darkrain42.org>
parents:
28129
diff
changeset
|
541 char * |
2e3678cd33a0
jabber: Properly handle adding buddies that contain a resource. Closes #10151.
Paul Aurich <paul@darkrain42.org>
parents:
28129
diff
changeset
|
542 jabber_id_get_bare_jid(const JabberID *jid) |
2e3678cd33a0
jabber: Properly handle adding buddies that contain a resource. Closes #10151.
Paul Aurich <paul@darkrain42.org>
parents:
28129
diff
changeset
|
543 { |
2e3678cd33a0
jabber: Properly handle adding buddies that contain a resource. Closes #10151.
Paul Aurich <paul@darkrain42.org>
parents:
28129
diff
changeset
|
544 g_return_val_if_fail(jid != NULL, NULL); |
2e3678cd33a0
jabber: Properly handle adding buddies that contain a resource. Closes #10151.
Paul Aurich <paul@darkrain42.org>
parents:
28129
diff
changeset
|
545 |
2e3678cd33a0
jabber: Properly handle adding buddies that contain a resource. Closes #10151.
Paul Aurich <paul@darkrain42.org>
parents:
28129
diff
changeset
|
546 return g_strconcat(jid->node ? jid->node : "", |
2e3678cd33a0
jabber: Properly handle adding buddies that contain a resource. Closes #10151.
Paul Aurich <paul@darkrain42.org>
parents:
28129
diff
changeset
|
547 jid->node ? "@" : "", |
2e3678cd33a0
jabber: Properly handle adding buddies that contain a resource. Closes #10151.
Paul Aurich <paul@darkrain42.org>
parents:
28129
diff
changeset
|
548 jid->domain, |
2e3678cd33a0
jabber: Properly handle adding buddies that contain a resource. Closes #10151.
Paul Aurich <paul@darkrain42.org>
parents:
28129
diff
changeset
|
549 NULL); |
2e3678cd33a0
jabber: Properly handle adding buddies that contain a resource. Closes #10151.
Paul Aurich <paul@darkrain42.org>
parents:
28129
diff
changeset
|
550 } |
2e3678cd33a0
jabber: Properly handle adding buddies that contain a resource. Closes #10151.
Paul Aurich <paul@darkrain42.org>
parents:
28129
diff
changeset
|
551 |
28129
22c65c1090a8
jabber: Use a better method for dealing with terminating slashes in JIDs.
Paul Aurich <paul@darkrain42.org>
parents:
28055
diff
changeset
|
552 JabberID * |
22c65c1090a8
jabber: Use a better method for dealing with terminating slashes in JIDs.
Paul Aurich <paul@darkrain42.org>
parents:
28055
diff
changeset
|
553 jabber_id_new(const char *str) |
22c65c1090a8
jabber: Use a better method for dealing with terminating slashes in JIDs.
Paul Aurich <paul@darkrain42.org>
parents:
28055
diff
changeset
|
554 { |
22c65c1090a8
jabber: Use a better method for dealing with terminating slashes in JIDs.
Paul Aurich <paul@darkrain42.org>
parents:
28055
diff
changeset
|
555 return jabber_id_new_internal(str, FALSE); |
22c65c1090a8
jabber: Use a better method for dealing with terminating slashes in JIDs.
Paul Aurich <paul@darkrain42.org>
parents:
28055
diff
changeset
|
556 } |
22c65c1090a8
jabber: Use a better method for dealing with terminating slashes in JIDs.
Paul Aurich <paul@darkrain42.org>
parents:
28055
diff
changeset
|
557 |
15822 | 558 const char *jabber_normalize(const PurpleAccount *account, const char *in) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
559 { |
15822 | 560 PurpleConnection *gc = account ? account->gc : NULL; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
561 JabberStream *js = gc ? gc->proto_data : NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
562 static char buf[3072]; /* maximum legal length of a jabber jid */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
563 JabberID *jid; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
564 |
28129
22c65c1090a8
jabber: Use a better method for dealing with terminating slashes in JIDs.
Paul Aurich <paul@darkrain42.org>
parents:
28055
diff
changeset
|
565 jid = jabber_id_new_internal(in, TRUE); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
566 if(!jid) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
567 return NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
568 |
26897
34e4e2ca7db9
jabber_id_new() needs to be case-folding the node and domain.
Paul Aurich <paul@darkrain42.org>
parents:
24693
diff
changeset
|
569 if(js && jid->node && jid->resource && |
34e4e2ca7db9
jabber_id_new() needs to be case-folding the node and domain.
Paul Aurich <paul@darkrain42.org>
parents:
24693
diff
changeset
|
570 jabber_chat_find(js, jid->node, jid->domain)) |
34e4e2ca7db9
jabber_id_new() needs to be case-folding the node and domain.
Paul Aurich <paul@darkrain42.org>
parents:
24693
diff
changeset
|
571 g_snprintf(buf, sizeof(buf), "%s@%s/%s", jid->node, jid->domain, |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
572 jid->resource); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
573 else |
26897
34e4e2ca7db9
jabber_id_new() needs to be case-folding the node and domain.
Paul Aurich <paul@darkrain42.org>
parents:
24693
diff
changeset
|
574 g_snprintf(buf, sizeof(buf), "%s%s%s", jid->node ? jid->node : "", |
34e4e2ca7db9
jabber_id_new() needs to be case-folding the node and domain.
Paul Aurich <paul@darkrain42.org>
parents:
24693
diff
changeset
|
575 jid->node ? "@" : "", jid->domain); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
576 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
577 jabber_id_free(jid); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
578 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
579 return buf; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
580 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
581 |
26941
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
582 gboolean |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
583 jabber_is_own_server(JabberStream *js, const char *str) |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
584 { |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
585 JabberID *jid; |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
586 gboolean equal; |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
587 |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
588 if (str == NULL) |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
589 return FALSE; |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
590 |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
591 g_return_val_if_fail(*str != '\0', FALSE); |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
592 |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
593 jid = jabber_id_new(str); |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
594 if (!jid) |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
595 return FALSE; |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
596 |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
597 equal = (jid->node == NULL && |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
598 g_str_equal(jid->domain, js->user->domain) && |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
599 jid->resource == NULL); |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
600 jabber_id_free(jid); |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
601 return equal; |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
602 } |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
603 |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
604 gboolean |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
605 jabber_is_own_account(JabberStream *js, const char *str) |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
606 { |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
607 JabberID *jid; |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
608 gboolean equal; |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
609 |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
610 if (str == NULL) |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
611 return TRUE; |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
612 |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
613 g_return_val_if_fail(*str != '\0', FALSE); |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
614 |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
615 jid = jabber_id_new(str); |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
616 if (!jid) |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
617 return FALSE; |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
618 |
26968
fd7dc5cc0310
Allow incoming stanzas to match 'our account' if they come from our resource.
Paul Aurich <paul@darkrain42.org>
parents:
26941
diff
changeset
|
619 equal = (purple_strequal(jid->node, js->user->node) && |
26941
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
620 g_str_equal(jid->domain, js->user->domain) && |
26968
fd7dc5cc0310
Allow incoming stanzas to match 'our account' if they come from our resource.
Paul Aurich <paul@darkrain42.org>
parents:
26941
diff
changeset
|
621 (jid->resource == NULL || |
fd7dc5cc0310
Allow incoming stanzas to match 'our account' if they come from our resource.
Paul Aurich <paul@darkrain42.org>
parents:
26941
diff
changeset
|
622 g_str_equal(jid->resource, js->user->resource))); |
26941
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
623 jabber_id_free(jid); |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
624 return equal; |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
625 } |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
626 |
15822 | 627 PurpleConversation * |
628 jabber_find_unnormalized_conv(const char *name, PurpleAccount *account) | |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
629 { |
15822 | 630 PurpleConversation *c = NULL; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
631 GList *cnv; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
632 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
633 g_return_val_if_fail(name != NULL, NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
634 |
15822 | 635 for(cnv = purple_get_conversations(); cnv; cnv = cnv->next) { |
636 c = (PurpleConversation*)cnv->data; | |
637 if(purple_conversation_get_type(c) == PURPLE_CONV_TYPE_IM && | |
638 !purple_utf8_strcasecmp(name, purple_conversation_get_name(c)) && | |
639 account == purple_conversation_get_account(c)) | |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
640 return c; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
641 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
642 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
643 return NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
644 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
645 |
24693
61e0924de04a
Fix up the XMPP User Avatar SHA1 hashing so that we don't mess up the checksum
Paul Aurich <paul@darkrain42.org>
parents:
19681
diff
changeset
|
646 /* The same as purple_util_get_image_checksum, but guaranteed to remain SHA1 */ |
61e0924de04a
Fix up the XMPP User Avatar SHA1 hashing so that we don't mess up the checksum
Paul Aurich <paul@darkrain42.org>
parents:
19681
diff
changeset
|
647 char * |
61e0924de04a
Fix up the XMPP User Avatar SHA1 hashing so that we don't mess up the checksum
Paul Aurich <paul@darkrain42.org>
parents:
19681
diff
changeset
|
648 jabber_calculate_data_sha1sum(gconstpointer data, size_t len) |
61e0924de04a
Fix up the XMPP User Avatar SHA1 hashing so that we don't mess up the checksum
Paul Aurich <paul@darkrain42.org>
parents:
19681
diff
changeset
|
649 { |
61e0924de04a
Fix up the XMPP User Avatar SHA1 hashing so that we don't mess up the checksum
Paul Aurich <paul@darkrain42.org>
parents:
19681
diff
changeset
|
650 PurpleCipherContext *context; |
61e0924de04a
Fix up the XMPP User Avatar SHA1 hashing so that we don't mess up the checksum
Paul Aurich <paul@darkrain42.org>
parents:
19681
diff
changeset
|
651 static gchar digest[41]; |
61e0924de04a
Fix up the XMPP User Avatar SHA1 hashing so that we don't mess up the checksum
Paul Aurich <paul@darkrain42.org>
parents:
19681
diff
changeset
|
652 |
61e0924de04a
Fix up the XMPP User Avatar SHA1 hashing so that we don't mess up the checksum
Paul Aurich <paul@darkrain42.org>
parents:
19681
diff
changeset
|
653 context = purple_cipher_context_new_by_name("sha1", NULL); |
61e0924de04a
Fix up the XMPP User Avatar SHA1 hashing so that we don't mess up the checksum
Paul Aurich <paul@darkrain42.org>
parents:
19681
diff
changeset
|
654 if (context == NULL) |
61e0924de04a
Fix up the XMPP User Avatar SHA1 hashing so that we don't mess up the checksum
Paul Aurich <paul@darkrain42.org>
parents:
19681
diff
changeset
|
655 { |
61e0924de04a
Fix up the XMPP User Avatar SHA1 hashing so that we don't mess up the checksum
Paul Aurich <paul@darkrain42.org>
parents:
19681
diff
changeset
|
656 purple_debug_error("jabber", "Could not find sha1 cipher\n"); |
61e0924de04a
Fix up the XMPP User Avatar SHA1 hashing so that we don't mess up the checksum
Paul Aurich <paul@darkrain42.org>
parents:
19681
diff
changeset
|
657 g_return_val_if_reached(NULL); |
61e0924de04a
Fix up the XMPP User Avatar SHA1 hashing so that we don't mess up the checksum
Paul Aurich <paul@darkrain42.org>
parents:
19681
diff
changeset
|
658 } |
61e0924de04a
Fix up the XMPP User Avatar SHA1 hashing so that we don't mess up the checksum
Paul Aurich <paul@darkrain42.org>
parents:
19681
diff
changeset
|
659 |
61e0924de04a
Fix up the XMPP User Avatar SHA1 hashing so that we don't mess up the checksum
Paul Aurich <paul@darkrain42.org>
parents:
19681
diff
changeset
|
660 /* Hash the data */ |
61e0924de04a
Fix up the XMPP User Avatar SHA1 hashing so that we don't mess up the checksum
Paul Aurich <paul@darkrain42.org>
parents:
19681
diff
changeset
|
661 purple_cipher_context_append(context, data, len); |
61e0924de04a
Fix up the XMPP User Avatar SHA1 hashing so that we don't mess up the checksum
Paul Aurich <paul@darkrain42.org>
parents:
19681
diff
changeset
|
662 if (!purple_cipher_context_digest_to_str(context, sizeof(digest), digest, NULL)) |
61e0924de04a
Fix up the XMPP User Avatar SHA1 hashing so that we don't mess up the checksum
Paul Aurich <paul@darkrain42.org>
parents:
19681
diff
changeset
|
663 { |
61e0924de04a
Fix up the XMPP User Avatar SHA1 hashing so that we don't mess up the checksum
Paul Aurich <paul@darkrain42.org>
parents:
19681
diff
changeset
|
664 purple_debug_error("jabber", "Failed to get SHA-1 digest.\n"); |
61e0924de04a
Fix up the XMPP User Avatar SHA1 hashing so that we don't mess up the checksum
Paul Aurich <paul@darkrain42.org>
parents:
19681
diff
changeset
|
665 g_return_val_if_reached(NULL); |
61e0924de04a
Fix up the XMPP User Avatar SHA1 hashing so that we don't mess up the checksum
Paul Aurich <paul@darkrain42.org>
parents:
19681
diff
changeset
|
666 } |
61e0924de04a
Fix up the XMPP User Avatar SHA1 hashing so that we don't mess up the checksum
Paul Aurich <paul@darkrain42.org>
parents:
19681
diff
changeset
|
667 purple_cipher_context_destroy(context); |
61e0924de04a
Fix up the XMPP User Avatar SHA1 hashing so that we don't mess up the checksum
Paul Aurich <paul@darkrain42.org>
parents:
19681
diff
changeset
|
668 |
61e0924de04a
Fix up the XMPP User Avatar SHA1 hashing so that we don't mess up the checksum
Paul Aurich <paul@darkrain42.org>
parents:
19681
diff
changeset
|
669 return g_strdup(digest); |
61e0924de04a
Fix up the XMPP User Avatar SHA1 hashing so that we don't mess up the checksum
Paul Aurich <paul@darkrain42.org>
parents:
19681
diff
changeset
|
670 } |
61e0924de04a
Fix up the XMPP User Avatar SHA1 hashing so that we don't mess up the checksum
Paul Aurich <paul@darkrain42.org>
parents:
19681
diff
changeset
|
671 |