comparison 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
comparison
equal deleted inserted replaced
28716:eb4081c68c57 28717:464d022d7d6e
274 274
275 return TRUE; 275 return TRUE;
276 #endif /* USE_IDN */ 276 #endif /* USE_IDN */
277 } 277 }
278 278
279 char *jabber_saslprep(const char *in)
280 {
281 #ifdef USE_IDN
282 char *out;
283
284 g_return_val_if_fail(in != NULL, NULL);
285 g_return_val_if_fail(strlen(in) <= sizeof(idn_buffer) - 1, NULL);
286
287 strncpy(idn_buffer, in, sizeof(idn_buffer) - 1);
288 idn_buffer[sizeof(idn_buffer) - 1] = '\0';
289
290 if (STRINGPREP_OK != stringprep(idn_buffer, sizeof(idn_buffer), 0,
291 stringprep_saslprep)) {
292 memset(idn_buffer, 0, sizeof(idn_buffer));
293 return NULL;
294 }
295
296 out = g_strdup(idn_buffer);
297 memset(idn_buffer, 0, sizeof(idn_buffer));
298 return out;
299 #else /* USE_IDN */
300 /* TODO: Something better than disallowing all non-ASCII characters */
301 /* TODO: Is this even correct? */
302 const guchar *c;
303
304 c = (const guchar *)in;
305 while (*c) {
306 if (*c > 0x7f ||
307 (*c < 0x20 && *c != '\t' && *c != '\n' && *c != '\r'))
308 return NULL;
309 }
310
311 return g_strdup(in);
312 #endif /* USE_IDN */
313 }
314
279 static JabberID* 315 static JabberID*
280 jabber_id_new_internal(const char *str, gboolean allow_terminating_slash) 316 jabber_id_new_internal(const char *str, gboolean allow_terminating_slash)
281 { 317 {
282 const char *at = NULL; 318 const char *at = NULL;
283 const char *slash = NULL; 319 const char *slash = NULL;