From 62d118ee7b600a266be0b9632ebf5d39e46cfa07 Mon Sep 17 00:00:00 2001 From: Sumit Bose Date: Fri, 13 May 2011 18:41:16 +0200 Subject: [PATCH 3/6] Add pac support to client --- src/sss_client/common.c | 33 +++++++++++++++++++++++++++++++++ src/sss_client/sss_cli.h | 5 +++++ 2 files changed, 38 insertions(+), 0 deletions(-) diff --git a/src/sss_client/common.c b/src/sss_client/common.c index b603305..537f28e 100644 --- a/src/sss_client/common.c +++ b/src/sss_client/common.c @@ -373,6 +373,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_PAC_SOCKET_NAME) == 0) { + expected_version = SSS_PAC_PROTOCOL_VERSION; } else { return false; } @@ -705,6 +707,37 @@ enum nss_status sss_nss_make_request(enum sss_cli_command cmd, } } +int sss_pac_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; + char *envval; + + /* avoid looping in the nss daemon */ + envval = getenv("_SSS_LOOPS"); + if (envval && strcmp(envval, "NO") == 0) { + return NSS_STATUS_NOTFOUND; + } + + ret = sss_cli_check_socket(errnop, SSS_PAC_SOCKET_NAME); + if (ret != SSS_STATUS_SUCCESS) { + return NSS_STATUS_UNAVAIL; + } + + ret = sss_cli_make_request_nochecks(cmd, rd, repbuf, replen, errnop); + switch (ret) { + case SSS_STATUS_TRYAGAIN: + return NSS_STATUS_TRYAGAIN; + case SSS_STATUS_SUCCESS: + return NSS_STATUS_SUCCESS; + case SSS_STATUS_UNAVAIL: + default: + return NSS_STATUS_UNAVAIL; + } +} + errno_t check_server_cred(int sockfd) { #ifdef HAVE_UCRED diff --git a/src/sss_client/sss_cli.h b/src/sss_client/sss_cli.h index ebdcc26..7c0ec11 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_PAC_PROTOCOL_VERSION 1 /** * @defgroup sss_cli_command SSS client commands @@ -444,6 +445,10 @@ int sss_pam_make_request(enum sss_cli_command cmd, struct sss_cli_req_data *rd, uint8_t **repbuf, size_t *replen, int *errnop); +int sss_pac_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 -- 1.7.5.2