From e589442117002ab72e4e129232cde8b31eb71f92 Mon Sep 17 00:00:00 2001 From: Sumit Bose Date: Fri, 13 May 2011 18:41:16 +0200 Subject: PAC client: add basic support in common client code --- src/sss_client/common.c | 33 +++++++++++++++++++++++++++++++++ src/sss_client/sss_cli.h | 5 +++++ 2 files changed, 38 insertions(+) diff --git a/src/sss_client/common.c b/src/sss_client/common.c index 9fbb5887c..da7d1f95c 100644 --- a/src/sss_client/common.c +++ b/src/sss_client/common.c @@ -398,6 +398,8 @@ static bool sss_cli_check_version(const char *socket_name) expected_version = SSS_AUTOFS_PROTOCOL_VERSION; } else if (strcmp(socket_name, SSS_SSH_SOCKET_NAME) == 0) { expected_version = SSS_SSH_PROTOCOL_VERSION; + } else if (strcmp(socket_name, SSS_PAC_SOCKET_NAME) == 0) { + expected_version = SSS_PAC_PROTOCOL_VERSION; } else { return false; } @@ -730,6 +732,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 483b809bf..077111c5b 100644 --- a/src/sss_client/sss_cli.h +++ b/src/sss_client/sss_cli.h @@ -47,6 +47,7 @@ typedef int errno_t; #define SSS_SUDO_PROTOCOL_VERSION 0 #define SSS_AUTOFS_PROTOCOL_VERSION 1 #define SSS_SSH_PROTOCOL_VERSION 0 +#define SSS_PAC_PROTOCOL_VERSION 1 #ifdef LOGIN_NAME_MAX #define SSS_NAME_MAX LOGIN_NAME_MAX @@ -484,6 +485,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); int sss_sudo_make_request(enum sss_cli_command cmd, struct sss_cli_req_data *rd, -- cgit