summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authoramurai <amurai@FreeBSD.org>1998-06-01 08:47:04 +0000
committeramurai <amurai@FreeBSD.org>1998-06-01 08:47:04 +0000
commitdaec9421536dea043301b78b1811faf425e5595c (patch)
treece5847dfeeeb2a864c0cb5ca1cb3306538092ee8 /lib
parent0f778d7313fc2777a689ebb3f9e162f198928194 (diff)
downloadFreeBSD-src-daec9421536dea043301b78b1811faf425e5595c.zip
FreeBSD-src-daec9421536dea043301b78b1811faf425e5595c.tar.gz
Trim a domain part for wtmp as same as showed by "netstat -r".
Here is a some example for avoiding a confusion. It asssumes a logged host domain is "spec.co.jp". All example is longer than UT_HOSTNAMELEN value. 1) turbo.tama.spec.co.jp: 192.19.0.2 -> trubo.tama 2) turbo.tama.foo.co.jp : 192.19.0.2 -> 192.19.0.2 3) specgw.spec.co.jp : 202.32.13.1 -> specgw Submitted by: Atsushi Murai <amurai@spec.co.jp>
Diffstat (limited to 'lib')
-rw-r--r--lib/libutil/libutil.h4
-rw-r--r--lib/libutil/logwtmp.c41
2 files changed, 42 insertions, 3 deletions
diff --git a/lib/libutil/libutil.h b/lib/libutil/libutil.h
index 513acee..4cacbee 100644
--- a/lib/libutil/libutil.h
+++ b/lib/libutil/libutil.h
@@ -18,7 +18,7 @@
* 5. Modifications may be freely made to this file providing the above
* conditions are met.
*
- * $Id: libutil.h,v 1.13 1997/09/04 22:38:58 pst Exp $
+ * $Id: libutil.h,v 1.14 1998/05/28 23:17:07 brian Exp $
*/
#ifndef _LIBUTIL_H_
@@ -37,13 +37,13 @@ void login __P((struct utmp *_ut));
int login_tty __P((int _fd));
int logout __P((char *_line));
void logwtmp __P((const char *_line, const char *_name, const char *_host));
+void trimdomain __P((char *_fullhost, int _hostsize));
int openpty __P((int *_amaster, int *_aslave, char *_name,
struct termios *_termp, struct winsize *_winp));
int forkpty __P((int *_amaster, char *_name,
struct termios *_termp, struct winsize *_winp));
const char *uu_lockerr __P((int _uu_lockresult));
int uu_lock __P((const char *_ttyname));
-int uu_lock_txfr __P((const char *_ttyname, pid_t _pid));
int uu_unlock __P((const char *_ttyname));
int _secure_path __P((const char *_path, uid_t _uid, gid_t _gid));
__END_DECLS
diff --git a/lib/libutil/logwtmp.c b/lib/libutil/logwtmp.c
index de3c5d6..531b715 100644
--- a/lib/libutil/logwtmp.c
+++ b/lib/libutil/logwtmp.c
@@ -36,10 +36,11 @@
static char sccsid[] = "@(#)logwtmp.c 8.1 (Berkeley) 6/4/93";
#else
static const char rcsid[] =
- "$Id: logwtmp.c,v 1.4 1997/08/13 20:42:18 steve Exp $";
+ "$Id: logwtmp.c,v 1.5 1997/09/04 22:38:59 pst Exp $";
#endif
#endif /* LIBC_SCCS and not lint */
+#include <sys/param.h>
#include <sys/types.h>
#include <sys/file.h>
#include <sys/stat.h>
@@ -54,6 +55,37 @@ static const char rcsid[] =
#include <utmp.h>
void
+trimdomain( char * fullhost, int hostsize )
+{
+ static char domain[MAXHOSTNAMELEN + 1];
+ static int first = 1;
+ char *s;
+
+ if (first) {
+ first = 0;
+ if (gethostname(domain, MAXHOSTNAMELEN) == 0 &&
+ (s = strchr(domain, '.')))
+ (void) strcpy(domain, s + 1);
+ else
+ domain[0] = 0;
+ }
+
+ if (domain[0]) {
+ s = fullhost;
+ while ((fullhost = strchr(fullhost, '.'))) {
+ if (!strcasecmp(fullhost + 1, domain)) {
+ if ( fullhost - s < hostsize ) {
+ *fullhost = '\0'; /* hit it and acceptable size*/
+ }
+ break;
+ } else {
+ fullhost++;
+ }
+ }
+ }
+}
+
+void
logwtmp(line, name, host)
const char *line;
const char *name;
@@ -61,7 +93,14 @@ logwtmp(line, name, host)
{
struct utmp ut;
struct stat buf;
+ char fullhost[MAXHOSTNAMELEN + 1];
+ char *whost = fullhost;
int fd;
+
+ strncpy( whost, host, MAXHOSTNAMELEN );
+fullhost[MAXHOSTNAMELEN] = '\0';
+ trimdomain( whost, UT_HOSTSIZE );
+ host = whost;
if (strlen(host) > UT_HOSTSIZE) {
struct hostent *hp = gethostbyname(host);
OpenPOWER on IntegriCloud