--- src/login/logind-dbus.c | 7 ++++--- src/login/logind-inhibit.c | 6 +++++- src/login/logind-inhibit.h | 3 ++- src/login/org.freedesktop.login1.policy.in | 10 ++++++++++ 4 files changed, 21 insertions(+), 5 deletions(-)
diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c index 5417e3b..d5fe241 100644 --- a/src/login/logind-dbus.c +++ b/src/login/logind-dbus.c @@ -732,8 +732,8 @@ static int bus_manager_inhibit(Manager *m, DBusConnection *connection, DBusMessa goto fail; } - /* Delay is only supported for shutdown/sleep */ - if (mm == INHIBIT_DELAY && (w & ~(INHIBIT_SHUTDOWN|INHIBIT_SLEEP))) { + /* Delay is only supported for shutdown/sleep/lock */ + if (mm == INHIBIT_DELAY && (w & ~(INHIBIT_SHUTDOWN|INHIBIT_SLEEP|INHIBIT_LOCK))) { r = -EINVAL; goto fail; } @@ -745,7 +745,8 @@ static int bus_manager_inhibit(Manager *m, DBusConnection *connection, DBusMessa w == INHIBIT_HANDLE_POWER_KEY ? "org.freedesktop.login1.inhibit-handle-power-key" : w == INHIBIT_HANDLE_SUSPEND_KEY ? "org.freedesktop.login1.inhibit-handle-suspend-key" : w == INHIBIT_HANDLE_HIBERNATE_KEY ? "org.freedesktop.login1.inhibit-handle-hibernate-key" : - "org.freedesktop.login1.inhibit-handle-lid-switch", + w == INHIBIT_HANDLE_LID_SWITCH ? "org.freedesktop.login1.inhibit-handle-lid-switch" : + (mm == INHIBIT_BLOCK ? "org.freedesktop.login1.inhibit-block-lock" : "org.freedesktop.login1.inhibit-delay-lock"), false, NULL, error); if (r < 0) goto fail; diff --git a/src/login/logind-inhibit.c b/src/login/logind-inhibit.c index f1b9cca..6b4dc04 100644 --- a/src/login/logind-inhibit.c +++ b/src/login/logind-inhibit.c @@ -403,7 +403,7 @@ bool manager_is_inhibited( } const char *inhibit_what_to_string(InhibitWhat w) { - static __thread char buffer[97]; + static __thread char buffer[102]; char *p; if (w < 0 || w >= _INHIBIT_WHAT_MAX) @@ -424,6 +424,8 @@ const char *inhibit_what_to_string(InhibitWhat w) { p = stpcpy(p, "handle-hibernate-key:"); if (w & INHIBIT_HANDLE_LID_SWITCH) p = stpcpy(p, "handle-lid-switch:"); + if (w & INHIBIT_LOCK) + p = stpcpy(p, "lock:"); if (p > buffer) *(p-1) = 0; @@ -453,6 +455,8 @@ InhibitWhat inhibit_what_from_string(const char *s) { what |= INHIBIT_HANDLE_HIBERNATE_KEY; else if (l == 17 && strncmp(w, "handle-lid-switch", l) == 0) what |= INHIBIT_HANDLE_LID_SWITCH; + else if (l == 4 && strncmp(w, "lock", l) == 0) + what |= INHIBIT_LOCK; else return _INHIBIT_WHAT_INVALID; } diff --git a/src/login/logind-inhibit.h b/src/login/logind-inhibit.h index 4c158ee..7081faf 100644 --- a/src/login/logind-inhibit.h +++ b/src/login/logind-inhibit.h @@ -35,7 +35,8 @@ typedef enum InhibitWhat { INHIBIT_HANDLE_SUSPEND_KEY = 16, INHIBIT_HANDLE_HIBERNATE_KEY = 32, INHIBIT_HANDLE_LID_SWITCH = 64, - _INHIBIT_WHAT_MAX = 128, + INHIBIT_LOCK = 128, + _INHIBIT_WHAT_MAX = 256, _INHIBIT_WHAT_INVALID = -1 } InhibitWhat; diff --git a/src/login/org.freedesktop.login1.policy.in b/src/login/org.freedesktop.login1.policy.in index 57dfb2a..131c846 100644 --- a/src/login/org.freedesktop.login1.policy.in +++ b/src/login/org.freedesktop.login1.policy.in @@ -66,6 +66,16 @@ </defaults> </action> + <action id="org.freedesktop.login1.inhibit-lock"> + <_description>Allow applications to inhibit automatic session locking</_description> + <_message>Authentication is required to allow an application to inhibit automatic session locking.</_message> + <defaults> + <allow_any>no</allow_any> + <allow_inactive>no</allow_inactive> + <allow_active>yes</allow_active> + </defaults> + </action> + <action id="org.freedesktop.login1.inhibit-handle-power-key"> <_description>Allow applications to inhibit system handling of the power key</_description> <_message>Authentication is required to allow an application to inhibit system handling of the power key.</_message> -- 1.7.12.1 _______________________________________________ systemd-devel mailing list systemd-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/systemd-devel