summaryrefslogtreecommitdiffstats
path: root/sbin/dump
diff options
context:
space:
mode:
authormckusick <mckusick@FreeBSD.org>2011-10-18 18:42:26 +0000
committermckusick <mckusick@FreeBSD.org>2011-10-18 18:42:26 +0000
commita2cd889979f4426384fd9590dc5fc37d8028db01 (patch)
tree07bb98aae180c3f4abf32873834f1e96c3e30b6d /sbin/dump
parentf0aea6a474e6600fd4932dee74fcba974bf9fe8f (diff)
downloadFreeBSD-src-a2cd889979f4426384fd9590dc5fc37d8028db01.zip
FreeBSD-src-a2cd889979f4426384fd9590dc5fc37d8028db01.tar.gz
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@sugioarto.com> PR: kern/160678 MFC after: 3 weeks
Diffstat (limited to 'sbin/dump')
-rw-r--r--sbin/dump/dump.h5
-rw-r--r--sbin/dump/itime.c5
2 files changed, 7 insertions, 3 deletions
diff --git a/sbin/dump/dump.h b/sbin/dump/dump.h
index efef7f7..2a65865 100644
--- a/sbin/dump/dump.h
+++ b/sbin/dump/dump.h
@@ -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);
diff --git a/sbin/dump/itime.c b/sbin/dump/itime.c
index f327188..909b8ab 100644
--- a/sbin/dump/itime.c
+++ b/sbin/dump/itime.c
@@ -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));
}
OpenPOWER on IntegriCloud