kerberos: Use GNetworkMonitor
This avoids a NM dependency.
Guido Günther
3 years ago
10 | 10 | libglib2.0-dev |
11 | 11 | libgtk-3-dev |
12 | 12 | libkrb5-dev |
13 | libnm-dev | |
14 | 13 | libpam0g-dev |
15 | 14 | pkg-config |
16 | 15 | yelp-tools |
27 | 27 | YELP_HELP_INIT |
28 | 28 | |
29 | 29 | GTK_REQUIRED=3.14 |
30 | GLIB_REQUIRED=2.28 | |
30 | GLIB_REQUIRED=2.32 | |
31 | 31 | |
32 | 32 | 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]) | |
34 | 34 | PKG_CHECK_MODULES(GMODULE, gmodule-2.0) |
35 | 35 | |
36 | 36 | dnl check for deprecated symbols: |
135 | 135 | LIBS="$savedLIBS" |
136 | 136 | |
137 | 137 | |
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 | ||
160 | 138 | dnl secmem |
161 | 139 | dnl Checks for library functions. |
162 | 140 | AC_CHECK_FUNCS(seteuid stpcpy mmap) |
246 | 224 | AC_MSG_NOTICE([ Kerberos: $KRB5_CFLAGS $KRB5_LIBS]) |
247 | 225 | AC_MSG_NOTICE([ GTK: $GTK_CFLAGS $GTK_LIBS]) |
248 | 226 | 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 | |
254 | 227 | AC_MSG_NOTICE([]) |
255 | 228 | AC_MSG_NOTICE([Miscellaneous]) |
256 | 229 | AC_MSG_NOTICE([]) |
4 | 4 | AM_CFLAGS=\ |
5 | 5 | @GTK_CFLAGS@ \ |
6 | 6 | @KRB5_CFLAGS@ \ |
7 | @NETWORK_MANAGER_CFLAGS@ \ | |
8 | 7 | @CFLAGS@ |
9 | 8 | AM_LDFLAGS=\ |
10 | @NETWORK_MANAGER_LIBS@ \ | |
11 | 9 | @KRB5_LIBS@ \ |
12 | 10 | @GTK_LIBS@ |
13 | 11 |
72 | 72 | $(GMODULE_CFLAGS) \ |
73 | 73 | $(GTK_CFLAGS) \ |
74 | 74 | $(KRB5_CFLAGS) \ |
75 | $(NETWORK_MANAGER_CFLAGS) \ | |
76 | 75 | $(WARN_CFLAGS) \ |
77 | 76 | $(AM_CFLAGS) \ |
78 | 77 | $(NULL) |
79 | 78 | |
80 | 79 | krb5_auth_dialog_LDADD = \ |
81 | 80 | $(top_builddir)/secmem/libsecmem.a \ |
82 | $(NETWORK_MANAGER_LIBS) \ | |
83 | 81 | $(LIBCAP) \ |
84 | 82 | $(KRB5_LIBS) \ |
85 | 83 | $(GIO_LIBS) \ |
664 | 664 | } else |
665 | 665 | tooltip_text = g_strdup (_("Your credentials have expired")); |
666 | 666 | 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]; | |
685 | 667 | } |
686 | 668 | |
687 | 669 |
39 | 39 | #include "ka-tools.h" |
40 | 40 | #include "ka-main-window.h" |
41 | 41 | |
42 | #ifdef ENABLE_NETWORK_MANAGER | |
43 | # include <NetworkManager.h> | |
44 | #endif | |
45 | ||
46 | 42 | #ifdef HAVE_HX509_ERR_H |
47 | 43 | #include <hx509_err.h> |
48 | 44 | #endif |
61 | 57 | static int ka_renew_credentials (KaApplet *applet); |
62 | 58 | static gboolean ka_get_tgt_from_ccache (krb5_context context, |
63 | 59 | krb5_creds *creds); |
64 | ||
65 | #ifdef ENABLE_NETWORK_MANAGER | |
66 | NMClient *nm_client; | |
67 | #endif | |
68 | 60 | |
69 | 61 | /* YAY for different Kerberos implementations */ |
70 | 62 | static int |
482 | 474 | } |
483 | 475 | |
484 | 476 | |
485 | #ifdef ENABLE_NETWORK_MANAGER | |
486 | 477 | 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 | { | |
491 | 482 | gboolean *online = (gboolean *) data; |
492 | 483 | |
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 | ||
515 | 489 | |
516 | 490 | /* credentials expiring timer */ |
517 | 491 | static gboolean |
1070 | 1044 | |
1071 | 1045 | |
1072 | 1046 | 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 | |
1085 | 1047 | ka_nm_init (void) |
1086 | 1048 | { |
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), | |
1098 | 1053 | &is_online); |
1099 | 1054 | /* 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); | |
1103 | 1056 | } |
1104 | 1057 | |
1105 | 1058 | |
1122 | 1075 | gboolean |
1123 | 1076 | ka_kerberos_destroy () |
1124 | 1077 | { |
1125 | ka_nm_shutdown (); | |
1126 | ||
1127 | 1078 | if (ccache_monitor) |
1128 | 1079 | g_object_unref (ccache_monitor); |
1129 | 1080 |