[Spice-devel] [vdagent-linux v3 4/4] console-kit: implement check for session type

Victor Toso lists at victortoso.com
Sat Apr 30 06:48:40 UTC 2016


Hi,

On Fri, Apr 29, 2016 at 02:52:03PM -0500, Jonathon Jongsma wrote:
> On Thu, 2016-04-28 at 15:37 +0200, Victor Toso wrote:
> > Implementing the function that was introduced in previous commit:
> > session_info_is_user()
> > 
> > In console-kit we can gather the session type with GetSessionType api
> > from Session interface. This function is not well documented but seems
> > reliable enough as GDM was using it [0]
> > 
> > [0] session_is_login_window on gui/simple-greeter/gdm-user-manager.c
> > 
> > Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1323640
> > ---
> >  src/console-kit.c | 68 +++++++++++++++++++++++++++++++++++++++++++++++++++++-
> > -
> >  1 file changed, 66 insertions(+), 2 deletions(-)
> > 
> > diff --git a/src/console-kit.c b/src/console-kit.c
> > index 036234e..182e886 100644
> > --- a/src/console-kit.c
> > +++ b/src/console-kit.c
> > @@ -503,8 +503,72 @@ gboolean session_info_session_is_locked(struct
> > session_info *info)
> >      return (info->session_is_locked || info->session_idle_hint);
> >  }
> >  
> > +/* This function should only be called after session_info_get_active_session
> > + * in order to verify if active session belongs to user (non greeter) */
> >  gboolean session_info_is_user(struct session_info *info)
> >  {
> > -    /* TODO */
> > -    return TRUE;
> > +    DBusError error;
> > +    DBusMessage *message;
> > +    DBusMessage *reply;
>
> would prefer to initialize message and reply to NULL just in case at some point
> the code changes and there is a 'goto exit' call before one of these variables
> gets assigned.

Sure, I'll change it.

>
> > +    gchar *session_type = NULL;
> > +    gboolean ret = TRUE;
> > +
> > +    if (info == NULL || info->connection == NULL || info->active_session ==
> > NULL)
> > +        return TRUE;
>
> Here again, we're defaulting to permissive. As in the previous reviews, should
> we default to restrictive? Maybe not, but I just wanted to mention it.

Sure. Let me know what you think from my replies in previous patches.

> > +
> > +    message = dbus_message_new_method_call(INTERFACE_CONSOLE_KIT,
> > +                                           info->active_session,
> > +                                           INTERFACE_CONSOLE_KIT_SESSION,
> > +                                           "GetSessionType");
> > +    if (message == NULL) {
> > +        syslog(LOG_ERR,
> > +               "(console-kit) Unable to create dbus message for
> > GetSessionType");
> > +        return TRUE;
> > +    }
> > +
> > +    dbus_error_init(&error);
> > +    reply = dbus_connection_send_with_reply_and_block(info->connection,
> > +                                                      message,
> > +                                                      -1,
> > +                                                      &error);
> > +    if (reply == NULL || dbus_error_is_set(&error)) {
> > +        if (dbus_error_is_set(&error)) {
> > +            syslog(LOG_ERR, "GetSessionType failed: %s", error.message);
> > +            dbus_error_free(&error);
> > +        } else
> > +            syslog(LOG_ERR, "GetSessionType failed");
> > +        goto exit;
> > +    }
> > +
> > +    dbus_error_init(&error);
> > +    if (!dbus_message_get_args(reply,
> > +                               &error,
> > +                               DBUS_TYPE_STRING, &session_type,
> > +                               DBUS_TYPE_INVALID)) {
> > +        if (dbus_error_is_set(&error)) {
> > +            syslog(LOG_ERR,
> > +                   "(console-kit) fail to get session-type from reply: %s",
> > +                   error.message);
> > +            dbus_error_free(&error);
> > +        } else {
> > +            syslog(LOG_ERR, "(console-kit) fail to get session-type from
> > reply");
> > +        }
> > +        session_type = NULL;
> > +        goto exit;
> > +    }
> > +
> > +    /* Empty session_type means user */
> > +    if (info->verbose)
> > +        syslog(LOG_DEBUG, "(console-kit) session-type is '%s'",
> > session_type);
> > +
> > +    ret = (g_strcmp0 (session_type, "LoginWindow") != 0);
> > +
> > +exit:
> > +    if (reply != NULL) {
> > +        dbus_message_unref(reply);
> > +    }
> > +    if (message != NULL) {
> > +        dbus_message_unref(message);
> > +    }
> > +    return ret;
> >  }
>
> Otherwise it looks ok.
> 
> Reviewed-by: Jonathon Jongsma <jjongsma at redhat.com>

Many thanks for the reviews. I'll send the v4 after we decide if we should
change the session_info_session_is_locked to return TRUE instead of FALSE as
default and session_info_is_user to return FALSE instead of TRUE as default.

Cheers,
  toso

> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/spice-devel


More information about the Spice-devel mailing list