svn commit: r226520 - head/sbin/dump
Kirk McKusick
mckusick at FreeBSD.org
Tue Oct 18 18:42:27 UTC 2011
Author: mckusick
Date: Tue Oct 18 18:42:26 2011
New Revision: 226520
URL: http://svn.freebsd.org/changeset/base/226520
Log:
The current /etc/dumpdates file restricts device names to 32 characters.
With the addition of various GEOM layers some device names now exceed
this length, for example /dev/mirror/encrypted.elig.journal. This
change expands the field to 53 bytes which brings the /etc/dumpdates
lines to 80 characters. Exceeding 80 characters makes the /etc/dumpdates
file much less human readable. A test is added to dump so that it
verifies that the device name will fit in the 53 character field
failing the dump if it is too long.
This change has been checked to verify that its /etc/dumpdates file
is compatible with older versions of dump.
Reported by: Martin Sugioarto <martin at sugioarto.com>
PR: kern/160678
MFC after: 3 weeks
Modified:
head/sbin/dump/dump.h
head/sbin/dump/itime.c
Modified: head/sbin/dump/dump.h
==============================================================================
--- head/sbin/dump/dump.h Tue Oct 18 17:38:25 2011 (r226519)
+++ head/sbin/dump/dump.h Tue Oct 18 18:42:26 2011 (r226520)
@@ -171,9 +171,10 @@ void putdumptime(void);
if (ddatev != NULL) \
for (ddp = ddatev[i = 0]; i < nddates; ddp = ddatev[++i])
-#define DUMPOUTFMT "%-32s %d %s" /* for printf */
+#define DUMPFMTLEN 53 /* max device pathname length */
+#define DUMPOUTFMT "%-*s %d %s" /* for printf */
/* name, level, ctime(date) */
-#define DUMPINFMT "%32s %d %[^\n]\n" /* inverse for scanf */
+#define DUMPINFMT "%s %d %[^\n]\n" /* inverse for scanf */
void sig(int signo);
Modified: head/sbin/dump/itime.c
==============================================================================
--- head/sbin/dump/itime.c Tue Oct 18 17:38:25 2011 (r226519)
+++ head/sbin/dump/itime.c Tue Oct 18 18:42:26 2011 (r226520)
@@ -222,7 +222,10 @@ static void
dumprecout(FILE *file, const struct dumpdates *what)
{
- if (fprintf(file, DUMPOUTFMT, what->dd_name,
+ if (strlen(what->dd_name) > DUMPFMTLEN)
+ quit("Name '%s' exceeds DUMPFMTLEN (%d) bytes\n",
+ what->dd_name, DUMPFMTLEN);
+ if (fprintf(file, DUMPOUTFMT, DUMPFMTLEN, what->dd_name,
what->dd_level, ctime(&what->dd_ddate)) < 0)
quit("%s: %s\n", dumpdates, strerror(errno));
}
More information about the svn-src-head
mailing list