Re: [PATCH] last: use --time-format instruction when printing wtmp creation time

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, 16 Jan 2017, Karel Zak wrote:

> On Sun, Jan 15, 2017 at 10:17:18AM +0000, Sami Kerola wrote:
> > --- a/login-utils/last.c
> > +++ b/login-utils/last.c
> > @@ -874,11 +874,23 @@ static void process_wtmp_file(const struct last_control *ctl,
> >  		}
> >  	}
> >  
> > -	{
> > -		char* tmp = xstrdup(filename);
> > -		printf(_("\n%s begins %s"), basename(tmp), ctime(&begintime));
> > +	if (ctl->time_fmt != LAST_TIMEFTM_NONE) {
> > +		struct last_timefmt *fmt;
> > +		char timestr[LAST_TIMESTAMP_LEN];
> > +		size_t len;
> > +		char *tmp = xstrdup(filename);
> > +
> > +		fmt = &timefmts[ctl->time_fmt];
> > +		if (time_formatter(fmt->in_fmt, timestr,
> > +				   sizeof(timestr), &begintime) < 0)
> > +			errx(EXIT_FAILURE, _("preallocation size exceeded"));
> > +		len = strlen(timestr) - 1;
> > +		if (timestr[len] == '\n')
> > +			timestr[len] = '\0';
> 
> Do we expect this '\n' somewhere in the code?
> 
> I guess that also for LAST_TIMEFTM_CTIME is the \n char truncated.
> What about to remove \n from the string in the time_formatter() to
> avoid this timestr[len] = '\0' in the code?

Hi Karel,

Well \n removal has to be somewhere and it does make sense to move it to 
time_formatter().  How about the following that is also available at:

  git://github.com/kerolasa/lelux-utiliteetit.git last

--->8----
From: Sami Kerola <kerolasa@xxxxxx>
Date: Mon, 16 Jan 2017 22:31:36 +0000
Subject: [PATCH] last: use --time-format instruction when printing wtmp creation time

This makes --time-format=iso timestamp to look the same as login/logout
times.  When --time-format=noformat is used the file creation time not
printed.  There is no change to default format.

Signed-off-by: Sami Kerola <kerolasa@xxxxxx>
---
 login-utils/last.c             | 17 +++++++++++++----
 tests/expected/utmp/last-nodns |  4 +---
 2 files changed, 14 insertions(+), 7 deletions(-)

diff --git a/login-utils/last.c b/login-utils/last.c
index 7c243f147..5ebd5e2ba 100644
--- a/login-utils/last.c
+++ b/login-utils/last.c
@@ -345,7 +345,8 @@ static int time_formatter(int fmt, char *dst, size_t dlen, time_t *when)
 		break;
 	}
 	case LAST_TIMEFTM_CTIME:
-		ret = snprintf(dst, dlen, "%s", ctime(when));
+		snprintf(dst, dlen, "%s", ctime(when));
+		ret = rtrim_whitespace((unsigned char *) dst);
 		break;
 	case LAST_TIMEFTM_ISO8601:
 		ret = strtime_iso(when, ISO_8601_DATE|ISO_8601_TIME|ISO_8601_TIMEZONE, dst, dlen);
@@ -874,11 +875,19 @@ static void process_wtmp_file(const struct last_control *ctl,
 		}
 	}
 
-	{
-		char* tmp = xstrdup(filename);
-		printf(_("\n%s begins %s"), basename(tmp), ctime(&begintime));
+	if (ctl->time_fmt != LAST_TIMEFTM_NONE) {
+		struct last_timefmt *fmt;
+		char timestr[LAST_TIMESTAMP_LEN];
+		char *tmp = xstrdup(filename);
+
+		fmt = &timefmts[ctl->time_fmt];
+		if (time_formatter(fmt->in_fmt, timestr,
+				   sizeof(timestr), &begintime) < 0)
+			errx(EXIT_FAILURE, _("preallocation size exceeded"));
+		printf(_("\n%s begins %s\n"), basename(tmp), timestr);
 		free(tmp);
 	}
+
 	fclose(fp);
 
 	for (p = ulist; p; p = next) {
diff --git a/tests/expected/utmp/last-nodns b/tests/expected/utmp/last-nodns
index cb7cfde09..e92366266 100644
--- a/tests/expected/utmp/last-nodns
+++ b/tests/expected/utmp/last-nodns
@@ -91,8 +91,6 @@ init     foo          five                (01:00)
 login    foo          six                 (01:00)
 user_pro foo          seven               (01:00)
 accounti foo          nine                (01:00)
-
-wtmp-a begins Wed Aug 28 03:00:00 2013
 ~~~ iso-8601 time ~~~
 rick     long         never-gonna-logout 1970-01-01T00:00:00+0000 - 2038-01-19T03:14:07+0000 (24855+03:14)
 torvalds linux        hobby            1991-08-26T00:57:08+0000   gone - no logout
@@ -109,7 +107,7 @@ login    foo          six              2013-08-28T06:00:00+0000 - 2013-08-28T07:
 user_process foo          seven            2013-08-28T05:00:00+0000 - 2013-08-28T06:00:00+0000  (01:00)
 accounting foo          nine             2013-08-28T03:00:00+0000 - 2013-08-28T04:00:00+0000  (01:00)
 
-wtmp-a begins Wed Aug 28 03:00:00 2013
+wtmp-a begins 2013-08-28T03:00:00+0000
 ~~~ since and until ~~~
 oldtime  foo          four             Wed Aug 28 08:00    gone - no logout
 init     foo          five             Wed Aug 28 07:00 - 08:00  (01:00)
-- 
2.11.0

--
To unsubscribe from this list: send the line "unsubscribe util-linux" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Netdev]     [Ethernet Bridging]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]

  Powered by Linux