svn commit: r194493 - head/usr.bin/catman

Brooks Davis brooks at FreeBSD.org
Fri Jun 19 15:52:36 UTC 2009


Author: brooks
Date: Fri Jun 19 15:52:35 2009
New Revision: 194493
URL: http://svn.freebsd.org/changeset/base/194493

Log:
  When checking if we can write to a file, use access() instead of a
  manual permission check based on stat output.  Also, get rid of the
  executability check since it is not used.
  
  MFC after:	2 weeks

Modified:
  head/usr.bin/catman/catman.c

Modified: head/usr.bin/catman/catman.c
==============================================================================
--- head/usr.bin/catman/catman.c	Fri Jun 19 15:31:40 2009	(r194492)
+++ head/usr.bin/catman/catman.c	Fri Jun 19 15:52:35 2009	(r194493)
@@ -57,7 +57,6 @@ __FBSDID("$FreeBSD$");
 #define TEST_FILE	0x04
 #define TEST_READABLE	0x08
 #define TEST_WRITABLE	0x10
-#define TEST_EXECUTABLE	0x20
 
 static int verbose;		/* -v flag: be verbose with warnings */
 static int pretend;		/* -n, -p flags: print out what would be done
@@ -92,9 +91,6 @@ static const char *locale_device[] = {
 #define	GZCAT_CMD	"z"
 enum Ziptype {NONE, BZIP, GZIP};
 
-static uid_t uid;
-static gid_t gids[NGROUPS_MAX];
-static int ngids;
 static int starting_dir;
 static char tmp_file[MAXPATHLEN];
 struct stat test_st;
@@ -320,23 +316,10 @@ test_path(char *name, time_t *mod_time)
 		result |= TEST_DIR;
 	else if (S_ISREG(test_st.st_mode))
 		result |= TEST_FILE;
-	if (test_st.st_uid == uid) {
-		test_st.st_mode >>= 6;
-	} else {
-		int i;
-		for (i = 0; i < ngids; i++) {
-			if (test_st.st_gid == gids[i]) {
-				test_st.st_mode >>= 3;
-				break;
-			}
-		}
-	}
-	if (test_st.st_mode & S_IROTH)
+	if (access(name, R_OK))
 		result |= TEST_READABLE;
-	if (test_st.st_mode & S_IWOTH)
+	if (access(name, W_OK))
 		result |= TEST_WRITABLE;
-	if (test_st.st_mode & S_IXOTH)
-		result |= TEST_EXECUTABLE;
 	return result;
 }
 
@@ -759,14 +742,6 @@ main(int argc, char **argv)
 {
 	int opt;
 
-	if ((uid = getuid()) == 0) {
-		fprintf(stderr, "don't run %s as root, use:\n   echo", argv[0]);
-		for (optind = 0; optind < argc; optind++) {
-			fprintf(stderr, " %s", argv[optind]);
-		}
-		fprintf(stderr, " | nice -5 su -m man\n");
-		exit(1);
-	}
 	while ((opt = getopt(argc, argv, "vnfLrh")) != -1) {
 		switch (opt) {
 		case 'f':
@@ -789,7 +764,6 @@ main(int argc, char **argv)
 			/* NOTREACHED */
 		}
 	}
-	ngids = getgroups(NGROUPS_MAX, gids);
 	if ((starting_dir = open(".", 0)) < 0) {
 		err(1, ".");
 	}


More information about the svn-src-head mailing list