New upstream version 4.15.1
This commit is contained in:
+37
-59
@@ -15,13 +15,16 @@
|
||||
#include <stdio.h>
|
||||
#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/zustr2stp.h"
|
||||
/*
|
||||
* Global variables
|
||||
*/
|
||||
const char *Prog;
|
||||
static const char Prog[] = "logoutd";
|
||||
|
||||
#ifndef DEFAULT_HUP_MESG
|
||||
#define DEFAULT_HUP_MESG _("login time exceeded\n\n")
|
||||
@@ -31,38 +34,31 @@ const char *Prog;
|
||||
#define HUP_MESG_FILE "/etc/logoutd.mesg"
|
||||
#endif
|
||||
|
||||
|
||||
/* local function prototypes */
|
||||
#ifdef USE_UTMPX
|
||||
static int check_login (const struct utmpx *ut);
|
||||
#else /* !USE_UTMPX */
|
||||
static int check_login (const struct utmp *ut);
|
||||
#endif /* !USE_UTMPX */
|
||||
static void send_mesg_to_tty (int tty_fd);
|
||||
|
||||
/*
|
||||
* check_login - check if user (struct utmpx/utmp) allowed to stay logged in
|
||||
*/
|
||||
#ifdef USE_UTMPX
|
||||
static int check_login (const struct utmpx *ut)
|
||||
#else /* !USE_UTMPX */
|
||||
static int check_login (const struct utmp *ut)
|
||||
#endif /* !USE_UTMPX */
|
||||
{
|
||||
char user[sizeof (ut->ut_user) + 1];
|
||||
time_t now;
|
||||
|
||||
/*
|
||||
* ut_user may not have the terminating NUL.
|
||||
*/
|
||||
strncpy (user, ut->ut_user, sizeof (ut->ut_user));
|
||||
user[sizeof (ut->ut_user)] = '\0';
|
||||
/*
|
||||
* check_login - check if user (struct utmpx) allowed to stay logged in
|
||||
*/
|
||||
static int
|
||||
check_login(const struct utmpx *ut)
|
||||
{
|
||||
char user[sizeof(ut->ut_user) + 1];
|
||||
char line[sizeof(ut->ut_line) + 1];
|
||||
time_t now;
|
||||
|
||||
ZUSTR2STP(user, ut->ut_user);
|
||||
ZUSTR2STP(line, ut->ut_line);
|
||||
|
||||
(void) time (&now);
|
||||
|
||||
/*
|
||||
* Check if they are allowed to be logged in right now.
|
||||
*/
|
||||
if (!isttytime (user, ut->ut_line, now)) {
|
||||
if (!isttytime(user, line, now)) {
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
@@ -116,23 +112,20 @@ static void send_mesg_to_tty (int tty_fd)
|
||||
*
|
||||
* logoutd is started at system boot time and enforces the login
|
||||
* time and port restrictions specified in /etc/porttime. The
|
||||
* utmpx/utmp file is periodically scanned and offending users are logged
|
||||
* utmp file is periodically scanned and offending users are logged
|
||||
* off from the system.
|
||||
*/
|
||||
int main (int argc, char **argv)
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
int i;
|
||||
int status;
|
||||
pid_t pid;
|
||||
int i;
|
||||
int status;
|
||||
pid_t pid;
|
||||
|
||||
#ifdef USE_UTMPX
|
||||
struct utmpx *ut;
|
||||
#else /* !USE_UTMPX */
|
||||
struct utmp *ut;
|
||||
#endif /* !USE_UTMPX */
|
||||
char user[sizeof (ut->ut_user) + 1]; /* terminating NUL */
|
||||
char tty_name[sizeof (ut->ut_line) + 6]; /* /dev/ + NUL */
|
||||
int tty_fd;
|
||||
struct utmpx *ut;
|
||||
char user[sizeof (ut->ut_user) + 1]; /* terminating NUL */
|
||||
char tty_name[sizeof (ut->ut_line) + 6]; /* /dev/ + NUL */
|
||||
int tty_fd;
|
||||
|
||||
if (1 != argc) {
|
||||
(void) fputs (_("Usage: logoutd\n"), stderr);
|
||||
@@ -164,39 +157,29 @@ int main (int argc, char **argv)
|
||||
/*
|
||||
* Start syslogging everything
|
||||
*/
|
||||
Prog = Basename (argv[0]);
|
||||
log_set_progname(Prog);
|
||||
log_set_logfd(stderr);
|
||||
|
||||
OPENLOG ("logoutd");
|
||||
OPENLOG (Prog);
|
||||
|
||||
/*
|
||||
* Scan the utmpx/utmp file once per minute looking for users that
|
||||
* Scan the utmp file once per minute looking for users that
|
||||
* are not supposed to still be logged in.
|
||||
*/
|
||||
while (true) {
|
||||
|
||||
/*
|
||||
* Attempt to re-open the utmpx/utmp file. The file is only
|
||||
* Attempt to re-open the utmp file. The file is only
|
||||
* open while it is being used.
|
||||
*/
|
||||
#ifdef USE_UTMPX
|
||||
setutxent ();
|
||||
#else /* !USE_UTMPX */
|
||||
setutent ();
|
||||
#endif /* !USE_UTMPX */
|
||||
setutxent();
|
||||
|
||||
/*
|
||||
* Read all of the entries in the utmpx/utmp file. The entries
|
||||
* Read all of the entries in the utmp file. The entries
|
||||
* for login sessions will be checked to see if the user
|
||||
* is permitted to be signed on at this time.
|
||||
*/
|
||||
#ifdef USE_UTMPX
|
||||
while ((ut = getutxent ()) != NULL)
|
||||
#else /* !USE_UTMPX */
|
||||
while ((ut = getutent ()) != NULL)
|
||||
#endif /* !USE_UTMPX */
|
||||
{
|
||||
while ((ut = getutxent()) != NULL) {
|
||||
if (ut->ut_type != USER_PROCESS) {
|
||||
continue;
|
||||
}
|
||||
@@ -228,7 +211,7 @@ int main (int argc, char **argv)
|
||||
tty_name[0] = '\0';
|
||||
}
|
||||
|
||||
strncat (tty_name, ut->ut_line, UT_LINESIZE);
|
||||
strncat(tty_name, ut->ut_line, NITEMS(ut->ut_line));
|
||||
#ifndef O_NOCTTY
|
||||
#define O_NOCTTY 0
|
||||
#endif
|
||||
@@ -246,8 +229,7 @@ int main (int argc, char **argv)
|
||||
kill (-ut->ut_pid, SIGKILL);
|
||||
}
|
||||
|
||||
strncpy (user, ut->ut_user, sizeof (user) - 1);
|
||||
user[sizeof (user) - 1] = '\0';
|
||||
ZUSTR2STP(user, ut->ut_user);
|
||||
|
||||
SYSLOG ((LOG_NOTICE,
|
||||
"logged off user '%s' on '%s'", user,
|
||||
@@ -259,11 +241,7 @@ int main (int argc, char **argv)
|
||||
exit (EXIT_SUCCESS);
|
||||
}
|
||||
|
||||
#ifdef USE_UTMPX
|
||||
endutxent ();
|
||||
#else /* !USE_UTMPX */
|
||||
endutent ();
|
||||
#endif /* !USE_UTMPX */
|
||||
endutxent();
|
||||
|
||||
#ifndef DEBUG
|
||||
sleep (60);
|
||||
|
||||
Reference in New Issue
Block a user