From 7e9d756652e9e787b4380c9a39012ad2e751e885 Mon Sep 17 00:00:00 2001 From: guidog Date: Sat, 28 Feb 2009 13:42:48 +0000 Subject: Turn Krb5AuthAppliet into a GObject called ka_applet. git-svn-id: http://svn.gnome.org/svn/krb5-auth-dialog/trunk@126 517b70f8-ed25-0410-8bf6-f5db08f7b76e --- src/Makefile.am | 2 - src/krb5-auth-applet.c | 461 +++++++++++++++++++++++++++++++++++++++++-------- src/krb5-auth-applet.h | 59 ++++--- src/krb5-auth-dbus.c | 2 +- src/krb5-auth-dialog.c | 142 ++++++++------- src/krb5-auth-dialog.h | 2 +- src/krb5-auth-gconf.c | 55 +++--- src/krb5-auth-gconf.h | 2 +- src/krb5-auth-notify.c | 66 ------- src/krb5-auth-notify.h | 28 --- 10 files changed, 535 insertions(+), 284 deletions(-) delete mode 100644 src/krb5-auth-notify.c delete mode 100644 src/krb5-auth-notify.h (limited to 'src') diff --git a/src/Makefile.am b/src/Makefile.am index 568f3bc..e04cc36 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -24,8 +24,6 @@ krb5_auth_dialog_SOURCES = \ krb5-auth-applet.h \ krb5-auth-gconf.c \ krb5-auth-gconf.h \ - krb5-auth-notify.c \ - krb5-auth-notify.h \ krb5-auth-dbus.c \ krb5-auth-dbus.h \ dummy-strings.c diff --git a/src/krb5-auth-applet.c b/src/krb5-auth-applet.c index 99b4007..996d862 100644 --- a/src/krb5-auth-applet.c +++ b/src/krb5-auth-applet.c @@ -1,6 +1,6 @@ /* Krb5 Auth Applet -- Acquire and release kerberos tickets * - * (C) 2008 Guido Guenther + * (C) 2008,2009 Guido Guenther * * 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 @@ -24,7 +24,9 @@ #include "krb5-auth-applet.h" #include "krb5-auth-dialog.h" -#include "krb5-auth-notify.h" +#ifdef HAVE_LIBNOTIFY +#include +#endif #define NOTIFY_SECONDS 300 @@ -34,10 +36,222 @@ enum ka_icon { val_icon, }; +enum +{ + KA_PROP_0 = 0, + KA_PROP_PRINCIPAL, + KA_PROP_PK_USERID, + KA_PROP_TRAYICON, + KA_PROP_PW_PROMPT_MINS, +}; + +struct _KaApplet { + GObject parent; + + KaAppletPrivate *priv; +}; + +struct _KaAppletClass { + GObjectClass parent; +}; + +G_DEFINE_TYPE(KaApplet, ka_applet, G_TYPE_OBJECT); + +struct _KaAppletPrivate +{ + GtkStatusIcon* tray_icon; /* the tray icon */ + GtkWidget* context_menu; /* the tray icon's context menu */ + const char* icons[3]; /* for invalid, expiring and valid tickts */ + gboolean show_trayicon; /* show the trayicon */ + + /* The password dialog */ + GtkWidget* pw_dialog; /* the password dialog itself */ + GladeXML* pw_xml; /* the dialog's glade xml */ + GtkWidget* pw_label; /* the wrong password/timeout label */ + int pw_prompt_secs; /* when to start prompting for a password */ + gboolean pw_dialog_persist; /* don't hide the dialog when creds are still valid */ + +#ifdef HAVE_LIBNOTIFY + NotifyNotification* notification;/* notification messages */ +#endif /* HAVE_LIBNOTIFY */ + char* principal; /* the principal to request */ + gboolean renewable; /* credentials renewable? */ + char* pk_userid; /* "userid" for pkint */ +}; + +static void +ka_applet_set_property (GObject *object, + guint property_id, + const GValue *value, + GParamSpec *pspec) +{ + KaApplet* self = KA_APPLET (object); + + switch (property_id) { + case KA_PROP_PRINCIPAL: + g_free (self->priv->principal); + self->priv->principal = g_value_dup_string (value); + KA_DEBUG ("%s: %s", pspec->name, self->priv->principal); + break; + + case KA_PROP_PK_USERID: + g_free (self->priv->pk_userid); + self->priv->pk_userid = g_value_dup_string (value); + KA_DEBUG ("%s: %s", pspec->name, self->priv->pk_userid); + break; + + case KA_PROP_TRAYICON: + self->priv->show_trayicon = g_value_get_boolean (value); + KA_DEBUG ("%s: %s", pspec->name, self->priv->show_trayicon ? "True" : "False"); + break; + + case KA_PROP_PW_PROMPT_MINS: + self->priv->pw_prompt_secs = g_value_get_uint (value) * 60; + KA_DEBUG ("%s: %d", pspec->name, self->priv->pw_prompt_secs/60); + break; + + default: + /* We don't have any other property... */ + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; + } +} + +static void +ka_applet_get_property (GObject *object, + guint property_id, + GValue *value, + GParamSpec *pspec) +{ + KaApplet *self = KA_APPLET (object); + + switch (property_id) + { + case KA_PROP_PRINCIPAL: + g_value_set_string (value, self->priv->principal); + break; + + case KA_PROP_PK_USERID: + g_value_set_string (value, self->priv->pk_userid); + break; + + case KA_PROP_TRAYICON: + g_value_set_boolean (value, self->priv->show_trayicon); + break; + + case KA_PROP_PW_PROMPT_MINS: + g_value_set_uint (value, self->priv->pw_prompt_secs / 60); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; + } +} + + +static void +ka_applet_dispose(GObject* object) +{ + KaApplet* applet = KA_APPLET(object); + GObjectClass *parent_class = G_OBJECT_CLASS (ka_applet_parent_class); + + if (applet->priv->tray_icon) { + g_object_unref(applet->priv->tray_icon); + applet->priv->tray_icon = NULL; + } + if (applet->priv->pw_xml) { + g_object_unref(applet->priv->pw_xml); + applet->priv->pw_xml = NULL; + } + + if (parent_class->dispose != NULL) + parent_class->dispose (object); +} + + +static void +ka_applet_finalize(GObject *object) +{ + KaApplet* applet = KA_APPLET(object); + GObjectClass *parent_class = G_OBJECT_CLASS (ka_applet_parent_class); + + g_free (applet->priv->principal); + g_free (applet->priv->pk_userid); + /* no need to free applet->priv */ + + if (parent_class->finalize != NULL) + parent_class->finalize (object); +} + +static void +ka_applet_init(KaApplet *applet) +{ + applet->priv = G_TYPE_INSTANCE_GET_PRIVATE(applet, + KA_TYPE_APPLET, + KaAppletPrivate); +} + +static void +ka_applet_class_init(KaAppletClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS(klass); + GParamSpec *pspec; + + object_class->dispose = ka_applet_dispose; + object_class->finalize = ka_applet_finalize; + g_type_class_add_private(klass, sizeof(KaAppletPrivate)); + + object_class->set_property = ka_applet_set_property; + object_class->get_property = ka_applet_get_property; + + pspec = g_param_spec_string ("principal", + "Principal", + "Get/Set Kerberos Principal", + "", + G_PARAM_CONSTRUCT | G_PARAM_READWRITE); + g_object_class_install_property (object_class, + KA_PROP_PRINCIPAL, + pspec); + + pspec = g_param_spec_string ("pk-userid", + "PKinit Identifier", + "Get/Set Pkinit identifier", + "", + G_PARAM_CONSTRUCT | G_PARAM_READWRITE); + g_object_class_install_property (object_class, + KA_PROP_PK_USERID, + pspec); + + pspec = g_param_spec_boolean("show-trayicon", + "Show tray icon", + "Show/Hide the tray icon", + TRUE, + G_PARAM_CONSTRUCT | G_PARAM_READWRITE); + g_object_class_install_property (object_class, + KA_PROP_TRAYICON, + pspec); + + pspec = g_param_spec_uint ("pw-prompt-mins", + "Password Prompting Interval", + "Password Prompting Interval in Minutes", + 0, G_MAXUINT, MINUTES_BEFORE_PROMPTING, + G_PARAM_CONSTRUCT | G_PARAM_READWRITE); + g_object_class_install_property (object_class, + KA_PROP_PW_PROMPT_MINS, + pspec); +} + + +KaApplet *ka_applet_new(void) +{ + return g_object_new (KA_TYPE_APPLET, NULL); +} + /* determine the new tooltip text */ static char* -ka_tooltip_text(Krb5AuthApplet* applet, int remaining) +ka_applet_tooltip_text(KaApplet* applet, int remaining) { int hours, minutes; gchar* tooltip_text; @@ -62,32 +276,64 @@ ka_tooltip_text(Krb5AuthApplet* applet, int remaining) /* determine the current icon */ static const char* -ka_select_icon(Krb5AuthApplet* applet, int remaining) +ka_applet_select_icon(KaApplet* applet, int remaining) { enum ka_icon tray_icon = inv_icon; if (remaining > 0) { - if (remaining < applet->pw_prompt_secs && - !applet->renewable) + if (remaining < applet->priv->pw_prompt_secs && + !applet->priv->renewable) tray_icon = exp_icon; else tray_icon = val_icon; } - return applet->icons[tray_icon]; + return applet->priv->icons[tray_icon]; +} + + +void +ka_send_event_notification (KaApplet *applet __attribute__((__unused__)), + const char *summary __attribute__((__unused__)), + const char *message __attribute__((__unused__)), + const char *icon __attribute__((__unused__))) +{ +#ifdef HAVE_LIBNOTIFY + const char *notify_icon; + + g_return_if_fail (applet != NULL); + g_return_if_fail (summary != NULL); + g_return_if_fail (message != NULL); + + if (!notify_is_initted ()) + notify_init (PACKAGE); + + if (applet->priv->notification != NULL) { + notify_notification_close (applet->priv->notification, NULL); + g_object_unref (applet->priv->notification); + } + + notify_icon = icon ? icon : "gtk-dialog-authentication"; + + applet->priv->notification = \ + notify_notification_new_with_status_icon(summary, message, notify_icon, applet->priv->tray_icon); + + notify_notification_set_urgency (applet->priv->notification, NOTIFY_URGENCY_NORMAL); + notify_notification_show (applet->priv->notification, NULL); +#endif /* HAVE_LIBNOTIFY */ } /* update the tray icon's tooltip and icon */ int -ka_update_status(Krb5AuthApplet* applet, krb5_timestamp expiry) +ka_applet_update_status(KaApplet* applet, krb5_timestamp expiry) { int now = time(0); int remaining = expiry - now; static int last_warn = 0; static gboolean expiry_notified = FALSE; - const char* tray_icon = ka_select_icon (applet, remaining); - char* tooltip_text = ka_tooltip_text (applet, remaining); + const char* tray_icon = ka_applet_select_icon (applet, remaining); + char* tooltip_text = ka_applet_tooltip_text (applet, remaining); if (remaining > 0) { if (expiry_notified) { @@ -95,8 +341,8 @@ ka_update_status(Krb5AuthApplet* applet, krb5_timestamp expiry) _("Network credentials valid"), _("Your Kerberos credentials have been refreshed."), NULL); expiry_notified = FALSE; - } else if (remaining < applet->pw_prompt_secs && (now - last_warn) > NOTIFY_SECONDS && - !applet->renewable) { + } else if (remaining < applet->priv->pw_prompt_secs && (now - last_warn) > NOTIFY_SECONDS && + !applet->priv->renewable) { ka_send_event_notification (applet, _("Network credentials expiring"), tooltip_text, NULL); @@ -112,54 +358,53 @@ ka_update_status(Krb5AuthApplet* applet, krb5_timestamp expiry) } } - gtk_status_icon_set_from_icon_name (applet->tray_icon, tray_icon); - gtk_status_icon_set_tooltip (applet->tray_icon, tooltip_text); + gtk_status_icon_set_from_icon_name (applet->priv->tray_icon, tray_icon); + gtk_status_icon_set_tooltip (applet->priv->tray_icon, tooltip_text); g_free(tooltip_text); return 0; } static void -ka_menu_add_separator_item (GtkWidget* menu) +ka_applet_menu_add_separator_item (GtkWidget* menu) { - GtkWidget* menu_item; + GtkWidget* menu_item; - menu_item = gtk_separator_menu_item_new (); - gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item); - gtk_widget_show (menu_item); + menu_item = gtk_separator_menu_item_new (); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item); + gtk_widget_show (menu_item); } /* Free all resources and quit */ static void -ka_quit_applet (GtkMenuItem* menuitem, gpointer user_data) +ka_applet_cb_quit (GtkMenuItem* menuitem, gpointer user_data) { - Krb5AuthApplet* applet = (Krb5AuthApplet*) user_data; + KaApplet* applet = KA_APPLET(user_data); - g_free (applet->principal); - g_free (applet); + g_object_unref (applet); gtk_main_quit (); } static void -ka_about_dialog (GtkMenuItem* menuitem, gpointer user_data) +ka_applet_cb_about_dialog (GtkMenuItem* menuitem, gpointer user_data) { gchar* authors[] = { "Christopher Aillon ", "Colin Walters ", - "Guido Günther ", + "Guido Günther ", NULL }; gtk_show_about_dialog (NULL, - "authors", authors, - "version", VERSION, - "copyright", "Copyright (C) 2004,2005,2006 Red Hat, Inc.,\n2008 Guido Günther", - NULL); + "authors", authors, + "version", VERSION, + "copyright", "Copyright (C) 2004,2005,2006 Red Hat, Inc.,\n2008,2009 Guido Günther", + NULL); } /* The tray icon's context menu */ -static GtkWidget* -ka_create_context_menu (Krb5AuthApplet* applet) +static gboolean +ka_applet_create_context_menu (KaApplet* applet) { GtkWidget* menu; GtkWidget* menu_item; @@ -170,43 +415,44 @@ ka_create_context_menu (Krb5AuthApplet* applet) /* kdestroy */ menu_item = gtk_image_menu_item_new_with_mnemonic (_("Remove Credentials _Cache")); g_signal_connect (G_OBJECT (menu_item), "activate", G_CALLBACK (ka_destroy_cache), applet); - image = gtk_image_new_from_stock (GTK_STOCK_CANCEL, GTK_ICON_SIZE_MENU); - gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), image); + image = gtk_image_new_from_stock (GTK_STOCK_CANCEL, GTK_ICON_SIZE_MENU); + gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), image); gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item); - ka_menu_add_separator_item (menu); + ka_applet_menu_add_separator_item (menu); /* About item */ menu_item = gtk_image_menu_item_new_with_mnemonic (_("_About")); - g_signal_connect (G_OBJECT (menu_item), "activate", G_CALLBACK (ka_about_dialog), applet); + g_signal_connect (G_OBJECT (menu_item), "activate", G_CALLBACK (ka_applet_cb_about_dialog), applet); image = gtk_image_new_from_stock (GTK_STOCK_ABOUT, GTK_ICON_SIZE_MENU); gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), image); gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item); - ka_menu_add_separator_item (menu); + ka_applet_menu_add_separator_item (menu); /* Quit */ menu_item = gtk_image_menu_item_new_with_mnemonic (_("_Quit")); - g_signal_connect (G_OBJECT (menu_item), "activate", G_CALLBACK (ka_quit_applet), applet); - image = gtk_image_new_from_stock (GTK_STOCK_QUIT, GTK_ICON_SIZE_MENU); - gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), image); + g_signal_connect (G_OBJECT (menu_item), "activate", G_CALLBACK (ka_applet_cb_quit), applet); + image = gtk_image_new_from_stock (GTK_STOCK_QUIT, GTK_ICON_SIZE_MENU); + gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), image); gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item); gtk_widget_show_all (menu); + applet->priv->context_menu = menu; - return menu; + return TRUE; } static void ka_tray_icon_on_menu (GtkStatusIcon* status_icon, guint button, - guint activate_time, gpointer user_data) + guint activate_time, gpointer user_data) { - Krb5AuthApplet* applet = (Krb5AuthApplet*) user_data; + KaApplet *applet = KA_APPLET(user_data); - KA_DEBUG("Trayicon right clicked: %d", applet->pw_prompt_secs); - gtk_menu_popup (GTK_MENU (applet->context_menu), NULL, NULL, - gtk_status_icon_position_menu, applet->tray_icon, + KA_DEBUG("Trayicon right clicked: %d", applet->priv->pw_prompt_secs); + gtk_menu_popup (GTK_MENU (applet->priv->context_menu), NULL, NULL, + gtk_status_icon_position_menu, applet->priv->tray_icon, button, activate_time); } @@ -214,70 +460,143 @@ ka_tray_icon_on_menu (GtkStatusIcon* status_icon, guint button, static gboolean ka_tray_icon_on_click (GtkStatusIcon* status_icon, gpointer data) { - Krb5AuthApplet* applet = (Krb5AuthApplet*) data; - g_return_val_if_fail (applet != NULL, FALSE); + KaApplet *applet = KA_APPLET(data); - KA_DEBUG("Trayicon clicked: %d", applet->pw_prompt_secs); + KA_DEBUG("Trayicon clicked: %d", applet->priv->pw_prompt_secs); ka_grab_credentials (applet); return TRUE; } -gboolean -ka_show_tray_icon (Krb5AuthApplet* applet) +static gboolean +ka_applet_cb_show_trayicon (KaApplet* applet, GParamSpec* property, gpointer data) { g_return_val_if_fail (applet != NULL, FALSE); - g_return_val_if_fail (applet->tray_icon != NULL, FALSE); + g_return_val_if_fail (applet->priv->tray_icon != NULL, FALSE); - gtk_status_icon_set_visible (applet->tray_icon, applet->show_trayicon); + gtk_status_icon_set_visible (applet->priv->tray_icon, applet->priv->show_trayicon); return TRUE; } -static GtkStatusIcon* -ka_create_tray_icon (Krb5AuthApplet* applet) +static gboolean +ka_applet_create_tray_icon (KaApplet* applet) { GtkStatusIcon* tray_icon; tray_icon = gtk_status_icon_new (); + g_signal_connect (G_OBJECT(tray_icon), "activate", - G_CALLBACK(ka_tray_icon_on_click), applet); + G_CALLBACK(ka_tray_icon_on_click), applet); g_signal_connect (G_OBJECT(tray_icon), "popup-menu", G_CALLBACK(ka_tray_icon_on_menu), applet); - gtk_status_icon_set_from_icon_name (tray_icon, applet->icons[exp_icon]); - gtk_status_icon_set_tooltip (tray_icon, PACKAGE); - return tray_icon; + gtk_status_icon_set_from_icon_name (tray_icon, applet->priv->icons[exp_icon]); + gtk_status_icon_set_tooltip (tray_icon, PACKAGE); + applet->priv->tray_icon = tray_icon; + return TRUE; } -int -ka_setup_icons (Krb5AuthApplet* applet) +static int +ka_applet_setup_icons (KaApplet* applet) { /* Add application specific icons to search path */ gtk_icon_theme_append_search_path (gtk_icon_theme_get_default (), KA_DATA_DIR G_DIR_SEPARATOR_S "icons"); - applet->icons[val_icon] = "krb-valid-ticket"; - applet->icons[exp_icon] = "krb-expiring-ticket"; - applet->icons[inv_icon] = "krb-no-valid-ticket"; + applet->priv->icons[val_icon] = "krb-valid-ticket"; + applet->priv->icons[exp_icon] = "krb-expiring-ticket"; + applet->priv->icons[inv_icon] = "krb-no-valid-ticket"; + return TRUE; +} + + +static gboolean +ka_applet_glade_init(KaApplet *applet) +{ + KaAppletPrivate *priv = applet->priv; + + priv->pw_xml = glade_xml_new (KA_DATA_DIR G_DIR_SEPARATOR_S + PACKAGE ".glade", NULL, NULL); + priv->pw_label = glade_xml_get_widget (priv->pw_xml, "krb5_wrong_label"); + priv->pw_dialog = glade_xml_get_widget (priv->pw_xml, "krb5_dialog"); + return TRUE; } +GladeXML* +ka_applet_get_pwdialog_xml(const KaApplet* applet) +{ + return applet->priv->pw_xml; +} + +guint +ka_applet_get_pw_prompt_secs(const KaApplet* applet) +{ + return applet->priv->pw_prompt_secs; +} + +gboolean +ka_applet_get_show_trayicon(const KaApplet* applet) +{ + return applet->priv->show_trayicon; +} + +void +ka_applet_set_tgt_renewable(KaApplet* applet, gboolean renewable) +{ + applet->priv->renewable = renewable; +} + +gboolean +ka_applet_get_tgt_renewable(const KaApplet* applet) +{ + return applet->priv->renewable; +} + +gint ka_applet_run_pw_dialog(const KaApplet* applet) +{ + return gtk_dialog_run (GTK_DIALOG (applet->priv->pw_dialog)); +} + +void +ka_applet_hide_pw_dialog(KaApplet* applet, gboolean force) +{ + KA_DEBUG("PW Dialog persist: %d", applet->priv->pw_dialog_persist); + if (!applet->priv->pw_dialog_persist || force) + gtk_widget_hide(applet->priv->pw_dialog); +} + +void +ka_applet_set_pw_dialog_persist(KaApplet* applet, gboolean persist) +{ + applet->priv->pw_dialog_persist = persist; +} + +GtkWidget* +ka_applet_get_pw_label(const KaApplet* applet) +{ + return applet->priv->pw_label; +} + /* create the tray icon applet */ -Krb5AuthApplet* -ka_create_applet() +KaApplet* +ka_applet_create() { - Krb5AuthApplet* applet = g_malloc0 (sizeof(Krb5AuthApplet)); + KaApplet* applet = ka_applet_new(); + + ka_applet_glade_init(applet); - if (!(ka_setup_icons (applet))) + if (!(ka_applet_setup_icons (applet))) g_error ("Failure to setup icons"); - if (!(applet->tray_icon = ka_create_tray_icon (applet))) + if (!ka_applet_create_tray_icon (applet)) g_error ("Failure to create tray icon"); - if (!(applet->context_menu = ka_create_context_menu (applet))) + if (!ka_applet_create_context_menu (applet)) g_error ("Failure to create context menu"); - gtk_window_set_default_icon_name (applet->icons[val_icon]); - ka_show_tray_icon (applet); + gtk_window_set_default_icon_name (applet->priv->icons[val_icon]); + g_signal_connect (applet, "notify::show-trayicon", + G_CALLBACK (ka_applet_cb_show_trayicon), NULL); return applet; } diff --git a/src/krb5-auth-applet.h b/src/krb5-auth-applet.h index e137794..a33be55 100644 --- a/src/krb5-auth-applet.h +++ b/src/krb5-auth-applet.h @@ -22,6 +22,7 @@ #define KRB5_AUTH_APPLET_H #include +#include #include #include #include @@ -32,32 +33,46 @@ #include "config.h" -typedef struct { - GtkStatusIcon* tray_icon; /* the tray icon */ - GtkWidget* context_menu; /* the tray icon's context menu */ - const char* icons[3]; /* for invalid, expiring and valid tickts */ - gboolean show_trayicon; /* show the trayicon */ +G_BEGIN_DECLS - /* The password dialog */ - GtkWidget* pw_dialog; /* the password dialog itself */ - GladeXML* pw_xml; /* the dialog's glade xml */ - GtkWidget* pw_wrong_label; /* the wrong password/timeout label */ - int pw_prompt_secs; /* when to start prompting for a password */ - gboolean pw_dialog_persist; /* don't hide the dialog when creds are still valid */ +#define KA_TYPE_APPLET (ka_applet_get_type ()) +#define KA_APPLET(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST ((obj), KA_TYPE_APPLET, KaApplet)) +#define KA_APPLET_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST ((klass), KA_TYPE_APPLET, KaAppletClass)) +#define KA_IS_APPLET(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE ((obj), KA_TYPE_APPLET)) +#define KA_IS_APPLET_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE ((klass), KA_TYPE_APPLET)) +#define KA_APPLET_GET_CLASS(obj) \ + (G_TYPE_INSTANCE_GET_CLASS ((obj), KA_TYPE_APPLET, KaAppletClass)) -#ifdef HAVE_LIBNOTIFY - NotifyNotification* notification;/* notification messages */ -#endif /* HAVE_LIBNOTIFY */ - char* principal; /* the principal to request */ - gboolean renewable; /* credentials renewable? */ - char* pk_userid; /* "userid" for pkint */ -} Krb5AuthApplet; +typedef struct _KaApplet KaApplet; +typedef struct _KaAppletClass KaAppletClass; +typedef struct _KaAppletPrivate KaAppletPrivate; + +GType ka_applet_get_type (void); +KaApplet* ka_applet_new(void) G_GNUC_MALLOC; + +/* public functions */ +gboolean ka_applet_get_show_trayicon(const KaApplet* applet); +void ka_applet_set_tgt_renewable(KaApplet* applet, gboolean renewable); +gboolean ka_applet_get_tgt_renewable(const KaApplet* applet); +guint ka_applet_get_pw_prompt_secs(const KaApplet* applet); + +/* password dialog */ +gint ka_applet_run_pw_dialog(const KaApplet* applet); +GladeXML* ka_applet_get_pwdialog_xml(const KaApplet* applet); +void ka_applet_hide_pw_dialog(KaApplet* applet, gboolean force); +GtkWidget* ka_applet_get_pw_label(const KaApplet* applet); +void ka_applet_set_pw_dialog_persist(KaApplet* applet, gboolean persist); + +G_END_DECLS -Krb5AuthApplet* ka_create_applet(); +/* create the applet */ +KaApplet* ka_applet_create(); /* update tooltip and icon */ -int ka_update_status(Krb5AuthApplet* applet, krb5_timestamp expiry); -/* show or hide the tray icon */ -gboolean ka_show_tray_icon(Krb5AuthApplet* applet); +int ka_applet_update_status(KaApplet* applet, krb5_timestamp expiry); #ifdef ENABLE_DEBUG #define KA_DEBUG(fmt,...) \ diff --git a/src/krb5-auth-dbus.c b/src/krb5-auth-dbus.c index f658c8d..66c393c 100644 --- a/src/krb5-auth-dbus.c +++ b/src/krb5-auth-dbus.c @@ -1,6 +1,6 @@ /* Krb5 Auth Applet -- Acquire and release kerberos tickets * - * (C) 2008 Guido Guenther + * (C) 2008,2009 Guido Guenther * * 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 diff --git a/src/krb5-auth-dialog.c b/src/krb5-auth-dialog.c index 13fbcee..55a58d3 100644 --- a/src/krb5-auth-dialog.c +++ b/src/krb5-auth-dialog.c @@ -2,6 +2,8 @@ * Copyright (C) 2004,2005,2006 Red Hat, Inc. * Authored by Christopher Aillon * + * Copyright (C) 2008,2009 Guido Guenther + * * 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 2, or (at your option) @@ -55,8 +57,8 @@ static gboolean canceled; static gboolean invalid_auth; static gboolean always_run; -static int grab_credentials (Krb5AuthApplet* applet); -static int ka_renew_credentials (Krb5AuthApplet* applet); +static int grab_credentials (KaApplet* applet); +static int ka_renew_credentials (KaApplet* applet); static gboolean ka_get_tgt_from_ccache (krb5_context context, krb5_creds *creds); /* YAY for different Kerberos implementations */ @@ -160,13 +162,13 @@ ka_krb5_cc_clear_mcred(krb5_creds* mcred) /* ***************************************************************** */ static gboolean -credentials_expiring_real (Krb5AuthApplet* applet) +credentials_expiring_real (KaApplet* applet) { krb5_creds my_creds; krb5_timestamp now; gboolean retval = FALSE; - applet->renewable = FALSE; + ka_applet_set_tgt_renewable(applet, FALSE); if (!ka_get_tgt_from_ccache (kcontext, &my_creds)) { creds_expiry = 0; retval = TRUE; @@ -179,18 +181,18 @@ credentials_expiring_real (Krb5AuthApplet* applet) } creds_expiry = my_creds.times.endtime; if ((krb5_timeofday(kcontext, &now) == 0) && - (now + applet->pw_prompt_secs > my_creds.times.endtime)) + (now + ka_applet_get_pw_prompt_secs(applet) > my_creds.times.endtime)) retval = TRUE; /* If our creds are expiring, determine whether they are renewable */ if (retval && get_cred_renewable(&my_creds) && my_creds.times.renew_till > now) { - applet->renewable = TRUE; + ka_applet_set_tgt_renewable(applet, TRUE); } krb5_free_cred_contents (kcontext, &my_creds); out: - ka_update_status(applet, creds_expiry); + ka_applet_update_status(applet, creds_expiry); return retval; } @@ -246,25 +248,21 @@ krb5_auth_dialog_wrong_label_update_expiry (GtkWidget* label) static gboolean krb5_auth_dialog_do_updates (gpointer data) { - Krb5AuthApplet* applet = (Krb5AuthApplet*)data; + KaApplet* applet = KA_APPLET(data); g_return_val_if_fail (applet != NULL, FALSE); - /* Update creds_expiry and close the applet if we got the creds by other means (e.g. kinit) */ - if (!credentials_expiring_real(applet)) { - KA_DEBUG("PW Dialog persist: %d", applet->pw_dialog_persist); - if (!applet->pw_dialog_persist) - gtk_widget_hide(applet->pw_dialog); - } + if (!credentials_expiring_real(applet)) + ka_applet_hide_pw_dialog(applet, FALSE); /* Update the expiry information in the dialog */ - krb5_auth_dialog_wrong_label_update_expiry (applet->pw_wrong_label); + krb5_auth_dialog_wrong_label_update_expiry (ka_applet_get_pw_label(applet)); return TRUE; } static void -krb5_auth_dialog_setup (Krb5AuthApplet *applet, +krb5_auth_dialog_setup (KaApplet *applet, const gchar *krb5prompt, gboolean hide_password) { @@ -275,7 +273,6 @@ krb5_auth_dialog_setup (Krb5AuthApplet *applet, gchar *prompt; int pw4len; - if (krb5prompt == NULL) { prompt = g_strdup (_("Please enter your Kerberos password.")); } else { @@ -295,17 +292,19 @@ krb5_auth_dialog_setup (Krb5AuthApplet *applet, } /* Clear the password entry field */ - entry = glade_xml_get_widget (applet->pw_xml, "krb5_entry"); + entry = glade_xml_get_widget (ka_applet_get_pwdialog_xml(applet), + "krb5_entry"); gtk_secure_entry_set_text (GTK_SECURE_ENTRY (entry), ""); /* Use the prompt label that krb5 provides us */ - label = glade_xml_get_widget (applet->pw_xml, "krb5_message_label"); + label = glade_xml_get_widget (ka_applet_get_pwdialog_xml(applet), + "krb5_message_label"); gtk_label_set_text (GTK_LABEL (label), prompt); /* Add our extra message hints, if any */ wrong_text = NULL; - if (applet->pw_wrong_label) { + if (ka_applet_get_pw_label(applet)) { if (invalid_auth) { wrong_text = g_strdup (_("The password you entered is invalid")); } else { @@ -322,11 +321,11 @@ krb5_auth_dialog_setup (Krb5AuthApplet *applet, if (wrong_text) { wrong_markup = g_strdup_printf ("%s", wrong_text); - gtk_label_set_markup (GTK_LABEL (applet->pw_wrong_label), wrong_markup); + gtk_label_set_markup (GTK_LABEL (ka_applet_get_pw_label(applet)), wrong_markup); g_free(wrong_text); g_free(wrong_markup); } else { - gtk_label_set_text (GTK_LABEL (applet->pw_wrong_label), ""); + gtk_label_set_text (GTK_LABEL (ka_applet_get_pw_label(applet)), ""); } g_free (prompt); } @@ -340,7 +339,7 @@ auth_dialog_prompter (krb5_context ctx, int num_prompts, krb5_prompt prompts[]) { - Krb5AuthApplet* applet = (Krb5AuthApplet*)data; + KaApplet* applet = KA_APPLET(data); krb5_error_code errcode; int i; @@ -359,11 +358,11 @@ auth_dialog_prompter (krb5_context ctx, errcode = KRB5_LIBOS_CANTREADPWD; krb5_auth_dialog_setup (applet, (gchar *) prompts[i].prompt, prompts[i].hidden); - entry = glade_xml_get_widget (applet->pw_xml, "krb5_entry"); + entry = glade_xml_get_widget (ka_applet_get_pwdialog_xml(applet), "krb5_entry"); gtk_widget_grab_focus (entry); source_id = g_timeout_add_seconds (5, (GSourceFunc)krb5_auth_dialog_do_updates, applet); - response = gtk_dialog_run (GTK_DIALOG (applet->pw_dialog)); + response = ka_applet_run_pw_dialog (applet); switch (response) { case GTK_RESPONSE_OK: @@ -394,8 +393,8 @@ auth_dialog_prompter (krb5_context ctx, errcode = 0; } cleanup: + ka_applet_hide_pw_dialog (applet, TRUE); /* Reset this, so we know the next time we get a TRUE value, it is accurate. */ - gtk_widget_hide (applet->pw_dialog); invalid_auth = FALSE; return errcode; @@ -436,9 +435,9 @@ credentials_expiring (gpointer *data) { int retval; gboolean give_up; - Krb5AuthApplet* applet = (Krb5AuthApplet*) data; + KaApplet* applet = KA_APPLET(data); - KA_DEBUG("Checking expiry <%ds", applet->pw_prompt_secs); + KA_DEBUG("Checking expiry <%ds", ka_applet_get_pw_prompt_secs(applet)); if (credentials_expiring_real (applet) && is_online) { KA_DEBUG("Expiry @ %ld", creds_expiry); @@ -448,7 +447,7 @@ credentials_expiring (gpointer *data) } /* no popup when using a trayicon */ - if (applet->show_trayicon) + if (ka_applet_get_show_trayicon(applet)) goto out; give_up = canceled && (creds_expiry == canceled_creds_expiry); @@ -465,13 +464,13 @@ credentials_expiring (gpointer *data) } } out: - ka_update_status(applet, creds_expiry); + ka_applet_update_status(applet, creds_expiry); return TRUE; } static void -set_options_from_creds(const Krb5AuthApplet* applet, +set_options_from_creds(const KaApplet* applet, krb5_context context, krb5_creds *in, krb5_get_init_creds_opt *out) @@ -496,7 +495,7 @@ set_options_from_creds(const Krb5AuthApplet* applet, renew_lifetime); } if (in->times.endtime > - in->times.starttime + applet->pw_prompt_secs) { + in->times.starttime + ka_applet_get_pw_prompt_secs(applet)) { krb5_get_init_creds_opt_set_tkt_life(out, in->times.endtime - in->times.starttime); @@ -507,16 +506,13 @@ set_options_from_creds(const Krb5AuthApplet* applet, static krb5_error_code -ka_auth_pkinit(Krb5AuthApplet* applet, krb5_creds* creds) +ka_auth_pkinit(KaApplet* applet, krb5_creds* creds, const char* pk_userid) { #ifdef ENABLE_PKINIT krb5_get_init_creds_opt *opts = NULL; krb5_error_code retval; - KA_DEBUG("pkinit with '%s'", applet->pk_userid); - - if (!applet->pk_userid) - return 0; + KA_DEBUG("pkinit with '%s'", pk_userid); retval = krb5_get_init_creds_opt_alloc (kcontext, &opts); if (retval) @@ -525,7 +521,7 @@ ka_auth_pkinit(Krb5AuthApplet* applet, krb5_creds* creds) retval = krb5_get_init_creds_opt_set_pkinit(kcontext, opts, kprincipal, - applet->pk_userid, + pk_userid, NULL, /* x509 anchors */ NULL, NULL, @@ -549,35 +545,54 @@ out: } +krb5_error_code +ka_parse_name(KaApplet* applet, krb5_context kcontext, krb5_principal* kprinc) +{ + krb5_error_code ret; + gchar *principal = NULL; + + g_object_get(applet, "principal", &principal, + NULL); + + ret = krb5_parse_name(kcontext, principal, + kprinc); + + g_free(principal); + return ret; +} + + /* grab credentials interactively */ static int -grab_credentials (Krb5AuthApplet* applet) +grab_credentials (KaApplet* applet) { krb5_error_code retval; krb5_creds my_creds; krb5_ccache ccache; krb5_get_init_creds_opt *opt = NULL; + gchar *pk_userid = NULL; + + g_object_get(applet, "pk-userid", &pk_userid, + NULL); memset(&my_creds, 0, sizeof(my_creds)); if (kprincipal == NULL) { - retval = krb5_parse_name(kcontext, applet->principal, - &kprincipal); - if (retval) { - return retval; - } + retval = ka_parse_name(applet, kcontext, &kprincipal); + if (retval) + goto out2; } retval = krb5_cc_default (kcontext, &ccache); if (retval) - return retval; + goto out2; #if ENABLE_PKINIT - if (applet->pk_userid && strlen(applet->pk_userid)) { /* try pkinit */ + if (pk_userid && strlen(pk_userid)) { /* try pkinit */ #else if (0) { #endif - retval = ka_auth_pkinit(applet, &my_creds); + retval = ka_auth_pkinit(applet, &my_creds, pk_userid); } else { retval = krb5_get_init_creds_opt_alloc (kcontext, &opt); if (retval) @@ -620,13 +635,15 @@ out: krb5_get_init_creds_opt_free(kcontext, opt); krb5_free_cred_contents (kcontext, &my_creds); krb5_cc_close (kcontext, ccache); +out2: + g_free(pk_userid); return retval; } /* try to renew the credentials noninteractively */ static int -ka_renew_credentials (Krb5AuthApplet* applet) +ka_renew_credentials (KaApplet* applet) { krb5_error_code retval; krb5_creds my_creds; @@ -634,8 +651,7 @@ ka_renew_credentials (Krb5AuthApplet* applet) krb5_get_init_creds_opt opts; if (kprincipal == NULL) { - retval = krb5_parse_name(kcontext, applet->principal, - &kprincipal); + retval = ka_parse_name(applet, kcontext, &kprincipal); if (retval) return retval; } @@ -653,7 +669,7 @@ ka_renew_credentials (Krb5AuthApplet* applet) krb5_get_init_creds_opt_init (&opts); set_options_from_creds (applet, kcontext, &my_creds, &opts); - if (applet->renewable) { + if (ka_applet_get_tgt_renewable(applet)) { retval = get_renewed_creds (kcontext, &my_creds, kprincipal, ccache, NULL); if (retval) goto out; @@ -741,7 +757,7 @@ using_krb5() void ka_destroy_cache (GtkMenuItem *menuitem, gpointer data) { - Krb5AuthApplet* applet = (Krb5AuthApplet*) data; + KaApplet *applet = KA_APPLET(data); krb5_ccache ccache; const char* cache; krb5_error_code ret; @@ -770,12 +786,12 @@ ka_error_dialog(int err) /* this is done on leftclick, update the tooltip immediately */ void -ka_grab_credentials (Krb5AuthApplet* applet) +ka_grab_credentials (KaApplet* applet) { int retval; gboolean retry; - applet->pw_dialog_persist = TRUE; + ka_applet_set_pw_dialog_persist(applet, TRUE); do { retry = TRUE; retval = grab_credentials (applet); @@ -795,7 +811,7 @@ ka_grab_credentials (Krb5AuthApplet* applet) } } while(retry); - applet->pw_dialog_persist = FALSE; + ka_applet_set_pw_dialog_persist(applet, FALSE); credentials_expiring_real(applet); } @@ -835,7 +851,7 @@ ka_secmem_init () int main (int argc, char *argv[]) { - Krb5AuthApplet *applet; + KaApplet *applet; GOptionContext *context; GError *error = NULL; @@ -878,21 +894,15 @@ main (int argc, char *argv[]) always_run = TRUE; } if (using_krb5 () || always_run) { - applet = ka_create_applet (); + g_set_application_name (_("Network Authentication")); + glade_set_custom_handler (&ka_create_gtk_secure_entry, NULL); + + applet = ka_applet_create (); if (!applet) return 1; if (!ka_gconf_init (applet, argc, argv)) return 1; - /* setup the pw dialog */ - glade_set_custom_handler (&ka_create_gtk_secure_entry, NULL); - applet->pw_xml = glade_xml_new (KA_DATA_DIR G_DIR_SEPARATOR_S - "krb5-auth-dialog.glade", NULL, NULL); - applet->pw_wrong_label = glade_xml_get_widget (applet->pw_xml, "krb5_wrong_label"); - applet->pw_dialog = glade_xml_get_widget (applet->pw_xml, "krb5_dialog"); - - g_set_application_name (_("Network Authentication")); - #ifdef ENABLE_NETWORK_MANAGER nm_context = libnm_glib_init (); if (!nm_context) { diff --git a/src/krb5-auth-dialog.h b/src/krb5-auth-dialog.h index 77a9891..e1bd303 100644 --- a/src/krb5-auth-dialog.h +++ b/src/krb5-auth-dialog.h @@ -24,7 +24,7 @@ #include "krb5-auth-applet.h" void ka_destroy_cache (GtkMenuItem *menuitem, gpointer user_data); -void ka_grab_credentials(Krb5AuthApplet* applet); +void ka_grab_credentials(KaApplet* applet); #endif diff --git a/src/krb5-auth-gconf.c b/src/krb5-auth-gconf.c index 7353471..fd573c1 100644 --- a/src/krb5-auth-gconf.c +++ b/src/krb5-auth-gconf.c @@ -1,6 +1,6 @@ /* Krb5 Auth Applet -- Acquire and release kerberos tickets * - * (C) 2008 Guido Guenther + * (C) 2008,2009 Guido Guenther * * 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 @@ -111,52 +111,55 @@ ka_gconf_get_bool (GConfClient* client, static gboolean -ka_gconf_set_principal (GConfClient* client, Krb5AuthApplet* applet) +ka_gconf_set_principal (GConfClient* client, KaApplet* applet) { - g_free (applet->principal); - applet->principal = NULL; - if(!ka_gconf_get_string (client, KA_GCONF_KEY_PRINCIPAL, &applet->principal)) { - applet->principal = g_strdup (g_get_user_name()); + gchar* principal = NULL; + + if(!ka_gconf_get_string (client, KA_GCONF_KEY_PRINCIPAL, &principal)) { + principal = g_strdup (g_get_user_name()); } - KA_DEBUG("Setting principal to '%s'", applet->principal); - // FIXME: need to send set-principal signal + g_object_set(applet, "principal", principal, NULL); + g_free (principal); return TRUE; } static gboolean -ka_gconf_set_pk_userid (GConfClient* client, Krb5AuthApplet* applet) +ka_gconf_set_pk_userid (GConfClient* client, KaApplet* applet) { - g_free (applet->pk_userid); - if(!ka_gconf_get_string (client, KA_GCONF_KEY_PK_USERID, &applet->pk_userid)) { - applet->pk_userid = NULL; + gchar* pk_userid = NULL; + + if(!ka_gconf_get_string (client, KA_GCONF_KEY_PK_USERID, &pk_userid)) { + pk_userid = g_strdup (""); } - KA_DEBUG("Setting pk_userid to '%s'", applet->pk_userid ? applet->pk_userid : ""); + g_object_set(applet, "pk_userid", pk_userid, NULL); + g_free (pk_userid); return TRUE; } static gboolean -ka_gconf_set_prompt_mins (GConfClient* client, Krb5AuthApplet* applet) +ka_gconf_set_prompt_mins (GConfClient* client, KaApplet* applet) { - if(!ka_gconf_get_int (client, KA_GCONF_KEY_PROMPT_MINS, &applet->pw_prompt_secs)) { - applet->pw_prompt_secs = MINUTES_BEFORE_PROMPTING; + gint prompt_mins = 0; + + if(!ka_gconf_get_int (client, KA_GCONF_KEY_PROMPT_MINS, &prompt_mins)) { + prompt_mins = MINUTES_BEFORE_PROMPTING; } - applet->pw_prompt_secs *= 60; - KA_DEBUG("Setting prompting timer to %d seconds", applet->pw_prompt_secs); + g_object_set(applet, "pw-prompt-mins", prompt_mins, NULL); return TRUE; } static gboolean -ka_gconf_set_show_trayicon (GConfClient* client, Krb5AuthApplet* applet) +ka_gconf_set_show_trayicon (GConfClient* client, KaApplet* applet) { - if(!ka_gconf_get_bool(client, KA_GCONF_KEY_SHOW_TRAYICON, &applet->show_trayicon)) { - applet->show_trayicon = TRUE; + gboolean show_trayicon = FALSE; + + if(!ka_gconf_get_bool(client, KA_GCONF_KEY_SHOW_TRAYICON, &show_trayicon)) { + show_trayicon = TRUE; } - KA_DEBUG("Show trayicon: %s", (applet->show_trayicon ? "yes" : "no" )); - // FIXME: send show trayicon signal - ka_show_tray_icon(applet); + g_object_set(applet, "show-trayicon", show_trayicon, NULL); return TRUE; } @@ -169,7 +172,7 @@ ka_gconf_key_changed_callback (GConfClient* client, { const char* key; - Krb5AuthApplet* applet = (Krb5AuthApplet*)user_data; + KaApplet* applet = KA_APPLET(user_data); key = gconf_entry_get_key (entry); if (!key) return; @@ -190,7 +193,7 @@ ka_gconf_key_changed_callback (GConfClient* client, gboolean -ka_gconf_init (Krb5AuthApplet* applet, int argc, char* argv[]) +ka_gconf_init (KaApplet* applet, int argc, char* argv[]) { GError *error = NULL; GConfClient* client; diff --git a/src/krb5-auth-gconf.h b/src/krb5-auth-gconf.h index ec85704..3d2baae 100644 --- a/src/krb5-auth-gconf.h +++ b/src/krb5-auth-gconf.h @@ -23,6 +23,6 @@ #include "krb5-auth-applet.h" -gboolean ka_gconf_init (Krb5AuthApplet* applet, int argc, char* argv[]); +gboolean ka_gconf_init (KaApplet* applet, int argc, char* argv[]); #endif diff --git a/src/krb5-auth-notify.c b/src/krb5-auth-notify.c deleted file mode 100644 index 019662e..0000000 --- a/src/krb5-auth-notify.c +++ /dev/null @@ -1,66 +0,0 @@ -/* Krb5 Auth Applet -- Acquire and release kerberos tickets - * - * (C) 2008 Guido Guenther - * - * 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 2 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, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -#include "config.h" -#include "krb5-auth-applet.h" -#include "krb5-auth-notify.h" - -#ifdef HAVE_LIBNOTIFY -#include - -void -ka_send_event_notification (Krb5AuthApplet *applet, - const char *summary, - const char *message, - const char *icon) -{ - const char *notify_icon; - - g_return_if_fail (applet != NULL); - g_return_if_fail (summary != NULL); - g_return_if_fail (message != NULL); - - if (!notify_is_initted ()) - notify_init (PACKAGE); - - if (applet->notification != NULL) { - notify_notification_close (applet->notification, NULL); - g_object_unref (applet->notification); - } - - notify_icon = icon ? icon : "gtk-dialog-authentication"; - - applet->notification = \ - notify_notification_new_with_status_icon(summary, message, notify_icon, applet->tray_icon); - - notify_notification_set_urgency (applet->notification, NOTIFY_URGENCY_NORMAL); - notify_notification_show (applet->notification, NULL); -} - -#else /* HAVE_LIBNOTIFY */ - -void -ka_send_event_notification (Krb5AuthApplet *applet __attribute__((__unused__)), - const char *summary __attribute__((__unused__)), - const char *message __attribute__((__unused__)), - const char *icon __attribute__((__unused__))) -{ -} - -#endif /* HAVE_LIBNOTIFY */ diff --git a/src/krb5-auth-notify.h b/src/krb5-auth-notify.h deleted file mode 100644 index 9c0ce55..0000000 --- a/src/krb5-auth-notify.h +++ /dev/null @@ -1,28 +0,0 @@ -/* Krb5 Auth Applet -- Acquire and release kerberos tickets - * - * (C) 2008 Guido Guenther - * - * 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 2 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, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - */ - -#ifndef KRB5_AUTH_NOTIFY_H -#define KRB5_AUTH_NOTIFY_H - -void ka_send_event_notification (Krb5AuthApplet *applet, - const char *summary, - const char *message, - const char *icon); -#endif -- cgit v1.2.3