[SSSD] [sssd PR#152][synchronized] Add a tevent wrapper around libcurl's asynchronous interface
URL: https://github.com/SSSD/sssd/pull/152 Author: jhrozek Title: #152: Add a tevent wrapper around libcurl's asynchronous interface Action: synchronized To pull the PR as Git branch: git remote add ghsssd https://github.com/SSSD/sssd git fetch ghsssd pull/152/head:pr152 git checkout pr152 From 864b17964ab812020754a1434f6893d253fb861e Mon Sep 17 00:00:00 2001 From: Jakub HrozekDate: Fri, 23 Sep 2016 13:41:53 +0200 Subject: [PATCH 1/5] UTIL: Add a new macro SAFEALIGN_MEMCPY_CHECK We will use it later in the KCM server --- src/util/util_safealign.h | 6 ++ 1 file changed, 6 insertions(+) diff --git a/src/util/util_safealign.h b/src/util/util_safealign.h index a2cd4dd..0d9a579 100644 --- a/src/util/util_safealign.h +++ b/src/util/util_safealign.h @@ -124,6 +124,12 @@ safealign_memcpy(void *dest, const void *src, size_t n, size_t *counter) safealign_memcpy(dest, CV_MACRO_val, sizeof(char) * length, pctr); \ } while(0) +#define SAFEALIGN_MEMCPY_CHECK(dest, src, srclen, len, pctr) do { \ +if ((*(pctr) + srclen) > (len) || \ +SIZE_T_OVERFLOW(*(pctr), srclen)) { return EINVAL; } \ +safealign_memcpy(dest, src, srclen, pctr); \ +} while(0) + /* Aliases for backward compatibility. */ #define SAFEALIGN_SET_VALUE SAFEALIGN_SETMEM_VALUE #define SAFEALIGN_SET_INT64 SAFEALIGN_SETMEM_INT64 From 14734c8100d61613a263133240115a9c7a970475 Mon Sep 17 00:00:00 2001 From: Jakub Hrozek Date: Tue, 20 Sep 2016 18:46:40 +0200 Subject: [PATCH 2/5] UTIL: Add a generic iobuf module The KCM responder reads bytes and writes bytes from a buffer of bytes. Instead of letting the caller deal with low-level handling using the SAFEALIGN macros, this patch adds a new iobuf.c module with more high-level functions. The core is a iobuf struct that keeps track of the buffer, its total capacity and a current read or write position. There are helper function to read or write a generic buffer with a set length. Later, we will also add convenience functions to read C data types using the SAFEALIGN macros. --- Makefile.am | 22 + src/tests/cmocka/test_iobuf.c | 194 +++ src/util/sss_iobuf.c | 204 ++ src/util/sss_iobuf.h | 117 4 files changed, 537 insertions(+) create mode 100644 src/tests/cmocka/test_iobuf.c create mode 100644 src/util/sss_iobuf.c create mode 100644 src/util/sss_iobuf.h diff --git a/Makefile.am b/Makefile.am index 34da1f0..450f07c 100644 --- a/Makefile.am +++ b/Makefile.am @@ -277,6 +277,7 @@ if HAVE_CMOCKA test_ipa_dn \ simple-access-tests \ krb5_common_test \ +test_iobuf \ $(NULL) if HAVE_LIBRESOLV @@ -657,6 +658,7 @@ dist_noinst_HEADERS = \ src/util/util_sss_idmap.h \ src/util/util_creds.h \ src/util/inotify.h \ +src/util/sss_iobuf.h \ src/monitor/monitor.h \ src/monitor/monitor_interfaces.h \ src/monitor/monitor_iface_generated.h \ @@ -1839,6 +1841,7 @@ krb5_utils_tests_SOURCES = \ src/providers/krb5/krb5_common.c \ src/providers/krb5/krb5_opts.c \ src/util/sss_krb5.c \ +src/util/sss_iobuf.c \ src/providers/data_provider_fo.c \ src/providers/data_provider_opts.c \ src/providers/data_provider_callbacks.c \ @@ -2114,6 +2117,7 @@ krb5_child_test_SOURCES = \ src/providers/krb5/krb5_common.c \ src/providers/krb5/krb5_opts.c \ src/util/sss_krb5.c \ +src/util/sss_iobuf.c \ src/providers/data_provider_fo.c \ src/providers/data_provider_opts.c \ src/providers/data_provider_callbacks.c \ @@ -2785,6 +2789,7 @@ test_copy_ccache_SOURCES = \ src/tests/cmocka/test_copy_ccache.c \ src/providers/krb5/krb5_ccache.c \ src/util/sss_krb5.c \ +src/util/sss_iobuf.c \ $(NULL) test_copy_ccache_CFLAGS = \ $(AM_CFLAGS) \ @@ -2803,6 +2808,7 @@ test_copy_keytab_SOURCES = \ src/tests/cmocka/test_copy_keytab.c \ src/providers/krb5/krb5_keytab.c \ src/util/sss_krb5.c \ +src/util/sss_iobuf.c \ $(NULL) test_copy_keytab_CFLAGS = \ $(AM_CFLAGS) \ @@ -3165,6 +3171,19 @@ test_ipa_dn_LDADD = \ libsss_test_common.la \ $(NULL) +test_iobuf_SOURCES = \ +src/util/sss_iobuf.c \ +src/tests/cmocka/test_iobuf.c \ +$(NULL) +test_iobuf_CFLAGS = \ +$(AM_CFLAGS) \ +$(NULL) +test_iobuf_LDADD = \ +$(CMOCKA_LIBS) \ +$(SSSD_LIBS) \ +$(NULL) + + EXTRA_simple_access_tests_DEPENDENCIES = \ $(ldblib_LTLIBRARIES) simple_access_tests_SOURCES = \ @@ -3497,6 +3516,7 @@ libsss_krb5_common_la_SOURCES = \ src/providers/krb5/krb5_init_shared.c \ src/providers/krb5/krb5_ccache.c \ src/util/sss_krb5.c \ +src/util/sss_iobuf.c \ src/util/become_user.c \ $(NULL) libsss_krb5_common_la_CFLAGS = \ @@ -3726,6 +3746,7 @@ krb5_child_SOURCES = \ src/providers/dp_pam_data_util.c \
[SSSD] [sssd PR#152][synchronized] Add a tevent wrapper around libcurl's asynchronous interface
URL: https://github.com/SSSD/sssd/pull/152 Author: jhrozek Title: #152: Add a tevent wrapper around libcurl's asynchronous interface Action: synchronized To pull the PR as Git branch: git remote add ghsssd https://github.com/SSSD/sssd git fetch ghsssd pull/152/head:pr152 git checkout pr152 From 7fd47b9ab00bd346e6cda85e8f0b771d50b7e425 Mon Sep 17 00:00:00 2001 From: Jakub HrozekDate: Fri, 23 Sep 2016 13:41:53 +0200 Subject: [PATCH 1/5] UTIL: Add a new macro SAFEALIGN_MEMCPY_CHECK We will use it later in the KCM server --- src/util/util_safealign.h | 6 ++ 1 file changed, 6 insertions(+) diff --git a/src/util/util_safealign.h b/src/util/util_safealign.h index a2cd4dd..0d9a579 100644 --- a/src/util/util_safealign.h +++ b/src/util/util_safealign.h @@ -124,6 +124,12 @@ safealign_memcpy(void *dest, const void *src, size_t n, size_t *counter) safealign_memcpy(dest, CV_MACRO_val, sizeof(char) * length, pctr); \ } while(0) +#define SAFEALIGN_MEMCPY_CHECK(dest, src, srclen, len, pctr) do { \ +if ((*(pctr) + srclen) > (len) || \ +SIZE_T_OVERFLOW(*(pctr), srclen)) { return EINVAL; } \ +safealign_memcpy(dest, src, srclen, pctr); \ +} while(0) + /* Aliases for backward compatibility. */ #define SAFEALIGN_SET_VALUE SAFEALIGN_SETMEM_VALUE #define SAFEALIGN_SET_INT64 SAFEALIGN_SETMEM_INT64 From 202c77d407ebe782f77f817a00e5ab59856ad3a7 Mon Sep 17 00:00:00 2001 From: Jakub Hrozek Date: Tue, 20 Sep 2016 18:46:40 +0200 Subject: [PATCH 2/5] UTIL: Add a generic iobuf module The KCM responder reads bytes and writes bytes from a buffer of bytes. Instead of letting the caller deal with low-level handling using the SAFEALIGN macros, this patch adds a new iobuf.c module with more high-level functions. The core is a iobuf struct that keeps track of the buffer, its total capacity and a current read or write position. There are helper function to read or write a generic buffer with a set length. Later, we will also add convenience functions to read C data types using the SAFEALIGN macros. --- Makefile.am | 22 + src/tests/cmocka/test_iobuf.c | 194 +++ src/util/sss_iobuf.c | 204 ++ src/util/sss_iobuf.h | 117 4 files changed, 537 insertions(+) create mode 100644 src/tests/cmocka/test_iobuf.c create mode 100644 src/util/sss_iobuf.c create mode 100644 src/util/sss_iobuf.h diff --git a/Makefile.am b/Makefile.am index 34da1f0..450f07c 100644 --- a/Makefile.am +++ b/Makefile.am @@ -277,6 +277,7 @@ if HAVE_CMOCKA test_ipa_dn \ simple-access-tests \ krb5_common_test \ +test_iobuf \ $(NULL) if HAVE_LIBRESOLV @@ -657,6 +658,7 @@ dist_noinst_HEADERS = \ src/util/util_sss_idmap.h \ src/util/util_creds.h \ src/util/inotify.h \ +src/util/sss_iobuf.h \ src/monitor/monitor.h \ src/monitor/monitor_interfaces.h \ src/monitor/monitor_iface_generated.h \ @@ -1839,6 +1841,7 @@ krb5_utils_tests_SOURCES = \ src/providers/krb5/krb5_common.c \ src/providers/krb5/krb5_opts.c \ src/util/sss_krb5.c \ +src/util/sss_iobuf.c \ src/providers/data_provider_fo.c \ src/providers/data_provider_opts.c \ src/providers/data_provider_callbacks.c \ @@ -2114,6 +2117,7 @@ krb5_child_test_SOURCES = \ src/providers/krb5/krb5_common.c \ src/providers/krb5/krb5_opts.c \ src/util/sss_krb5.c \ +src/util/sss_iobuf.c \ src/providers/data_provider_fo.c \ src/providers/data_provider_opts.c \ src/providers/data_provider_callbacks.c \ @@ -2785,6 +2789,7 @@ test_copy_ccache_SOURCES = \ src/tests/cmocka/test_copy_ccache.c \ src/providers/krb5/krb5_ccache.c \ src/util/sss_krb5.c \ +src/util/sss_iobuf.c \ $(NULL) test_copy_ccache_CFLAGS = \ $(AM_CFLAGS) \ @@ -2803,6 +2808,7 @@ test_copy_keytab_SOURCES = \ src/tests/cmocka/test_copy_keytab.c \ src/providers/krb5/krb5_keytab.c \ src/util/sss_krb5.c \ +src/util/sss_iobuf.c \ $(NULL) test_copy_keytab_CFLAGS = \ $(AM_CFLAGS) \ @@ -3165,6 +3171,19 @@ test_ipa_dn_LDADD = \ libsss_test_common.la \ $(NULL) +test_iobuf_SOURCES = \ +src/util/sss_iobuf.c \ +src/tests/cmocka/test_iobuf.c \ +$(NULL) +test_iobuf_CFLAGS = \ +$(AM_CFLAGS) \ +$(NULL) +test_iobuf_LDADD = \ +$(CMOCKA_LIBS) \ +$(SSSD_LIBS) \ +$(NULL) + + EXTRA_simple_access_tests_DEPENDENCIES = \ $(ldblib_LTLIBRARIES) simple_access_tests_SOURCES = \ @@ -3497,6 +3516,7 @@ libsss_krb5_common_la_SOURCES = \ src/providers/krb5/krb5_init_shared.c \ src/providers/krb5/krb5_ccache.c \ src/util/sss_krb5.c \ +src/util/sss_iobuf.c \ src/util/become_user.c \ $(NULL) libsss_krb5_common_la_CFLAGS = \ @@ -3726,6 +3746,7 @@ krb5_child_SOURCES = \ src/providers/dp_pam_data_util.c \
[SSSD] [sssd PR#152][synchronized] Add a tevent wrapper around libcurl's asynchronous interface
URL: https://github.com/SSSD/sssd/pull/152 Author: jhrozek Title: #152: Add a tevent wrapper around libcurl's asynchronous interface Action: synchronized To pull the PR as Git branch: git remote add ghsssd https://github.com/SSSD/sssd git fetch ghsssd pull/152/head:pr152 git checkout pr152 From 7fd47b9ab00bd346e6cda85e8f0b771d50b7e425 Mon Sep 17 00:00:00 2001 From: Jakub HrozekDate: Fri, 23 Sep 2016 13:41:53 +0200 Subject: [PATCH 1/6] UTIL: Add a new macro SAFEALIGN_MEMCPY_CHECK We will use it later in the KCM server --- src/util/util_safealign.h | 6 ++ 1 file changed, 6 insertions(+) diff --git a/src/util/util_safealign.h b/src/util/util_safealign.h index a2cd4dd..0d9a579 100644 --- a/src/util/util_safealign.h +++ b/src/util/util_safealign.h @@ -124,6 +124,12 @@ safealign_memcpy(void *dest, const void *src, size_t n, size_t *counter) safealign_memcpy(dest, CV_MACRO_val, sizeof(char) * length, pctr); \ } while(0) +#define SAFEALIGN_MEMCPY_CHECK(dest, src, srclen, len, pctr) do { \ +if ((*(pctr) + srclen) > (len) || \ +SIZE_T_OVERFLOW(*(pctr), srclen)) { return EINVAL; } \ +safealign_memcpy(dest, src, srclen, pctr); \ +} while(0) + /* Aliases for backward compatibility. */ #define SAFEALIGN_SET_VALUE SAFEALIGN_SETMEM_VALUE #define SAFEALIGN_SET_INT64 SAFEALIGN_SETMEM_INT64 From 202c77d407ebe782f77f817a00e5ab59856ad3a7 Mon Sep 17 00:00:00 2001 From: Jakub Hrozek Date: Tue, 20 Sep 2016 18:46:40 +0200 Subject: [PATCH 2/6] UTIL: Add a generic iobuf module The KCM responder reads bytes and writes bytes from a buffer of bytes. Instead of letting the caller deal with low-level handling using the SAFEALIGN macros, this patch adds a new iobuf.c module with more high-level functions. The core is a iobuf struct that keeps track of the buffer, its total capacity and a current read or write position. There are helper function to read or write a generic buffer with a set length. Later, we will also add convenience functions to read C data types using the SAFEALIGN macros. --- Makefile.am | 22 + src/tests/cmocka/test_iobuf.c | 194 +++ src/util/sss_iobuf.c | 204 ++ src/util/sss_iobuf.h | 117 4 files changed, 537 insertions(+) create mode 100644 src/tests/cmocka/test_iobuf.c create mode 100644 src/util/sss_iobuf.c create mode 100644 src/util/sss_iobuf.h diff --git a/Makefile.am b/Makefile.am index 34da1f0..450f07c 100644 --- a/Makefile.am +++ b/Makefile.am @@ -277,6 +277,7 @@ if HAVE_CMOCKA test_ipa_dn \ simple-access-tests \ krb5_common_test \ +test_iobuf \ $(NULL) if HAVE_LIBRESOLV @@ -657,6 +658,7 @@ dist_noinst_HEADERS = \ src/util/util_sss_idmap.h \ src/util/util_creds.h \ src/util/inotify.h \ +src/util/sss_iobuf.h \ src/monitor/monitor.h \ src/monitor/monitor_interfaces.h \ src/monitor/monitor_iface_generated.h \ @@ -1839,6 +1841,7 @@ krb5_utils_tests_SOURCES = \ src/providers/krb5/krb5_common.c \ src/providers/krb5/krb5_opts.c \ src/util/sss_krb5.c \ +src/util/sss_iobuf.c \ src/providers/data_provider_fo.c \ src/providers/data_provider_opts.c \ src/providers/data_provider_callbacks.c \ @@ -2114,6 +2117,7 @@ krb5_child_test_SOURCES = \ src/providers/krb5/krb5_common.c \ src/providers/krb5/krb5_opts.c \ src/util/sss_krb5.c \ +src/util/sss_iobuf.c \ src/providers/data_provider_fo.c \ src/providers/data_provider_opts.c \ src/providers/data_provider_callbacks.c \ @@ -2785,6 +2789,7 @@ test_copy_ccache_SOURCES = \ src/tests/cmocka/test_copy_ccache.c \ src/providers/krb5/krb5_ccache.c \ src/util/sss_krb5.c \ +src/util/sss_iobuf.c \ $(NULL) test_copy_ccache_CFLAGS = \ $(AM_CFLAGS) \ @@ -2803,6 +2808,7 @@ test_copy_keytab_SOURCES = \ src/tests/cmocka/test_copy_keytab.c \ src/providers/krb5/krb5_keytab.c \ src/util/sss_krb5.c \ +src/util/sss_iobuf.c \ $(NULL) test_copy_keytab_CFLAGS = \ $(AM_CFLAGS) \ @@ -3165,6 +3171,19 @@ test_ipa_dn_LDADD = \ libsss_test_common.la \ $(NULL) +test_iobuf_SOURCES = \ +src/util/sss_iobuf.c \ +src/tests/cmocka/test_iobuf.c \ +$(NULL) +test_iobuf_CFLAGS = \ +$(AM_CFLAGS) \ +$(NULL) +test_iobuf_LDADD = \ +$(CMOCKA_LIBS) \ +$(SSSD_LIBS) \ +$(NULL) + + EXTRA_simple_access_tests_DEPENDENCIES = \ $(ldblib_LTLIBRARIES) simple_access_tests_SOURCES = \ @@ -3497,6 +3516,7 @@ libsss_krb5_common_la_SOURCES = \ src/providers/krb5/krb5_init_shared.c \ src/providers/krb5/krb5_ccache.c \ src/util/sss_krb5.c \ +src/util/sss_iobuf.c \ src/util/become_user.c \ $(NULL) libsss_krb5_common_la_CFLAGS = \ @@ -3726,6 +3746,7 @@ krb5_child_SOURCES = \ src/providers/dp_pam_data_util.c \
[SSSD] [sssd PR#152][synchronized] Add a tevent wrapper around libcurl's asynchronous interface
URL: https://github.com/SSSD/sssd/pull/152 Author: jhrozek Title: #152: Add a tevent wrapper around libcurl's asynchronous interface Action: synchronized To pull the PR as Git branch: git remote add ghsssd https://github.com/SSSD/sssd git fetch ghsssd pull/152/head:pr152 git checkout pr152 From 7fd47b9ab00bd346e6cda85e8f0b771d50b7e425 Mon Sep 17 00:00:00 2001 From: Jakub HrozekDate: Fri, 23 Sep 2016 13:41:53 +0200 Subject: [PATCH 1/5] UTIL: Add a new macro SAFEALIGN_MEMCPY_CHECK We will use it later in the KCM server --- src/util/util_safealign.h | 6 ++ 1 file changed, 6 insertions(+) diff --git a/src/util/util_safealign.h b/src/util/util_safealign.h index a2cd4dd..0d9a579 100644 --- a/src/util/util_safealign.h +++ b/src/util/util_safealign.h @@ -124,6 +124,12 @@ safealign_memcpy(void *dest, const void *src, size_t n, size_t *counter) safealign_memcpy(dest, CV_MACRO_val, sizeof(char) * length, pctr); \ } while(0) +#define SAFEALIGN_MEMCPY_CHECK(dest, src, srclen, len, pctr) do { \ +if ((*(pctr) + srclen) > (len) || \ +SIZE_T_OVERFLOW(*(pctr), srclen)) { return EINVAL; } \ +safealign_memcpy(dest, src, srclen, pctr); \ +} while(0) + /* Aliases for backward compatibility. */ #define SAFEALIGN_SET_VALUE SAFEALIGN_SETMEM_VALUE #define SAFEALIGN_SET_INT64 SAFEALIGN_SETMEM_INT64 From 202c77d407ebe782f77f817a00e5ab59856ad3a7 Mon Sep 17 00:00:00 2001 From: Jakub Hrozek Date: Tue, 20 Sep 2016 18:46:40 +0200 Subject: [PATCH 2/5] UTIL: Add a generic iobuf module The KCM responder reads bytes and writes bytes from a buffer of bytes. Instead of letting the caller deal with low-level handling using the SAFEALIGN macros, this patch adds a new iobuf.c module with more high-level functions. The core is a iobuf struct that keeps track of the buffer, its total capacity and a current read or write position. There are helper function to read or write a generic buffer with a set length. Later, we will also add convenience functions to read C data types using the SAFEALIGN macros. --- Makefile.am | 22 + src/tests/cmocka/test_iobuf.c | 194 +++ src/util/sss_iobuf.c | 204 ++ src/util/sss_iobuf.h | 117 4 files changed, 537 insertions(+) create mode 100644 src/tests/cmocka/test_iobuf.c create mode 100644 src/util/sss_iobuf.c create mode 100644 src/util/sss_iobuf.h diff --git a/Makefile.am b/Makefile.am index 34da1f0..450f07c 100644 --- a/Makefile.am +++ b/Makefile.am @@ -277,6 +277,7 @@ if HAVE_CMOCKA test_ipa_dn \ simple-access-tests \ krb5_common_test \ +test_iobuf \ $(NULL) if HAVE_LIBRESOLV @@ -657,6 +658,7 @@ dist_noinst_HEADERS = \ src/util/util_sss_idmap.h \ src/util/util_creds.h \ src/util/inotify.h \ +src/util/sss_iobuf.h \ src/monitor/monitor.h \ src/monitor/monitor_interfaces.h \ src/monitor/monitor_iface_generated.h \ @@ -1839,6 +1841,7 @@ krb5_utils_tests_SOURCES = \ src/providers/krb5/krb5_common.c \ src/providers/krb5/krb5_opts.c \ src/util/sss_krb5.c \ +src/util/sss_iobuf.c \ src/providers/data_provider_fo.c \ src/providers/data_provider_opts.c \ src/providers/data_provider_callbacks.c \ @@ -2114,6 +2117,7 @@ krb5_child_test_SOURCES = \ src/providers/krb5/krb5_common.c \ src/providers/krb5/krb5_opts.c \ src/util/sss_krb5.c \ +src/util/sss_iobuf.c \ src/providers/data_provider_fo.c \ src/providers/data_provider_opts.c \ src/providers/data_provider_callbacks.c \ @@ -2785,6 +2789,7 @@ test_copy_ccache_SOURCES = \ src/tests/cmocka/test_copy_ccache.c \ src/providers/krb5/krb5_ccache.c \ src/util/sss_krb5.c \ +src/util/sss_iobuf.c \ $(NULL) test_copy_ccache_CFLAGS = \ $(AM_CFLAGS) \ @@ -2803,6 +2808,7 @@ test_copy_keytab_SOURCES = \ src/tests/cmocka/test_copy_keytab.c \ src/providers/krb5/krb5_keytab.c \ src/util/sss_krb5.c \ +src/util/sss_iobuf.c \ $(NULL) test_copy_keytab_CFLAGS = \ $(AM_CFLAGS) \ @@ -3165,6 +3171,19 @@ test_ipa_dn_LDADD = \ libsss_test_common.la \ $(NULL) +test_iobuf_SOURCES = \ +src/util/sss_iobuf.c \ +src/tests/cmocka/test_iobuf.c \ +$(NULL) +test_iobuf_CFLAGS = \ +$(AM_CFLAGS) \ +$(NULL) +test_iobuf_LDADD = \ +$(CMOCKA_LIBS) \ +$(SSSD_LIBS) \ +$(NULL) + + EXTRA_simple_access_tests_DEPENDENCIES = \ $(ldblib_LTLIBRARIES) simple_access_tests_SOURCES = \ @@ -3497,6 +3516,7 @@ libsss_krb5_common_la_SOURCES = \ src/providers/krb5/krb5_init_shared.c \ src/providers/krb5/krb5_ccache.c \ src/util/sss_krb5.c \ +src/util/sss_iobuf.c \ src/util/become_user.c \ $(NULL) libsss_krb5_common_la_CFLAGS = \ @@ -3726,6 +3746,7 @@ krb5_child_SOURCES = \ src/providers/dp_pam_data_util.c \
[SSSD] [sssd PR#152][synchronized] Add a tevent wrapper around libcurl's asynchronous interface
URL: https://github.com/SSSD/sssd/pull/152 Author: jhrozek Title: #152: Add a tevent wrapper around libcurl's asynchronous interface Action: synchronized To pull the PR as Git branch: git remote add ghsssd https://github.com/SSSD/sssd git fetch ghsssd pull/152/head:pr152 git checkout pr152 From 7fd47b9ab00bd346e6cda85e8f0b771d50b7e425 Mon Sep 17 00:00:00 2001 From: Jakub HrozekDate: Fri, 23 Sep 2016 13:41:53 +0200 Subject: [PATCH 1/5] UTIL: Add a new macro SAFEALIGN_MEMCPY_CHECK We will use it later in the KCM server --- src/util/util_safealign.h | 6 ++ 1 file changed, 6 insertions(+) diff --git a/src/util/util_safealign.h b/src/util/util_safealign.h index a2cd4dd..0d9a579 100644 --- a/src/util/util_safealign.h +++ b/src/util/util_safealign.h @@ -124,6 +124,12 @@ safealign_memcpy(void *dest, const void *src, size_t n, size_t *counter) safealign_memcpy(dest, CV_MACRO_val, sizeof(char) * length, pctr); \ } while(0) +#define SAFEALIGN_MEMCPY_CHECK(dest, src, srclen, len, pctr) do { \ +if ((*(pctr) + srclen) > (len) || \ +SIZE_T_OVERFLOW(*(pctr), srclen)) { return EINVAL; } \ +safealign_memcpy(dest, src, srclen, pctr); \ +} while(0) + /* Aliases for backward compatibility. */ #define SAFEALIGN_SET_VALUE SAFEALIGN_SETMEM_VALUE #define SAFEALIGN_SET_INT64 SAFEALIGN_SETMEM_INT64 From 202c77d407ebe782f77f817a00e5ab59856ad3a7 Mon Sep 17 00:00:00 2001 From: Jakub Hrozek Date: Tue, 20 Sep 2016 18:46:40 +0200 Subject: [PATCH 2/5] UTIL: Add a generic iobuf module The KCM responder reads bytes and writes bytes from a buffer of bytes. Instead of letting the caller deal with low-level handling using the SAFEALIGN macros, this patch adds a new iobuf.c module with more high-level functions. The core is a iobuf struct that keeps track of the buffer, its total capacity and a current read or write position. There are helper function to read or write a generic buffer with a set length. Later, we will also add convenience functions to read C data types using the SAFEALIGN macros. --- Makefile.am | 22 + src/tests/cmocka/test_iobuf.c | 194 +++ src/util/sss_iobuf.c | 204 ++ src/util/sss_iobuf.h | 117 4 files changed, 537 insertions(+) create mode 100644 src/tests/cmocka/test_iobuf.c create mode 100644 src/util/sss_iobuf.c create mode 100644 src/util/sss_iobuf.h diff --git a/Makefile.am b/Makefile.am index 34da1f0..450f07c 100644 --- a/Makefile.am +++ b/Makefile.am @@ -277,6 +277,7 @@ if HAVE_CMOCKA test_ipa_dn \ simple-access-tests \ krb5_common_test \ +test_iobuf \ $(NULL) if HAVE_LIBRESOLV @@ -657,6 +658,7 @@ dist_noinst_HEADERS = \ src/util/util_sss_idmap.h \ src/util/util_creds.h \ src/util/inotify.h \ +src/util/sss_iobuf.h \ src/monitor/monitor.h \ src/monitor/monitor_interfaces.h \ src/monitor/monitor_iface_generated.h \ @@ -1839,6 +1841,7 @@ krb5_utils_tests_SOURCES = \ src/providers/krb5/krb5_common.c \ src/providers/krb5/krb5_opts.c \ src/util/sss_krb5.c \ +src/util/sss_iobuf.c \ src/providers/data_provider_fo.c \ src/providers/data_provider_opts.c \ src/providers/data_provider_callbacks.c \ @@ -2114,6 +2117,7 @@ krb5_child_test_SOURCES = \ src/providers/krb5/krb5_common.c \ src/providers/krb5/krb5_opts.c \ src/util/sss_krb5.c \ +src/util/sss_iobuf.c \ src/providers/data_provider_fo.c \ src/providers/data_provider_opts.c \ src/providers/data_provider_callbacks.c \ @@ -2785,6 +2789,7 @@ test_copy_ccache_SOURCES = \ src/tests/cmocka/test_copy_ccache.c \ src/providers/krb5/krb5_ccache.c \ src/util/sss_krb5.c \ +src/util/sss_iobuf.c \ $(NULL) test_copy_ccache_CFLAGS = \ $(AM_CFLAGS) \ @@ -2803,6 +2808,7 @@ test_copy_keytab_SOURCES = \ src/tests/cmocka/test_copy_keytab.c \ src/providers/krb5/krb5_keytab.c \ src/util/sss_krb5.c \ +src/util/sss_iobuf.c \ $(NULL) test_copy_keytab_CFLAGS = \ $(AM_CFLAGS) \ @@ -3165,6 +3171,19 @@ test_ipa_dn_LDADD = \ libsss_test_common.la \ $(NULL) +test_iobuf_SOURCES = \ +src/util/sss_iobuf.c \ +src/tests/cmocka/test_iobuf.c \ +$(NULL) +test_iobuf_CFLAGS = \ +$(AM_CFLAGS) \ +$(NULL) +test_iobuf_LDADD = \ +$(CMOCKA_LIBS) \ +$(SSSD_LIBS) \ +$(NULL) + + EXTRA_simple_access_tests_DEPENDENCIES = \ $(ldblib_LTLIBRARIES) simple_access_tests_SOURCES = \ @@ -3497,6 +3516,7 @@ libsss_krb5_common_la_SOURCES = \ src/providers/krb5/krb5_init_shared.c \ src/providers/krb5/krb5_ccache.c \ src/util/sss_krb5.c \ +src/util/sss_iobuf.c \ src/util/become_user.c \ $(NULL) libsss_krb5_common_la_CFLAGS = \ @@ -3726,6 +3746,7 @@ krb5_child_SOURCES = \ src/providers/dp_pam_data_util.c \
[SSSD] [sssd PR#152][synchronized] Add a tevent wrapper around libcurl's asynchronous interface
URL: https://github.com/SSSD/sssd/pull/152 Author: jhrozek Title: #152: Add a tevent wrapper around libcurl's asynchronous interface Action: synchronized To pull the PR as Git branch: git remote add ghsssd https://github.com/SSSD/sssd git fetch ghsssd pull/152/head:pr152 git checkout pr152 From f6382286b9dd583b0f55abfd9f2c87bc13393a2d Mon Sep 17 00:00:00 2001 From: Jakub HrozekDate: Fri, 23 Sep 2016 13:41:53 +0200 Subject: [PATCH 1/5] UTIL: Add a new macro SAFEALIGN_MEMCPY_CHECK We will use it later in the KCM server --- src/util/util_safealign.h | 6 ++ 1 file changed, 6 insertions(+) diff --git a/src/util/util_safealign.h b/src/util/util_safealign.h index a2cd4dd..0d9a579 100644 --- a/src/util/util_safealign.h +++ b/src/util/util_safealign.h @@ -124,6 +124,12 @@ safealign_memcpy(void *dest, const void *src, size_t n, size_t *counter) safealign_memcpy(dest, CV_MACRO_val, sizeof(char) * length, pctr); \ } while(0) +#define SAFEALIGN_MEMCPY_CHECK(dest, src, srclen, len, pctr) do { \ +if ((*(pctr) + srclen) > (len) || \ +SIZE_T_OVERFLOW(*(pctr), srclen)) { return EINVAL; } \ +safealign_memcpy(dest, src, srclen, pctr); \ +} while(0) + /* Aliases for backward compatibility. */ #define SAFEALIGN_SET_VALUE SAFEALIGN_SETMEM_VALUE #define SAFEALIGN_SET_INT64 SAFEALIGN_SETMEM_INT64 From 65d2ed3273ea4a9fd81c18ee986e56f46861cb3c Mon Sep 17 00:00:00 2001 From: Jakub Hrozek Date: Tue, 20 Sep 2016 18:46:40 +0200 Subject: [PATCH 2/5] UTIL: Add a generic iobuf module The KCM responder reads bytes and writes bytes from a buffer of bytes. Instead of letting the caller deal with low-level handling using the SAFEALIGN macros, this patch adds a new iobuf.c module with more high-level functions. The core is a iobuf struct that keeps track of the buffer, its total capacity and a current read or write position. There are helper function to read or write a generic buffer with a set length. Later, we will also add convenience functions to read C data types using the SAFEALIGN macros. --- Makefile.am | 22 + src/tests/cmocka/test_iobuf.c | 194 +++ src/util/sss_iobuf.c | 204 ++ src/util/sss_iobuf.h | 117 4 files changed, 537 insertions(+) create mode 100644 src/tests/cmocka/test_iobuf.c create mode 100644 src/util/sss_iobuf.c create mode 100644 src/util/sss_iobuf.h diff --git a/Makefile.am b/Makefile.am index 30ee5e5..d549506 100644 --- a/Makefile.am +++ b/Makefile.am @@ -274,6 +274,7 @@ if HAVE_CMOCKA test_ipa_dn \ simple-access-tests \ krb5_common_test \ +test_iobuf \ $(NULL) if HAVE_LIBRESOLV @@ -654,6 +655,7 @@ dist_noinst_HEADERS = \ src/util/util_sss_idmap.h \ src/util/util_creds.h \ src/util/inotify.h \ +src/util/sss_iobuf.h \ src/monitor/monitor.h \ src/monitor/monitor_interfaces.h \ src/monitor/monitor_iface_generated.h \ @@ -1820,6 +1822,7 @@ krb5_utils_tests_SOURCES = \ src/providers/krb5/krb5_common.c \ src/providers/krb5/krb5_opts.c \ src/util/sss_krb5.c \ +src/util/sss_iobuf.c \ src/providers/data_provider_fo.c \ src/providers/data_provider_opts.c \ src/providers/data_provider_callbacks.c \ @@ -2095,6 +2098,7 @@ krb5_child_test_SOURCES = \ src/providers/krb5/krb5_common.c \ src/providers/krb5/krb5_opts.c \ src/util/sss_krb5.c \ +src/util/sss_iobuf.c \ src/providers/data_provider_fo.c \ src/providers/data_provider_opts.c \ src/providers/data_provider_callbacks.c \ @@ -2765,6 +2769,7 @@ test_copy_ccache_SOURCES = \ src/tests/cmocka/test_copy_ccache.c \ src/providers/krb5/krb5_ccache.c \ src/util/sss_krb5.c \ +src/util/sss_iobuf.c \ $(NULL) test_copy_ccache_CFLAGS = \ $(AM_CFLAGS) \ @@ -2783,6 +2788,7 @@ test_copy_keytab_SOURCES = \ src/tests/cmocka/test_copy_keytab.c \ src/providers/krb5/krb5_keytab.c \ src/util/sss_krb5.c \ +src/util/sss_iobuf.c \ $(NULL) test_copy_keytab_CFLAGS = \ $(AM_CFLAGS) \ @@ -3145,6 +3151,19 @@ test_ipa_dn_LDADD = \ libsss_test_common.la \ $(NULL) +test_iobuf_SOURCES = \ +src/util/sss_iobuf.c \ +src/tests/cmocka/test_iobuf.c \ +$(NULL) +test_iobuf_CFLAGS = \ +$(AM_CFLAGS) \ +$(NULL) +test_iobuf_LDADD = \ +$(CMOCKA_LIBS) \ +$(SSSD_LIBS) \ +$(NULL) + + EXTRA_simple_access_tests_DEPENDENCIES = \ $(ldblib_LTLIBRARIES) simple_access_tests_SOURCES = \ @@ -3477,6 +3496,7 @@ libsss_krb5_common_la_SOURCES = \ src/providers/krb5/krb5_init_shared.c \ src/providers/krb5/krb5_ccache.c \ src/util/sss_krb5.c \ +src/util/sss_iobuf.c \ src/util/become_user.c \ $(NULL) libsss_krb5_common_la_CFLAGS = \ @@ -3706,6 +3726,7 @@ krb5_child_SOURCES = \ src/providers/dp_pam_data_util.c \
[SSSD] [sssd PR#152][synchronized] Add a tevent wrapper around libcurl's asynchronous interface
URL: https://github.com/SSSD/sssd/pull/152 Author: jhrozek Title: #152: Add a tevent wrapper around libcurl's asynchronous interface Action: synchronized To pull the PR as Git branch: git remote add ghsssd https://github.com/SSSD/sssd git fetch ghsssd pull/152/head:pr152 git checkout pr152 From 5c51222ba533972d56f4ecb43e05b5c2e1db372e Mon Sep 17 00:00:00 2001 From: Jakub HrozekDate: Fri, 23 Sep 2016 13:41:53 +0200 Subject: [PATCH 1/5] UTIL: Add a new macro SAFEALIGN_MEMCPY_CHECK We will use it later in the KCM server --- src/util/util_safealign.h | 6 ++ 1 file changed, 6 insertions(+) diff --git a/src/util/util_safealign.h b/src/util/util_safealign.h index a2cd4dd..0d9a579 100644 --- a/src/util/util_safealign.h +++ b/src/util/util_safealign.h @@ -124,6 +124,12 @@ safealign_memcpy(void *dest, const void *src, size_t n, size_t *counter) safealign_memcpy(dest, CV_MACRO_val, sizeof(char) * length, pctr); \ } while(0) +#define SAFEALIGN_MEMCPY_CHECK(dest, src, srclen, len, pctr) do { \ +if ((*(pctr) + srclen) > (len) || \ +SIZE_T_OVERFLOW(*(pctr), srclen)) { return EINVAL; } \ +safealign_memcpy(dest, src, srclen, pctr); \ +} while(0) + /* Aliases for backward compatibility. */ #define SAFEALIGN_SET_VALUE SAFEALIGN_SETMEM_VALUE #define SAFEALIGN_SET_INT64 SAFEALIGN_SETMEM_INT64 From 30b5f3c8252a819bdd3ee2094562a019e2252bd8 Mon Sep 17 00:00:00 2001 From: Jakub Hrozek Date: Tue, 20 Sep 2016 18:46:40 +0200 Subject: [PATCH 2/5] UTIL: Add a generic iobuf module The KCM responder reads bytes and writes bytes from a buffer of bytes. Instead of letting the caller deal with low-level handling using the SAFEALIGN macros, this patch adds a new iobuf.c module with more high-level functions. The core is a iobuf struct that keeps track of the buffer, its total capacity and a current read or write position. There are helper function to read or write a generic buffer with a set length. Later, we will also add convenience functions to read C data types using the SAFEALIGN macros. --- Makefile.am | 22 + src/tests/cmocka/test_iobuf.c | 194 +++ src/util/sss_iobuf.c | 204 ++ src/util/sss_iobuf.h | 117 4 files changed, 537 insertions(+) create mode 100644 src/tests/cmocka/test_iobuf.c create mode 100644 src/util/sss_iobuf.c create mode 100644 src/util/sss_iobuf.h diff --git a/Makefile.am b/Makefile.am index e676e18..b612897 100644 --- a/Makefile.am +++ b/Makefile.am @@ -274,6 +274,7 @@ if HAVE_CMOCKA test_ipa_dn \ simple-access-tests \ krb5_common_test \ +test_iobuf \ $(NULL) if HAVE_LIBRESOLV @@ -654,6 +655,7 @@ dist_noinst_HEADERS = \ src/util/util_sss_idmap.h \ src/util/util_creds.h \ src/util/inotify.h \ +src/util/sss_iobuf.h \ src/monitor/monitor.h \ src/monitor/monitor_interfaces.h \ src/monitor/monitor_iface_generated.h \ @@ -1820,6 +1822,7 @@ krb5_utils_tests_SOURCES = \ src/providers/krb5/krb5_common.c \ src/providers/krb5/krb5_opts.c \ src/util/sss_krb5.c \ +src/util/sss_iobuf.c \ src/providers/data_provider_fo.c \ src/providers/data_provider_opts.c \ src/providers/data_provider_callbacks.c \ @@ -2095,6 +2098,7 @@ krb5_child_test_SOURCES = \ src/providers/krb5/krb5_common.c \ src/providers/krb5/krb5_opts.c \ src/util/sss_krb5.c \ +src/util/sss_iobuf.c \ src/providers/data_provider_fo.c \ src/providers/data_provider_opts.c \ src/providers/data_provider_callbacks.c \ @@ -2765,6 +2769,7 @@ test_copy_ccache_SOURCES = \ src/tests/cmocka/test_copy_ccache.c \ src/providers/krb5/krb5_ccache.c \ src/util/sss_krb5.c \ +src/util/sss_iobuf.c \ $(NULL) test_copy_ccache_CFLAGS = \ $(AM_CFLAGS) \ @@ -2783,6 +2788,7 @@ test_copy_keytab_SOURCES = \ src/tests/cmocka/test_copy_keytab.c \ src/providers/krb5/krb5_keytab.c \ src/util/sss_krb5.c \ +src/util/sss_iobuf.c \ $(NULL) test_copy_keytab_CFLAGS = \ $(AM_CFLAGS) \ @@ -3145,6 +3151,19 @@ test_ipa_dn_LDADD = \ libsss_test_common.la \ $(NULL) +test_iobuf_SOURCES = \ +src/util/sss_iobuf.c \ +src/tests/cmocka/test_iobuf.c \ +$(NULL) +test_iobuf_CFLAGS = \ +$(AM_CFLAGS) \ +$(NULL) +test_iobuf_LDADD = \ +$(CMOCKA_LIBS) \ +$(SSSD_LIBS) \ +$(NULL) + + EXTRA_simple_access_tests_DEPENDENCIES = \ $(ldblib_LTLIBRARIES) simple_access_tests_SOURCES = \ @@ -3476,6 +3495,7 @@ libsss_krb5_common_la_SOURCES = \ src/providers/krb5/krb5_init_shared.c \ src/providers/krb5/krb5_ccache.c \ src/util/sss_krb5.c \ +src/util/sss_iobuf.c \ src/util/become_user.c \ $(NULL) libsss_krb5_common_la_CFLAGS = \ @@ -3705,6 +3725,7 @@ krb5_child_SOURCES = \ src/providers/dp_pam_data_util.c \
[SSSD] [sssd PR#152][synchronized] Add a tevent wrapper around libcurl's asynchronous interface
URL: https://github.com/SSSD/sssd/pull/152 Author: jhrozek Title: #152: Add a tevent wrapper around libcurl's asynchronous interface Action: synchronized To pull the PR as Git branch: git remote add ghsssd https://github.com/SSSD/sssd git fetch ghsssd pull/152/head:pr152 git checkout pr152 From b736dd91ebc2934428c4741faa5143d011e39996 Mon Sep 17 00:00:00 2001 From: Jakub HrozekDate: Fri, 23 Sep 2016 13:41:53 +0200 Subject: [PATCH 1/5] UTIL: Add a new macro SAFEALIGN_MEMCPY_CHECK We will use it later in the KCM server --- src/util/util_safealign.h | 6 ++ 1 file changed, 6 insertions(+) diff --git a/src/util/util_safealign.h b/src/util/util_safealign.h index a2cd4dd..0d9a579 100644 --- a/src/util/util_safealign.h +++ b/src/util/util_safealign.h @@ -124,6 +124,12 @@ safealign_memcpy(void *dest, const void *src, size_t n, size_t *counter) safealign_memcpy(dest, CV_MACRO_val, sizeof(char) * length, pctr); \ } while(0) +#define SAFEALIGN_MEMCPY_CHECK(dest, src, srclen, len, pctr) do { \ +if ((*(pctr) + srclen) > (len) || \ +SIZE_T_OVERFLOW(*(pctr), srclen)) { return EINVAL; } \ +safealign_memcpy(dest, src, srclen, pctr); \ +} while(0) + /* Aliases for backward compatibility. */ #define SAFEALIGN_SET_VALUE SAFEALIGN_SETMEM_VALUE #define SAFEALIGN_SET_INT64 SAFEALIGN_SETMEM_INT64 From b0c00c08bf8644cb70a9c091529eaf230233f4b0 Mon Sep 17 00:00:00 2001 From: Jakub Hrozek Date: Tue, 20 Sep 2016 18:46:40 +0200 Subject: [PATCH 2/5] UTIL: Add a generic iobuf module The KCM responder reads bytes and writes bytes from a buffer of bytes. Instead of letting the caller deal with low-level handling using the SAFEALIGN macros, this patch adds a new iobuf.c module with more high-level functions. The core is a iobuf struct that keeps track of the buffer, its total capacity and a current read or write position. There are helper function to read or write a generic buffer with a set length. Later, we will also add convenience functions to read C data types using the SAFEALIGN macros. --- Makefile.am | 22 + src/tests/cmocka/test_iobuf.c | 194 +++ src/util/sss_iobuf.c | 204 ++ src/util/sss_iobuf.h | 117 4 files changed, 537 insertions(+) create mode 100644 src/tests/cmocka/test_iobuf.c create mode 100644 src/util/sss_iobuf.c create mode 100644 src/util/sss_iobuf.h diff --git a/Makefile.am b/Makefile.am index e676e18..b612897 100644 --- a/Makefile.am +++ b/Makefile.am @@ -274,6 +274,7 @@ if HAVE_CMOCKA test_ipa_dn \ simple-access-tests \ krb5_common_test \ +test_iobuf \ $(NULL) if HAVE_LIBRESOLV @@ -654,6 +655,7 @@ dist_noinst_HEADERS = \ src/util/util_sss_idmap.h \ src/util/util_creds.h \ src/util/inotify.h \ +src/util/sss_iobuf.h \ src/monitor/monitor.h \ src/monitor/monitor_interfaces.h \ src/monitor/monitor_iface_generated.h \ @@ -1820,6 +1822,7 @@ krb5_utils_tests_SOURCES = \ src/providers/krb5/krb5_common.c \ src/providers/krb5/krb5_opts.c \ src/util/sss_krb5.c \ +src/util/sss_iobuf.c \ src/providers/data_provider_fo.c \ src/providers/data_provider_opts.c \ src/providers/data_provider_callbacks.c \ @@ -2095,6 +2098,7 @@ krb5_child_test_SOURCES = \ src/providers/krb5/krb5_common.c \ src/providers/krb5/krb5_opts.c \ src/util/sss_krb5.c \ +src/util/sss_iobuf.c \ src/providers/data_provider_fo.c \ src/providers/data_provider_opts.c \ src/providers/data_provider_callbacks.c \ @@ -2765,6 +2769,7 @@ test_copy_ccache_SOURCES = \ src/tests/cmocka/test_copy_ccache.c \ src/providers/krb5/krb5_ccache.c \ src/util/sss_krb5.c \ +src/util/sss_iobuf.c \ $(NULL) test_copy_ccache_CFLAGS = \ $(AM_CFLAGS) \ @@ -2783,6 +2788,7 @@ test_copy_keytab_SOURCES = \ src/tests/cmocka/test_copy_keytab.c \ src/providers/krb5/krb5_keytab.c \ src/util/sss_krb5.c \ +src/util/sss_iobuf.c \ $(NULL) test_copy_keytab_CFLAGS = \ $(AM_CFLAGS) \ @@ -3145,6 +3151,19 @@ test_ipa_dn_LDADD = \ libsss_test_common.la \ $(NULL) +test_iobuf_SOURCES = \ +src/util/sss_iobuf.c \ +src/tests/cmocka/test_iobuf.c \ +$(NULL) +test_iobuf_CFLAGS = \ +$(AM_CFLAGS) \ +$(NULL) +test_iobuf_LDADD = \ +$(CMOCKA_LIBS) \ +$(SSSD_LIBS) \ +$(NULL) + + EXTRA_simple_access_tests_DEPENDENCIES = \ $(ldblib_LTLIBRARIES) simple_access_tests_SOURCES = \ @@ -3476,6 +3495,7 @@ libsss_krb5_common_la_SOURCES = \ src/providers/krb5/krb5_init_shared.c \ src/providers/krb5/krb5_ccache.c \ src/util/sss_krb5.c \ +src/util/sss_iobuf.c \ src/util/become_user.c \ $(NULL) libsss_krb5_common_la_CFLAGS = \ @@ -3705,6 +3725,7 @@ krb5_child_SOURCES = \ src/providers/dp_pam_data_util.c \
[SSSD] [sssd PR#152][synchronized] Add a tevent wrapper around libcurl's asynchronous interface
URL: https://github.com/SSSD/sssd/pull/152 Author: jhrozek Title: #152: Add a tevent wrapper around libcurl's asynchronous interface Action: synchronized To pull the PR as Git branch: git remote add ghsssd https://github.com/SSSD/sssd git fetch ghsssd pull/152/head:pr152 git checkout pr152 From b736dd91ebc2934428c4741faa5143d011e39996 Mon Sep 17 00:00:00 2001 From: Jakub HrozekDate: Fri, 23 Sep 2016 13:41:53 +0200 Subject: [PATCH 1/5] UTIL: Add a new macro SAFEALIGN_MEMCPY_CHECK We will use it later in the KCM server --- src/util/util_safealign.h | 6 ++ 1 file changed, 6 insertions(+) diff --git a/src/util/util_safealign.h b/src/util/util_safealign.h index a2cd4dd..0d9a579 100644 --- a/src/util/util_safealign.h +++ b/src/util/util_safealign.h @@ -124,6 +124,12 @@ safealign_memcpy(void *dest, const void *src, size_t n, size_t *counter) safealign_memcpy(dest, CV_MACRO_val, sizeof(char) * length, pctr); \ } while(0) +#define SAFEALIGN_MEMCPY_CHECK(dest, src, srclen, len, pctr) do { \ +if ((*(pctr) + srclen) > (len) || \ +SIZE_T_OVERFLOW(*(pctr), srclen)) { return EINVAL; } \ +safealign_memcpy(dest, src, srclen, pctr); \ +} while(0) + /* Aliases for backward compatibility. */ #define SAFEALIGN_SET_VALUE SAFEALIGN_SETMEM_VALUE #define SAFEALIGN_SET_INT64 SAFEALIGN_SETMEM_INT64 From b0c00c08bf8644cb70a9c091529eaf230233f4b0 Mon Sep 17 00:00:00 2001 From: Jakub Hrozek Date: Tue, 20 Sep 2016 18:46:40 +0200 Subject: [PATCH 2/5] UTIL: Add a generic iobuf module The KCM responder reads bytes and writes bytes from a buffer of bytes. Instead of letting the caller deal with low-level handling using the SAFEALIGN macros, this patch adds a new iobuf.c module with more high-level functions. The core is a iobuf struct that keeps track of the buffer, its total capacity and a current read or write position. There are helper function to read or write a generic buffer with a set length. Later, we will also add convenience functions to read C data types using the SAFEALIGN macros. --- Makefile.am | 22 + src/tests/cmocka/test_iobuf.c | 194 +++ src/util/sss_iobuf.c | 204 ++ src/util/sss_iobuf.h | 117 4 files changed, 537 insertions(+) create mode 100644 src/tests/cmocka/test_iobuf.c create mode 100644 src/util/sss_iobuf.c create mode 100644 src/util/sss_iobuf.h diff --git a/Makefile.am b/Makefile.am index e676e18..b612897 100644 --- a/Makefile.am +++ b/Makefile.am @@ -274,6 +274,7 @@ if HAVE_CMOCKA test_ipa_dn \ simple-access-tests \ krb5_common_test \ +test_iobuf \ $(NULL) if HAVE_LIBRESOLV @@ -654,6 +655,7 @@ dist_noinst_HEADERS = \ src/util/util_sss_idmap.h \ src/util/util_creds.h \ src/util/inotify.h \ +src/util/sss_iobuf.h \ src/monitor/monitor.h \ src/monitor/monitor_interfaces.h \ src/monitor/monitor_iface_generated.h \ @@ -1820,6 +1822,7 @@ krb5_utils_tests_SOURCES = \ src/providers/krb5/krb5_common.c \ src/providers/krb5/krb5_opts.c \ src/util/sss_krb5.c \ +src/util/sss_iobuf.c \ src/providers/data_provider_fo.c \ src/providers/data_provider_opts.c \ src/providers/data_provider_callbacks.c \ @@ -2095,6 +2098,7 @@ krb5_child_test_SOURCES = \ src/providers/krb5/krb5_common.c \ src/providers/krb5/krb5_opts.c \ src/util/sss_krb5.c \ +src/util/sss_iobuf.c \ src/providers/data_provider_fo.c \ src/providers/data_provider_opts.c \ src/providers/data_provider_callbacks.c \ @@ -2765,6 +2769,7 @@ test_copy_ccache_SOURCES = \ src/tests/cmocka/test_copy_ccache.c \ src/providers/krb5/krb5_ccache.c \ src/util/sss_krb5.c \ +src/util/sss_iobuf.c \ $(NULL) test_copy_ccache_CFLAGS = \ $(AM_CFLAGS) \ @@ -2783,6 +2788,7 @@ test_copy_keytab_SOURCES = \ src/tests/cmocka/test_copy_keytab.c \ src/providers/krb5/krb5_keytab.c \ src/util/sss_krb5.c \ +src/util/sss_iobuf.c \ $(NULL) test_copy_keytab_CFLAGS = \ $(AM_CFLAGS) \ @@ -3145,6 +3151,19 @@ test_ipa_dn_LDADD = \ libsss_test_common.la \ $(NULL) +test_iobuf_SOURCES = \ +src/util/sss_iobuf.c \ +src/tests/cmocka/test_iobuf.c \ +$(NULL) +test_iobuf_CFLAGS = \ +$(AM_CFLAGS) \ +$(NULL) +test_iobuf_LDADD = \ +$(CMOCKA_LIBS) \ +$(SSSD_LIBS) \ +$(NULL) + + EXTRA_simple_access_tests_DEPENDENCIES = \ $(ldblib_LTLIBRARIES) simple_access_tests_SOURCES = \ @@ -3476,6 +3495,7 @@ libsss_krb5_common_la_SOURCES = \ src/providers/krb5/krb5_init_shared.c \ src/providers/krb5/krb5_ccache.c \ src/util/sss_krb5.c \ +src/util/sss_iobuf.c \ src/util/become_user.c \ $(NULL) libsss_krb5_common_la_CFLAGS = \ @@ -3705,6 +3725,7 @@ krb5_child_SOURCES = \ src/providers/dp_pam_data_util.c \
[SSSD] [sssd PR#152][synchronized] Add a tevent wrapper around libcurl's asynchronous interface
URL: https://github.com/SSSD/sssd/pull/152 Author: jhrozek Title: #152: Add a tevent wrapper around libcurl's asynchronous interface Action: synchronized To pull the PR as Git branch: git remote add ghsssd https://github.com/SSSD/sssd git fetch ghsssd pull/152/head:pr152 git checkout pr152 From cc87a38f5caa628968116b2ca9346b25fddcb656 Mon Sep 17 00:00:00 2001 From: Jakub HrozekDate: Fri, 23 Sep 2016 13:41:53 +0200 Subject: [PATCH 1/5] UTIL: Add a new macro SAFEALIGN_MEMCPY_CHECK We will use it later in the KCM server --- src/util/util_safealign.h | 6 ++ 1 file changed, 6 insertions(+) diff --git a/src/util/util_safealign.h b/src/util/util_safealign.h index a2cd4dd..0d9a579 100644 --- a/src/util/util_safealign.h +++ b/src/util/util_safealign.h @@ -124,6 +124,12 @@ safealign_memcpy(void *dest, const void *src, size_t n, size_t *counter) safealign_memcpy(dest, CV_MACRO_val, sizeof(char) * length, pctr); \ } while(0) +#define SAFEALIGN_MEMCPY_CHECK(dest, src, srclen, len, pctr) do { \ +if ((*(pctr) + srclen) > (len) || \ +SIZE_T_OVERFLOW(*(pctr), srclen)) { return EINVAL; } \ +safealign_memcpy(dest, src, srclen, pctr); \ +} while(0) + /* Aliases for backward compatibility. */ #define SAFEALIGN_SET_VALUE SAFEALIGN_SETMEM_VALUE #define SAFEALIGN_SET_INT64 SAFEALIGN_SETMEM_INT64 From 793eba7914ca389920928082c0eb88dff4b369e5 Mon Sep 17 00:00:00 2001 From: Jakub Hrozek Date: Tue, 20 Sep 2016 18:46:40 +0200 Subject: [PATCH 2/5] UTIL: Add a generic iobuf module The KCM responder reads bytes and writes bytes from a buffer of bytes. Instead of letting the caller deal with low-level handling using the SAFEALIGN macros, this patch adds a new iobuf.c module with more high-level functions. The core is a iobuf struct that keeps track of the buffer, its total capacity and a current read or write position. There are helper function to read or write a generic buffer with a set length. Later, we will also add convenience functions to read C data types using the SAFEALIGN macros. --- Makefile.am | 22 + src/tests/cmocka/test_iobuf.c | 194 +++ src/util/sss_iobuf.c | 205 ++ src/util/sss_iobuf.h | 117 4 files changed, 538 insertions(+) create mode 100644 src/tests/cmocka/test_iobuf.c create mode 100644 src/util/sss_iobuf.c create mode 100644 src/util/sss_iobuf.h diff --git a/Makefile.am b/Makefile.am index e676e18..b612897 100644 --- a/Makefile.am +++ b/Makefile.am @@ -274,6 +274,7 @@ if HAVE_CMOCKA test_ipa_dn \ simple-access-tests \ krb5_common_test \ +test_iobuf \ $(NULL) if HAVE_LIBRESOLV @@ -654,6 +655,7 @@ dist_noinst_HEADERS = \ src/util/util_sss_idmap.h \ src/util/util_creds.h \ src/util/inotify.h \ +src/util/sss_iobuf.h \ src/monitor/monitor.h \ src/monitor/monitor_interfaces.h \ src/monitor/monitor_iface_generated.h \ @@ -1820,6 +1822,7 @@ krb5_utils_tests_SOURCES = \ src/providers/krb5/krb5_common.c \ src/providers/krb5/krb5_opts.c \ src/util/sss_krb5.c \ +src/util/sss_iobuf.c \ src/providers/data_provider_fo.c \ src/providers/data_provider_opts.c \ src/providers/data_provider_callbacks.c \ @@ -2095,6 +2098,7 @@ krb5_child_test_SOURCES = \ src/providers/krb5/krb5_common.c \ src/providers/krb5/krb5_opts.c \ src/util/sss_krb5.c \ +src/util/sss_iobuf.c \ src/providers/data_provider_fo.c \ src/providers/data_provider_opts.c \ src/providers/data_provider_callbacks.c \ @@ -2765,6 +2769,7 @@ test_copy_ccache_SOURCES = \ src/tests/cmocka/test_copy_ccache.c \ src/providers/krb5/krb5_ccache.c \ src/util/sss_krb5.c \ +src/util/sss_iobuf.c \ $(NULL) test_copy_ccache_CFLAGS = \ $(AM_CFLAGS) \ @@ -2783,6 +2788,7 @@ test_copy_keytab_SOURCES = \ src/tests/cmocka/test_copy_keytab.c \ src/providers/krb5/krb5_keytab.c \ src/util/sss_krb5.c \ +src/util/sss_iobuf.c \ $(NULL) test_copy_keytab_CFLAGS = \ $(AM_CFLAGS) \ @@ -3145,6 +3151,19 @@ test_ipa_dn_LDADD = \ libsss_test_common.la \ $(NULL) +test_iobuf_SOURCES = \ +src/util/sss_iobuf.c \ +src/tests/cmocka/test_iobuf.c \ +$(NULL) +test_iobuf_CFLAGS = \ +$(AM_CFLAGS) \ +$(NULL) +test_iobuf_LDADD = \ +$(CMOCKA_LIBS) \ +$(SSSD_LIBS) \ +$(NULL) + + EXTRA_simple_access_tests_DEPENDENCIES = \ $(ldblib_LTLIBRARIES) simple_access_tests_SOURCES = \ @@ -3476,6 +3495,7 @@ libsss_krb5_common_la_SOURCES = \ src/providers/krb5/krb5_init_shared.c \ src/providers/krb5/krb5_ccache.c \ src/util/sss_krb5.c \ +src/util/sss_iobuf.c \ src/util/become_user.c \ $(NULL) libsss_krb5_common_la_CFLAGS = \ @@ -3705,6 +3725,7 @@ krb5_child_SOURCES = \ src/providers/dp_pam_data_util.c \
[SSSD] [sssd PR#152][synchronized] Add a tevent wrapper around libcurl's asynchronous interface
URL: https://github.com/SSSD/sssd/pull/152 Author: jhrozek Title: #152: Add a tevent wrapper around libcurl's asynchronous interface Action: synchronized To pull the PR as Git branch: git remote add ghsssd https://github.com/SSSD/sssd git fetch ghsssd pull/152/head:pr152 git checkout pr152 From 80f078999f494810f07d47095b031b89fe3b9598 Mon Sep 17 00:00:00 2001 From: Jakub HrozekDate: Fri, 23 Sep 2016 13:41:53 +0200 Subject: [PATCH 1/5] UTIL: Add a new macro SAFEALIGN_MEMCPY_CHECK We will use it later in the KCM server --- src/util/util_safealign.h | 6 ++ 1 file changed, 6 insertions(+) diff --git a/src/util/util_safealign.h b/src/util/util_safealign.h index a2cd4dd..0d9a579 100644 --- a/src/util/util_safealign.h +++ b/src/util/util_safealign.h @@ -124,6 +124,12 @@ safealign_memcpy(void *dest, const void *src, size_t n, size_t *counter) safealign_memcpy(dest, CV_MACRO_val, sizeof(char) * length, pctr); \ } while(0) +#define SAFEALIGN_MEMCPY_CHECK(dest, src, srclen, len, pctr) do { \ +if ((*(pctr) + srclen) > (len) || \ +SIZE_T_OVERFLOW(*(pctr), srclen)) { return EINVAL; } \ +safealign_memcpy(dest, src, srclen, pctr); \ +} while(0) + /* Aliases for backward compatibility. */ #define SAFEALIGN_SET_VALUE SAFEALIGN_SETMEM_VALUE #define SAFEALIGN_SET_INT64 SAFEALIGN_SETMEM_INT64 From 23ab0206f7b7d78984fd9058504cbd30e1a9cfa1 Mon Sep 17 00:00:00 2001 From: Jakub Hrozek Date: Tue, 20 Sep 2016 18:46:40 +0200 Subject: [PATCH 2/5] UTIL: Add a generic iobuf module The KCM responder reads bytes and writes bytes from a buffer of bytes. Instead of letting the caller deal with low-level handling using the SAFEALIGN macros, this patch adds a new iobuf.c module with more high-level functions. The core is a iobuf struct that keeps track of the buffer, its total capacity and a current read or write position. There are helper function to read or write a generic buffer with a set length. Later, we will also add convenience functions to read C data types using the SAFEALIGN macros. --- Makefile.am | 22 ++ src/tests/cmocka/test_iobuf.c | 157 ++ src/util/sss_iobuf.c | 157 ++ src/util/sss_iobuf.h | 45 4 files changed, 381 insertions(+) create mode 100644 src/tests/cmocka/test_iobuf.c create mode 100644 src/util/sss_iobuf.c create mode 100644 src/util/sss_iobuf.h diff --git a/Makefile.am b/Makefile.am index 2304b39..835f641 100644 --- a/Makefile.am +++ b/Makefile.am @@ -274,6 +274,7 @@ if HAVE_CMOCKA test_ipa_dn \ simple-access-tests \ krb5_common_test \ +test_iobuf \ $(NULL) if HAVE_LIBRESOLV @@ -634,6 +635,7 @@ dist_noinst_HEADERS = \ src/util/util_safealign.h \ src/util/util_sss_idmap.h \ src/util/util_creds.h \ +src/util/sss_iobuf.h \ src/monitor/monitor.h \ src/monitor/monitor_interfaces.h \ src/monitor/monitor_iface_generated.h \ @@ -1793,6 +1795,7 @@ krb5_utils_tests_SOURCES = \ src/providers/krb5/krb5_common.c \ src/providers/krb5/krb5_opts.c \ src/util/sss_krb5.c \ +src/util/sss_iobuf.c \ src/providers/data_provider_fo.c \ src/providers/data_provider_opts.c \ src/providers/data_provider_callbacks.c \ @@ -2064,6 +2067,7 @@ krb5_child_test_SOURCES = \ src/providers/krb5/krb5_common.c \ src/providers/krb5/krb5_opts.c \ src/util/sss_krb5.c \ +src/util/sss_iobuf.c \ src/providers/data_provider_fo.c \ src/providers/data_provider_opts.c \ src/providers/data_provider_callbacks.c \ @@ -2733,6 +2737,7 @@ test_copy_ccache_SOURCES = \ src/tests/cmocka/test_copy_ccache.c \ src/providers/krb5/krb5_ccache.c \ src/util/sss_krb5.c \ +src/util/sss_iobuf.c \ $(NULL) test_copy_ccache_CFLAGS = \ $(AM_CFLAGS) \ @@ -2751,6 +2756,7 @@ test_copy_keytab_SOURCES = \ src/tests/cmocka/test_copy_keytab.c \ src/providers/krb5/krb5_keytab.c \ src/util/sss_krb5.c \ +src/util/sss_iobuf.c \ $(NULL) test_copy_keytab_CFLAGS = \ $(AM_CFLAGS) \ @@ -3113,6 +3119,19 @@ test_ipa_dn_LDADD = \ libsss_test_common.la \ $(NULL) +test_iobuf_SOURCES = \ +src/util/sss_iobuf.c \ +src/tests/cmocka/test_iobuf.c \ +$(NULL) +test_iobuf_CFLAGS = \ +$(AM_CFLAGS) \ +$(NULL) +test_iobuf_LDADD = \ +$(CMOCKA_LIBS) \ +$(SSSD_LIBS) \ +$(NULL) + + EXTRA_simple_access_tests_DEPENDENCIES = \ $(ldblib_LTLIBRARIES) simple_access_tests_SOURCES = \ @@ -3429,6 +3448,7 @@ libsss_krb5_common_la_SOURCES = \ src/providers/krb5/krb5_init_shared.c \ src/providers/krb5/krb5_ccache.c \ src/util/sss_krb5.c \ +src/util/sss_iobuf.c \ src/util/become_user.c \ $(NULL) libsss_krb5_common_la_CFLAGS = \ @@ -3641,6 +3661,7 @@ krb5_child_SOURCES = \ src/providers/dp_pam_data_util.c \