]> git.pld-linux.org Git - packages/NetworkManager.git/blobdiff - systemd-fallback.patch
- updated to 1.0.6
[packages/NetworkManager.git] / systemd-fallback.patch
index cef24b03bb2ed3a576f34787c8343329c53263e2..d4d1886224ce0edade5fc2057e6e380b04eed0ba 100644 (file)
@@ -1,34 +1,35 @@
-diff -u -Nr NetworkManager-0.9.3.995/configure.ac NetworkManager-0.9.3.995-systemd-fallback/configure.ac
---- NetworkManager-0.9.3.995/configure.ac      2012-03-02 01:05:21.000000000 +0100
-+++ NetworkManager-0.9.3.995-systemd-fallback/configure.ac     2012-03-06 16:55:58.294793902 +0100
-@@ -344,7 +344,7 @@
- case $with_session_tracking in
-     ck|none) ;;
-     systemd)
--        PKG_CHECK_MODULES(SYSTEMD, [libsystemd-login])
-+        PKG_CHECK_MODULES(SYSTEMD, [libsystemd-daemon libsystemd-login])
-         ;;
-     *)
-       AC_MSG_ERROR(--with-session-tracking must be one of [none, ck, systemd])
---- NetworkManager-0.9.6.4/src/nm-session-monitor-systemd.c.orig       2012-09-12 22:37:01.000000000 +0200
-+++ NetworkManager-0.9.6.4/src/nm-session-monitor-systemd.c    2012-11-01 08:58:24.084129513 +0100
-@@ -28,6 +28,10 @@
+--- NetworkManager-1.0.0/configure.ac.orig     2014-12-19 23:27:36.133692361 +0100
++++ NetworkManager-1.0.0/configure.ac  2014-12-19 23:29:57.159595024 +0100
+@@ -348,7 +348,7 @@ AM_CONDITIONAL(SESSION_TRACKING_CK, test
+ AM_CONDITIONAL(SESSION_TRACKING_SYSTEMD, test "$with_session_tracking" = "systemd")
+ if test "$with_session_tracking" = "systemd"; then
+       PKG_CHECK_MODULES(SYSTEMD_LOGIN, [libsystemd],,
+-                        [PKG_CHECK_MODULES(SYSTEMD_LOGIN, [libsystemd-login])])
++                        [PKG_CHECK_MODULES(SYSTEMD_LOGIN, [libsystemd-daemon libsystemd-login])])
+       AC_SUBST(SYSTEMD_LOGIN_CFLAGS)
+       AC_SUBST(SYSTEMD_LOGIN_LIBS)
+ fi
+--- NetworkManager-1.0.0/src/nm-session-monitor-systemd.c.orig 2014-12-11 22:28:51.000000000 +0100
++++ NetworkManager-1.0.0/src/nm-session-monitor-systemd.c      2014-12-21 11:30:09.859311469 +0100
+@@ -29,10 +29,14 @@
  #include <glib/gstdio.h>
  #include <systemd/sd-login.h>
  #include <stdlib.h>
 +#include <systemd/sd-daemon.h>
 +#include <sys/stat.h>
 +#include <gio/gio.h>
-+#include "nm-logging.h"
  
  #include "nm-session-utils.h"
  #include "nm-session-monitor.h"
-@@ -108,10 +112,20 @@
+ #include "nm-logging.h"
++#include "nm-errors.h"
+ /********************************************************************/
+@@ -109,10 +113,18 @@ sd_source_new (void)
        return source;
  }
  
