Merge lp:~mvo/click/lp1394256-run-user-hooks-on-remove-too into lp:click/devel

Proposed by Michael Vogt
Status: Superseded
Proposed branch: lp:~mvo/click/lp1394256-run-user-hooks-on-remove-too
Merge into: lp:click/devel
Diff against target: 90 lines (+64/-0)
1 file modified
lib/click/user.vala (+64/-0)
To merge this branch: bzr merge lp:~mvo/click/lp1394256-run-user-hooks-on-remove-too
Reviewer Review Type Date Requested Status
click hackers Pending
Review via email: mp+243811@code.launchpad.net

This proposal has been superseded by a proposal from 2014-12-05.

Description of the change

This branch runs the click remove user hooks for all logged in users.
Based on lp:~mvo/click/lp1394256-run-user-hooks

To post a comment you must log in.

Unmerged revisions

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'lib/click/user.vala'
2--- lib/click/user.vala 2014-09-29 13:23:12 +0000
3+++ lib/click/user.vala 2014-12-05 15:11:09 +0000
4@@ -33,8 +33,21 @@
5 * symlinks per user.
6 */
7
8+
9 namespace Click {
10
11+ struct LogindUser {
12+ uint32 uid;
13+ string name;
14+ string ObjectPath;
15+ }
16+
17+ /* the logind dbus interface */
18+ [DBus (name = "org.freedesktop.login1.Manager")]
19+ interface LogindManager : Object {
20+ public abstract LogindUser[] ListUsers () throws IOError;
21+ }
22+
23 /* Pseudo-usernames selected to be invalid as a real username, and alluding
24 * to group syntaxes used in other systems.
25 */
26@@ -596,6 +609,53 @@
27 if (! is_pseudo_user)
28 package_install_hooks (db, package,
29 old_version, version, name);
30+
31+ // run user hooks for all logged in users
32+ if (name == ALL_USERS)
33+ run_user_install_hooks_for_all_logged_in_users (package, old_version, version);
34+ }
35+
36+ private string[]
37+ get_logged_in_users()
38+ {
39+ string[] logged_in_users = {};
40+ try {
41+ LogindManager logind = Bus.get_proxy_sync (
42+ BusType.SYSTEM,
43+ "org.freedesktop.login1",
44+ "/org/freedesktop/login1");
45+ var users = logind.ListUsers();
46+ foreach (LogindUser user in users)
47+ {
48+ // FIXME: ideally we would read from /etc/adduser.conf
49+ if(user.uid >= 1000 && user.uid <= 30000)
50+ {
51+ logged_in_users += user.name;
52+ }
53+ }
54+ } catch (Error e) {
55+ warning ("Can not connect to logind");
56+ }
57+ return logged_in_users;
58+ }
59+
60+ private void
61+ run_user_install_hooks_for_all_logged_in_users (string package,
62+ string? old_version,
63+ string version) throws IOError
64+ {
65+ foreach (string username in get_logged_in_users())
66+ package_install_hooks (db, package,
67+ old_version, version, username);
68+ }
69+
70+ private void
71+ run_user_remove_hooks_for_all_logged_in_users (string package,
72+ string old_version) throws IOError
73+ {
74+ foreach (string username in get_logged_in_users())
75+ package_remove_hooks (db, package,
76+ old_version, username);
77 }
78
79 private bool
80@@ -688,6 +748,10 @@
81
82 if (! is_pseudo_user)
83 package_remove_hooks (db, package, old_version, name);
84+
85+ // run user hooks for all logged in users
86+ if (name == ALL_USERS)
87+ run_user_remove_hooks_for_all_logged_in_users (package, old_version);
88 }
89
90 /**

Subscribers

People subscribed via source and target branches

to all changes: