Lines 1-93
Link Here
|
1 |
--- src/user.c.orig 2014-03-15 15:16:49.000000000 +0100 |
1 |
--- src/user.c.orig 2018-04-20 20:52:07 UTC |
2 |
+++ src/user.c 2014-03-15 15:31:57.000000000 +0100 |
2 |
+++ src/user.c |
3 |
@@ -873,11 +873,11 @@ |
3 |
@@ -138,9 +138,14 @@ user_reset_icon_file (User *user) |
4 |
"change real name of user '%s' (%d) to '%s'", |
4 |
} |
5 |
user->user_name, user->uid, name); |
|
|
6 |
|
5 |
|
|
|
6 |
void |
7 |
+#ifdef HAVE_SHADOW_H |
8 |
user_update_from_pwent (User *user, |
9 |
struct passwd *pwent, |
10 |
struct spwd *spent) |
11 |
+#else |
12 |
+user_update_from_pwent (User *user, |
13 |
+ struct passwd *pwent) |
14 |
+#endif |
15 |
{ |
16 |
g_autofree gchar *real_name = NULL; |
17 |
gboolean is_system_account; |
18 |
@@ -199,8 +204,10 @@ user_update_from_pwent (User *user, |
19 |
accounts_user_set_shell (ACCOUNTS_USER (user), pwent->pw_shell); |
20 |
|
21 |
passwd = NULL; |
22 |
+#ifdef HAVE_SHADOW_H |
23 |
if (spent) |
24 |
passwd = spent->sp_pwdp; |
25 |
+#endif |
26 |
|
27 |
if (passwd && passwd[0] == '!') { |
28 |
locked = TRUE; |
29 |
@@ -218,6 +225,7 @@ user_update_from_pwent (User *user, |
30 |
mode = PASSWORD_MODE_NONE; |
31 |
} |
32 |
|
33 |
+#ifdef HAVE_SHADOW_H |
34 |
if (spent) { |
35 |
if (spent->sp_lstchg == 0) { |
36 |
mode = PASSWORD_MODE_SET_AT_LOGIN; |
37 |
@@ -231,6 +239,9 @@ user_update_from_pwent (User *user, |
38 |
user->days_after_expiration_until_lock = spent->sp_inact; |
39 |
user->account_expiration_policy_known = TRUE; |
40 |
} |
41 |
+#else |
42 |
+ user->expiration_time = pwent->pw_expire; |
43 |
+#endif |
44 |
|
45 |
accounts_user_set_password_mode (ACCOUNTS_USER (user), mode); |
46 |
is_system_account = !user_classify_is_human (accounts_user_get_uid (ACCOUNTS_USER (user)), |
47 |
@@ -813,11 +824,11 @@ user_change_real_name_authorized_cb (Daemon |
48 |
accounts_user_get_uid (ACCOUNTS_USER (user)), |
49 |
name); |
50 |
|
7 |
- argv[0] = "/usr/sbin/usermod"; |
51 |
- argv[0] = "/usr/sbin/usermod"; |
8 |
- argv[1] = "-c"; |
52 |
- argv[1] = "-c"; |
9 |
- argv[2] = name; |
53 |
- argv[2] = name; |
10 |
- argv[3] = "--"; |
54 |
- argv[3] = "--"; |
11 |
- argv[4] = user->user_name; |
55 |
- argv[4] = accounts_user_get_user_name (ACCOUNTS_USER (user)); |
12 |
+ argv[0] = "/usr/sbin/pw"; |
56 |
+ argv[0] = "/usr/sbin/pw"; |
13 |
+ argv[1] = "usermod"; |
57 |
+ argv[1] = "usermod"; |
14 |
+ argv[2] = user->user_name; |
58 |
+ argv[2] = accounts_user_get_user_name (ACCOUNTS_USER (user)); |
15 |
+ argv[3] = "-c"; |
59 |
+ argv[3] = "-c"; |
16 |
+ argv[4] = name; |
60 |
+ argv[4] = name; |
17 |
argv[5] = NULL; |
61 |
argv[5] = NULL; |
18 |
|
62 |
|
19 |
error = NULL; |
63 |
if (!spawn_with_login_uid (context, argv, &error)) { |
20 |
@@ -947,11 +947,11 @@ |
64 |
@@ -882,11 +893,11 @@ user_change_user_name_authorized_cb (Daemon |
21 |
"change name of user '%s' (%d) to '%s'", |
65 |
accounts_user_get_uid (ACCOUNTS_USER (user)), |
22 |
old_name, user->uid, name); |
66 |
name); |
23 |
|
67 |
|
24 |
- argv[0] = "/usr/sbin/usermod"; |
68 |
- argv[0] = "/usr/sbin/usermod"; |
25 |
- argv[1] = "-l"; |
69 |
- argv[1] = "-l"; |
26 |
- argv[2] = name; |
70 |
- argv[2] = name; |
27 |
- argv[3] = "--"; |
71 |
- argv[3] = "--"; |
28 |
- argv[4] = user->user_name; |
72 |
- argv[4] = accounts_user_get_user_name (ACCOUNTS_USER (user)); |
29 |
+ argv[0] = "/usr/sbin/pw"; |
73 |
+ argv[0] = "/usr/sbin/pw"; |
30 |
+ argv[1] = "usermod"; |
74 |
+ argv[1] = "usermod"; |
31 |
+ argv[2] = user->user_name; |
75 |
+ argv[2] = accounts_user_get_user_name (ACCOUNTS_USER (user)); |
32 |
+ argv[3] = "-n"; |
76 |
+ argv[3] = "-n"; |
33 |
+ argv[4] = name; |
77 |
+ argv[4] = name; |
34 |
argv[5] = NULL; |
78 |
argv[5] = NULL; |
35 |
|
79 |
|
36 |
error = NULL; |
80 |
if (!spawn_with_login_uid (context, argv, &error)) { |
37 |
@@ -1229,13 +1229,12 @@ |
81 |
@@ -1183,7 +1194,7 @@ user_change_home_dir_authorized_cb (Daemon |
38 |
"change home directory of user '%s' (%d) to '%s'", |
82 |
{ |
39 |
user->user_name, user->uid, home_dir); |
83 |
gchar *home_dir = data; |
|
|
84 |
g_autoptr(GError) error = NULL; |
85 |
- const gchar *argv[7]; |
86 |
+ const gchar *argv[6]; |
40 |
|
87 |
|
|
|
88 |
if (g_strcmp0 (accounts_user_get_home_directory (ACCOUNTS_USER (user)), home_dir) != 0) { |
89 |
sys_log (context, |
90 |
@@ -1192,13 +1203,12 @@ user_change_home_dir_authorized_cb (Daemon |
91 |
accounts_user_get_uid (ACCOUNTS_USER (user)), |
92 |
home_dir); |
93 |
|
41 |
- argv[0] = "/usr/sbin/usermod"; |
94 |
- argv[0] = "/usr/sbin/usermod"; |
42 |
- argv[1] = "-m"; |
95 |
- argv[1] = "-m"; |
43 |
- argv[2] = "-d"; |
96 |
- argv[2] = "-d"; |
44 |
- argv[3] = home_dir; |
97 |
- argv[3] = home_dir; |
45 |
- argv[4] = "--"; |
98 |
- argv[4] = "--"; |
46 |
- argv[5] = user->user_name; |
99 |
- argv[5] = accounts_user_get_user_name (ACCOUNTS_USER (user)); |
47 |
- argv[6] = NULL; |
100 |
- argv[6] = NULL; |
48 |
+ argv[0] = "/usr/sbin/pw"; |
101 |
+ argv[0] = "/usr/sbin/pw"; |
49 |
+ argv[1] = "-d"; |
102 |
+ argv[1] = "-d"; |
50 |
+ argv[2] = home_dir; |
103 |
+ argv[2] = home_dir; |
51 |
+ argv[3] = "-n"; |
104 |
+ argv[3] = "-n"; |
52 |
+ argv[4] = user->user_name; |
105 |
+ argv[4] = accounts_user_get_user_name (ACCOUNTS_USER (user)); |
53 |
+ argv[5] = NULL; |
106 |
+ argv[5] = NULL; |
54 |
|
107 |
|
55 |
error = NULL; |
|
|
56 |
if (!spawn_with_login_uid (context, argv, &error)) { |
108 |
if (!spawn_with_login_uid (context, argv, &error)) { |
57 |
@@ -1291,11 +1290,11 @@ |
109 |
throw_error (context, ERROR_FAILED, "running '%s' failed: %s", argv[0], error->message); |
58 |
"change shell of user '%s' (%d) to '%s'", |
110 |
@@ -1249,11 +1259,11 @@ user_change_shell_authorized_cb (Daemon |
59 |
user->user_name, user->uid, shell); |
111 |
accounts_user_get_uid (ACCOUNTS_USER (user)), |
|
|
112 |
shell); |
60 |
|
113 |
|
61 |
- argv[0] = "/usr/sbin/usermod"; |
114 |
- argv[0] = "/usr/sbin/usermod"; |
62 |
- argv[1] = "-s"; |
115 |
- argv[1] = "-s"; |
63 |
- argv[2] = shell; |
116 |
- argv[2] = shell; |
64 |
- argv[3] = "--"; |
117 |
- argv[3] = "--"; |
65 |
- argv[4] = user->user_name; |
118 |
- argv[4] = accounts_user_get_user_name (ACCOUNTS_USER (user)); |
66 |
+ argv[0] = "/usr/sbin/pw"; |
119 |
+ argv[0] = "/usr/sbin/pw"; |
67 |
+ argv[1] = "usermod"; |
120 |
+ argv[1] = "usermod"; |
68 |
+ argv[2] = user->user_name; |
121 |
+ argv[2] = accounts_user_get_user_name (ACCOUNTS_USER (user)); |
69 |
+ argv[3] = "-s"; |
122 |
+ argv[3] = "-s"; |
70 |
+ argv[4] = shell; |
123 |
+ argv[4] = shell; |
71 |
argv[5] = NULL; |
124 |
argv[5] = NULL; |
72 |
|
125 |
|
73 |
error = NULL; |
126 |
if (!spawn_with_login_uid (context, argv, &error)) { |
74 |
@@ -1551,11 +1550,10 @@ |
127 |
@@ -1456,7 +1466,7 @@ user_change_locked_authorized_cb (Daemon |
|
|
128 |
{ |
129 |
gboolean locked = GPOINTER_TO_INT (data); |
130 |
g_autoptr(GError) error = NULL; |
131 |
- const gchar *argv[5]; |
132 |
+ const gchar *argv[4]; |
133 |
|
134 |
if (accounts_user_get_locked (ACCOUNTS_USER (user)) != locked) { |
75 |
sys_log (context, |
135 |
sys_log (context, |
76 |
"%s account of user '%s' (%d)", |
136 |
@@ -1464,11 +1474,10 @@ user_change_locked_authorized_cb (Daemon |
77 |
locked ? "locking" : "unlocking", user->user_name, user->uid); |
137 |
locked ? "locking" : "unlocking", |
|
|
138 |
accounts_user_get_user_name (ACCOUNTS_USER (user)), |
139 |
accounts_user_get_uid (ACCOUNTS_USER (user))); |
78 |
- argv[0] = "/usr/sbin/usermod"; |
140 |
- argv[0] = "/usr/sbin/usermod"; |
79 |
- argv[1] = locked ? "-L" : "-U"; |
141 |
- argv[1] = locked ? "-L" : "-U"; |
80 |
- argv[2] = "--"; |
142 |
- argv[2] = "--"; |
81 |
- argv[3] = user->user_name; |
143 |
- argv[3] = accounts_user_get_user_name (ACCOUNTS_USER (user)); |
82 |
- argv[4] = NULL; |
144 |
- argv[4] = NULL; |
83 |
+ argv[0] = "/usr/sbin/pw"; |
145 |
+ argv[0] = "/usr/sbin/pw"; |
84 |
+ argv[1] = locked ? "lock" : "unlock"; |
146 |
+ argv[1] = locked ? "lock" : "unlock"; |
85 |
+ argv[2] = user->user_name; |
147 |
+ argv[2] = accounts_user_get_user_name (ACCOUNTS_USER (user)); |
86 |
+ argv[3] = NULL; |
148 |
+ argv[3] = NULL; |
87 |
|
149 |
|
88 |
error = NULL; |
|
|
89 |
if (!spawn_with_login_uid (context, argv, &error)) { |
150 |
if (!spawn_with_login_uid (context, argv, &error)) { |
90 |
@@ -1664,11 +1662,11 @@ |
151 |
throw_error (context, ERROR_FAILED, "running '%s' failed: %s", argv[0], error->message); |
|
|
152 |
@@ -1589,11 +1598,11 @@ user_change_account_type_authorized_cb (Daemon |
91 |
|
153 |
|
92 |
g_free (groups); |
154 |
g_free (groups); |
93 |
|
155 |
|
Lines 95-123
Link Here
|
95 |
- argv[1] = "-G"; |
157 |
- argv[1] = "-G"; |
96 |
- argv[2] = str->str; |
158 |
- argv[2] = str->str; |
97 |
- argv[3] = "--"; |
159 |
- argv[3] = "--"; |
98 |
- argv[4] = user->user_name; |
160 |
- argv[4] = accounts_user_get_user_name (ACCOUNTS_USER (user)); |
99 |
+ argv[0] = "/usr/sbin/pw"; |
161 |
+ argv[0] = "/usr/sbin/pw"; |
100 |
+ argv[1] = "usermod"; |
162 |
+ argv[1] = "usermod"; |
101 |
+ argv[2] = user->user_name; |
163 |
+ argv[2] = accounts_user_get_user_name (ACCOUNTS_USER (user)); |
102 |
+ argv[3] = "-G"; |
164 |
+ argv[3] = "-G"; |
103 |
+ argv[4] = str->str; |
165 |
+ argv[4] = str->str; |
104 |
argv[5] = NULL; |
166 |
argv[5] = NULL; |
105 |
|
167 |
|
106 |
g_string_free (str, FALSE); |
168 |
if (!spawn_with_login_uid (context, argv, &error)) { |
107 |
@@ -1735,10 +1733,8 @@ |
169 |
@@ -1643,7 +1652,7 @@ user_change_password_mode_authorized_cb (Daemon |
|
|
170 |
{ |
171 |
PasswordMode mode = GPOINTER_TO_INT (data); |
172 |
g_autoptr(GError) error = NULL; |
173 |
- const gchar *argv[6]; |
174 |
+ const gchar *argv[5]; |
175 |
|
176 |
if (((PasswordMode) accounts_user_get_password_mode (ACCOUNTS_USER (user))) != mode) { |
177 |
sys_log (context, |
178 |
@@ -1658,10 +1667,8 @@ user_change_password_mode_authorized_cb (Daemon |
108 |
mode == PASSWORD_MODE_NONE) { |
179 |
mode == PASSWORD_MODE_NONE) { |
109 |
|
180 |
|
110 |
argv[0] = "/usr/bin/passwd"; |
181 |
argv[0] = "/usr/bin/passwd"; |
111 |
- argv[1] = "-d"; |
182 |
- argv[1] = "-d"; |
112 |
- argv[2] = "--"; |
183 |
- argv[2] = "--"; |
113 |
- argv[3] = user->user_name; |
184 |
- argv[3] = accounts_user_get_user_name (ACCOUNTS_USER (user)); |
114 |
- argv[4] = NULL; |
185 |
- argv[4] = NULL; |
115 |
+ argv[1] = user->user_name; |
186 |
+ argv[1] = accounts_user_get_user_name (ACCOUNTS_USER (user)); |
116 |
+ argv[2] = NULL; |
187 |
+ argv[2] = NULL; |
117 |
|
188 |
|
118 |
error = NULL; |
|
|
119 |
if (!spawn_with_login_uid (context, argv, &error)) { |
189 |
if (!spawn_with_login_uid (context, argv, &error)) { |
120 |
@@ -1748,12 +1744,11 @@ |
190 |
throw_error (context, ERROR_FAILED, "running '%s' failed: %s", argv[0], error->message); |
|
|
191 |
@@ -1669,12 +1676,11 @@ user_change_password_mode_authorized_cb (Daemon |
121 |
} |
192 |
} |
122 |
|
193 |
|
123 |
if (mode == PASSWORD_MODE_SET_AT_LOGIN) { |
194 |
if (mode == PASSWORD_MODE_SET_AT_LOGIN) { |
Lines 127-168
Link Here
|
127 |
+ argv[1] = "-e"; |
198 |
+ argv[1] = "-e"; |
128 |
argv[2] = "0"; |
199 |
argv[2] = "0"; |
129 |
- argv[3] = "--"; |
200 |
- argv[3] = "--"; |
130 |
- argv[4] = user->user_name; |
201 |
- argv[4] = accounts_user_get_user_name (ACCOUNTS_USER (user)); |
131 |
- argv[5] = NULL; |
202 |
- argv[5] = NULL; |
132 |
+ argv[3] = user->user_name; |
203 |
+ argv[3] = accounts_user_get_user_name (ACCOUNTS_USER (user)); |
133 |
+ argv[4] = NULL; |
204 |
+ argv[4] = NULL; |
134 |
|
205 |
|
135 |
error = NULL; |
|
|
136 |
if (!spawn_with_login_uid (context, argv, &error)) { |
206 |
if (!spawn_with_login_uid (context, argv, &error)) { |
137 |
@@ -1777,11 +1772,10 @@ |
207 |
throw_error (context, ERROR_FAILED, "running '%s' failed: %s", argv[0], error->message); |
138 |
} |
208 |
@@ -1690,11 +1696,10 @@ user_change_password_mode_authorized_cb (Daemon |
|
|
209 |
accounts_user_set_locked (ACCOUNTS_USER (user), FALSE); |
139 |
} |
210 |
} |
140 |
else if (user->locked) { |
211 |
else if (accounts_user_get_locked (ACCOUNTS_USER (user))) { |
141 |
- argv[0] = "/usr/sbin/usermod"; |
212 |
- argv[0] = "/usr/sbin/usermod"; |
142 |
- argv[1] = "-U"; |
213 |
- argv[1] = "-U"; |
143 |
- argv[2] = "--"; |
214 |
- argv[2] = "--"; |
144 |
- argv[3] = user->user_name; |
215 |
- argv[3] = accounts_user_get_user_name (ACCOUNTS_USER (user)); |
145 |
- argv[4] = NULL; |
216 |
- argv[4] = NULL; |
146 |
+ argv[0] = "/usr/sbin/pw"; |
217 |
+ argv[0] = "/usr/sbin/pw"; |
147 |
+ argv[1] = "unlock"; |
218 |
+ argv[1] = "unlock"; |
148 |
+ argv[2] = user->user_name; |
219 |
+ argv[2] = accounts_user_get_user_name (ACCOUNTS_USER (user)); |
149 |
+ argv[3] = NULL; |
220 |
+ argv[3] = NULL; |
150 |
|
221 |
|
151 |
error = NULL; |
|
|
152 |
if (!spawn_with_login_uid (context, argv, &error)) { |
222 |
if (!spawn_with_login_uid (context, argv, &error)) { |
153 |
@@ -1852,12 +1846,11 @@ |
223 |
throw_error (context, ERROR_FAILED, "running '%s' failed: %s", argv[0], error->message); |
|
|
224 |
@@ -1759,7 +1764,7 @@ user_change_password_authorized_cb (Daemon |
225 |
{ |
226 |
gchar **strings = data; |
227 |
g_autoptr(GError) error = NULL; |
228 |
- const gchar *argv[6]; |
229 |
+ const gchar *argv[5]; |
154 |
|
230 |
|
|
|
231 |
sys_log (context, |
232 |
"set password and hint of user '%s' (%d)", |
233 |
@@ -1768,12 +1773,11 @@ user_change_password_authorized_cb (Daemon |
234 |
|
155 |
g_object_freeze_notify (G_OBJECT (user)); |
235 |
g_object_freeze_notify (G_OBJECT (user)); |
156 |
|
236 |
|
157 |
- argv[0] = "/usr/sbin/usermod"; |
237 |
- argv[0] = "/usr/sbin/usermod"; |
158 |
+ argv[0] = "/usr/bin/chpass"; |
238 |
+ argv[0] = "/usr/sbin/chpass"; |
159 |
argv[1] = "-p"; |
239 |
argv[1] = "-p"; |
160 |
argv[2] = strings[0]; |
240 |
argv[2] = strings[0]; |
161 |
- argv[3] = "--"; |
241 |
- argv[3] = "--"; |
162 |
- argv[4] = user->user_name; |
242 |
- argv[4] = accounts_user_get_user_name (ACCOUNTS_USER (user)); |
163 |
- argv[5] = NULL; |
243 |
- argv[5] = NULL; |
164 |
+ argv[3] = user->user_name; |
244 |
+ argv[3] = accounts_user_get_user_name (ACCOUNTS_USER (user)); |
165 |
+ argv[4] = NULL; |
245 |
+ argv[4] = NULL; |
166 |
|
246 |
|
167 |
error = NULL; |
|
|
168 |
if (!spawn_with_login_uid (context, argv, &error)) { |
247 |
if (!spawn_with_login_uid (context, argv, &error)) { |
|
|
248 |
throw_error (context, ERROR_FAILED, "running '%s' failed: %s", argv[0], error->message); |