Codebase list krb5-auth-dialog / 785abe2
kerberos: Use GNetworkMonitor This avoids a NM dependency. Guido Günther 3 years ago
6 changed file(s) with 16 addition(s) and 115 deletion(s). Raw diff Collapse all Expand all
1010 libglib2.0-dev
1111 libgtk-3-dev
1212 libkrb5-dev
13 libnm-dev
1413 libpam0g-dev
1514 pkg-config
1615 yelp-tools
2727 YELP_HELP_INIT
2828
2929 GTK_REQUIRED=3.14
30 GLIB_REQUIRED=2.28
30 GLIB_REQUIRED=2.32
3131
3232 PKG_CHECK_MODULES(GTK, [gtk+-3.0 >= $GTK_REQUIRED, glib-2.0 >= $GLIB_REQUIRED])
33 PKG_CHECK_MODULES(GIO, [gio-2.0, gio-unix-2.0])
33 PKG_CHECK_MODULES(GIO, [gio-2.0 >= $GLIB_REQUIRED, gio-unix-2.0])
3434 PKG_CHECK_MODULES(GMODULE, gmodule-2.0)
3535
3636 dnl check for deprecated symbols:
135135 LIBS="$savedLIBS"
136136
137137
138 dnl NetworkManager
139 AC_MSG_CHECKING([whether to enable NetworkManager support])
140 AC_ARG_ENABLE([network-manager],
141 AS_HELP_STRING([--enable-network-manager],[Whether to enable automatic network status with NetworkManager]),
142 [],[enable_network_manager=autodetect])
143 AC_MSG_RESULT([$enable_network_manager])
144
145 if test "x$enable_network_manager" != "xno"; then
146 PKG_CHECK_MODULES([NETWORK_MANAGER],[libnm],
147 AC_DEFINE([HAVE_LIBNM],[1],[Define if libnm is available])
148 [enable_network_manager=yes],
149 [enable_network_manager=no])
150 AC_SUBST([NETWORK_MANAGER_CFLAGS])
151 AC_SUBST([NETWORK_MANAGER_LIBS])
152 fi
153
154 if test "x$enable_network_manager" = "xyes"; then
155 AC_DEFINE([ENABLE_NETWORK_MANAGER],[1],[Define for NetworkManager support])
156 fi
157 AM_CONDITIONAL([ENABLE_NETWORK_MANAGER],[test "x$enable_network_manager" = "xyes"])
158
159
160138 dnl secmem
161139 dnl Checks for library functions.
162140 AC_CHECK_FUNCS(seteuid stpcpy mmap)
246224 AC_MSG_NOTICE([ Kerberos: $KRB5_CFLAGS $KRB5_LIBS])
247225 AC_MSG_NOTICE([ GTK: $GTK_CFLAGS $GTK_LIBS])
248226 AC_MSG_NOTICE([ gio-unix: $GIO_UNIX_CFLAGS $GIO_UNIX_LIBS $GIO_CFLAGS $GIO_LIBS])
249 if test "$enable_network_manager" = "yes" ; then
250 AC_MSG_NOTICE([ Network Manager: $NETWORK_MANAGER_CFLAGS $NETWORK_MANAGER_LIBS])
251 else
252 AC_MSG_NOTICE([ Network Manager: no])
253 fi
254227 AC_MSG_NOTICE([])
255228 AC_MSG_NOTICE([Miscellaneous])
256229 AC_MSG_NOTICE([])
44 AM_CFLAGS=\
55 @GTK_CFLAGS@ \
66 @KRB5_CFLAGS@ \
7 @NETWORK_MANAGER_CFLAGS@ \
87 @CFLAGS@
98 AM_LDFLAGS=\
10 @NETWORK_MANAGER_LIBS@ \
119 @KRB5_LIBS@ \
1210 @GTK_LIBS@
1311
7272 $(GMODULE_CFLAGS) \
7373 $(GTK_CFLAGS) \
7474 $(KRB5_CFLAGS) \
75 $(NETWORK_MANAGER_CFLAGS) \
7675 $(WARN_CFLAGS) \
7776 $(AM_CFLAGS) \
7877 $(NULL)
7978
8079 krb5_auth_dialog_LDADD = \
8180 $(top_builddir)/secmem/libsecmem.a \
82 $(NETWORK_MANAGER_LIBS) \
8381 $(LIBCAP) \
8482 $(KRB5_LIBS) \
8583 $(GIO_LIBS) \
664664 } else
665665 tooltip_text = g_strdup (_("Your credentials have expired"));
666666 return tooltip_text;
667 }
668
669
670 /* determine the current icon */
671 static const char *
672 ka_applet_select_icon (KaApplet *applet, int remaining)
673 {
674 enum ka_icon status_icon = inv_icon;
675
676 if (remaining > 0) {
677 if (remaining < applet->priv->pw_prompt_secs &&
678 !applet->priv->renewable)
679 status_icon = exp_icon;
680 else
681 status_icon = val_icon;
682 }
683
684 return applet->priv->icons[status_icon];
685667 }
686668
687669
3939 #include "ka-tools.h"
4040 #include "ka-main-window.h"
4141
42 #ifdef ENABLE_NETWORK_MANAGER
43 # include <NetworkManager.h>
44 #endif
45
4642 #ifdef HAVE_HX509_ERR_H
4743 #include <hx509_err.h>
4844 #endif
6157 static int ka_renew_credentials (KaApplet *applet);
6258 static gboolean ka_get_tgt_from_ccache (krb5_context context,
6359 krb5_creds *creds);
64
65 #ifdef ENABLE_NETWORK_MANAGER
66 NMClient *nm_client;
67 #endif
6860
6961 /* YAY for different Kerberos implementations */
7062 static int
482474 }
483475
484476
485 #ifdef ENABLE_NETWORK_MANAGER
486477 static void
487 ka_nm_client_state_changed_cb (NMClient * client,
488 GParamSpec *pspec G_GNUC_UNUSED, gpointer data)
489 {
490 NMState state;
478 ka_network_available_changed_cb (GNetworkMonitor *mon,
479 GParamSpec *pspec G_GNUC_UNUSED,
480 gpointer data)
481 {
491482 gboolean *online = (gboolean *) data;
492483
493 state = nm_client_get_state (client);
494 switch (state) {
495 case NM_STATE_UNKNOWN:
496 case NM_STATE_ASLEEP:
497 case NM_STATE_CONNECTING:
498 KA_DEBUG ("Network state: %d", state);
499 /* do nothing */
500 break;
501 case NM_STATE_DISCONNECTING:
502 case NM_STATE_DISCONNECTED:
503 KA_DEBUG ("Network disconnected");
504 *online = FALSE;
505 break;
506 case NM_STATE_CONNECTED_LOCAL:
507 case NM_STATE_CONNECTED_SITE:
508 case NM_STATE_CONNECTED_GLOBAL:
509 KA_DEBUG ("Network connected");
510 *online = TRUE;
511 break;
512 }
513 }
514 #endif
484 /* TODO: better bind to a property */
485 *online = g_network_monitor_get_network_available (mon);
486 KA_DEBUG ("Network state: %sline", *online ? "on" : "off");
487 }
488
515489
516490 /* credentials expiring timer */
517491 static gboolean
10701044
10711045
10721046 static void
1073 ka_nm_shutdown (void)
1074 {
1075 #ifdef ENABLE_NETWORK_MANAGER
1076 if (nm_client) {
1077 g_object_unref (nm_client);
1078 nm_client = NULL;
1079 }
1080 #endif
1081 }
1082
1083
1084 static gboolean
10851047 ka_nm_init (void)
10861048 {
1087 #ifdef ENABLE_NETWORK_MANAGER
1088 GError *error = NULL;
1089
1090 nm_client = nm_client_new (NULL, &error);
1091 if (!nm_client) {
1092 g_warning ("Could not initialize nm-client: %s", error->message);
1093 g_error_free (error);
1094 return FALSE;
1095 }
1096 g_signal_connect (nm_client, "notify::state",
1097 G_CALLBACK (ka_nm_client_state_changed_cb),
1049 GNetworkMonitor *mon = g_network_monitor_get_default ();
1050
1051 g_signal_connect (mon, "notify::network-available",
1052 G_CALLBACK (ka_network_available_changed_cb),
10981053 &is_online);
10991054 /* Set initial state */
1100 ka_nm_client_state_changed_cb (nm_client, NULL, &is_online);
1101 #endif /* ENABLE_NETWORK_MANAGER */
1102 return TRUE;
1055 ka_network_available_changed_cb (mon, NULL, &is_online);
11031056 }
11041057
11051058
11221075 gboolean
11231076 ka_kerberos_destroy ()
11241077 {
1125 ka_nm_shutdown ();
1126
11271078 if (ccache_monitor)
11281079 g_object_unref (ccache_monitor);
11291080