[Midnightbsd-cvs] src [11429] trunk/usr.bin/rwho/rwho.c: sync rwho with freebsd

laffer1 at midnightbsd.org laffer1 at midnightbsd.org
Fri Jul 6 22:47:41 EDT 2018


Revision: 11429
          http://svnweb.midnightbsd.org/src/?rev=11429
Author:   laffer1
Date:     2018-07-06 22:47:40 -0400 (Fri, 06 Jul 2018)
Log Message:
-----------
sync rwho with freebsd

Modified Paths:
--------------
    trunk/usr.bin/rwho/Makefile
    trunk/usr.bin/rwho/rwho.1
    trunk/usr.bin/rwho/rwho.c

Property Changed:
----------------
    trunk/usr.bin/rwho/rwho.1

Modified: trunk/usr.bin/rwho/Makefile
===================================================================
--- trunk/usr.bin/rwho/Makefile	2018-07-07 02:47:01 UTC (rev 11428)
+++ trunk/usr.bin/rwho/Makefile	2018-07-07 02:47:40 UTC (rev 11429)
@@ -1,5 +1,6 @@
+# $MidnightBSD$
 #	@(#)Makefile	8.1 (Berkeley) 6/6/93
-# $MidnightBSD$
+# $FreeBSD: stable/10/usr.bin/rwho/Makefile 226427 2011-10-16 08:54:41Z ed $
 
 PROG=	rwho
 

Modified: trunk/usr.bin/rwho/rwho.1
===================================================================
--- trunk/usr.bin/rwho/rwho.1	2018-07-07 02:47:01 UTC (rev 11428)
+++ trunk/usr.bin/rwho/rwho.1	2018-07-07 02:47:40 UTC (rev 11429)
@@ -1,3 +1,4 @@
+.\" $MidnightBSD$
 .\" Copyright (c) 1983, 1990, 1993
 .\"	The Regents of the University of California.  All rights reserved.
 .\"
@@ -26,9 +27,9 @@
 .\" SUCH DAMAGE.
 .\"
 .\"     @(#)rwho.1	8.1 (Berkeley) 6/6/93
-.\" $MidnightBSD$
+.\" $FreeBSD: stable/10/usr.bin/rwho/rwho.1 320646 2017-07-04 15:53:54Z allanjude $
 .\"
-.Dd June 6, 1993
+.Dd July 3, 2017
 .Dt RWHO 1
 .Os
 .Sh NAME
@@ -37,6 +38,15 @@
 .Sh SYNOPSIS
 .Nm
 .Op Fl a
+.Sh DEPRECATION NOTICE
+.Nm
+is deprecated and will be removed from future versions of the
+.Fx
+base system.
+If
+.Nm
+is still required, it can be installed from ports or packages
+(net/bsdrcmds).
 .Sh DESCRIPTION
 The
 .Nm


Property changes on: trunk/usr.bin/rwho/rwho.1
___________________________________________________________________
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Modified: trunk/usr.bin/rwho/rwho.c
===================================================================
--- trunk/usr.bin/rwho/rwho.c	2018-07-07 02:47:01 UTC (rev 11428)
+++ trunk/usr.bin/rwho/rwho.c	2018-07-07 02:47:40 UTC (rev 11429)
@@ -1,6 +1,8 @@
-/*
- * Copyright (c) 1983, 1993
- *	The Regents of the University of California.  All rights reserved.
+/* $MidnightBSD$ */
+/*-
+ * Copyright (c) 1983, 1993 The Regents of the University of California.
+ * Copyright (c) 2013 Mariusz Zaborski <oshogbo at FreeBSD.org>
+ * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -40,8 +42,9 @@
 #endif /* not lint */
 
 #include <sys/cdefs.h>
-__MBSDID("$MidnightBSD$");
+__FBSDID("$FreeBSD: stable/10/usr.bin/rwho/rwho.c 280250 2015-03-19 12:32:48Z rwatson $");
 
+#include <sys/capsicum.h>
 #include <sys/param.h>
 #include <sys/file.h>
 
@@ -49,6 +52,7 @@
 
 #include <dirent.h>
 #include <err.h>
+#include <errno.h>
 #include <langinfo.h>
 #include <locale.h>
 #include <stdio.h>
@@ -58,28 +62,27 @@
 #include <timeconv.h>
 #include <unistd.h>
 
-DIR	*dirp;
+#define	NUSERS		1000
+#define	WHDRSIZE	(ssize_t)(sizeof(wd) - sizeof(wd.wd_we))
+/*
+ * this macro should be shared with ruptime.
+ */
+#define	down(w,now)	((now) - (w)->wd_recvtime > 11 * 60)
 
