summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/providers/data_provider.h4
-rw-r--r--src/providers/data_provider_be.c17
-rw-r--r--src/providers/dp_auth_util.c108
3 files changed, 54 insertions, 75 deletions
diff --git a/src/providers/data_provider.h b/src/providers/data_provider.h
index c4427d610..747e6e89d 100644
--- a/src/providers/data_provider.h
+++ b/src/providers/data_provider.h
@@ -187,8 +187,8 @@ int pam_add_response(struct pam_data *pd,
int len, const uint8_t *data);
bool dp_pack_pam_request(DBusMessage *msg, struct pam_data *pd);
-bool dp_unpack_pam_request(DBusMessage *msg, TALLOC_CTX *mem_ctx,
- struct pam_data **new_pd, DBusError *dbus_error);
+bool dp_unpack_pam_request(DBusMessage *msg, struct pam_data *pd,
+ DBusError *dbus_error);
bool dp_pack_pam_response(DBusMessage *msg, struct pam_data *pd);
bool dp_unpack_pam_response(DBusMessage *msg, struct pam_data *pd,
diff --git a/src/providers/data_provider_be.c b/src/providers/data_provider_be.c
index f952faba6..27a4571a7 100644
--- a/src/providers/data_provider_be.c
+++ b/src/providers/data_provider_be.c
@@ -672,13 +672,10 @@ static int be_pam_handler(DBusMessage *message, struct sbus_connection *conn)
be_req->fn = be_pam_handler_callback;
be_req->pvt = reply;
- dbus_error_init(&dbus_error);
-
- ret = dp_unpack_pam_request(message, be_req, &pd, &dbus_error);
- if (!ret) {
- DEBUG(1,("Failed, to parse message!\n"));
+ pd = talloc_zero(be_req, struct pam_data);
+ if (!pd) {
talloc_free(be_req);
- return EIO;
+ return ENOMEM;
}
pd->pam_status = PAM_SYSTEM_ERR;
@@ -688,6 +685,14 @@ static int be_pam_handler(DBusMessage *message, struct sbus_connection *conn)
return ENOMEM;
}
+ dbus_error_init(&dbus_error);
+
+ ret = dp_unpack_pam_request(message, pd, &dbus_error);
+ if (!ret) {
+ DEBUG(1,("Failed, to parse message!\n"));
+ talloc_free(be_req);
+ return EIO;
+ }
DEBUG(4, ("Got request with the following data\n"));
DEBUG_PAM_DATA(4, pd);
diff --git a/src/providers/dp_auth_util.c b/src/providers/dp_auth_util.c
index f042f8ce5..e09a69243 100644
--- a/src/providers/dp_auth_util.c
+++ b/src/providers/dp_auth_util.c
@@ -23,7 +23,7 @@
bool dp_pack_pam_request(DBusMessage *msg, struct pam_data *pd)
{
- dbus_bool_t db_ret;
+ int ret;
if (pd->user == NULL) return false;
if (pd->service == NULL) pd->service = talloc_strdup(pd, "");
@@ -32,78 +32,52 @@ bool dp_pack_pam_request(DBusMessage *msg, struct pam_data *pd)
if (pd->rhost == NULL) pd->rhost = talloc_strdup(pd, "");
- db_ret = dbus_message_append_args(msg,
- DBUS_TYPE_INT32, &(pd->cmd),
- DBUS_TYPE_STRING, &(pd->user),
- DBUS_TYPE_STRING, &(pd->service),
- DBUS_TYPE_STRING, &(pd->tty),
- DBUS_TYPE_STRING, &(pd->ruser),
- DBUS_TYPE_STRING, &(pd->rhost),
- DBUS_TYPE_UINT32, &(pd->authtok_type),
- DBUS_TYPE_ARRAY, DBUS_TYPE_BYTE,
- &(pd->authtok),
- (pd->authtok_size),
- DBUS_TYPE_UINT32, &(pd->newauthtok_type),
- DBUS_TYPE_ARRAY, DBUS_TYPE_BYTE,
- &(pd->newauthtok),
- pd->newauthtok_size,
- DBUS_TYPE_INT32, &(pd->priv),
- DBUS_TYPE_UINT32, &(pd->cli_pid),
- DBUS_TYPE_INVALID);
-
- return db_ret;
-}
-
-bool dp_unpack_pam_request(DBusMessage *msg, TALLOC_CTX *mem_ctx,
- struct pam_data **new_pd, DBusError *dbus_error)
-{
- dbus_bool_t db_ret;
- int ret;
- struct pam_data pd;
-
- memset(&pd, 0, sizeof(pd));
-
- db_ret = dbus_message_get_args(msg, dbus_error,
- DBUS_TYPE_INT32, &(pd.cmd),
- DBUS_TYPE_STRING, &(pd.user),
- DBUS_TYPE_STRING, &(pd.service),
- DBUS_TYPE_STRING, &(pd.tty),
- DBUS_TYPE_STRING, &(pd.ruser),
- DBUS_TYPE_STRING, &(pd.rhost),
- DBUS_TYPE_UINT32, &(pd.authtok_type),
+ ret = dbus_message_append_args(msg,
+ DBUS_TYPE_INT32, &(pd->cmd),
+ DBUS_TYPE_STRING, &(pd->user),
+ DBUS_TYPE_STRING, &(pd->service),
+ DBUS_TYPE_STRING, &(pd->tty),
+ DBUS_TYPE_STRING, &(pd->ruser),
+ DBUS_TYPE_STRING, &(pd->rhost),
+ DBUS_TYPE_UINT32, &(pd->authtok_type),
DBUS_TYPE_ARRAY, DBUS_TYPE_BYTE,
- &(pd.authtok),
- &(pd.authtok_size),
- DBUS_TYPE_UINT32, &(pd.newauthtok_type),
+ &(pd->authtok),
+ (pd->authtok_size),
+ DBUS_TYPE_UINT32, &(pd->newauthtok_type),
DBUS_TYPE_ARRAY, DBUS_TYPE_BYTE,
- &(pd.newauthtok),
- &(pd.newauthtok_size),
- DBUS_TYPE_INT32, &(pd.priv),
- DBUS_TYPE_UINT32, &(pd.cli_pid),
+ &(pd->newauthtok),
+ pd->newauthtok_size,
+ DBUS_TYPE_INT32, &(pd->priv),
+ DBUS_TYPE_UINT32, &(pd->cli_pid),
DBUS_TYPE_INVALID);
- if (!db_ret) {
- DEBUG(1, ("dbus_message_get_args failed.\n"));
- return false;
- }
-
- ret = copy_pam_data(mem_ctx, &pd, new_pd);
- if (ret != EOK) {
- DEBUG(1, ("copy_pam_data failed.\n"));
- return false;
- }
-
- if (pd.authtok_size != 0 && pd.authtok != NULL) {
- memset(pd.authtok, 0, pd.authtok_size);
- pd.authtok_size = 0;
- }
+ return ret;
+}
- if (pd.newauthtok_size != 0 && pd.newauthtok != NULL) {
- memset(pd.newauthtok, 0, pd.newauthtok_size);
- pd.newauthtok_size = 0;
- }
+bool dp_unpack_pam_request(DBusMessage *msg, struct pam_data *pd, DBusError *dbus_error)
+{
+ int ret;
- return true;
+ ret = dbus_message_get_args(msg, dbus_error,
+ DBUS_TYPE_INT32, &(pd->cmd),
+ DBUS_TYPE_STRING, &(pd->user),
+ DBUS_TYPE_STRING, &(pd->service),
+ DBUS_TYPE_STRING, &(pd->tty),
+ DBUS_TYPE_STRING, &(pd->ruser),
+ DBUS_TYPE_STRING, &(pd->rhost),
+ DBUS_TYPE_UINT32, &(pd->authtok_type),
+ DBUS_TYPE_ARRAY, DBUS_TYPE_BYTE,
+ &(pd->authtok),
+ &(pd->authtok_size),
+ DBUS_TYPE_UINT32, &(pd->newauthtok_type),
+ DBUS_TYPE_ARRAY, DBUS_TYPE_BYTE,
+ &(pd->newauthtok),
+ &(pd->newauthtok_size),
+ DBUS_TYPE_INT32, &(pd->priv),
+ DBUS_TYPE_UINT32, &(pd->cli_pid),
+ DBUS_TYPE_INVALID);
+
+ return ret;
}
bool dp_pack_pam_response(DBusMessage *msg, struct pam_data *pd)