]> git.ipfire.org Git - thirdparty/shadow.git/commitdiff
src/logoutd.c: Use STRNDUPA() instead of its pattern
authorAlejandro Colomar <alx@kernel.org>
Tue, 14 May 2024 16:15:55 +0000 (18:15 +0200)
committerSerge Hallyn <serge@hallyn.com>
Tue, 2 Jul 2024 02:40:11 +0000 (21:40 -0500)
STRNDUPA() is equivalent to automatic storage allocation (alloca(3))
+ ZUSTR2STP().

The benefits of this refactor are:

-  The allocation size is always correct, and needs no comments, since
   it's now automatically calculated by the macro.

-  STRNDUPA() is probably more familiar, since
   -  strndupa(3) is a libc function,
   -  STRNDUPA() is the obvious wrapper that
      calculates the size based on the input array.

-  We can remove ZUSTR2STP().

Signed-off-by: Alejandro Colomar <alx@kernel.org>
src/logoutd.c

index a0d0f36c17c5a1a5f70a394db3026d8f94a0d3f2..c63f934dbb2a96b4efa9534ee32514efbc004178 100644 (file)
 #include <sys/stat.h>
 #include <sys/types.h>
 #include <utmpx.h>
+
 #include "defines.h"
 #include "prototypes.h"
 #include "shadowlog.h"
 #include "sizeof.h"
-#include "string/strcpy/zustr2stp.h"
+#include "string/strdup/strndupa.h"
 
 
 /*
@@ -48,22 +49,16 @@ static void send_mesg_to_tty (int tty_fd);
 static int
 check_login(const struct utmpx *ut)
 {
-       char    user[sizeof(ut->ut_user) + 1];
-       char    line[sizeof(ut->ut_line) + 1];
+       char    *user;
+       char    *line;
        time_t  now;
 
-       ZUSTR2STP(user, ut->ut_user);
-       ZUSTR2STP(line, ut->ut_line);
+       user = STRNDUPA(ut->ut_user);
+       line = STRNDUPA(ut->ut_line);
 
        now = time(NULL);
 
-       /*
-        * Check if they are allowed to be logged in right now.
-        */
-       if (!isttytime(user, line, now)) {
-               return 0;
-       }
-       return 1;
+       return isttytime(user, line, now);
 }
 
 
@@ -177,7 +172,6 @@ main(int argc, char **argv)
                 */
                while ((ut = getutxent()) != NULL) {
                        int   tty_fd;
-                       char  user[sizeof(ut->ut_user) + 1];      // NUL
                        char  tty_name[sizeof(ut->ut_line) + 6];  // /dev/ + NUL
 
                        if (ut->ut_type != USER_PROCESS) {
@@ -229,10 +223,9 @@ main(int argc, char **argv)
                                kill (-ut->ut_pid, SIGKILL);
                        }
 
-                       ZUSTR2STP(user, ut->ut_user);
-
                        SYSLOG ((LOG_NOTICE,
-                                "logged off user '%s' on '%s'", user,
+                                "logged off user '%s' on '%s'",
+                                STRNDUPA(ut->ut_user),
                                 tty_name));
 
                        /*