Codebase list policykit-1-gnome / 7a812643-bc56-4bec-b5f1-5bfc5faa94a8/main src / main.c
7a812643-bc56-4bec-b5f1-5bfc5faa94a8/main

Tree @7a812643-bc56-4bec-b5f1-5bfc5faa94a8/main (Download .tar.gz)

main.c @7a812643-bc56-4bec-b5f1-5bfc5faa94a8/main

4e5bc44
 
d256881
4e5bc44
 
 
 
d256881
4e5bc44
d256881
4e5bc44
 
d256881
4e5bc44
 
 
 
d256881
4e5bc44
d256881
 
 
 
 
 
 
4e5bc44
 
 
d256881
4e5bc44
d256881
4e5bc44
 
d256881
4e5bc44
 
d256881
cb32d96
 
d256881
 
 
4e5bc44
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d256881
4e5bc44
354d83f
62da727
 
 
 
 
 
 
 
d256881
4e5bc44
d256881
4e5bc44
 
 
 
 
 
 
 
d256881
4e5bc44
cb32d96
 
4e5bc44
 
cb32d96
4e5bc44
 
 
 
 
 
d256881
cb32d96
 
 
 
 
4e5bc44
d256881
4e5bc44
d256881
4e5bc44
 
 
 
 
 
 
 
 
 
 
d256881
/*
 * Copyright (C) 2009 Red Hat, Inc.
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2 of the License, or (at your option) any later version.
 *
 * This library 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
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General
 * Public License along with this library; if not, write to the
 * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 * Boston, MA 02110-1301, USA.
 *
 * Author: David Zeuthen <davidz@redhat.com>
 */

#ifdef HAVE_CONFIG_H
#  include "config.h"
#endif

#include <string.h>
#include <gtk/gtk.h>
#include <glib/gi18n.h>
#include <polkitagent/polkitagent.h>

#include "polkitgnomelistener.h"

/* the Authority */
static PolkitAuthority *authority = NULL;

/* the session we are servicing */
static PolkitSubject *session = NULL;

static GDBusConnection *session_bus_connection = NULL;

int
main (int argc, char **argv)
{
  gint ret;
  GMainLoop *loop;
  PolkitAgentListener *listener;
  GError *error;

  g_type_init ();
  gtk_init (&argc, &argv);

  loop = NULL;
  authority = NULL;
  listener = NULL;
  session = NULL;
  ret = 1;

  bindtextdomain (GETTEXT_PACKAGE, GNOMELOCALEDIR);
#if HAVE_BIND_TEXTDOMAIN_CODESET
  bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
#endif
  textdomain (GETTEXT_PACKAGE);

  loop = g_main_loop_new (NULL, FALSE);

  error = NULL;
  authority = polkit_authority_get_sync (NULL /* GCancellable* */, &error);
  if (authority == NULL)
    {
      g_warning ("Error getting authority: %s", error->message);
      g_error_free (error);
      goto out;
    }

  listener = polkit_gnome_listener_new ();

  error = NULL;
  session = polkit_unix_session_new_for_process_sync (getpid (), NULL, &error);
  if (error != NULL)
    {
      g_warning ("Unable to determine the session we are in: %s", error->message);
      g_error_free (error);
      goto out;
    }

  error = NULL;
  if (!polkit_agent_listener_register (listener,
                                       POLKIT_AGENT_REGISTER_FLAGS_NONE,
                                       session,
                                       "/org/gnome/PolicyKit1/AuthenticationAgent",
                                       NULL, /* GCancellable */
                                       &error))
    {
      g_printerr ("Cannot register authentication agent: %s\n", error->message);
      g_error_free (error);
      goto out;
    }

  /* Poor mans session management - connect to the session bus
   * so we get killed when it goes away
   */
  session_bus_connection = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, NULL);

  g_main_loop_run (loop);

  ret = 0;

 out:
  if (authority != NULL)
    g_object_unref (authority);
  if (session != NULL)
    g_object_unref (session);
  if (listener != NULL)
    g_object_unref (listener);
  if (loop != NULL)
    g_main_loop_unref (loop);

  return ret;
}