From cbf80a5f3aa12917c6c05dc264916564caf40068 Mon Sep 17 00:00:00 2001 From: Sumit Bose Date: Fri, 23 Apr 2010 15:21:38 +0200 Subject: [PATCH 1/2] Split pam_data utilities into a separate file --- src/Makefile.am | 2 + src/providers/dp_auth_util.c | 91 ----------------------------- src/providers/dp_pam_data_util.c | 116 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 118 insertions(+), 91 deletions(-) create mode 100644 src/providers/dp_pam_data_util.c diff --git a/src/Makefile.am b/src/Makefile.am index ead53f9..637a4f3 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -221,6 +221,7 @@ SSSD_UTIL_OBJ = \ db/sysdb_search.c \ monitor/monitor_sbus.c \ providers/dp_auth_util.c \ + providers/dp_pam_data_util.c \ providers/dp_sbus.c \ sbus/sbus_client.c \ sbus/sssd_dbus_common.c \ @@ -824,6 +825,7 @@ krb5_child_SOURCES = \ providers/krb5/krb5_become_user.c \ providers/krb5/krb5_child.c \ providers/child_common.c \ + providers/dp_pam_data_util.c \ util/user_info_msg.c \ util/sss_krb5.c krb5_child_CFLAGS = \ diff --git a/src/providers/dp_auth_util.c b/src/providers/dp_auth_util.c index d0ce190..e09a692 100644 --- a/src/providers/dp_auth_util.c +++ b/src/providers/dp_auth_util.c @@ -21,97 +21,6 @@ #include "data_provider.h" -#define PD_STR_COPY(el) do { \ - if (old_pd->el != NULL) { \ - pd->el = talloc_strdup(pd, old_pd->el); \ - if (pd->el == NULL) { \ - DEBUG(1, ("talloc_strdup failed.\n")); \ - goto failed; \ - } \ - } \ -} while(0); - -#define PD_MEM_COPY(el, size) do { \ - if (old_pd->el != NULL) { \ - pd->el = talloc_memdup(pd, old_pd->el, (size)); \ - if (pd->el == NULL) { \ - DEBUG(1, ("talloc_memdup failed.\n")); \ - goto failed; \ - } \ - } \ -} while(0); - -errno_t copy_pam_data(TALLOC_CTX *mem_ctx, struct pam_data *old_pd, - struct pam_data **new_pd) -{ - struct pam_data *pd = NULL; - - pd = talloc_zero(mem_ctx, struct pam_data); - if (pd == NULL) { - DEBUG(1, ("talloc_zero failed.\n")); - return ENOMEM; - } - - pd->cmd = old_pd->cmd; - pd->authtok_type = old_pd->authtok_type; - pd->authtok_size = old_pd->authtok_size; - pd->newauthtok_type = old_pd->newauthtok_type; - pd->newauthtok_size = old_pd->newauthtok_size; - - PD_STR_COPY(domain); - PD_STR_COPY(user); - PD_STR_COPY(service); - PD_STR_COPY(tty); - PD_STR_COPY(ruser); - PD_STR_COPY(rhost); - PD_MEM_COPY(authtok, old_pd->authtok_size); - PD_MEM_COPY(newauthtok, old_pd->newauthtok_size); - pd->cli_pid = old_pd->cli_pid; - - *new_pd = pd; - - return EOK; - -failed: - talloc_free(pd); - return ENOMEM; -} - -void pam_print_data(int l, struct pam_data *pd) -{ - DEBUG(l, ("command: %d\n", pd->cmd)); - DEBUG(l, ("domain: %s\n", pd->domain)); - DEBUG(l, ("user: %s\n", pd->user)); - DEBUG(l, ("service: %s\n", pd->service)); - DEBUG(l, ("tty: %s\n", pd->tty)); - DEBUG(l, ("ruser: %s\n", pd->ruser)); - DEBUG(l, ("rhost: %s\n", pd->rhost)); - DEBUG(l, ("authtok type: %d\n", pd->authtok_type)); - DEBUG(l, ("authtok size: %d\n", pd->authtok_size)); - DEBUG(l, ("newauthtok type: %d\n", pd->newauthtok_type)); - DEBUG(l, ("newauthtok size: %d\n", pd->newauthtok_size)); - DEBUG(l, ("priv: %d\n", pd->priv)); - DEBUG(l, ("cli_pid: %d\n", pd->cli_pid)); -} - -int pam_add_response(struct pam_data *pd, enum response_type type, - int len, const uint8_t *data) -{ - struct response_data *new; - - new = talloc(pd, struct response_data); - if (new == NULL) return ENOMEM; - - new->type = type; - new->len = len; - new->data = talloc_memdup(pd, data, len); - if (new->data == NULL) return ENOMEM; - new->next = pd->resp_list; - pd->resp_list = new; - - return EOK; -} - bool dp_pack_pam_request(DBusMessage *msg, struct pam_data *pd) { int ret; diff --git a/src/providers/dp_pam_data_util.c b/src/providers/dp_pam_data_util.c new file mode 100644 index 0000000..f551a48 --- /dev/null +++ b/src/providers/dp_pam_data_util.c @@ -0,0 +1,116 @@ +/* + SSSD + + Utilities to for tha pam_data structure + + Authors: + Sumit Bose + + Copyright (C) 2009 Red Hat + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#include "providers/data_provider.h" + +#define PD_STR_COPY(el) do { \ + if (old_pd->el != NULL) { \ + pd->el = talloc_strdup(pd, old_pd->el); \ + if (pd->el == NULL) { \ + DEBUG(1, ("talloc_strdup failed.\n")); \ + goto failed; \ + } \ + } \ +} while(0); + +#define PD_MEM_COPY(el, size) do { \ + if (old_pd->el != NULL) { \ + pd->el = talloc_memdup(pd, old_pd->el, (size)); \ + if (pd->el == NULL) { \ + DEBUG(1, ("talloc_memdup failed.\n")); \ + goto failed; \ + } \ + } \ +} while(0); + +errno_t copy_pam_data(TALLOC_CTX *mem_ctx, struct pam_data *old_pd, + struct pam_data **new_pd) +{ + struct pam_data *pd = NULL; + + pd = talloc_zero(mem_ctx, struct pam_data); + if (pd == NULL) { + DEBUG(1, ("talloc_zero failed.\n")); + return ENOMEM; + } + + pd->cmd = old_pd->cmd; + pd->authtok_type = old_pd->authtok_type; + pd->authtok_size = old_pd->authtok_size; + pd->newauthtok_type = old_pd->newauthtok_type; + pd->newauthtok_size = old_pd->newauthtok_size; + + PD_STR_COPY(domain); + PD_STR_COPY(user); + PD_STR_COPY(service); + PD_STR_COPY(tty); + PD_STR_COPY(ruser); + PD_STR_COPY(rhost); + PD_MEM_COPY(authtok, old_pd->authtok_size); + PD_MEM_COPY(newauthtok, old_pd->newauthtok_size); + pd->cli_pid = old_pd->cli_pid; + + *new_pd = pd; + + return EOK; + +failed: + talloc_free(pd); + return ENOMEM; +} + +void pam_print_data(int l, struct pam_data *pd) +{ + DEBUG(l, ("command: %d\n", pd->cmd)); + DEBUG(l, ("domain: %s\n", pd->domain)); + DEBUG(l, ("user: %s\n", pd->user)); + DEBUG(l, ("service: %s\n", pd->service)); + DEBUG(l, ("tty: %s\n", pd->tty)); + DEBUG(l, ("ruser: %s\n", pd->ruser)); + DEBUG(l, ("rhost: %s\n", pd->rhost)); + DEBUG(l, ("authtok type: %d\n", pd->authtok_type)); + DEBUG(l, ("authtok size: %d\n", pd->authtok_size)); + DEBUG(l, ("newauthtok type: %d\n", pd->newauthtok_type)); + DEBUG(l, ("newauthtok size: %d\n", pd->newauthtok_size)); + DEBUG(l, ("priv: %d\n", pd->priv)); + DEBUG(l, ("cli_pid: %d\n", pd->cli_pid)); +} + +int pam_add_response(struct pam_data *pd, enum response_type type, + int len, const uint8_t *data) +{ + struct response_data *new; + + new = talloc(pd, struct response_data); + if (new == NULL) return ENOMEM; + + new->type = type; + new->len = len; + new->data = talloc_memdup(pd, data, len); + if (new->data == NULL) return ENOMEM; + new->next = pd->resp_list; + pd->resp_list = new; + + return EOK; +} -- 1.6.6.1