]> granicus.if.org Git - shadow/commitdiff
* src/userdel.c (user_busy): Check if the process registered in
authornekral-guest <nekral-guest@5a98b0ae-9ef6-0310-add3-de5d479b70d7>
Sun, 17 May 2009 16:27:29 +0000 (16:27 +0000)
committernekral-guest <nekral-guest@5a98b0ae-9ef6-0310-add3-de5d479b70d7>
Sun, 17 May 2009 16:27:29 +0000 (16:27 +0000)
utmp is still running. This avoids rejecting the removal of an
user when UTMP was not updated and indicate that the user is still
logged in.

ChangeLog
src/userdel.c

index b71a1d505ef0923d5dddaaf4f5885af28b30a25e..df2f1cdd5abdea07fba7e4550869e072c0c212f9 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2009-05-17  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/userdel.c (user_busy): Check if the process registered in
+       utmp is still running. This avoids rejecting the removal of an
+       user when UTMP was not updated and indicate that the user is still
+       logged in.
+
 2009-05-16  Nicolas François  <nicolas.francois@centraliens.net>
 
        * NEWS, libmisc/console.c (console): Remove the leading /dev/ from
index c341d02777ab0c7a8026a4b7aca736d30bd849bb..aca652437fb096f31474874c10f79329daece847 100644 (file)
@@ -602,14 +602,19 @@ static void user_busy (const char *name, uid_t uid)
        while ((utent = getutent ()) != NULL)
 #endif                         /* !USE_UTMPX */
        {
-               if (utent->ut_type != USER_PROCESS)
+               if (utent->ut_type != USER_PROCESS) {
                        continue;
-
+               }
                if (strncmp (utent->ut_user, name, sizeof utent->ut_user) != 0) {
                        continue;
                }
+               if (kill (utent->ut_pid, 0) != 0) {
+                       continue;
+               }
+
                fprintf (stderr,
-                        _("%s: user %s is currently logged in\n"), Prog, name);
+                        _("%s: user %s is currently logged in\n"),
+                        Prog, name);
                if (!fflg) {
 #ifdef WITH_AUDIT
                        audit_logger (AUDIT_DEL_USER, Prog,