diff options
author | Jakub Hrozek <jhrozek@redhat.com> | 2015-11-06 22:11:04 +0100 |
---|---|---|
committer | Jakub Hrozek <jhrozek@redhat.com> | 2015-11-09 15:33:45 +0100 |
commit | eef26709738de724a41919d3a7079a90b4273908 (patch) | |
tree | e34032286b1ae9a989d694b1b8714db3299fbe30 | |
parent | 8d1b572126afceb60693ff4c4a734bd6dbdaf548 (diff) | |
download | sssd-eef26709738de724a41919d3a7079a90b4273908.tar.gz sssd-eef26709738de724a41919d3a7079a90b4273908.tar.xz sssd-eef26709738de724a41919d3a7079a90b4273908.zip |
sbus: Add a compat wrapper sbus_validate_utf8()
-rw-r--r-- | configure.ac | 6 | ||||
-rw-r--r-- | src/sbus/sssd_dbus.h | 6 | ||||
-rw-r--r-- | src/sbus/sssd_dbus_common.c | 16 | ||||
-rw-r--r-- | src/tests/sbus_tests.c | 15 |
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; } |