diff libpurple/protocols/jabber/jutil.c @ 29126:d558d141aaae

propagate from branch 'im.pidgin.pidgin' (head 4185001f1d8e8d7c894fa194202f7051f06cb59f) to branch 'im.pidgin.cpw.darkrain42.xmpp.scram' (head 90b6819fa75dbf90fc1c2132fe445eaf4661c383)
author Paul Aurich <paul@darkrain42.org>
date Thu, 03 Dec 2009 05:39:00 +0000
parents bc1eb4dacd00 464d022d7d6e
children 516e53916962
line wrap: on
line diff
--- a/libpurple/protocols/jabber/jutil.c	Thu Dec 03 05:38:42 2009 +0000
+++ b/libpurple/protocols/jabber/jutil.c	Thu Dec 03 05:39:00 2009 +0000
@@ -276,6 +276,42 @@
 #endif /* USE_IDN */
 }
 
+char *jabber_saslprep(const char *in)
+{
+#ifdef USE_IDN
+	char *out;
+
+	g_return_val_if_fail(in != NULL, NULL);
+	g_return_val_if_fail(strlen(in) <= sizeof(idn_buffer) - 1, NULL);
+
+	strncpy(idn_buffer, in, sizeof(idn_buffer) - 1);
+	idn_buffer[sizeof(idn_buffer) - 1] = '\0';
+
+	if (STRINGPREP_OK != stringprep(idn_buffer, sizeof(idn_buffer), 0,
+	                                stringprep_saslprep)) {
+		memset(idn_buffer, 0, sizeof(idn_buffer));
+		return NULL;
+	}
+
+	out = g_strdup(idn_buffer);
+	memset(idn_buffer, 0, sizeof(idn_buffer));
+	return out;
+#else /* USE_IDN */
+	/* TODO: Something better than disallowing all non-ASCII characters */
+	/* TODO: Is this even correct? */
+	const guchar *c;
+
+	c = (const guchar *)in;
+	while (*c) {
+		if (*c > 0x7f ||
+				(*c < 0x20 && *c != '\t' && *c != '\n' && *c != '\r'))
+			return NULL;
+	}
+
+	return g_strdup(in);
+#endif /* USE_IDN */
+}
+
 static JabberID*
 jabber_id_new_internal(const char *str, gboolean allow_terminating_slash)
 {