+2011-10-31 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/pwck.c, man/pwck.8.xml: Add support for long options.
+ * src/pwck.c, man/pwck.8.xml: Add -h/--help option
+ * src/grpck.c, man/grpck.8.xml: Add support for long options.
+ * src/grpck.c, man/grpck.8.xml: Add -h/--help option
+
2011-10-30 Nicolas François <nicolas.francois@centraliens.net>
* src/expiry.c, man/expiry.1.xml: Add support for long options.
<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright (c) 1992 - 1993, Julianne Frances Haugh
- Copyright (c) 2007 - 2009, Nicolas François
+ Copyright (c) 2007 - 2011, Nicolas François
All rights reserved.
Redistribution and use in source and binary forms, with or without
<refsynopsisdiv id='synopsis'>
<cmdsynopsis>
- <command>grpck</command> <arg choice='opt'>-r </arg>
- <arg choice='opt'>
- <arg choice='plain'><replaceable>group</replaceable></arg>
- <arg choice='opt' condition="gshadow">
- <arg choice='plain'><replaceable>shadow</replaceable></arg>
- </arg>
- </arg>
- </cmdsynopsis>
- <cmdsynopsis>
- <command>grpck</command> <arg choice='opt'>-s </arg>
+ <command>grpck</command>
+ <arg choice='opt'>options</arg>
<arg choice='opt'>
<arg choice='plain'><replaceable>group</replaceable></arg>
<arg choice='opt' condition="gshadow">
<refsect1 id='options'>
<title>OPTIONS</title>
+ <para>
+ The <option>-r</option> and <option>-s</option> options cannot be
+ combined.
+ </para>
<para>
The options which apply to the <command>grpck</command> command are:
</para>
<variablelist remap='IP'>
<varlistentry>
- <term><option>-r</option></term>
+ <term><option>-h</option>, <option>--help</option></term>
+ <listitem>
+ <para>Display help message and exit.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-r</option>, <option>--read-only</option></term>
<listitem>
<para>
Execute the <command>grpck</command> command in read-only mode.
</listitem>
</varlistentry>
<varlistentry>
- <term><option>-s</option></term>
+ <term><option>-s</option>, <option>--sort</option></term>
<listitem>
<para>
Sort entries in <filename>/etc/group</filename>
<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright (c) 1992 , Julianne Frances Haugh
- Copyright (c) 2007 - 2009, Nicolas François
+ Copyright (c) 2007 - 2011, Nicolas François
All rights reserved.
Redistribution and use in source and binary forms, with or without
<refsynopsisdiv id='synopsis'>
<cmdsynopsis>
<command>pwck</command>
- <arg choice='opt'>-q </arg>
- <arg choice='opt'>-s </arg>
+ <arg choice='opt'>options</arg>
<arg choice='opt'>
<arg choice='plain'>
<replaceable>passwd</replaceable>
</arg>
</arg>
</cmdsynopsis>
- <cmdsynopsis>
- <command>pwck</command>
- <arg choice='opt'>-q </arg>
- <arg choice='opt'>-r </arg>
- <arg choice='opt'>
- <arg choice='plain'>
- <replaceable>passwd</replaceable>
- </arg>
- <arg choice='opt'>
- <arg choice='plain'>
- <replaceable>shadow</replaceable>
- </arg>
- </arg>
- </arg>
- </cmdsynopsis>
</refsynopsisdiv>
<refsect1 id='description'>
<refsect1 id='options'>
<title>OPTIONS</title>
+ <para>
+ The <option>-r</option> and <option>-s</option> options cannot be
+ combined.
+ </para>
<para>
The options which apply to the <command>pwck</command> command are:
</para>
<variablelist remap='IP'>
<varlistentry>
- <term>
- <option>-q</option>
- </term>
+ <term><option>-h</option>, <option>--help</option></term>
+ <listitem>
+ <para>Display help message and exit.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-q</option>, <option>--quiet</option></term>
<listitem>
<para>
Report errors only. The warnings which do not require any
</listitem>
</varlistentry>
<varlistentry>
- <term>
- <option>-r</option>
- </term>
+ <term><option>-r</option>, <option>--read-only</option></term>
<listitem>
<para>
Execute the <command>pwck</command> command in read-only mode.
</listitem>
</varlistentry>
<varlistentry>
- <term>
- <option>-s</option>
- </term>
+ <term><option>-s</option>, <option>--sort</option></term>
<listitem>
<para>
Sort entries in <filename>/etc/passwd</filename> and
#include <grp.h>
#include <pwd.h>
#include <stdio.h>
+#include <getopt.h>
#include "chkname.h"
#include "commonio.h"
#include "defines.h"
*/
/*@-exitarg@*/
#define E_OKAY 0
+#define E_SUCCESS 0
#define E_USAGE 1
#define E_BAD_ENTRY 2
#define E_CANT_OPEN 3
/* local function prototypes */
static void fail_exit (int status);
-static void usage (void);
+static /*@noreturn@*/void usage (int status);
static void delete_member (char **, const char *);
static void process_flags (int argc, char **argv);
static void open_files (void);
/*
* usage - print syntax message and exit
*/
-static void usage (void)
+static /*@noreturn@*/void usage (int status)
{
+ FILE *usageout = (E_SUCCESS != status) ? stderr : stdout;
#ifdef SHADOWGRP
- fprintf (stderr, _("Usage: %s [-r] [-s] [group [gshadow]]\n"), Prog);
-#else
- fprintf (stderr, _("Usage: %s [-r] [-s] [group]\n"), Prog);
-#endif
- exit (E_USAGE);
+ (void) fprintf (usageout,
+ _("Usage: %s [options] [group [gshadow]]\n"
+ "\n"
+ "Options:\n"),
+ Prog);
+#else /* !SHADOWGRP */
+ (void) fprintf (usageout,
+ _("Usage: %s [options] [group]\n"
+ "\n"
+ "Options:\n"),
+ Prog);
+#endif /* !SHADOWGRP */
+ (void) fputs (_(" -h, --help display this help message and exit\n"), usageout);
+ (void) fputs (_(" -r, --read-only display errors and warnings\n"
+ " but do not change files\n"), usageout);
+ (void) fputs (_(" -s, --sort sort entries by UID\n"), usageout);
+ (void) fputs ("\n", usageout);
+ exit (status);
}
/*
*/
static void process_flags (int argc, char **argv)
{
- int arg;
+ int c;
+ static struct option long_options[] = {
+ {"help", no_argument, NULL, 'h'},
+ {"quiet", no_argument, NULL, 'q'},
+ {"read-only", no_argument, NULL, 'r'},
+ {"sort", no_argument, NULL, 's'},
+ {NULL, 0, NULL, '\0'}
+ };
/*
* Parse the command line arguments
*/
- while ((arg = getopt (argc, argv, "qrs")) != EOF) {
- switch (arg) {
+ while ((c = getopt_long (argc, argv, "hqrs",
+ long_options, NULL)) != -1) {
+ switch (c) {
+ case 'h':
+ usage (E_SUCCESS);
+ /*@notreached@*/break;
case 'q':
/* quiet - ignored for now */
break;
sort_mode = true;
break;
default:
- usage ();
+ usage (E_USAGE);
}
}
if (sort_mode && read_only) {
- fprintf (stderr, _("%s: -s and -r are incompatibile\n"), Prog);
+ fprintf (stderr, _("%s: -s and -r are incompatible\n"), Prog);
exit (E_USAGE);
}
if (argc > (optind + 1))
#endif
{
- usage ();
+ usage (E_USAGE);
}
/*
* Copyright (c) 1996 - 2000, Marek Michałkiewicz
* Copyright (c) 2001 , Michał Moskal
* Copyright (c) 2001 - 2006, Tomasz Kłoczko
- * Copyright (c) 2007 - 2010, Nicolas François
+ * Copyright (c) 2007 - 2011, Nicolas François
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
#include <grp.h>
#include <pwd.h>
#include <stdio.h>
+#include <getopt.h>
#include "chkname.h"
#include "commonio.h"
#include "defines.h"
*/
/*@-exitarg@*/
#define E_OKAY 0
+#define E_SUCCESS 0
#define E_USAGE 1
#define E_BADENTRY 2
#define E_CANTOPEN 3
/* local function prototypes */
static void fail_exit (int code);
-static void usage (void);
+static /*@noreturn@*/void usage (int status);
static void process_flags (int argc, char **argv);
static void open_files (void);
static void close_files (bool changed);
/*
* usage - print syntax message and exit
*/
-static void usage (void)
+static /*@noreturn@*/void usage (int status)
{
+ FILE *usageout = (E_SUCCESS != status) ? stderr : stdout;
#ifdef WITH_TCB
if (getdef_bool ("USE_TCB")) {
- fprintf (stderr, _("Usage: %s [-q] [-r] [passwd]\n"),
- Prog);
+ (void) fprintf (usageout,
+ _("Usage: %s [options] [passwd]\n"
+ "\n"
+ "Options:\n"),
+ Prog);
} else
#endif /* WITH_TCB */
{
- fprintf (stderr,
- _("Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"),
- Prog);
+ (void) fprintf (usageout,
+ _("Usage: %s [options] [passwd [shadow]]\n"
+ "\n"
+ "Options:\n"),
+ Prog);
}
- exit (E_USAGE);
+ (void) fputs (_(" -h, --help display this help message and exit\n"), usageout);
+ (void) fputs (_(" -q, --quiet report errors only\n"), usageout);
+ (void) fputs (_(" -r, --read-only display errors and warnings\n"
+ " but do not change files\n"), usageout);
+#ifdef WITH_TCB
+ if (!getdef_bool ("USE_TCB")) {
+#endif /* !WITH_TCB */
+ {
+ (void) fputs (_(" -s, --sort sort entries by UID\n"), usageout);
+ }
+ (void) fputs ("\n", usageout);
+ exit (status);
}
/*
*/
static void process_flags (int argc, char **argv)
{
- int arg;
+ int c;
+ static struct option long_options[] = {
+ {"help", no_argument, NULL, 'h'},
+ {"quiet", no_argument, NULL, 'q'},
+ {"read-only", no_argument, NULL, 'r'},
+ {"sort", no_argument, NULL, 's'},
+ {NULL, 0, NULL, '\0'}
+ };
/*
* Parse the command line arguments
*/
- while ((arg = getopt (argc, argv, "eqrs")) != EOF) {
- switch (arg) {
+ while ((c = getopt_long (argc, argv, "ehqrs",
+ long_options, NULL)) != -1) {
+ switch (c) {
+ case 'h':
+ usage (E_SUCCESS);
+ /*@notreached@*/break;
case 'e': /* added for Debian shadow-961025-2 compatibility */
case 'q':
quiet = true;
sort_mode = true;
break;
default:
- usage ();
+ usage (E_USAGE);
}
}
* Make certain we have the right number of arguments
*/
if ((argc < optind) || (argc > (optind + 2))) {
- usage ();
+ usage (E_USAGE);
}
/*
fprintf (stderr,
_("%s: no alternative shadow file allowed when USE_TCB is enabled.\n"),
Prog);
- usage ();
+ usage (E_USAGE);
}
#endif /* WITH_TCB */
spw_setdbname (argv[optind + 1]);