Remove wtmpcvt(1).
The wtmpcvt(1) utility converts wtmp files to the new format used by utmpx(3). Now that HEAD has been branched to stable/9 and 9.0 is released, there is no need for it in HEAD. MFC after: never
This commit is contained in:
parent
08a478a8e9
commit
f9d9bcd45e
@ -38,6 +38,9 @@
|
||||
# xargs -n1 | sort | uniq -d;
|
||||
# done
|
||||
|
||||
# 20120113: removal of wtmpcvt(1)
|
||||
OLD_FILES+=usr/bin/wtmpcvt
|
||||
OLD_FILES+=usr/share/man/man1/wtmpcvt.1.gz
|
||||
# 20111214: eventtimers(7) moved to eventtimers(4)
|
||||
OLD_FILES+=usr/share/man/man7/eventtimers.7.gz
|
||||
# 20111125: amd(4) removed
|
||||
|
@ -418,7 +418,6 @@ The file format is invalid.
|
||||
.Sh SEE ALSO
|
||||
.Xr last 1 ,
|
||||
.Xr write 1 ,
|
||||
.Xr wtmpcvt 1 ,
|
||||
.Xr getpid 2 ,
|
||||
.Xr gettimeofday 2 ,
|
||||
.Xr tty 4 ,
|
||||
|
@ -3,7 +3,6 @@ Set to not build user accounting tools such as
|
||||
.Xr last 1 ,
|
||||
.Xr users 1 ,
|
||||
.Xr who 1 ,
|
||||
.Xr wtmpcvt 1 ,
|
||||
.Xr ac 8 ,
|
||||
.Xr lastlogin 8
|
||||
and
|
||||
|
@ -340,7 +340,6 @@ SUBDIR+= usbhidctl
|
||||
SUBDIR+= last
|
||||
SUBDIR+= users
|
||||
SUBDIR+= who
|
||||
SUBDIR+= wtmpcvt
|
||||
.endif
|
||||
|
||||
.include <bsd.arch.inc.mk>
|
||||
|
@ -1,5 +0,0 @@
|
||||
# $FreeBSD$
|
||||
|
||||
PROG= wtmpcvt
|
||||
|
||||
.include <bsd.prog.mk>
|
@ -1,66 +0,0 @@
|
||||
.\" Copyright (c) 2010 Ed Schouten <ed@FreeBSD.org>
|
||||
.\" All rights reserved.
|
||||
.\"
|
||||
.\" Redistribution and use in source and binary forms, with or without
|
||||
.\" modification, are permitted provided that the following conditions
|
||||
.\" are met:
|
||||
.\" 1. Redistributions of source code must retain the above copyright
|
||||
.\" notice, this list of conditions and the following disclaimer.
|
||||
.\" 2. Redistributions in binary form must reproduce the above copyright
|
||||
.\" notice, this list of conditions and the following disclaimer in the
|
||||
.\" documentation and/or other materials provided with the distribution.
|
||||
.\"
|
||||
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
.\" SUCH DAMAGE.
|
||||
.\"
|
||||
.\" $FreeBSD$
|
||||
.\"
|
||||
.Dd January 14, 2010
|
||||
.Dt WTMPCVT 1
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm wtmpcvt
|
||||
.Nd convert wtmp files to the utmpx format
|
||||
.Sh SYNOPSIS
|
||||
.Nm
|
||||
.Ar input
|
||||
.Ar output
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
.Nm
|
||||
utility converts traditional
|
||||
.Pa wtmp
|
||||
user accounting database files to the same format that is used by
|
||||
.Pa /var/log/utx.log .
|
||||
This makes it possible to view their contents using existing accounting
|
||||
utilities, such as
|
||||
.Xr last 1
|
||||
and
|
||||
.Xr ac 8 .
|
||||
.Sh SEE ALSO
|
||||
.Xr last 1 ,
|
||||
.Xr getutxent 3 ,
|
||||
.Xr ac 8
|
||||
.Sh HISTORY
|
||||
The
|
||||
.Nm
|
||||
utility appeared in
|
||||
.Fx 9.0 .
|
||||
.Sh AUTHORS
|
||||
.An Ed Schouten Aq ed@FreeBSD.org
|
||||
.Sh BUGS
|
||||
The application assumes the
|
||||
.Ar input
|
||||
file has the same byte order as the host system.
|
||||
The
|
||||
.Ar output
|
||||
file can be used on any architecture.
|
@ -1,138 +0,0 @@
|
||||
/*-
|
||||
* Copyright (c) 2010 Ed Schouten <ed@FreeBSD.org>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
#include <sys/endian.h>
|
||||
#include <sys/param.h>
|
||||
|
||||
#include <err.h>
|
||||
#include <stdio.h>
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <utmpx.h>
|
||||
|
||||
#include "../../lib/libc/gen/utxdb.h"
|
||||
|
||||
struct outmp {
|
||||
char ut_line[8];
|
||||
char ut_user[16];
|
||||
char ut_host[16];
|
||||
int32_t ut_time;
|
||||
};
|
||||
|
||||
static void
|
||||
usage(void)
|
||||
{
|
||||
|
||||
fprintf(stderr, "usage: wtmpcvt input output\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
static void
|
||||
outmp_to_futx(const struct outmp *ui, struct futx *uo)
|
||||
{
|
||||
|
||||
memset(uo, 0, sizeof *uo);
|
||||
#define COPY_STRING(field) do { \
|
||||
strncpy(uo->fu_ ## field, ui->ut_ ## field, \
|
||||
MIN(sizeof uo->fu_ ## field, sizeof ui->ut_ ## field)); \
|
||||
} while (0)
|
||||
#define COPY_LINE_TO_ID() do { \
|
||||
strncpy(uo->fu_id, ui->ut_line, \
|
||||
MIN(sizeof uo->fu_id, sizeof ui->ut_line)); \
|
||||
} while (0)
|
||||
#define MATCH(field, value) (strncmp(ui->ut_ ## field, (value), \
|
||||
sizeof(ui->ut_ ## field)) == 0)
|
||||
if (MATCH(user, "reboot") && MATCH(line, "~"))
|
||||
uo->fu_type = BOOT_TIME;
|
||||
else if (MATCH(user, "date") && MATCH(line, "|"))
|
||||
uo->fu_type = OLD_TIME;
|
||||
else if (MATCH(user, "date") && MATCH(line, "{"))
|
||||
uo->fu_type = NEW_TIME;
|
||||
else if (MATCH(user, "shutdown") && MATCH(line, "~"))
|
||||
uo->fu_type = SHUTDOWN_TIME;
|
||||
else if (MATCH(user, "") && MATCH(host, "") && !MATCH(line, "")) {
|
||||
uo->fu_type = DEAD_PROCESS;
|
||||
COPY_LINE_TO_ID();
|
||||
} else if (!MATCH(user, "") && !MATCH(line, "") && ui->ut_time != 0) {
|
||||
uo->fu_type = USER_PROCESS;
|
||||
COPY_STRING(user);
|
||||
COPY_STRING(line);
|
||||
COPY_STRING(host);
|
||||
COPY_LINE_TO_ID();
|
||||
} else {
|
||||
uo->fu_type = EMPTY;
|
||||
return;
|
||||
}
|
||||
#undef COPY_STRING
|
||||
#undef COPY_LINE_TO_ID
|
||||
#undef MATCH
|
||||
|
||||
/* Timestamp conversion. XXX: Assumes host byte order! */
|
||||
uo->fu_tv = htobe64((uint64_t)ui->ut_time * 1000000);
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
FILE *in, *out;
|
||||
struct outmp ui;
|
||||
struct futx uo;
|
||||
size_t l;
|
||||
uint16_t lo;
|
||||
|
||||
if (argc != 3)
|
||||
usage();
|
||||
|
||||
/* Open files. */
|
||||
in = fopen(argv[1], "r");
|
||||
if (in == NULL)
|
||||
err(1, "%s", argv[1]);
|
||||
out = fopen(argv[2], "w");
|
||||
if (out == NULL)
|
||||
err(1, "%s", argv[2]);
|
||||
|
||||
/* Process entries. */
|
||||
while (fread(&ui, sizeof ui, 1, in) == 1) {
|
||||
outmp_to_futx(&ui, &uo);
|
||||
if (uo.fu_type == EMPTY)
|
||||
continue;
|
||||
|
||||
/* Write new entry to output file. */
|
||||
for (l = sizeof uo; l > 0 &&
|
||||
((const char *)&uo)[l - 1] == '\0'; l--);
|
||||
lo = htobe16(l);
|
||||
fwrite(&lo, sizeof lo, 1, out);
|
||||
fwrite(&uo, l, 1, out);
|
||||
}
|
||||
|
||||
fclose(in);
|
||||
fclose(out);
|
||||
return (0);
|
||||
}
|
Loading…
Reference in New Issue
Block a user