Mercurial > pidgin
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; |