summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJakub Hrozek <jhrozek@redhat.com>2015-10-16 12:10:54 +0200
committerJakub Hrozek <jhrozek@redhat.com>2015-10-16 16:08:12 +0200
commita2a80e85982a6acce567528beda489e6c6fea4ce (patch)
tree7282cc1f09233b09653999bc4069afae0da09f86
parent5e9cbb54fadf81193249d5449a9e015d112e4bd3 (diff)
downloadsssd-a2a80e85982a6acce567528beda489e6c6fea4ce.tar.gz
sssd-a2a80e85982a6acce567528beda489e6c6fea4ce.tar.xz
sssd-a2a80e85982a6acce567528beda489e6c6fea4ce.zip
SQ me to the previous commit
-rw-r--r--src/responder/pam/pamsrv.h5
-rw-r--r--src/responder/pam/pamsrv_cmd.c70
-rw-r--r--src/responder/pam/pamsrv_reply.c66
3 files changed, 73 insertions, 68 deletions
diff --git a/src/responder/pam/pamsrv.h b/src/responder/pam/pamsrv.h
index bd9e20874..f4a178eaf 100644
--- a/src/responder/pam/pamsrv.h
+++ b/src/responder/pam/pamsrv.h
@@ -110,4 +110,9 @@ errno_t pamsrv_exp_warn(struct pam_data *pd,
int pam_verbosity,
const char *pam_account_expired_message);
+errno_t pamsrv_reply_packet(TALLOC_CTX *mem_ctx,
+ struct pam_data *pd,
+ enum sss_cli_command cmd,
+ struct sss_packet **_out);
+
#endif /* __PAMSRV_H__ */
diff --git a/src/responder/pam/pamsrv_cmd.c b/src/responder/pam/pamsrv_cmd.c
index 85b356617..c967c67be 100644
--- a/src/responder/pam/pamsrv_cmd.c
+++ b/src/responder/pam/pamsrv_cmd.c
@@ -290,72 +290,6 @@ done:
return ret;
}
-static errno_t produce_packet(TALLOC_CTX *mem_ctx,
- struct pam_data *pd,
- enum sss_cli_command cmd,
- struct sss_packet **_out)
-{
- errno_t ret;
- uint8_t *body;
- size_t blen;
- int32_t resp_c;
- int32_t resp_size;
- struct response_data *resp;
- int p;
- struct sss_packet *out;
-
- ret = sss_packet_new(mem_ctx, 0, cmd, &out);
- if (ret != EOK) {
- goto done;
- }
-
- resp_c = 0;
- resp_size = 0;
- resp = pd->resp_list;
- while(resp != NULL) {
- if (!resp->do_not_send_to_client) {
- resp_c++;
- resp_size += resp->len;
- }
- resp = resp->next;
- }
-
- ret = sss_packet_grow(out, sizeof(int32_t) + sizeof(int32_t) +
- resp_c * 2 * sizeof(int32_t) + resp_size);
- if (ret != EOK) {
- goto done;
- }
-
- sss_packet_get_body(out, &body, &blen);
- DEBUG(SSSDBG_FUNC_DATA, "blen: %zu\n", blen);
- p = 0;
-
- memcpy(&body[p], &pd->pam_status, sizeof(int32_t));
- p += sizeof(int32_t);
-
- memcpy(&body[p], &resp_c, sizeof(int32_t));
- p += sizeof(int32_t);
-
- resp = pd->resp_list;
- while(resp != NULL) {
- if (!resp->do_not_send_to_client) {
- memcpy(&body[p], &resp->type, sizeof(int32_t));
- p += sizeof(int32_t);
- memcpy(&body[p], &resp->len, sizeof(int32_t));
- p += sizeof(int32_t);
- memcpy(&body[p], resp->data, resp->len);
- p += resp->len;
- }
-
- resp = resp->next;
- }
-
- *_out = out;
- ret = EOK;
-
-done:
- return ret;
-}
static int pam_forwarder(struct cli_ctx *cctx, int pam_cmd);
static void pam_handle_cached_login(struct pam_auth_req *preq, int ret,
@@ -520,8 +454,8 @@ static void pam_reply(struct pam_auth_req *preq)
}
}
- ret = produce_packet(cctx->creq, pd, sss_packet_get_cmd(cctx->creq->in),
- &cctx->creq->out);
+ ret = pamsrv_reply_packet(cctx->creq, pd, sss_packet_get_cmd(cctx->creq->in),
+ &cctx->creq->out);
if (ret != EOK) {
goto done;
}
diff --git a/src/responder/pam/pamsrv_reply.c b/src/responder/pam/pamsrv_reply.c
index 9cd1c88f2..c3e44499c 100644
--- a/src/responder/pam/pamsrv_reply.c
+++ b/src/responder/pam/pamsrv_reply.c
@@ -88,3 +88,69 @@ static errno_t pack_user_info_account_expired(TALLOC_CTX *mem_ctx,
return EOK;
}
+errno_t pamsrv_reply_packet(TALLOC_CTX *mem_ctx,
+ struct pam_data *pd,
+ enum sss_cli_command cmd,
+ struct sss_packet **_out)
+{
+ errno_t ret;
+ uint8_t *body;
+ size_t blen;
+ int32_t resp_c;
+ int32_t resp_size;
+ struct response_data *resp;
+ int p;
+ struct sss_packet *out;
+
+ ret = sss_packet_new(mem_ctx, 0, cmd, &out);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ resp_c = 0;
+ resp_size = 0;
+ resp = pd->resp_list;
+ while(resp != NULL) {
+ if (!resp->do_not_send_to_client) {
+ resp_c++;
+ resp_size += resp->len;
+ }
+ resp = resp->next;
+ }
+
+ ret = sss_packet_grow(out, sizeof(int32_t) + sizeof(int32_t) +
+ resp_c * 2 * sizeof(int32_t) + resp_size);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ sss_packet_get_body(out, &body, &blen);
+ DEBUG(SSSDBG_FUNC_DATA, "blen: %zu\n", blen);
+ p = 0;
+
+ memcpy(&body[p], &pd->pam_status, sizeof(int32_t));
+ p += sizeof(int32_t);
+
+ memcpy(&body[p], &resp_c, sizeof(int32_t));
+ p += sizeof(int32_t);
+
+ resp = pd->resp_list;
+ while(resp != NULL) {
+ if (!resp->do_not_send_to_client) {
+ memcpy(&body[p], &resp->type, sizeof(int32_t));
+ p += sizeof(int32_t);
+ memcpy(&body[p], &resp->len, sizeof(int32_t));
+ p += sizeof(int32_t);
+ memcpy(&body[p], resp->data, resp->len);
+ p += resp->len;
+ }
+
+ resp = resp->next;
+ }
+
+ *_out = out;
+ ret = EOK;
+
+done:
+ return ret;
+}