-+/********************************************************************/
-+
 +#define CKDB_PATH "/var/run/ConsoleKit/database"
 +
  struct _NMSessionMonitor {
@@ -44,7 +45,7 @@ diff -u -Nr NetworkManager-0.9.3.995/configure.ac NetworkManager-0.9.3.995-syste
  };
  
  struct _NMSessionMonitorClass {
-@@ -131,6 +145,215 @@
+@@ -132,6 +144,215 @@ G_DEFINE_TYPE (NMSessionMonitor, nm_sess
  
  /* ---------------------------------------------------------------------------------------------------- */
  
@@ -71,8 +72,8 @@ diff -u -Nr NetworkManager-0.9.3.995/configure.ac NetworkManager-0.9.3.995-syste
 +
 +      if (!error) {
 +              g_set_error (error,
-+                               NM_SESSION_MONITOR_ERROR,
-+                               NM_SESSION_MONITOR_ERROR_MALFORMED_DATABASE,
++                               NM_MANAGER_ERROR,
++                               NM_MANAGER_ERROR_FAILED,
 +                               "ConsoleKit database " CKDB_PATH " group '%s' had no '%s' key",
 +                               group, key);
 +      }
@@ -160,8 +161,8 @@ diff -u -Nr NetworkManager-0.9.3.995/configure.ac NetworkManager-0.9.3.995-syste
 +      errno = 0;
 +      if (stat (CKDB_PATH, &statbuf) != 0) {
 +              g_set_error (error,
-+                           NM_SESSION_MONITOR_ERROR,
-+                           errno == ENOENT ? NM_SESSION_MONITOR_ERROR_NO_DATABASE : NM_SESSION_MONITOR_ERROR_IO_ERROR,
++                           NM_MANAGER_ERROR,
++                           NM_MANAGER_ERROR_FAILED,
 +                           "Error statting file " CKDB_PATH ": %s",
 +                           strerror (errno));
 +              goto error;
@@ -175,8 +176,8 @@ diff -u -Nr NetworkManager-0.9.3.995/configure.ac NetworkManager-0.9.3.995-syste
 +      groups = g_key_file_get_groups (self->database, &len);
 +      if (!groups) {
 +              g_set_error_literal (error,
-+                                   NM_SESSION_MONITOR_ERROR,
-+                                   NM_SESSION_MONITOR_ERROR_IO_ERROR,
++                                   NM_MANAGER_ERROR,
++                                   NM_MANAGER_ERROR_FAILED,
 +                                   "Could not load groups from " CKDB_PATH "");
 +              goto error;
 +      }
@@ -223,8 +224,8 @@ diff -u -Nr NetworkManager-0.9.3.995/configure.ac NetworkManager-0.9.3.995-syste
 +              errno = 0;
 +              if (stat (CKDB_PATH, &statbuf) != 0) {
 +                      g_set_error (error,
-+                                   NM_SESSION_MONITOR_ERROR,
-+                                   errno == ENOENT ? NM_SESSION_MONITOR_ERROR_NO_DATABASE : NM_SESSION_MONITOR_ERROR_IO_ERROR,
++                                   NM_MANAGER_ERROR,
++                                   NM_MANAGER_ERROR_FAILED,
 +                                   "Error statting file " CKDB_PATH " to check timestamp: %s",
 +                                   strerror (errno));
 +                      goto out;
@@ -260,7 +261,7 @@ diff -u -Nr NetworkManager-0.9.3.995/configure.ac NetworkManager-0.9.3.995-syste
  static gboolean
  sessions_changed (gpointer user_data)
  {
-@@ -144,9 +367,50 @@
+@@ -145,9 +366,46 @@ sessions_changed (gpointer user_data)
  static void
  nm_session_monitor_init (NMSessionMonitor *monitor)
  {
@@ -275,29 +276,25 @@ diff -u -Nr NetworkManager-0.9.3.995/configure.ac NetworkManager-0.9.3.995-syste
 +              monitor->database_monitor = NULL;
 +              monitor->database = NULL;
 +      } else {
-+              monitor->sd_source = NULL;
-+
 +              GError *error = NULL;
 +              GFile *file;
 +
++              monitor->sd_source = NULL;
++
 +              /* Sessions-by-user is responsible for destroying the Session objects */
 +              monitor->sessions_by_user = g_hash_table_new_full (g_str_hash, g_str_equal,
-+                                                              NULL, (GDestroyNotify) session_free);
++                                                                  NULL, (GDestroyNotify) session_free);
 +              monitor->sessions_by_uid = g_hash_table_new (g_direct_hash, g_direct_equal);
 +
 +
-+              error = NULL;
 +              if (!ensure_database (monitor, &error)) {
-+                      /* Ignore the first error if the CK database isn't found yet */
-+                      if (g_error_matches (error,
-+                                           NM_SESSION_MONITOR_ERROR,
-+                                           NM_SESSION_MONITOR_ERROR_NO_DATABASE) == FALSE) {
-+                              nm_log_err (LOGD_CORE, "Error loading " CKDB_PATH ": %s", error->message);
-+                      }
++                      nm_log_dbg (LOGD_CORE, "Error loading " CKDB_PATH ": %s", error->message);
++
++                      /* Ignore the first error, the CK database might not exist yet */
 +                      g_error_free (error);
++                      error = NULL;
 +              }
 +
-+              error = NULL;
 +              file = g_file_new_for_path (CKDB_PATH);
 +              monitor->database_monitor = g_file_monitor_file (file, G_FILE_MONITOR_NONE, NULL, &error);
 +              g_object_unref (file);
@@ -306,33 +303,43 @@ diff -u -Nr NetworkManager-0.9.3.995/configure.ac NetworkManager-0.9.3.995-syste
 +                      g_error_free (error);
 +              } else {
 +                      g_signal_connect (monitor->database_monitor,
-+                                        "changed",
-+                                        G_CALLBACK (on_file_monitor_changed),
-+                                        monitor);
++                                            "changed",
++                                            G_CALLBACK (on_file_monitor_changed),
++                                            monitor);
 +              }
 +      }
  }
  
  static void
-@@ -159,6 +423,12 @@
-               g_source_unref (monitor->sd_source);
-       }
+@@ -155,11 +413,19 @@ nm_session_monitor_finalize (GObject *ob
+ {
+       NMSessionMonitor *monitor = NM_SESSION_MONITOR (object);
  
-+      if (monitor->database_monitor != NULL)
-+              g_object_unref (monitor->database_monitor);
+-      if (monitor->sd_source != NULL) {
+-              g_source_destroy (monitor->sd_source);
+-              g_source_unref (monitor->sd_source);
++      if (sd_booted () > 0) {
++              if (monitor->sd_source != NULL) {
++                      g_source_destroy (monitor->sd_source);
++                      g_source_unref (monitor->sd_source);
++              }
++      } else {
++              if (monitor->database_monitor != NULL)
++                      g_object_unref (monitor->database_monitor);
 +
-+      if (monitor->database != NULL)
 +              free_database (monitor);
+       }
 +
        if (G_OBJECT_CLASS (nm_session_monitor_parent_class)->finalize != NULL)
                G_OBJECT_CLASS (nm_session_monitor_parent_class)->finalize (object);
  }
-@@ -207,15 +477,36 @@
+@@ -205,15 +471,36 @@ nm_session_monitor_user_has_session (NMS
                                       uid_t *out_uid,
                                       GError **error)
  {
 -      uid_t uid;
-+      if (monitor->sd_source != NULL) {
++      if (sd_booted () > 0) {
 +              uid_t uid;
  
 -      if (!nm_session_user_to_uid (username, &uid, error))
@@ -356,10 +363,10 @@ diff -u -Nr NetworkManager-0.9.3.995/configure.ac NetworkManager-0.9.3.995-syste
 +              s = g_hash_table_lookup (monitor->sessions_by_user, (gpointer) username);
 +              if (!s) {
 +                      g_set_error (error,
-+                                   NM_SESSION_MONITOR_ERROR,
-+                                   NM_SESSION_MONITOR_ERROR_UNKNOWN_USER,
-+                                   "No session found for user '%s'",
-+                                   username);
++                                       NM_MANAGER_ERROR,
++                                       NM_MANAGER_ERROR_FAILED,
++                                       "No session found for user '%s'",
++                                       username);
 +                      return FALSE;
 +              }
 +
@@ -370,20 +377,19 @@ diff -u -Nr NetworkManager-0.9.3.995/configure.ac NetworkManager-0.9.3.995-syste
  }
  
  gboolean
-@@ -223,12 +514,31 @@
+@@ -221,12 +508,31 @@ nm_session_monitor_user_active (NMSessio
                                  const char *username,
                                  GError **error)
  {
 -      uid_t uid;
-+      if (monitor->sd_source != NULL) {
++      if (sd_booted () > 0) {
 +              uid_t uid;
  
 -      if (!nm_session_user_to_uid (username, &uid, error))
 -              return FALSE;
 +              if (!nm_session_user_to_uid (username, &uid, error))
 +                      return FALSE;
--      return nm_session_monitor_uid_active (monitor, uid, error);
++
 +              return nm_session_monitor_uid_active (monitor, uid, error);
 +      } else {
 +              Session *s;
@@ -394,40 +400,46 @@ diff -u -Nr NetworkManager-0.9.3.995/configure.ac NetworkManager-0.9.3.995-syste
 +              s = g_hash_table_lookup (monitor->sessions_by_user, (gpointer) username);
 +              if (!s) {
 +                      g_set_error (error,
-+                                   NM_SESSION_MONITOR_ERROR,
-+                                   NM_SESSION_MONITOR_ERROR_UNKNOWN_USER,
-+                                   "No session found for user '%s'",
-+                                   username);
++                                       NM_MANAGER_ERROR,
++                                       NM_MANAGER_ERROR_FAILED,
++                                       "No session found for user '%s'",
++                                       username);
 +                      return FALSE;
 +              }
-+
+-      return nm_session_monitor_uid_active (monitor, uid, error);
 +              return s->active;
 +      }
  }
  
  gboolean
-@@ -239,16 +549,37 @@
+@@ -235,19 +541,40 @@ nm_session_monitor_uid_has_session (NMSe
+                                     const char **out_user,
+                                     GError **error)
  {
-       int ret;
+-      int num_sessions;
++      if (sd_booted () > 0) {
++              int num_sessions;
  
 -      if (!nm_session_uid_to_user (uid, out_user, error))
 -              return FALSE;
-+      if (monitor->sd_source != NULL) {
 +              if (!nm_session_uid_to_user (uid, out_user, error))
 +                      return FALSE;
  
--      ret = sd_uid_get_sessions (uid, FALSE, NULL) > 0;
--      if (ret < 0) {
+-      /* Get all sessions (including inactive ones) for the user */
+-      num_sessions = sd_uid_get_sessions (uid, 0, NULL);
+-      if (num_sessions < 0) {
 -              nm_log_warn (LOGD_CORE, "Failed to get systemd sessions for uid %d: %d",
--                           uid, ret);
+-                           uid, num_sessions);
 -              return FALSE;
-+              ret = sd_uid_get_sessions (uid, FALSE, NULL) > 0;
-+              if (ret < 0) {
++              /* Get all sessions (including inactive ones) for the user */
++              num_sessions = sd_uid_get_sessions (uid, 0, NULL);
++              if (num_sessions < 0) {
 +                      nm_log_warn (LOGD_CORE, "Failed to get systemd sessions for uid %d: %d",
-+                                   uid, ret);
++                                       uid, num_sessions);
 +                      return FALSE;
 +              }
-+              return ret > 0 ? TRUE : FALSE;
++              return num_sessions > 0;
 +      } else {
 +              Session *s;
 +
@@ -437,10 +449,10 @@ diff -u -Nr NetworkManager-0.9.3.995/configure.ac NetworkManager-0.9.3.995-syste
 +              s = g_hash_table_lookup (monitor->sessions_by_uid, GUINT_TO_POINTER (uid));
 +              if (!s) {
 +                      g_set_error (error,
-+                                   NM_SESSION_MONITOR_ERROR,
-+                                   NM_SESSION_MONITOR_ERROR_UNKNOWN_USER,
-+                                   "No session found for uid %d",
-+                                   uid);
++                                       NM_MANAGER_ERROR,
++                                       NM_MANAGER_ERROR_FAILED,
++                                       "No session found for uid %d",
++                                       uid);
 +                      return FALSE;
 +              }
 +
@@ -448,27 +460,32 @@ diff -u -Nr NetworkManager-0.9.3.995/configure.ac NetworkManager-0.9.3.995-syste
 +                      *out_user = s->user;
 +              return TRUE;
        }
--      return ret > 0 ? TRUE : FALSE;
+-      return num_sessions > 0;
  }
  
  gboolean
-@@ -258,11 +589,30 @@
+@@ -255,14 +582,33 @@ nm_session_monitor_uid_active (NMSession
+                                uid_t uid,
+                                GError **error)
  {
-       int ret;
+-      int num_sessions;
++      if (sd_booted () > 0) {
++              int num_sessions;
  
--      ret = sd_uid_get_sessions (uid, TRUE, NULL) > 0;
--      if (ret < 0) {
+-      /* Get active sessions for the user */
+-      num_sessions = sd_uid_get_sessions (uid, 1, NULL);
+-      if (num_sessions < 0) {
 -              nm_log_warn (LOGD_CORE, "Failed to get active systemd sessions for uid %d: %d",
--                           uid, ret);
+-                           uid, num_sessions);
 -              return FALSE;
-+      if (monitor->sd_source != NULL) {
-+              ret = sd_uid_get_sessions (uid, TRUE, NULL) > 0;
-+              if (ret < 0) {
++              /* Get active sessions for the user */
++              num_sessions = sd_uid_get_sessions (uid, 1, NULL);
++              if (num_sessions < 0) {
 +                      nm_log_warn (LOGD_CORE, "Failed to get active systemd sessions for uid %d: %d",
-+                                   uid, ret);
++                                       uid, num_sessions);
 +                      return FALSE;
 +              }
-+              return ret > 0 ? TRUE : FALSE;
++              return num_sessions > 0;
 +      } else {
 +              Session *s;
 +
@@ -478,14 +495,117 @@ diff -u -Nr NetworkManager-0.9.3.995/configure.ac NetworkManager-0.9.3.995-syste
 +              s = g_hash_table_lookup (monitor->sessions_by_uid, GUINT_TO_POINTER (uid));
 +              if (!s) {
 +                      g_set_error (error,
-+                                   NM_SESSION_MONITOR_ERROR,
-+                                   NM_SESSION_MONITOR_ERROR_UNKNOWN_USER,
-+                                   "No session found for uid '%d'",
-+                                   uid);
++                                       NM_MANAGER_ERROR,
++                                       NM_MANAGER_ERROR_FAILED,
++                                       "No session found for uid '%d'",
++                                       uid);
 +                      return FALSE;
 +              }
 +
 +              return s->active;
        }
--      return ret > 0 ? TRUE : FALSE;
+-      return num_sessions > 0;
+ }
+--- NetworkManager-1.0.0/src/nm-sleep-monitor-systemd.c.orig   2014-12-19 23:32:53.481973137 +0100
++++ NetworkManager-1.0.0/src/nm-sleep-monitor-systemd.c        2014-12-20 00:12:04.572281013 +0100
+@@ -35,12 +35,15 @@
+ #define SD_PATH              "/org/freedesktop/login1"
+ #define SD_INTERFACE         "org.freedesktop.login1.Manager"
++#define UPOWER_DBUS_SERVICE "org.freedesktop.UPower"
+ struct _NMSleepMonitor {
+       GObject parent_instance;
+       GDBusProxy *sd_proxy;
+       gint inhibit_fd;
++
++      DBusGProxy *upower_proxy;
+ };
+ struct _NMSleepMonitorClass {
+@@ -62,6 +65,20 @@ G_DEFINE_TYPE (NMSleepMonitor, nm_sleep_
+ /********************************************************************/
++static void
++upower_sleeping_cb (DBusGProxy *proxy, gpointer user_data)
++{
++        nm_log_dbg (LOGD_SUSPEND, "Received UPower sleeping signal");
++        g_signal_emit (user_data, signals[SLEEPING], 0);
++}
++
++static void
++upower_resuming_cb (DBusGProxy *proxy, gpointer user_data)
++{
++        nm_log_dbg (LOGD_SUSPEND, "Received UPower resuming signal");
++        g_signal_emit (user_data, signals[RESUMING], 0);
++}
++
+ static gboolean
+ drop_inhibitor (NMSleepMonitor *self)
+ {
+@@ -193,14 +210,37 @@ on_proxy_acquired (GObject *object,
+ static void
+ nm_sleep_monitor_init (NMSleepMonitor *self)
+ {
+-      self->inhibit_fd = -1;
+-      g_dbus_proxy_new_for_bus (G_BUS_TYPE_SYSTEM,
+-                                G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START |
+-                                G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES,
+-                                NULL,
+-                                SD_NAME, SD_PATH, SD_INTERFACE,
+-                                NULL,
+-                                (GAsyncReadyCallback) on_proxy_acquired, self);
++      if (sd_booted () > 0) {
++              self->inhibit_fd = -1;
++              g_dbus_proxy_new_for_bus (G_BUS_TYPE_SYSTEM,
++                                            G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START |
++                                            G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES,
++                                            NULL,
++                                            SD_NAME, SD_PATH, SD_INTERFACE,
++                                            NULL,
++                                            (GAsyncReadyCallback) on_proxy_acquired, self);
++      } else {
++              DBusGConnection *bus;
++
++        bus = nm_dbus_manager_get_connection (nm_dbus_manager_get ());
++        self->upower_proxy = dbus_g_proxy_new_for_name (bus,
++                                                        UPOWER_DBUS_SERVICE,
++                                                        "/org/freedesktop/UPower",
++                                                        "org.freedesktop.UPower");
++        if (self->upower_proxy) {
++            dbus_g_proxy_add_signal (self->upower_proxy, "Sleeping", G_TYPE_INVALID);
++            dbus_g_proxy_connect_signal (self->upower_proxy, "Sleeping",
++                                         G_CALLBACK (upower_sleeping_cb),
++                                         self, NULL);
++
++            dbus_g_proxy_add_signal (self->upower_proxy, "Resuming", G_TYPE_INVALID);
++            dbus_g_proxy_connect_signal (self->upower_proxy, "Resuming",
++                                         G_CALLBACK (upower_resuming_cb),
++                                         self, NULL);
++        } else {
++              nm_log_warn (LOGD_SUSPEND, "could not initialize UPower D-Bus proxy");
++              }
++      }
  }
+ static void
+@@ -208,9 +248,14 @@ finalize (GObject *object)
+ {
+       NMSleepMonitor *self = NM_SLEEP_MONITOR (object);
+-      drop_inhibitor (self);
+-      if (self->sd_proxy)
+-              g_object_unref (self->sd_proxy);
++      if (sd_booted () > 0) {
++              drop_inhibitor (self);
++              if (self->sd_proxy)
++                      g_object_unref (self->sd_proxy);
++      } else {
++              if (self->upower_proxy)
++              g_object_unref (self->upower_proxy);
++      }
+       if (G_OBJECT_CLASS (nm_sleep_monitor_parent_class)->finalize != NULL)
+               G_OBJECT_CLASS (nm_sleep_monitor_parent_class)->finalize (object);
This page took 0.0760420000000001 seconds and 4 git commands to generate.