From 0467b9d0721a86463af52c91b9e635aaae1aba3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pavel=20B=C5=99ezina?= Date: Mon, 10 Oct 2011 14:50:36 +0200 Subject: [PATCH 02/11] SUDO integration - client common interface --- Makefile.am | 1 + configure.ac | 5 +++++ src/sss_client/common.c | 18 ++++++++++++++++++ src/sss_client/sss_cli.h | 6 ++++++ 4 files changed, 30 insertions(+), 0 deletions(-) diff --git a/Makefile.am b/Makefile.am index 8d75b87..1fbd1a9 100644 --- a/Makefile.am +++ b/Makefile.am @@ -209,6 +209,7 @@ AM_CPPFLAGS = \ -DSSS_NSS_SOCKET_NAME=\"$(pipepath)/nss\" \ -DSSS_PAM_SOCKET_NAME=\"$(pipepath)/pam\" \ -DSSS_PAM_PRIV_SOCKET_NAME=\"$(pipepath)/private/pam\" \ + -DSSS_SUDO_SOCKET_NAME=\"$(pipepath)/sudo\" \ -DLOCALEDIR=\"$(localedir)\" EXTRA_DIST = build/config.rpath diff --git a/configure.ac b/configure.ac index b371ad1..61256a7 100644 --- a/configure.ac +++ b/configure.ac @@ -219,6 +219,11 @@ AM_CONDITIONAL([HAVE_DOXYGEN], [test x$DOXYGEN != xfalse ]) AM_CONDITIONAL([HAVE_CHECK], [test x$have_check != x]) +AM_CONDITIONAL([BUILD_SUDO], [test x$build_all_experimental_features != xno]) +if test x$build_all_experimental_features != xno; then + AC_DEFINE(BUILD_SUDO, 1, [whether to build with SUDO support]) +fi + abs_build_dir=`pwd` AC_DEFINE_UNQUOTED([ABS_BUILD_DIR], ["$abs_build_dir"], [Absolute path to the build directory]) AC_SUBST([abs_builddir], $abs_build_dir) diff --git a/src/sss_client/common.c b/src/sss_client/common.c index a9dc235..94d15a5 100644 --- a/src/sss_client/common.c +++ b/src/sss_client/common.c @@ -377,6 +377,8 @@ static bool sss_cli_check_version(const char *socket_name) } else if (strcmp(socket_name, SSS_PAM_SOCKET_NAME) == 0 || strcmp(socket_name, SSS_PAM_PRIV_SOCKET_NAME) == 0) { expected_version = SSS_PAM_PROTOCOL_VERSION; + } else if (strcmp(socket_name, SSS_SUDO_SOCKET_NAME) == 0) { + expected_version = SSS_SUDO_PROTOCOL_VERSION; } else { return false; } @@ -811,6 +813,22 @@ out: return ret; } +int sss_sudo_make_request(enum sss_cli_command cmd, + struct sss_cli_req_data *rd, + uint8_t **repbuf, size_t *replen, + int *errnop) +{ + enum sss_status ret = SSS_STATUS_UNAVAIL; + + ret = sss_cli_check_socket(errnop, SSS_SUDO_SOCKET_NAME); + if (ret != SSS_STATUS_SUCCESS) { + return SSS_STATUS_UNAVAIL; + } + + ret = sss_cli_make_request_nochecks(cmd, rd, repbuf, replen, errnop); + + return ret; +} const char *ssscli_err2string(int err) { diff --git a/src/sss_client/sss_cli.h b/src/sss_client/sss_cli.h index 788112e..33e9441 100644 --- a/src/sss_client/sss_cli.h +++ b/src/sss_client/sss_cli.h @@ -37,6 +37,7 @@ typedef int errno_t; #define SSS_NSS_PROTOCOL_VERSION 1 #define SSS_PAM_PROTOCOL_VERSION 3 +#define SSS_SUDO_PROTOCOL_VERSION 0 /** * @defgroup sss_cli_command SSS client commands @@ -445,6 +446,11 @@ int sss_pam_make_request(enum sss_cli_command cmd, uint8_t **repbuf, size_t *replen, int *errnop); +int sss_sudo_make_request(enum sss_cli_command cmd, + struct sss_cli_req_data *rd, + uint8_t **repbuf, size_t *replen, + int *errnop); + #ifndef SAFEALIGN_COPY_UINT32 static inline void safealign_memcpy(void *dest, const void *src, size_t n, size_t *counter) -- 1.7.6.4