Add libutempter, an interface to record user sessions to utmp and wtmp files

This commit is contained in:
Michael Nottebrock 2004-08-29 22:54:38 +00:00
parent abab1efce8
commit 2acccefd8e
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=117607
8 changed files with 183 additions and 0 deletions

View file

@ -209,6 +209,7 @@
SUBDIR += libcdio
SUBDIR += libchk
SUBDIR += libretto-config
SUBDIR += libutempter
SUBDIR += lineakd
SUBDIR += linneighborhood
SUBDIR += linux-acu

View file

@ -0,0 +1,20 @@
# New ports collection makefile for: libutempter
# Date created: 18 Aug 2004 14:50:41 CEST
# Whom: Michael Nottebrock <lofi@freebsd.org>,
# David Malone <dwmalone@maths.tcd.ie>
# $FreeBSD$
PORTNAME= libutempter
PORTVERSION= 1.1.1
CATEGORIES= sysutils
MASTER_SITES= ftp://ftp.altlinux.org/pub/people/ldv/utempter/
MAINTAINER= ports@FreeBSD.org
COMMENT= Interface to record user sessions to utmp and wtmp files
USE_BZIP2= yes
USE_GMAKE= yes
INSTALLS_SHLIB= yes
NO_FILTER_SHLIBS=yes
.include <bsd.port.mk>

View file

@ -0,0 +1,2 @@
MD5 (libutempter-1.1.1.tar.bz2) = 0d472416e0234ece562c38a037fbaba0
SIZE (libutempter-1.1.1.tar.bz2) = 13668

View file

@ -0,0 +1,47 @@
--- Makefile.orig Tue Dec 24 12:25:11 2002
+++ Makefile Wed Aug 18 15:54:06 2004
@@ -30,12 +30,12 @@
TARGETS = $(PROJECT) $(SHAREDLIB) $(STATICLIB)
INSTALL = install
-libdir = /usr/lib
-libexecdir = /usr/lib
-includedir = /usr/include
-DESTDIR =
+libdir = /lib
+libexecdir = /libexec
+includedir = /include
+DESTDIR = $(PREFIX)
-CFLAGS = $(RPM_OPT_FLAGS) -DLIBEXECDIR=\"$(libexecdir)\"
+CFLAGS+= -DLIBEXECDIR=\"$(PREFIX)$(libexecdir)\"
all: $(TARGETS)
@@ -51,13 +51,21 @@
iface.o: iface.c utempter.h
+$(PROJECT).o: $(PROJECT).c
+
+$(PROJECT): $(PROJECT).o
+ $(LINK.o) $(PROJECT).o -o $(PROJECT) -lutil
+
+
install:
- $(INSTALL) -pD -m2711 $(PROJECT) $(DESTDIR)$(libexecdir)/$(PROJECT)/$(PROJECT)
- $(INSTALL) -pD -m644 $(PROJECT).h $(DESTDIR)$(includedir)/$(PROJECT).h
- $(INSTALL) -pD -m755 $(SHAREDLIB) $(DESTDIR)$(libdir)/$(SHAREDLIB).$(VERSION)
- $(INSTALL) -pD -m644 $(STATICLIB) $(DESTDIR)$(libdir)/$(STATICLIB)
+ mkdir -p $(DESTDIR)$(libexecdir)/$(PROJECT) $(DESTDIR)$(includedir) \
+ $(DESTDIR)$(libdir)
+ $(INSTALL) -m4711 $(PROJECT) $(DESTDIR)$(libexecdir)/$(PROJECT)/$(PROJECT)
+ $(INSTALL) -m644 $(PROJECT).h $(DESTDIR)$(includedir)/$(PROJECT).h
+ $(INSTALL) -m755 $(SHAREDLIB) $(DESTDIR)$(libdir)/$(SHAREDLIB).$(VERSION)
+ $(INSTALL) -m644 $(STATICLIB) $(DESTDIR)$(libdir)/$(STATICLIB)
ln -s $(SHAREDLIB).$(VERSION) $(DESTDIR)$(libdir)/$(SONAME)
ln -s $(SONAME) $(DESTDIR)$(libdir)/$(SHAREDLIB)
clean:
- $(RM) $(TARGETS) iface.o iface.os core *~
+ $(RM) $(TARGETS) $(PROJECT).o iface.o iface.os core *~

