Warn if the time stamp in the I/O log file does not fit in time_t.
Warn if the info line is not well-formed instead of silently ignoring it.
This commit is contained in:
@@ -822,6 +822,7 @@ parse_logfile(char *logfile)
|
|||||||
if (getline(&buf, &bufsize, fp) == -1 ||
|
if (getline(&buf, &bufsize, fp) == -1 ||
|
||||||
getline(&li->cwd, &cwdsize, fp) == -1 ||
|
getline(&li->cwd, &cwdsize, fp) == -1 ||
|
||||||
getline(&li->cmd, &cmdsize, fp) == -1) {
|
getline(&li->cmd, &cmdsize, fp) == -1) {
|
||||||
|
warning(U_("%s: invalid log file"), logfile);
|
||||||
goto bad;
|
goto bad;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -838,32 +839,40 @@ parse_logfile(char *logfile)
|
|||||||
cp = buf;
|
cp = buf;
|
||||||
|
|
||||||
/* timestamp */
|
/* timestamp */
|
||||||
if ((ep = strchr(cp, ':')) == NULL)
|
if ((ep = strchr(cp, ':')) == NULL) {
|
||||||
|
warning(U_("%s: time stamp field is missing"), logfile);
|
||||||
goto bad;
|
goto bad;
|
||||||
|
}
|
||||||
*ep = '\0';
|
*ep = '\0';
|
||||||
li->tstamp = strtonum(cp, LLONG_MIN, LLONG_MAX, &errstr);
|
li->tstamp = sizeof(time_t) == 4 ? strtonum(cp, INT_MIN, INT_MAX, &errstr) :
|
||||||
|
strtonum(cp, LLONG_MIN, LLONG_MAX, &errstr);
|
||||||
if (errstr != NULL) {
|
if (errstr != NULL) {
|
||||||
sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO,
|
warning(U_("%s: time stamp %s: %s"), logfile, cp, errstr);
|
||||||
"%s: timestamp %s: %s", logfile, cp, errstr);
|
|
||||||
goto bad;
|
goto bad;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* user */
|
/* user */
|
||||||
cp = ep + 1;
|
cp = ep + 1;
|
||||||
if ((ep = strchr(cp, ':')) == NULL)
|
if ((ep = strchr(cp, ':')) == NULL) {
|
||||||
|
warning(U_("%s: user field is missing"), logfile);
|
||||||
goto bad;
|
goto bad;
|
||||||
|
}
|
||||||
li->user = estrndup(cp, (size_t)(ep - cp));
|
li->user = estrndup(cp, (size_t)(ep - cp));
|
||||||
|
|
||||||
/* runas user */
|
/* runas user */
|
||||||
cp = ep + 1;
|
cp = ep + 1;
|
||||||
if ((ep = strchr(cp, ':')) == NULL)
|
if ((ep = strchr(cp, ':')) == NULL) {
|
||||||
|
warning(U_("%s: runas user field is missing"), logfile);
|
||||||
goto bad;
|
goto bad;
|
||||||
|
}
|
||||||
li->runas_user = estrndup(cp, (size_t)(ep - cp));
|
li->runas_user = estrndup(cp, (size_t)(ep - cp));
|
||||||
|
|
||||||
/* runas group */
|
/* runas group */
|
||||||
cp = ep + 1;
|
cp = ep + 1;
|
||||||
if ((ep = strchr(cp, ':')) == NULL)
|
if ((ep = strchr(cp, ':')) == NULL) {
|
||||||
|
warning(U_("%s: runas group field is missing"), logfile);
|
||||||
goto bad;
|
goto bad;
|
||||||
|
}
|
||||||
if (cp != ep)
|
if (cp != ep)
|
||||||
li->runas_group = estrndup(cp, (size_t)(ep - cp));
|
li->runas_group = estrndup(cp, (size_t)(ep - cp));
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user