Репозиторий Sisyphus
Последнее обновление: 1 октября 2023 | Пакетов: 18631 | Посещений: 37894968
en ru br
Репозитории ALT
S:1.1.2-alt1
5.1: 1.0.5-alt1
4.1: 1.0.4-alt0.M41.1
4.0: 1.0.2-alt1
www.altlinux.org/Changes

Группа :: Система/X11
Пакет: sessreg

 Главная   Изменения   Спек   Патчи   Исходники   Загрузить   Gear   Bugs and FR  Repocop 

pax_global_header00006660000000000000000000000064116504410070014510gustar00rootroot0000000000000052 comment=7ac51a652bfb8423604bb1a120568d44516c9de9
sessreg-1.0.7/000075500000000000000000000000001165044100700131665ustar00rootroot00000000000000sessreg-1.0.7/.gitignore000064400000000000000000000017751165044100700151700ustar00rootroot00000000000000#
# X.Org module default exclusion patterns
# The next section if for module specific patterns
#
# Do not edit the following section
# GNU Build System (Autotools)
aclocal.m4
autom4te.cache/
autoscan.log
ChangeLog
compile
config.guess
config.h
config.h.in
config.log
config-ml.in
config.py
config.status
config.status.lineno
config.sub
configure
configure.scan
depcomp
.deps/
INSTALL
install-sh
.libs/
libtool
libtool.m4
ltmain.sh
lt~obsolete.m4
ltoptions.m4
ltsugar.m4
ltversion.m4
Makefile
Makefile.in
mdate-sh
missing
mkinstalldirs
*.pc
py-compile
stamp-h?
symlink-tree
texinfo.tex
ylwrap

# Do not edit the following section
# Edit Compile Debug Document Distribute
*~
*.[0-9]
*.[0-9]x
*.bak
*.bin
core
*.dll
*.exe
*-ISO*.bdf
*-JIS*.bdf
*-KOI8*.bdf
*.kld
*.ko
*.ko.cmd
*.lai
*.l[oa]
*.[oa]
*.obj
*.patch
*.so
*.pcf.gz
*.pdb
*.tar.bz2
*.tar.gz
#
# Add & Override patterns for sessreg
#
# Edit the following section as needed
# For example, !report.pc overrides *.pc. See 'man gitignore'
#
filenames.sed
sessreg
sessreg-1.0.7/AUTHORS000064400000000000000000000002301165044100700142310ustar00rootroot00000000000000Original Author: Keith Packard, MIT X Consortium

Lastlog support and dynamic utmp entry allocation
by Andreas Stolcke <stolcke@icsi.berkeley.edu>

sessreg-1.0.7/COPYING000064400000000000000000000043271165044100700142270ustar00rootroot00000000000000Copyright 1990, 1998 The Open Group

Permission to use, copy, modify, distribute, and sell this software and its
documentation for any purpose is hereby granted without fee, provided that
the above copyright notice appear in all copies and that both that
copyright notice and this permission notice appear in supporting
documentation.

The above copyright notice and this permission notice shall be included
in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.

Except as contained in this notice, the name of The Open Group shall
not be used in advertising or otherwise to promote the sale, use or
other dealings in this Software without prior written authorization
from The Open Group.

Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved.

Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the "Software"),
to deal in the Software without restriction, including without limitation
the rights to use, copy, modify, merge, publish, distribute, sublicense,
and/or sell copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice (including the next
paragraph) shall be included in all copies or substantial portions of the
Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.
sessreg-1.0.7/Makefile.am000064400000000000000000000031041165044100700152200ustar00rootroot00000000000000# Copyright 2005 Red Hat, Inc.
#
# Permission to use, copy, modify, distribute, and sell this software and its
# documentation for any purpose is hereby granted without fee, provided that
# the above copyright notice appear in all copies and that both that
# copyright notice and this permission notice appear in supporting
# documentation, and that the name of Red Hat not be used in
# advertising or publicity pertaining to distribution of the software without
# specific, written prior permission. Red Hat makes no
# representations about the suitability of this software for any purpose. It
# is provided "as is" without express or implied warranty.
#
# RED HAT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
# EVENT SHALL RED HAT BE LIABLE FOR ANY SPECIAL, INDIRECT OR
# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
# PERFORMANCE OF THIS SOFTWARE.

SUBDIRS = man
bin_PROGRAMS = sessreg

AM_CFLAGS = $(CWARNFLAGS) $(SESSREG_CFLAGS)

sessreg_SOURCES = \
sessreg.h \
sessreg.c

