Merge pull request #172 from edneville/master

chage.c: add support for YYYY-MM-DD date printing
This commit is contained in:
Serge Hallyn 2019-08-07 22:42:03 -05:00 committed by GitHub
commit 1e13749483
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 22 additions and 2 deletions

View File

@ -131,6 +131,12 @@
<para>Display help message and exit.</para> <para>Display help message and exit.</para>
</listitem> </listitem>
</varlistentry> </varlistentry>
<varlistentry>
<term><option>-i</option>, <option>--iso8601</option></term>
<listitem>
<para>When printing dates, use YYYY-MM-DD format.</para>
</listitem>
</varlistentry>
<varlistentry> <varlistentry>
<term> <term>
<option>-I</option>, <option>--inactive</option>&nbsp;<replaceable>INACTIVE</replaceable> <option>-I</option>, <option>--inactive</option>&nbsp;<replaceable>INACTIVE</replaceable>

View File

@ -70,6 +70,7 @@ const char *Prog;
static bool static bool
dflg = false, /* set last password change date */ dflg = false, /* set last password change date */
Eflg = false, /* set account expiration date */ Eflg = false, /* set account expiration date */
iflg = false, /* set iso8601 date formatting */
Iflg = false, /* set password inactive after expiration */ Iflg = false, /* set password inactive after expiration */
lflg = false, /* show account aging information */ lflg = false, /* show account aging information */
mflg = false, /* set minimum number of days before password change */ mflg = false, /* set minimum number of days before password change */
@ -149,6 +150,7 @@ static /*@noreturn@*/void usage (int status)
(void) fputs (_(" -d, --lastday LAST_DAY set date of last password change to LAST_DAY\n"), usageout); (void) fputs (_(" -d, --lastday LAST_DAY set date of last password change to LAST_DAY\n"), usageout);
(void) fputs (_(" -E, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"), usageout); (void) fputs (_(" -E, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"), usageout);
(void) fputs (_(" -h, --help display this help message and exit\n"), usageout); (void) fputs (_(" -h, --help display this help message and exit\n"), usageout);
(void) fputs (_(" -i, --iso8601 use YYYY-MM-DD when printing dates\n"), usageout);
(void) fputs (_(" -I, --inactive INACTIVE set password inactive after expiration\n" (void) fputs (_(" -I, --inactive INACTIVE set password inactive after expiration\n"
" to INACTIVE\n"), usageout); " to INACTIVE\n"), usageout);
(void) fputs (_(" -l, --list show account aging information\n"), usageout); (void) fputs (_(" -l, --list show account aging information\n"), usageout);
@ -262,12 +264,20 @@ static void print_date (time_t date)
#ifdef HAVE_STRFTIME #ifdef HAVE_STRFTIME
struct tm *tp; struct tm *tp;
char buf[80]; char buf[80];
char format[80];
if( iflg ) {
(void) snprintf (format, 80, "%%Y-%%m-%%d");
}
else {
(void) snprintf (format, 80, "%%b %%d, %%Y");
}
tp = gmtime (&date); tp = gmtime (&date);
if (NULL == tp) { if (NULL == tp) {
(void) printf ("time_t: %lu\n", (unsigned long)date); (void) printf ("time_t: %lu\n", (unsigned long)date);
} else { } else {
(void) strftime (buf, sizeof buf, "%b %d, %Y", tp); (void) strftime (buf, sizeof buf, format, tp);
(void) puts (buf); (void) puts (buf);
} }
#else #else
@ -395,10 +405,11 @@ static void process_flags (int argc, char **argv)
{"maxdays", required_argument, NULL, 'M'}, {"maxdays", required_argument, NULL, 'M'},
{"root", required_argument, NULL, 'R'}, {"root", required_argument, NULL, 'R'},
{"warndays", required_argument, NULL, 'W'}, {"warndays", required_argument, NULL, 'W'},
{"iso8601", no_argument, NULL, 'i'},
{NULL, 0, NULL, '\0'} {NULL, 0, NULL, '\0'}
}; };
while ((c = getopt_long (argc, argv, "d:E:hI:lm:M:R:W:", while ((c = getopt_long (argc, argv, "d:E:hiI:lm:M:R:W:",
long_options, NULL)) != -1) { long_options, NULL)) != -1) {
switch (c) { switch (c) {
case 'd': case 'd':
@ -424,6 +435,9 @@ static void process_flags (int argc, char **argv)
case 'h': case 'h':
usage (E_SUCCESS); usage (E_SUCCESS);
/*@notreached@*/break; /*@notreached@*/break;
case 'i':
iflg = true;
break;
case 'I': case 'I':
Iflg = true; Iflg = true;
if ( (getlong (optarg, &inactdays) == 0) if ( (getlong (optarg, &inactdays) == 0)