+2008-08-20 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, src/gpasswd.c: Use getopt_long instead of getopt. Added
+ support for long options --add (-a), --delete (-d),
+ --remove-password (-r), --restrict (-R), --administrators (-A),
+ and --members (-M)
+ * man/gpasswd.1.xml: Document the new long options.
+ * src/gpasswd.c: The sgrp structure is only used if SHADOWGRP is
+ defined.
+
2008-08-18 Nicolas François <nicolas.francois@centraliens.net>
* src/grpck.c: Added function fail_exit(). Check failure to unlock
- packaging
* Added support for OpenPAM.
+- gpasswd
+ * Added support for long options --add (-a), --delete (-d),
+ --remove-password (-r), --restrict (-R), --administrators (-A), and
+ --members (-M).
- groupmems
* Check if user exist before they are added to groups.
* Avoid segfault in case the specified group does not exist in /etc/group.
<variablelist remap='IP'>
<varlistentry>
<term>
- <option>-a</option> <replaceable>user</replaceable>
+ <option>-a</option>, <option>--add</option> <replaceable>user</replaceable>
</term>
<listitem>
<para>
<variablelist remap='IP'>
<varlistentry>
<term>
- <option>-d</option> <replaceable>user</replaceable>
+ <option>-d</option>, <option>--delete</option> <replaceable>user</replaceable>
</term>
<listitem>
<para>
<variablelist remap='IP'>
<varlistentry>
<term>
- <option>-r</option>
+ <option>-r</option>, <option>--remove-password</option>
</term>
<listitem>
<para>
<variablelist remap='IP'>
<varlistentry>
<term>
- <option>-R</option>
+ <option>-R</option>, <option>--restrict</option>
</term>
<listitem>
<para>
<variablelist remap='IP' condition="gshadow">
<varlistentry>
<term>
- <option>-A</option> <replaceable>user</replaceable>,...
+ <option>-A</option>, <option>--administrators</option> <replaceable>user</replaceable>,...
</term>
<listitem>
<para>
<variablelist remap='IP'>
<varlistentry>
<term>
- <option>-M</option> <replaceable>user</replaceable>,...
+ <option>-M</option>, <option>--members</option> <replaceable>user</replaceable>,...
</term>
<listitem>
<para>
#include <errno.h>
#include <fcntl.h>
+#include <getopt.h>
#include <grp.h>
#include <pwd.h>
#include <signal.h>
static void process_flags (int argc, char **argv)
{
int flag;
-
- while ((flag = getopt (argc, argv, "a:A:d:gM:rR")) != EOF) {
+ int option_index = 0;
+ static struct option long_options[] = {
+ {"add", required_argument, NULL, 'a'},
+ {"delete", required_argument, NULL, 'd'},
+ {"remove-password", no_argument, NULL, 'r'},
+ {"restrict", no_argument, NULL, 'R'},
+ {"administrators", required_argument, NULL, 'A'},
+ {"members", required_argument, NULL, 'M'},
+ {NULL, 0, NULL, '\0'}
+ };
+
+ while ((flag = getopt_long (argc, argv, "a:A:d:gM:rR", long_options, &option_index)) != -1) {
switch (flag) {
case 'a': /* add a user */
user = optarg;
#endif
{
struct group const*tmpgr = NULL;
+#ifdef SHADOWGRP
struct sgrp const*tmpsg = NULL;
+#endif
if (gr_open (O_RDONLY) == 0) {
fprintf (stderr, _("%s: cannot open %s\n"), Prog, gr_dbname ());