View file

@ -0,0 +1,18 @@
--- iface.c.orig Wed Aug 18 16:09:25 2004
+++ iface.c Wed Aug 18 16:11:38 2004
@@ -32,6 +32,15 @@
#include <sys/wait.h>
#include <sys/types.h>
+#ifndef TEMP_FAILURE_RETRY
+#define TEMP_FAILURE_RETRY(expression) \
+ (__extension__ \
+ ({ long int __result; \
+ do __result = (long int) (expression); \
+ while (__result == -1L && errno == EINTR); \
+ __result; }))
+#endif
+
extern int getresgid (gid_t *rgid, gid_t *egid, gid_t *sgid);
#include "utempter.h"

View file

@ -0,0 +1,76 @@
--- utempter.c.orig Wed Aug 18 15:04:15 2004
+++ utempter.c Wed Aug 18 15:16:18 2004
@@ -29,11 +29,11 @@
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
-#include <pty.h>
#include <pwd.h>
#include <sys/ioctl.h>
#include <sys/stat.h>
#include <utmp.h>
+#include <libutil.h>
#define DEV_PREFIX "/dev/"
#define DEV_PREFIX_LEN (sizeof(DEV_PREFIX)-1)
@@ -102,42 +102,29 @@
pid_t pid, int add)
{
struct utmp ut;
- int offset = strlen (term) - sizeof (ut.ut_id);
memset (&ut, 0, sizeof (ut));
- strncpy (ut.ut_user, user, sizeof (ut.ut_user));
+ strncpy (ut.ut_name, user, sizeof (ut.ut_name));
strncpy (ut.ut_line, term, sizeof (ut.ut_line));
- if (offset < 0)
- offset = 0;
- strncpy (ut.ut_id, term + offset, sizeof (ut.ut_id));
-
if (host)
strncpy (ut.ut_host, host, sizeof (ut.ut_host));
- if (add)
- ut.ut_type = USER_PROCESS;
- else
- ut.ut_type = DEAD_PROCESS;
-
- ut.ut_pid = pid;
-
- gettimeofday (&ut.ut_tv, 0);
+ time (&ut.ut_time);
- setutent ();
- if (!pututline (&ut))
- {
+ if (add) {
+ login (&ut);
+ } else {
+ if (logout (term) != 1) {
#ifdef UTEMPTER_DEBUG
- fprintf (stderr, "utempter: pututline: %s\n",
- strerror (errno));
+ fprintf (stderr, "utempter: logout: %s\n",
+ strerror (errno));
#endif
exit (EXIT_FAILURE);
+ }
}
- endutent ();
-
- updwtmp (_PATH_WTMP, &ut);
#ifdef UTEMPTER_DEBUG
fprintf (stderr,
@@ -203,7 +190,7 @@
exit (EXIT_FAILURE);
}
- device = ptsname (STDIN_FILENO);
+ device = ttyname (STDIN_FILENO);
if (!device)
{
#ifdef UTEMPTER_DEBUG

View file

@ -0,0 +1,12 @@
The libutempter library provides interface for terminal emulators such as
screen and xterm to record user sessions to utmp and wtmp files.
The utempter is a privileged helper used by libutempter library to manipulate
utmp and wtmp files.
This implementation is based on ideas of RedHat's utempter by Erik Troan
(version 0.5.2 at the moment of writing).
There are two interfaces supported: old and new.
New API is recommended for new applications, old - for compatibility with
old software.

View file

@ -0,0 +1,7 @@
include/utempter.h
lib/libutempter.a
lib/libutempter.so
lib/libutempter.so.0
lib/libutempter.so.1.1.1
libexec/utempter/utempter
@dirrm libexec/utempter