summaryrefslogtreecommitdiffstats
path: root/usr.sbin/chkgrp
diff options
context:
space:
mode:
authoreadler <eadler@FreeBSD.org>2012-11-15 15:16:50 +0000
committereadler <eadler@FreeBSD.org>2012-11-15 15:16:50 +0000
commitc7b3f7ffa9fdf5d5e048af9459d1831732472de5 (patch)
tree854ebecfcbbe23e89aa711b52c64304b08bd7c13 /usr.sbin/chkgrp
parent2870d7badbaa8a19ad288c1530c39f7bd4dc4020 (diff)
downloadFreeBSD-src-c7b3f7ffa9fdf5d5e048af9459d1831732472de5.zip
FreeBSD-src-c7b3f7ffa9fdf5d5e048af9459d1831732472de5.tar.gz
Add support for a -q flag. While here make the custom argument parsing
use getopt instead of hacking on it more. This change also fixes the method of silencing the compiler warning about gfn being used uninitialized. Approved by: cperciva MFC after: 1 week
Diffstat (limited to 'usr.sbin/chkgrp')
-rw-r--r--usr.sbin/chkgrp/chkgrp.87
-rw-r--r--usr.sbin/chkgrp/chkgrp.c36
2 files changed, 30 insertions, 13 deletions
diff --git a/usr.sbin/chkgrp/chkgrp.8 b/usr.sbin/chkgrp/chkgrp.8
index abdaecc..6a57356 100644
--- a/usr.sbin/chkgrp/chkgrp.8
+++ b/usr.sbin/chkgrp/chkgrp.8
@@ -34,6 +34,7 @@
.Nd check the syntax of the group file
.Sh SYNOPSIS
.Nm
+.Op Fl q
.Op Ar groupfile
.Sh DESCRIPTION
The
@@ -47,6 +48,12 @@ contains whitespace, and that the third field (the group ID) is
numeric.
It will also check for invalid characters in the group names
and group members.
+The following options are available:
+.Bl -tag -width indent
+.It Fl q
+This option disables printing of text when the group format
+is correct.
+.El
.Sh FILES
.Bl -tag -width /etc/group -compact
.It Pa /etc/group
diff --git a/usr.sbin/chkgrp/chkgrp.c b/usr.sbin/chkgrp/chkgrp.c
index 82fa866..c76b67f 100644
--- a/usr.sbin/chkgrp/chkgrp.c
+++ b/usr.sbin/chkgrp/chkgrp.c
@@ -37,11 +37,12 @@ __FBSDID("$FreeBSD$");
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#include <unistd.h>
#include <sysexits.h>
static char empty[] = { 0 };
-static void
+static void __dead2
usage(void)
{
fprintf(stderr, "usage: chkgrp [groupfile]\n");
@@ -53,24 +54,33 @@ main(int argc, char *argv[])
{
unsigned int i;
size_t len;
+ int quiet;
+ int ch;
int n = 0, k, e = 0;
char *line, *f[4], *p;
const char *cp, *gfn;
FILE *gf;
- /* check arguments */
- switch (argc) {
- case 1:
- gfn = "/etc/group";
- break;
- case 2:
- gfn = argv[1];
- break;
- default:
- gfn = NULL; /* silence compiler */
- usage();
+ quiet = 0;
+ while ((ch = getopt(argc, argv, "q")) != -1) {
+ switch (ch) {
+ case 'q':
+ quiet = 1;
+ break;
+ case '?':
+ default:
+ printf("hello\n");
+ usage();
+ }
}
+ if (optind == argc)
+ gfn = "/etc/group";
+ else if (optind == argc - 1)
+ gfn = argv[optind];
+ else
+ usage();
+
/* open group file */
if ((gf = fopen(gfn, "r")) == NULL)
err(EX_NOINPUT, "%s", gfn);
@@ -178,7 +188,7 @@ main(int argc, char *argv[])
/* done */
fclose(gf);
- if (e == 0)
+ if (e == 0 && quiet == 0)
printf("%s is fine\n", gfn);
exit(e ? EX_DATAERR : EX_OK);
}
OpenPOWER on IntegriCloud