1
0
mirror of https://git.FreeBSD.org/src.git synced 2025-01-20 15:43:16 +00:00

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
This commit is contained in:
Eitan Adler 2012-11-15 15:16:50 +00:00
parent c71c7ce71a
commit ce643be1ab
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=243084
2 changed files with 30 additions and 13 deletions

View File

@ -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

View File

@ -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);
}