if LINT
ALL_LINT_FLAGS=$(LINT_FLAGS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
$(AM_CPPFLAGS) $(CPPFLAGS)

lint:
$(LINT) $(ALL_LINT_FLAGS) $(sessreg_SOURCES)
endif LINT

MAINTAINERCLEANFILES = ChangeLog INSTALL

.PHONY: ChangeLog INSTALL

INSTALL:
$(INSTALL_CMD)

ChangeLog:
$(CHANGELOG_CMD)

dist-hook: ChangeLog INSTALL
sessreg-1.0.7/README000064400000000000000000000014631165044100700140520ustar00rootroot00000000000000Sessreg is a simple program for managing utmp/wtmp entries for X sessions.
It was originally written for use with xdm, but may also be used with
other display managers such as gdm or kdm.

All questions regarding this software should be directed at the
Xorg mailing list:

http://lists.freedesktop.org/mailman/listinfo/xorg

Please submit bug reports to the Xorg bugzilla:

https://bugs.freedesktop.org/enter_bug.cgi?product=xorg

The master development code repository can be found at:

git://anongit.freedesktop.org/git/xorg/app/sessreg

http://cgit.freedesktop.org/xorg/app/sessreg

For patch submission instructions, see:

http://www.x.org/wiki/Development/Documentation/SubmittingPatches

For more information on the git code manager, see:

http://wiki.x.org/wiki/GitPage

sessreg-1.0.7/autogen.sh000075500000000000000000000003041165044100700151640ustar00rootroot00000000000000#! /bin/sh

srcdir=`dirname $0`
test -z "$srcdir" && srcdir=.

ORIGDIR=`pwd`
cd $srcdir

autoreconf -v --install || exit 1
cd $ORIGDIR || exit $?

$srcdir/configure --enable-maintainer-mode "$@"

sessreg-1.0.7/configure.ac000064400000000000000000000050451165044100700154600ustar00rootroot00000000000000dnl Copyright 2005 Red Hat, Inc.
dnl
dnl Permission to use, copy, modify, distribute, and sell this software and its
dnl documentation for any purpose is hereby granted without fee, provided that
dnl the above copyright notice appear in all copies and that both that
dnl copyright notice and this permission notice appear in supporting
dnl documentation, and that the name of Red Hat not be used in
dnl advertising or publicity pertaining to distribution of the software without
dnl specific, written prior permission. Red Hat makes no
dnl representations about the suitability of this software for any purpose. It
dnl is provided "as is" without express or implied warranty.
dnl
dnl RED HAT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
dnl INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
dnl EVENT SHALL RED HAT BE LIABLE FOR ANY SPECIAL, INDIRECT OR
dnl CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
dnl DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
dnl TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
dnl PERFORMANCE OF THIS SOFTWARE.
dnl
dnl Process this file with autoconf to create configure.

# Initialize Autoconf
AC_PREREQ([2.60])
AC_INIT([sessreg], [1.0.7],
[https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], [sessreg])
AC_CONFIG_SRCDIR([Makefile.am])
AC_CONFIG_HEADERS([config.h])
AC_USE_SYSTEM_EXTENSIONS
AC_SYS_LARGEFILE

# Initialize Automake
AM_INIT_AUTOMAKE([foreign dist-bzip2])
AM_MAINTAINER_MODE

# Require X.Org macros 1.8 or later for MAN_SUBSTS set by XORG_MANPAGE_SECTIONS
m4_ifndef([XORG_MACROS_VERSION],
[m4_fatal([must install xorg-macros 1.8 or later before running autoconf/autogen])])
XORG_MACROS_VERSION(1.8)
XORG_DEFAULT_OPTIONS
XORG_WITH_LINT

# Checks for header files.
AC_CHECK_HEADERS([lastlog.h pwd.h utmp.h utmpx.h sys/param.h])

# Checks for typedefs, structures, and compiler characteristics.
AC_CHECK_MEMBERS([
struct utmp.ut_host,
struct utmp.ut_id,
struct utmp.ut_pid,
struct utmp.ut_type], [], [], [
#include <sys/types.h>
#include <utmp.h>
])
AC_CHECK_MEMBERS([struct utmpx.ut_syslen], [], [], [#include <utmpx.h>])
AC_CHECK_TYPES([
struct lastlog], [], [],[
#include <sys/types.h>
#ifdef HAVE_UTMP_H
#include <utmp.h>
#endif
#ifdef HAVE_LASTLOG_H
#include <lastlog.h>
#endif
])

# Checks for library functions.
AC_CHECK_FUNCS([pututline updwtmpx utmpxname])

# Obtain compiler/linker options for depedencies
PKG_CHECK_MODULES(SESSREG, xproto)

AC_CONFIG_FILES([
Makefile
man/Makefile])
AC_OUTPUT
sessreg-1.0.7/man/000075500000000000000000000000001165044100700137415ustar00rootroot00000000000000sessreg-1.0.7/man/Makefile.am000064400000000000000000000012361165044100700157770ustar00rootroot00000000000000
appmandir = $(APP_MAN_DIR)
appman_PRE = sessreg.man
appman_DATA = $(appman_PRE:man=$(APP_MAN_SUFFIX))

EXTRA_DIST = $(appman_PRE) filenames.sed.c
CLEANFILES = $(appman_DATA) filenames.sed
SUFFIXES = .$(APP_MAN_SUFFIX) .man

AM_CPPFLAGS = -I$(top_builddir) -I$(top_srcdir)
filenames.sed: filenames.sed.c
$(AM_V_GEN)$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
$(AM_CPPFLAGS) $(CPPFLAGS) $(srcdir)/filenames.sed.c | \
grep 's|__' > $@

# String replacements in MAN_SUBSTS now come from xorg-macros.m4 via configure
MAN_SUBSTS += -f filenames.sed

sessreg.$(APP_MAN_SUFFIX): filenames.sed

.man.$(APP_MAN_SUFFIX):
$(AM_V_GEN)$(SED) $(MAN_SUBSTS) < $< > $@
sessreg-1.0.7/man/filenames.sed.c000064400000000000000000000007221165044100700166230ustar00rootroot00000000000000#include "sessreg.h"

#ifdef UTMPX_FILE
# define UTF UTMPX_FILE
# define UTM utmpx
#else
# define UTF UTMP_FILE
# define UTM utmp
#endif

#ifdef WTMPX_FILE
# define WTF WTMPX_FILE
#else
# define WTF WTMP_FILE
#endif

#ifndef TTYS_FILE
# define TTYS_FILE "/etc/ttys"
#endif

#ifndef LLOG_FILE
# define LLOG_FILE "/var/log/lastlog"
#endif

s|__utmp_manpage__|UTM|g
s|__utmp_file__|UTF|g
s|__wtmp_file__|WTF|g
s|__ttys_file__|TTYS_FILE|g
s|__lastlog_file__|LLOG_FILE|g
sessreg-1.0.7/man/sessreg.man000064400000000000000000000125651165044100700161220ustar00rootroot00000000000000.\" $Xorg: sessreg.man,v 1.4 2001/02/09 02:05:40 xorgcvs Exp $
.\" Copyright 1994, 1998 The Open Group
.\"
.\" Permission to use, copy, modify, distribute, and sell this software and its
.\" documentation for any purpose is hereby granted without fee, provided that
.\" the above copyright notice appear in all copies and that both that
.\" copyright notice and this permission notice appear in supporting
.\" documentation.
.\"
.\" The above copyright notice and this permission notice shall be included
.\" in all copies or substantial portions of the Software.
.\"
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
.\" IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
.\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
.\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
.\" OTHER DEALINGS IN THE SOFTWARE.
.\"
.\" Except as contained in this notice, the name of The Open Group shall
.\" not be used in advertising or otherwise to promote the sale, use or
.\" other dealings in this Software without prior written authorization
.\" from The Open Group.
.\"
.\" $XFree86: xc/programs/xdm/sessreg.man,v 1.7 2001/04/23 20:31:09 dawes Exp $
.\"
.TH SESSREG __appmansuffix__ __xorgversion__
.SH NAME
sessreg \- manage utmp/wtmp entries for non-init clients
.SH SYNOPSIS
.B sessreg
[-w \fIwtmp-file\fP]
[-u \fIutmp-file\fP]
[-L \fIlastlog-file\fP]
[-l \fIline-name\fP]
[-h \fIhost-name\fP]
[-s \fIslot-number\fP]
[-x \fIXservers-file\fP]
[-t \fIttys-file\fP]
[-a]
[-d]
\fIuser-name\fP
.SH DESCRIPTION
.PP
\fISessreg\fP is a simple program for managing utmp/wtmp and lastlog
entries for xdm sessions.
.PP
System V has a better interface to utmp than BSD; it
dynamically allocates entries in the file, instead of writing them at fixed
positions indexed by position in
.BR __ttys_file__ .
.PP
To manage BSD-style utmp files, \fIsessreg\fP has two strategies. In
conjunction with xdm, the -x option counts the number of lines in
.B __ttys_file__
and then adds to that the number of the line in the Xservers file which
specifies the display. The display name must be specified as the
"line-name" using the -l option. This sum is used as the "slot-number" in
the utmp file that this entry will be written at. In the more general case,
the -s option specifies the slot-number directly. If for some strange reason
your system uses a file other than
.B __ttys_file__
to manage init, the -t option can direct
\fIsessreg\fP to look elsewhere for a count of terminal sessions.
.PP
Conversely, System V managers will not ever need to use these options (-x,
-s and -t). To make the program easier to document and explain,
\fIsessreg\fP accepts the BSD-specific flags in the System V
environment and ignores them.
.PP
BSD and Linux also have a host-name field in the utmp file which doesn't
exist in System V. This option is also ignored by the System V version of
\fIsessreg\fP.
.SH USAGE
.PP
In Xstartup, place a call like:
.nf

sessreg -a -l $DISPLAY -x /etc/X11/xdm/Xservers $USER

.fi
and in Xreset:
.nf

sessreg -d -l $DISPLAY -x /etc/X11/xdm/Xservers $USER
.fi
.SH OPTIONS
.IP "\fB-w\fP \fIwtmp-file\fP"
This specifies an alternate wtmp file, instead of
.BR __wtmp_file__ .
The special name "none" disables writing records to the wtmp file.
.IP "\fB-u\fP \fIutmp-file\fP"
This specifies an alternate utmp file, instead of
.BR __utmp_file__ .
The special name "none" disables writing records to the utmp file.
.IP "\fB-L\fP \fIlastlog-file\fP"
This specifies an alternate lastlog file, instead of
.BR __lastlog_file__ ,
if the platform supports lastlog files.
The special name "none" disables writing records to the lastlog file.
.IP "\fB-l\fP \fIline-name\fP"
This describes the "line" name of the entry. For terminal sessions,
this is the final pathname segment of the terminal device filename
(e.g. ttyd0). For X sessions, it should probably be the local display name
given to the users session (e.g. :0). If none is specified, the
terminal name will be determined with ttyname(__libmansuffix__) and stripped of leading
components.
.IP "\fB-h\fP \fIhost-name\fP"
This is set for BSD hosts to indicate that the session was initiated from
a remote host. In typical xdm usage, this options is not used.
.IP "\fB-s\fP \fIslot-number\fP"
Each potential session has a unique slot number in BSD systems, most are
identified by the position of the \fIline-name\fP in the
.BR __ttys_file__ file.
This option overrides the default position determined with ttyslot(__libmansuffix__).
This option is inappropriate for use with xdm, the -x option is more useful.
.IP "\fB-x\fP \fIXservers-file\fP"
As X sessions are one-per-display, and each display is entered in this file,
this options sets the \fIslot-number\fP to be the number of lines in
the \fIttys-file\fP plus the index into this file that the \fIline-name\fP
is found.
.IP "\fB-t\fP \fIttys-file\fP"
This specifies an alternate file which the \fI-x\fP option will use to count
the number of terminal sessions on a host.
.IP "\fB-a\fP"
This session should be added to utmp/wtmp.
.IP "\fB-d\fP"
This session should be deleted from utmp/wtmp. One of -a/-d must
be specified.
.SH "SEE ALSO"
.BR xdm (__appmansuffix__),
.BR __utmp_manpage__ (__filemansuffix__)
.SH AUTHOR
Keith Packard, MIT X Consortium
sessreg-1.0.7/sessreg.c000064400000000000000000000377261165044100700150240ustar00rootroot00000000000000/*
* Copyright 1990, 1998 The Open Group
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
* the above copyright notice appear in all copies and that both that
* copyright notice and this permission notice appear in supporting
* documentation.
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
* OTHER DEALINGS IN THE SOFTWARE.
*
* Except as contained in this notice, the name of The Open Group shall
* not be used in advertising or otherwise to promote the sale, use or
* other dealings in this Software without prior written authorization
* from The Open Group.
*
*/

/*
* Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice (including the next
* paragraph) shall be included in all copies or substantial portions of the
* Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*/

/*
* Author: Keith Packard, MIT X Consortium
* Lastlog support and dynamic utmp entry allocation
* by Andreas Stolcke <stolcke@icsi.berkeley.edu>
*/

/*
* sessreg
*
* simple wtmp/utmp frobber
*
* usage: sessreg [ -w <wtmp-file> ] [ -u <utmp-file> ]
* [ -l <line> ]
* [ -L <lastlog-file> ] / #ifdef USE_LASTLOG
* [ -h <host-name> ] / BSD only
* [ -s <slot-number> ] [ -x Xservers-file ] / BSD only
* [ -t <ttys-file> ] / BSD only
* [ -a ] [ -d ] user-name
*
* one of -a or -d must be specified
*/

#include "sessreg.h"

#include <X11/Xos.h>
#include <X11/Xfuncs.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#ifdef USE_UTMP
static void set_utmp (struct utmp *u, char *line, char *user, char *host,
time_t date, int addp);
#endif

#ifdef USE_UTMPX
static void set_utmpx (struct utmpx *u, const char *line, const char *user,
const char *host, time_t date, int addp);
#endif

static int wflag, uflag, lflag;
static const char *wtmp_file, *utmp_file;
static char *line;
#ifdef USE_UTMPX
#ifdef HAVE_UPDWTMPX
static const char *wtmpx_file = NULL;
#endif
#ifdef HAVE_UTMPXNAME
static const char *utmpx_file = NULL;
#endif
#endif
static int utmp_none, wtmp_none;
/*
* BSD specific variables. To make life much easier for Xstartup/Xreset
* maintainers, these arguments are accepted but ignored for sysV
*/
static int hflag, xflag, tflag;
static char *host_name = NULL;
#if defined(USE_UTMP) && !defined(HAVE_PUTUTLINE)
static int sflag;
static int slot_number;
#endif
static char *xservers_file, *ttys_file;
static char *user_name;
static int aflag, dflag;
#ifdef USE_LASTLOG
static const char *llog_file;
static int llog_none, Lflag;
#endif

static char *program_name;

#if defined(USE_UTMP) && !defined(HAVE_PUTUTLINE)
static int findslot (char *line_name, char *host_name, int addp, int slot);
static int Xslot (char *ttys_file, char *servers_file, char *tty_line,
char *host_name, int addp);
#endif

static int
usage (int x)
{
if (x) {
fprintf (stderr, "%s: usage %s {-a -d} [-w wtmp-file] [-u utmp-file]", program_name, program_name);
#ifdef USE_LASTLOG
fprintf (stderr, " [-L lastlog-file]");
#endif
fprintf (stderr, "\n");
fprintf (stderr, " [-t ttys-file] [-l line-name] [-h host-name]\n");
fprintf (stderr, " [-s slot-number] [-x servers-file] user-name\n");
exit (1);
}
return x;
}

static char *
getstring (char ***avp, int *flagp)
{
char **a = *avp;

usage ((*flagp)++);
if (*++*a)
return *a;
++a;
usage (!*a);
*avp = a;
return *a;
}

#if defined(USE_UTMP) && !defined(HAVE_PUTUTLINE)
static int
syserr (int x, const char *s)
{
if (x == -1) {
perror (s);
exit (1);
}
return x;
}
#endif

static int
sysnerr (int x, const char *s)
{
if (x == 0) {
perror (s);
exit (1);
}
return x;
}

int
main (int argc, char **argv)
{
#if defined(USE_UTMP) && !defined(HAVE_PUTUTLINE)
int utmp;
#endif
#ifndef USE_UTMPX
int wtmp;
#endif
time_t current_time;
#ifdef USE_UTMP
struct utmp utmp_entry;
#endif
#ifdef USE_UTMPX
struct utmpx utmpx_entry;
#endif

program_name = argv[0];
while (*++argv && **argv == '-') {
switch (*++*argv) {
case 'w':
wtmp_file = getstring (&argv, &wflag);
if (!strcmp (wtmp_file, "none"))
wtmp_none = 1;
break;
case 'u':
utmp_file = getstring (&argv, &uflag);
if (!strcmp (utmp_file, "none"))
utmp_none = 1;
break;
#ifdef USE_LASTLOG
case 'L':
llog_file = getstring (&argv, &Lflag);
if (!strcmp (llog_file, "none"))
llog_none = 1;
break;
#endif
case 't':
ttys_file = getstring (&argv, &tflag);
break;
case 'l':
line = getstring (&argv, &lflag);
break;
case 'h':
host_name = getstring (&argv, &hflag);
break;
case 's':
#if defined(USE_UTMP) && !defined(HAVE_PUTUTLINE)
slot_number = atoi (getstring (&argv, &sflag));
#endif
break;
case 'x':
xservers_file = getstring (&argv, &xflag);
break;
case 'a':
aflag++;
break;
case 'd':
dflag++;
break;
default:
usage (1);
}
}
usage (!(user_name = *argv++));
usage (*argv != NULL);
/*
* complain if neither aflag nor dflag are set,
* or if both are set.
*/
usage (!(aflag ^ dflag));
usage (xflag && !lflag);
/* set up default file names */
if (!wflag) {
wtmp_file = WTMP_FILE;
#if defined(USE_UTMPX) && defined(HAVE_UPDWTMPX)
wtmpx_file = WTMPX_FILE;
#endif
}
#ifndef NO_UTMP
if (!uflag) {
utmp_file = UTMP_FILE;
#if defined(USE_UTMPX) && defined(HAVE_UTMPXNAME)
utmpx_file = UTMPX_FILE;
#endif
}
#else
utmp_none = 1;
#endif
#ifdef USE_LASTLOG
if (!Lflag)
llog_file = LLOG_FILE;
#endif
#if defined(USE_UTMP) && !defined(HAVE_PUTUTLINE)
if (!tflag)
ttys_file = TTYS_FILE;
if (!sflag && !utmp_none) {
if (xflag)
sysnerr (slot_number = Xslot (ttys_file, xservers_file, line, host_name, aflag), "Xslot");
else
sysnerr (slot_number = ttyslot (), "ttyslot");
}
#endif
if (!lflag) {
sysnerr ((line = ttyname (0)) != NULL, "ttyname");
if (strncmp(line, "/dev/", 5) == 0)
line += 5;
}
time (&current_time);
#ifdef USE_UTMP
set_utmp (&utmp_entry, line, user_name, host_name, current_time, aflag);
#endif

#ifdef USE_UTMPX
/* need to set utmpxname() before calling set_utmpx() for
UtmpxIdOpen to work */
# ifdef HAVE_UTMPXNAME
if (utmpx_file != NULL) {
utmpxname (utmpx_file);
}
# endif
set_utmpx (&utmpx_entry, line, user_name,
host_name, current_time, aflag);
#endif

if (!utmp_none) {
#ifdef USE_UTMPX
# ifdef HAVE_UTMPXNAME
if (utmpx_file != NULL)
# endif
{
setutxent ();
(void) getutxid (&utmpx_entry);
pututxline (&utmpx_entry);
endutxent ();
}
#endif
#ifdef USE_UTMP
# ifdef HAVE_PUTUTLINE
utmpname (utmp_file);
setutent ();
(void) getutid (&utmp_entry);
pututline (&utmp_entry);
endutent ();
# else
utmp = open (utmp_file, O_RDWR);
if (utmp != -1) {
syserr ((int) lseek (utmp, (long) slot_number * sizeof (struct utmp), 0), "lseek");
sysnerr (write (utmp, (char *) &utmp_entry, sizeof (utmp_entry))
== sizeof (utmp_entry), "write utmp entry");
close (utmp);
}
# endif
#endif /* USE_UTMP */
}
if (!wtmp_none) {
#ifdef USE_UTMPX
# ifdef HAVE_UPDWTMPX
if (wtmpx_file != NULL) {
updwtmpx(wtmpx_file, &utmpx_entry);
}
# endif
#else
wtmp = open (wtmp_file, O_WRONLY|O_APPEND);
if (wtmp != -1) {
sysnerr (write (wtmp, (char *) &utmp_entry, sizeof (utmp_entry))
== sizeof (utmp_entry), "write wtmp entry");
close (wtmp);
}
#endif
}
#ifdef USE_LASTLOG
if (aflag && !llog_none) {
int llog;
struct passwd *pwd = getpwnam(user_name);

sysnerr( pwd != NULL, "get user id");
llog = open (llog_file, O_RDWR);

if (llog != -1) {
struct lastlog ll;

sysnerr (lseek(llog, (long) pwd->pw_uid*sizeof(ll), 0)
!= -1, "seeking lastlog entry");
memset(&ll, 0, sizeof(ll));
ll.ll_time = current_time;
if (line)
(void) strncpy (ll.ll_line, line, sizeof (ll.ll_line));
if (host_name)
(void) strncpy (ll.ll_host, host_name, sizeof (ll.ll_host));

sysnerr (write (llog, (char *) &ll, sizeof (ll))
== sizeof (ll), "write lastlog entry");
close (llog);
}
}
#endif
return 0;
}

/*
* fill in the appropriate records of the utmp entry
*/

#ifdef USE_UTMP
static void
set_utmp (struct utmp *u, char *line, char *user, char *host, time_t date, int addp)
{
memset (u, 0, sizeof (*u));
if (line)
(void) strncpy (u->ut_line, line, sizeof (u->ut_line));
else
memset (u->ut_line, 0, sizeof (u->ut_line));
if (addp && user)
(void) strncpy (u->ut_name, user, sizeof (u->ut_name));
else
memset (u->ut_name, 0, sizeof (u->ut_name));
#ifdef HAVE_STRUCT_UTMP_UT_ID
if (line) {
int i;
/*
* this is a bit crufty, but
* follows the apparent conventions in
* the ttys file. ut_id is only 4 bytes
* long, and the last 4 bytes of the line
* name are written into it, left justified.
*/
i = strlen (line);
if (i >= sizeof (u->ut_id))
i -= sizeof (u->ut_id);
else
i = 0;
(void) strncpy (u->ut_id, line + i, sizeof (u->ut_id));
} else
memset (u->ut_id, 0, sizeof (u->ut_id));
#endif
#ifdef HAVE_STRUCT_UTMP_UT_PID
if (addp)
u->ut_pid = getppid ();
else
u->ut_pid = 0;
#endif
#ifdef HAVE_STRUCT_UTMP_UT_TYPE
if (addp)
u->ut_type = USER_PROCESS;
else
u->ut_type = DEAD_PROCESS;
#endif
#ifdef HAVE_STRUCT_UTMP_UT_HOST
if (addp && host)
(void) strncpy (u->ut_host, host, sizeof (u->ut_host));
else
memset (u->ut_host, 0, sizeof (u->ut_host));
#endif
u->ut_time = date;
}
#endif /* USE_UTMP */

#ifdef USE_UTMPX
static int
UtmpxIdOpen( char *utmpId )
{
struct utmpx *u; /* pointer to entry in utmp file */
int status = 1; /* return code */

setutxent();

while ( (u = getutxent()) != NULL ) {

if ( (strncmp(u->ut_id, utmpId, 4) == 0 ) &&
u->ut_type != DEAD_PROCESS ) {

status = 0;
break;
}
}

endutxent();
return (status);
}

static void
set_utmpx (struct utmpx *u, const char *line, const char *user,
const char *host, time_t date, int addp)
{
static const char letters[] =
"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";

if (line)
{
if(strcmp(line, ":0") == 0)
(void) strcpy(u->ut_line, "console");
else
(void) strncpy (u->ut_line, line, sizeof (u->ut_line));

strncpy(u->ut_host, line, sizeof(u->ut_host));
#ifdef HAVE_STRUCT_UTMPX_UT_SYSLEN
u->ut_syslen = strlen(line);
#endif
}
else
memset (u->ut_line, 0, sizeof (u->ut_line));
if (addp && user)
(void) strncpy (u->ut_user, user, sizeof (u->ut_user));
else
memset (u->ut_user, 0, sizeof (u->ut_user));

if (line) {
int i;
/*
* this is a bit crufty, but
* follows the apparent conventions in
* the ttys file. ut_id is only 4 bytes
* long, and the last 4 bytes of the line
* name are written into it, left justified.
*/
i = strlen (line);
if (i >= sizeof (u->ut_id))
i -= sizeof (u->ut_id);
else
i = 0;
(void) strncpy (u->ut_id, line + i, sizeof (u->ut_id));

/* make sure there is no entry using identical ut_id */
if (!UtmpxIdOpen(u->ut_id) && addp) {
int limit = sizeof(letters) - 1;
int t = 0;

u->ut_id[1] = line[i];
u->ut_id[2] = line[i+1];
u->ut_id[3] = line[i+2];
do {
u->ut_id[0] = letters[t];
t++;
} while (!UtmpxIdOpen(u->ut_id) && (t < limit));
}
if (!addp && strstr(line, ":") != NULL) {
struct utmpx *tmpu;

while ( (tmpu = getutxent()) != NULL ) {
if ( (strcmp(tmpu->ut_host, line) == 0 ) &&
tmpu->ut_type != DEAD_PROCESS ) {
strncpy(u->ut_id, tmpu->ut_id,
sizeof(u->ut_id));
break;
}
}
endutxent();
}
} else
memset (u->ut_id, 0, sizeof (u->ut_id));

if (addp) {
u->ut_pid = getppid ();
u->ut_type = USER_PROCESS;
} else {
u->ut_pid = 0;
u->ut_type = DEAD_PROCESS;
}
u->ut_tv.tv_sec = date;
u->ut_tv.tv_usec = 0;
}
#endif /* USE_UTMPX */

#if defined(USE_UTMP) && !defined(HAVE_PUTUTLINE)
/*
* compute the slot-number for an X display. This is computed
* by counting the lines in /etc/ttys and adding the line-number
* that the display appears on in Xservers. This is a poor
* design, but is limited by the non-existant interface to utmp.
* If host_name is non-NULL, assume it contains the display name,
* otherwise use the tty_line argument (i.e., the tty name).
*/

static int
Xslot (char *ttys_file, char *servers_file, char *tty_line, char *host_name,
int addp)
{
FILE *ttys, *servers;
int c;
int slot = 1;
int column0 = 1;
char servers_line[1024];
char disp_name[512];
int len;
char *pos;

/* remove screen number from the display name */
memset(disp_name, 0, sizeof(disp_name));
strncpy(disp_name, host_name ? host_name : tty_line, sizeof(disp_name)-1);
pos = strrchr(disp_name, ':');
if (pos) {
pos = strchr(pos, '.');
if (pos)
*pos = '\0';
}
sysnerr ((int)(long)(ttys = fopen (ttys_file, "r")), ttys_file);
while ((c = getc (ttys)) != EOF)
if (c == '\n') {
++slot;
column0 = 1;
} else
column0 = 0;
if (!column0)
++slot;
(void) fclose (ttys);
sysnerr ((int)(long)(servers = fopen (servers_file, "r")), servers_file);

len = strlen (disp_name);
column0 = 1;
while (fgets (servers_line, sizeof (servers_line), servers)) {
if (column0 && *servers_line != '#') {
if (!strncmp (disp_name, servers_line, len) &&
(servers_line[len] == ' ' ||
servers_line[len] == '\t'))
return slot;
++slot;
}
if (servers_line[strlen(servers_line)-1] != '\n')
column0 = 0;
else
column0 = 1;
}
/*
* display not found in Xservers file - allocate utmp entry dinamically
*/
return findslot (tty_line, host_name, addp, slot);
}

/*
* find a free utmp slot for the X display. This allocates a new entry
* past the regular tty entries if necessary, reusing existing entries
* (identified by (line,hostname)) if possible.
*/
static int
findslot (char *line_name, char *host_name, int addp, int slot)
{
int utmp;
struct utmp entry;
int found = 0;
int freeslot = -1;

syserr(utmp = open (utmp_file, O_RDONLY), "open utmp");

/*
* first, try to locate a previous entry for this display
* also record location of a free slots in case we need a new one
*/
syserr ((int) lseek (utmp, (long) slot * sizeof (struct utmp), 0), "lseek");

if (!host_name)
host_name = "";

while (read (utmp, (char *) &entry, sizeof (entry)) == sizeof (entry)) {
if (strncmp(entry.ut_line, line_name,
sizeof(entry.ut_line)) == 0
#ifdef HAVE_STRUCT_UTMP_UT_HOST
&&
strncmp(entry.ut_host, host_name,
sizeof(entry.ut_host)) == 0
#endif
) {
found = 1;
break;
}
if (freeslot < 0 && *entry.ut_name == '\0')
freeslot = slot;
++slot;
}

close (utmp);

if (found)
return slot;
else if (!addp)
return 0; /* trying to delete a non-existing entry */
else if (freeslot < 0)
return slot; /* first slot past current entries */
else
return freeslot;
}
#endif
sessreg-1.0.7/sessreg.h000064400000000000000000000065071165044100700150220ustar00rootroot00000000000000/*
* Copyright 1990, 1998 The Open Group
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
* the above copyright notice appear in all copies and that both that
* copyright notice and this permission notice appear in supporting
* documentation.
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
* OTHER DEALINGS IN THE SOFTWARE.
*
* Except as contained in this notice, the name of The Open Group shall
* not be used in advertising or otherwise to promote the sale, use or
* other dealings in this Software without prior written authorization
* from The Open Group.
*
*/

/*
* Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice (including the next
* paragraph) shall be included in all copies or substantial portions of the
* Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*/

#include "config.h"

#include <sys/types.h>
#include <time.h>

#ifdef HAVE_UTMP_H
# include <utmp.h>
# define USE_UTMP
#endif

#ifdef HAVE_UTMPX_H
# include <utmpx.h>
# define USE_UTMPX
#endif

#ifdef HAVE_SYS_PARAM_H
# include <sys/param.h>
#endif

#if defined(HAVE_STRUCT_LASTLOG) && defined(HAVE_PWD_H)
# ifdef HAVE_LASTLOG_H
# include <lastlog.h>
# endif
# include <pwd.h>
# define USE_LASTLOG
#endif

#ifdef CSRG_BASED
#if !defined(__FreeBSD__) && !defined(__OpenBSD__)
/* *BSD doesn't like a ':0' type entry in utmp */
#define NO_UTMP
#endif
#endif

#ifndef WTMP_FILE
# ifdef _PATH_WTMP
# define WTMP_FILE _PATH_WTMP
# else
# define WTMP_FILE "/usr/adm/wtmp"
# endif
#endif
#ifndef UTMP_FILE
# ifdef _PATH_UTMP
# define UTMP_FILE _PATH_UTMP
# else
# define UTMP_FILE "/etc/utmp"
# endif
#endif
#ifndef LLOG_FILE
# ifdef _PATH_LASTLOG
# define LLOG_FILE _PATH_LASTLOG
# else
# define LLOG_FILE "/usr/adm/lastlog"
# endif
#endif
#ifndef TTYS_FILE
# define TTYS_FILE "/etc/ttys"
#endif
 
дизайн и разработка: Vladimir Lettiev aka crux © 2004-2005, Andrew Avramenko aka liks © 2007-2008
текущий майнтейнер: Michael Shigorin