From 5dde75056bbb42fec73223122a6fe27a47395dec Mon Sep 17 00:00:00 2001 From: Arun Scaria Date: Tue, 28 Jun 2011 21:10:36 +0530 Subject: fixed sbus-plugin sample communication --- src/responder/sudo/sudosrv.c | 10 +--- src/sss_client/sudo_plugin/sss_sudo_cli.h | 6 ++- src/sss_client/sudo_plugin/sss_sudoplugin.c | 74 +++++++++++++---------------- 3 files changed, 41 insertions(+), 49 deletions(-) diff --git a/src/responder/sudo/sudosrv.c b/src/responder/sudo/sudosrv.c index 250adf44..35ad4939 100644 --- a/src/responder/sudo/sudosrv.c +++ b/src/responder/sudo/sudosrv.c @@ -83,7 +83,7 @@ static int sudo_query_validation(DBusMessage *message, struct sbus_connection *c return EIO; } - printf(" The string messahe is : %s ",str); + fprintf(stderr," The string message is : %s\n ",str); talloc_set_destructor((TALLOC_CTX *)sudocli, sudo_client_destructor); DEBUG(4, ("Got string [%s]\n", str)); @@ -150,13 +150,7 @@ static int sudo_client_init(struct sbus_connection *conn, void *data) sudocli->conn = conn; sudocli->initialized = false; - /* - * 5 seconds should be plenty - * - * FIXME: Call to this tevent_timeval_current_ofs() - * hangs and the goes in waiting forever. - * Pls comment if you know why. - */ + /* 5 seconds should be plenty */ tv = tevent_timeval_current_ofs(5, 0); sudocli->timeout = tevent_add_timer(sudoctx->ev, sudocli, tv, init_timeout, sudocli); diff --git a/src/sss_client/sudo_plugin/sss_sudo_cli.h b/src/sss_client/sudo_plugin/sss_sudo_cli.h index 5bfa183f..799fa632 100644 --- a/src/sss_client/sudo_plugin/sss_sudo_cli.h +++ b/src/sss_client/sudo_plugin/sss_sudo_cli.h @@ -32,10 +32,14 @@ #undef SSS_START_OF_SUDO_REQUEST #define SSS_START_OF_SUDO_REQUEST 0x436789 +#undef SSS_SUDO_SERVER_ADDRESS +#define SSS_SUDO_SERVER_ADDRESS "unix:path=/tmp/sssd/sudo" +#undef SSS_SUDO_TIMEOUT +#define SSS_SUDO_TIMEOUT 60 #ifndef _SSSCLI_H - /* If sss_cli.h is not imported */ + /* If sss_cli.h is not included */ struct sss_cli_req_data { size_t len; const void *data; diff --git a/src/sss_client/sudo_plugin/sss_sudoplugin.c b/src/sss_client/sudo_plugin/sss_sudoplugin.c index 46ed72a2..616d4bc0 100644 --- a/src/sss_client/sudo_plugin/sss_sudoplugin.c +++ b/src/sss_client/sudo_plugin/sss_sudoplugin.c @@ -689,23 +689,24 @@ int sss_sudo_make_request(struct sss_cli_req_data *rd, int *errnop) { - const char * param ="Hello, World!"; - DBusMessage* dbus_msg; - DBusMessageIter args; + const char * param ="Hello, World!"; + DBusConnection* conn; DBusError err; - DBusPendingCall* pending; - int ret; - int status; - dbus_uint32_t level; + + DBusMessage* dbus_msg; + DBusMessage* dbus_reply; + DBusMessageIter args; + + dbus_uint32_t status=0; - printf("Calling remote method wit %s\n", param); + fprintf(stdout,"Calling remote method wit %s\n", param); /* initialise the errors */ dbus_error_init(&err); /* connect to the system bus and check for errors */ - conn = dbus_connection_open_private("unix:path=/tmp/sssd/sudo", &err); + conn = dbus_connection_open_private(SSS_SUDO_SERVER_ADDRESS, &err); if (dbus_error_is_set(&err)) { fprintf(stderr, "Connection Error (%s)\n", err.message); dbus_error_free(&err); @@ -733,47 +734,45 @@ int sss_sudo_make_request(struct sss_cli_req_data *rd, } /* send message and get a handle for a reply */ - if (!dbus_connection_send (conn,dbus_msg, &pending)) { - fprintf(stderr, "Out Of Memory!\n"); + dbus_reply = dbus_connection_send_with_reply_and_block (conn,dbus_msg, + SSS_SUDO_TIMEOUT, + &err); + if (dbus_error_is_set(&err)) { + fprintf(stderr, "Connection send-reply Error (%s)\n", err.message); + dbus_error_free(&err); exit(1); } - if (NULL == pending) { - fprintf(stderr, "Pending Call Null\n"); + if (NULL == dbus_reply) { + fprintf(stderr, "reply failed\n"); exit(1); } - dbus_connection_flush(conn); - printf("Request Sent\n"); - /* free message */ - dbus_message_unref(dbus_msg); - - /* block until we recieve a reply */ - dbus_pending_call_block(pending); - - /* get the reply message */ - dbus_msg = dbus_pending_call_steal_reply(pending); - if (NULL == dbus_msg) { - fprintf(stderr, "Reply Null\n"); - exit(1); - } - /* free the pending message handle */ - dbus_pending_call_unref(pending); + fprintf(stdout,"Request Sent\n"); + /* read the parameters */ - if (!dbus_message_iter_init(dbus_msg, &args)) + if (!dbus_message_iter_init(dbus_reply, &args)) { fprintf(stderr, "Message has no arguments!\n"); - else if (DBUS_TYPE_UINT16 != dbus_message_iter_get_arg_type(&args)) + + } + else if (DBUS_TYPE_UINT16 != dbus_message_iter_get_arg_type(&args)) { fprintf(stderr, "Argument is not DBUS_TYPE_UINT16!\n"); - else + + } + else { dbus_message_iter_get_basic(&args, &status); + + } - printf("Got Reply: %d, %d\n", status, level); + fprintf(stdout,"Got Reply: %d\n", status); // free reply and close connection - dbus_message_unref(dbus_msg); - //dbus_connection_close(conn); + /* free message */ + dbus_message_unref(dbus_msg); + dbus_message_unref(dbus_reply); + dbus_connection_close(conn); @@ -783,11 +782,6 @@ return SSS_STATUS_SUCCESS; - - - - - static int send_and_receive() { int ret; -- cgit