-struct	whod wd;
-#define	NUSERS	1000
-struct	myutmp {
+static DIR	*dirp;
+static struct	whod wd;
+static int	nusers;
+static struct	myutmp {
 	char    myhost[sizeof(wd.wd_hostname)];
 	int	myidle;
 	struct	outmp myutmp;
 } myutmp[NUSERS];
-int	nusers;
 
-#define	WHDRSIZE	(ssize_t)(sizeof (wd) - sizeof (wd.wd_we))
-/*
- * this macro should be shared with ruptime.
- */
-#define	down(w,now)	((now) - (w)->wd_recvtime > 11 * 60)
+static time_t	now;
+static int	aflg;
 
-time_t	now;
-int	aflg;
-
 static void usage(void);
-int utmpcmp(const void *, const void *);
+static int utmpcmp(const void *, const void *);
 
 int
 main(int argc, char *argv[])
@@ -88,17 +91,21 @@
 	struct dirent *dp;
 	int width;
 	ssize_t cc;
-	register struct whod *w = &wd;
-	register struct whoent *we;
-	register struct myutmp *mp;
+	struct whod *w;
+	struct whoent *we;
+	struct myutmp *mp;
+	cap_rights_t rights;
 	int f, n, i;
 	int d_first;
+	int dfd;
+	time_t ct;
 
+	w = &wd;
 	(void) setlocale(LC_TIME, "");
 	d_first = (*nl_langinfo(D_MD_ORDER) == 'd');
 
-	while ((ch = getopt(argc, argv, "a")) != -1)
-		switch((char)ch) {
+	while ((ch = getopt(argc, argv, "a")) != -1) {
+		switch ((char)ch) {
 		case 'a':
 			aflg = 1;
 			break;
@@ -106,6 +113,7 @@
 		default:
 			usage();
 		}
+	}
 	argc -= optind;
 	argv += optind;
 
@@ -112,46 +120,68 @@
 	if (argc != 0)
 		usage();
 
-	if (chdir(_PATH_RWHODIR) || (dirp = opendir(".")) == NULL)
-		err(1, "%s", _PATH_RWHODIR);
+	if (chdir(_PATH_RWHODIR) < 0)
+		err(1, "chdir(%s)", _PATH_RWHODIR);
+	if ((dirp = opendir(".")) == NULL)
+		err(1, "opendir(%s)", _PATH_RWHODIR);
+	dfd = dirfd(dirp);
 	mp = myutmp;
-	(void)time(&now);
-	while ((dp = readdir(dirp))) {
-		if (dp->d_ino == 0 || strncmp(dp->d_name, "whod.", 5))
+	cap_rights_init(&rights, CAP_READ, CAP_LOOKUP);
+	if (cap_rights_limit(dfd, &rights) < 0 && errno != ENOSYS)
+		err(1, "cap_rights_limit failed: %s", _PATH_RWHODIR);
+	/*
+	 * Cache files required for time(3) and localtime(3) before entering
+	 * capability mode.
+	 */
+	(void) time(&ct);
+	(void) localtime(&ct);
+	if (cap_enter() < 0 && errno != ENOSYS)
+		err(1, "cap_enter");
+	(void) time(&now);
+	cap_rights_init(&rights, CAP_READ);
+	while ((dp = readdir(dirp)) != NULL) {
+		if (dp->d_ino == 0 || strncmp(dp->d_name, "whod.", 5) != 0)
 			continue;
-		f = open(dp->d_name, O_RDONLY);
+		f = openat(dfd, dp->d_name, O_RDONLY);
 		if (f < 0)
 			continue;
-		cc = read(f, (char *)&wd, sizeof (struct whod));
+		if (cap_rights_limit(f, &rights) < 0 && errno != ENOSYS)
+			err(1, "cap_rights_limit failed: %s", dp->d_name);
+		cc = read(f, (char *)&wd, sizeof(struct whod));
 		if (cc < WHDRSIZE) {
 			(void) close(f);
 			continue;
 		}
-		if (down(w,now)) {
+		if (down(w, now) != 0) {
 			(void) close(f);
 			continue;
 		}
 		cc -= WHDRSIZE;
 		we = w->wd_we;
-		for (n = cc / sizeof (struct whoent); n > 0; n--) {
-			if (aflg == 0 && we->we_idle >= 60*60) {
+		for (n = cc / sizeof(struct whoent); n > 0; n--) {
+			if (aflg == 0 && we->we_idle >= 60 * 60) {
 				we++;
 				continue;
 			}
 			if (nusers >= NUSERS)
 				errx(1, "too many users");
-			mp->myutmp = we->we_utmp; mp->myidle = we->we_idle;
+			mp->myutmp = we->we_utmp;
+			mp->myidle = we->we_idle;
 			(void) strcpy(mp->myhost, w->wd_hostname);
-			nusers++; we++; mp++;
+			nusers++;
+			we++;
+			mp++;
 		}
 		(void) close(f);
 	}
-	qsort((char *)myutmp, nusers, sizeof (struct myutmp), utmpcmp);
+	qsort((char *)myutmp, nusers, sizeof(struct myutmp), utmpcmp);
 	mp = myutmp;
 	width = 0;
 	for (i = 0; i < nusers; i++) {
 		/* append one for the blank and use 8 for the out_line */
-		int j = strlen(mp->myhost) + 1 + sizeof(mp->myutmp.out_line);
+		int j;
+
+		j = strlen(mp->myhost) + 1 + sizeof(mp->myutmp.out_line);
 		if (j > width)
 			width = j;
 		mp++;
@@ -159,31 +189,29 @@
 	mp = myutmp;
 	for (i = 0; i < nusers; i++) {
 		char buf[BUFSIZ], cbuf[80];
-		time_t t = _int_to_time(mp->myutmp.out_time);
+		time_t t;
 
-		strftime(cbuf, sizeof(cbuf),
-			 d_first ? "%e %b %R" : "%b %e %R",
-			 localtime(&t));
-		(void)sprintf(buf, "%s:%-.*s", mp->myhost,
-		   (int)sizeof(mp->myutmp.out_line), mp->myutmp.out_line);
+		t = _int_to_time(mp->myutmp.out_time);
+		strftime(cbuf, sizeof(cbuf), d_first ? "%e %b %R" : "%b %e %R",
+		    localtime(&t));
+		(void) sprintf(buf, "%s:%-.*s", mp->myhost,
+		    (int)sizeof(mp->myutmp.out_line), mp->myutmp.out_line);
 		printf("%-*.*s %-*s %s",
-		   (int)sizeof(mp->myutmp.out_name),
-		   (int)sizeof(mp->myutmp.out_name),
-		   mp->myutmp.out_name,
-		   width,
-		   buf,
-		   cbuf);
+		    (int)sizeof(mp->myutmp.out_name),
+		    (int)sizeof(mp->myutmp.out_name),
+		    mp->myutmp.out_name, width, buf, cbuf);
 		mp->myidle /= 60;
-		if (mp->myidle) {
-			if (aflg) {
-				if (mp->myidle >= 100*60)
-					mp->myidle = 100*60 - 1;
+		if (mp->myidle != 0) {
+			if (aflg != 0) {
+				if (mp->myidle >= 100 * 60)
+					mp->myidle = 100 * 60 - 1;
 				if (mp->myidle >= 60)
 					printf(" %2d", mp->myidle / 60);
 				else
 					printf("   ");
-			} else
+			} else {
 				printf(" ");
+			}
 			printf(":%02d", mp->myidle % 60);
 		}
 		printf("\n");
@@ -196,6 +224,7 @@
 static void
 usage(void)
 {
+
 	fprintf(stderr, "usage: rwho [-a]\n");
 	exit(1);
 }
@@ -202,18 +231,18 @@
 
 #define MYUTMP(a) ((const struct myutmp *)(a))
 
-int
+static int
 utmpcmp(const void *u1, const void *u2)
 {
 	int rc;
 
 	rc = strncmp(MYUTMP(u1)->myutmp.out_name, MYUTMP(u2)->myutmp.out_name,
-		sizeof(MYUTMP(u2)->myutmp.out_name));
-	if (rc)
+	    sizeof(MYUTMP(u2)->myutmp.out_name));
+	if (rc != 0)
 		return (rc);
 	rc = strcmp(MYUTMP(u1)->myhost, MYUTMP(u2)->myhost);
-	if (rc)
+	if (rc != 0)
 		return (rc);
-	return (strncmp(MYUTMP(u1)->myutmp.out_line, MYUTMP(u2)->myutmp.out_line,
-		sizeof(MYUTMP(u2)->myutmp.out_line)));
+	return (strncmp(MYUTMP(u1)->myutmp.out_line,
+	    MYUTMP(u2)->myutmp.out_line, sizeof(MYUTMP(u2)->myutmp.out_line)));
 }



More information about the Midnightbsd-cvs mailing list