summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJakub Hrozek <jhrozek@redhat.com>2015-11-06 22:11:04 +0100
committerJakub Hrozek <jhrozek@redhat.com>2015-11-09 15:33:45 +0100
commiteef26709738de724a41919d3a7079a90b4273908 (patch)
treee34032286b1ae9a989d694b1b8714db3299fbe30
parent8d1b572126afceb60693ff4c4a734bd6dbdaf548 (diff)
downloadsssd-eef26709738de724a41919d3a7079a90b4273908.tar.gz
sssd-eef26709738de724a41919d3a7079a90b4273908.tar.xz
sssd-eef26709738de724a41919d3a7079a90b4273908.zip
sbus: Add a compat wrapper sbus_validate_utf8()
-rw-r--r--configure.ac6
-rw-r--r--src/sbus/sssd_dbus.h6
-rw-r--r--src/sbus/sssd_dbus_common.c16
-rw-r--r--src/tests/sbus_tests.c15
4 files changed, 40 insertions, 3 deletions
diff --git a/configure.ac b/configure.ac
index 51c0b0da8..f49b6f226 100644
--- a/configure.ac
+++ b/configure.ac
@@ -218,9 +218,9 @@ fi
if test x$has_dbus != xno; then
SAFE_LIBS="$LIBS"
LIBS="$DBUS_LIBS"
- AC_CHECK_FUNC([dbus_watch_get_unix_fd],
- AC_DEFINE([HAVE_DBUS_WATCH_GET_UNIX_FD], [1],
- [Define if dbus_watch_get_unix_fd exists]))
+ AC_CHECK_FUNCS([ dbus_watch_get_unix_fd \
+ dbus_validate_utf8 ])
+
LIBS="$SAFE_LIBS"
fi
diff --git a/src/sbus/sssd_dbus.h b/src/sbus/sssd_dbus.h
index c1e27746e..564d93d59 100644
--- a/src/sbus/sssd_dbus.h
+++ b/src/sbus/sssd_dbus.h
@@ -404,6 +404,12 @@ bool sbus_request_parse_or_finish(struct sbus_request *request,
int first_arg_type,
...);
+/* Return TRUE if alleged_utf8 is a valid UTF8 string.
+ *
+ * A wrapper around dbus_validate_utf8() if available.
+ * */
+dbus_bool_t sbus_validate_utf8(const char *alleged_utf8);
+
struct sbus_incoming_signal {
struct sbus_connection *conn;
DBusMessage *message;
diff --git a/src/sbus/sssd_dbus_common.c b/src/sbus/sssd_dbus_common.c
index 737d8d4f9..1c8c473c9 100644
--- a/src/sbus/sssd_dbus_common.c
+++ b/src/sbus/sssd_dbus_common.c
@@ -27,6 +27,10 @@
#include "sbus/sssd_dbus.h"
#include "sbus/sssd_dbus_private.h"
+#ifndef HAVE_DBUS_VALIDATE_UTF8
+#include "util/sss_utf8.h"
+#endif
+
/* =Watches=============================================================== */
/* DBUS may ask us to add a watch to a file descriptor that already had a watch
@@ -379,3 +383,15 @@ void sbus_remove_timeout(DBusTimeout *dbus_timeout, void *data)
talloc_free(timeout);
}
+
+dbus_bool_t sbus_validate_utf8(const char *alleged_utf8)
+{
+#ifdef HAVE_DBUS_VALIDATE_UTF8
+ return dbus_validate_utf8(alleged_utf8, NULL);
+#else
+ bool ok;
+
+ ok = sss_utf8_check(alleged_utf8, strlen(alleged_utf8));
+ return ok ? TRUE : FALSE;
+#endif
+}
diff --git a/src/tests/sbus_tests.c b/src/tests/sbus_tests.c
index 598cc536d..cae82cfff 100644
--- a/src/tests/sbus_tests.c
+++ b/src/tests/sbus_tests.c
@@ -366,6 +366,20 @@ START_TEST(test_sbus_new_error)
}
END_TEST
+START_TEST(test_utf8_check)
+{
+ dbus_bool_t ok;
+ const char *invalid = "ad\351la\357d";
+ const char valid[] = { 'M', 0xC3, 0x9C, 'N', 'C', 'H', 'E', 'N', 0x0 };
+
+ ok = sbus_validate_utf8(valid);
+ ck_assert(ok == TRUE);
+
+ ok = sbus_validate_utf8(invalid);
+ ck_assert(ok == FALSE);
+}
+END_TEST
+
TCase *create_sbus_tests(void)
{
TCase *tc = tcase_create("tests");
@@ -375,6 +389,7 @@ TCase *create_sbus_tests(void)
tcase_add_test(tc, test_request_parse_bad_args);
tcase_add_test(tc, test_introspection);
tcase_add_test(tc, test_sbus_new_error);
+ tcase_add_test(tc, test_utf8_check);
return tc;
}