summaryrefslogtreecommitdiffstats
path: root/usr.bin
diff options
context:
space:
mode:
authoremaste <emaste@FreeBSD.org>2015-09-25 00:23:36 +0000
committeremaste <emaste@FreeBSD.org>2015-09-25 00:23:36 +0000
commita5313e9c06aa2e59378cb8508a90557065f9fa78 (patch)
tree06492d8b35a9c18f92843a41882499bda7b28b60 /usr.bin
parente828d62c47ad1995d69a273cfd637be4c3448b37 (diff)
downloadFreeBSD-src-a5313e9c06aa2e59378cb8508a90557065f9fa78.zip
FreeBSD-src-a5313e9c06aa2e59378cb8508a90557065f9fa78.tar.gz
MFC r286010: ar: enable deterministic mode by default
Ar cannot handle UIDs with more than 6 digits, and storing the mtime, uid, gid and mode provides little to negative value anyhow for ar's uses. Turn on deterministic (-D) mode by default; it can be disabled by the user with -U. Also MFC follow-on fixes in r286024 and r287324. PR: 196929 Relnotes: Yes Sponsored by: The FreeBSD Foundation
Diffstat (limited to 'usr.bin')
-rw-r--r--usr.bin/ar/ar.13
-rw-r--r--usr.bin/ar/ar.c27
2 files changed, 23 insertions, 7 deletions
diff --git a/usr.bin/ar/ar.1 b/usr.bin/ar/ar.1
index b986bcf..079d262 100644
--- a/usr.bin/ar/ar.1
+++ b/usr.bin/ar/ar.1
@@ -23,7 +23,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd August 31, 2015
+.Dd September 24, 2015
.Dt AR 1
.Os
.Sh NAME
@@ -210,6 +210,7 @@ and 0644 instead of file mode from the members named by arguments
.Ar .
This ensures that checksums on the resulting archives are reproducible
when member contents are identical.
+This option is enabled by default.
If multiple
.Fl D
and
diff --git a/usr.bin/ar/ar.c b/usr.bin/ar/ar.c
index 9826e83..0c69315 100644
--- a/usr.bin/ar/ar.c
+++ b/usr.bin/ar/ar.c
@@ -100,10 +100,12 @@ main(int argc, char **argv)
struct bsdar *bsdar, bsdar_storage;
char *p;
size_t len;
- int i, opt;
+ int i, opt, Dflag, Uflag;
bsdar = &bsdar_storage;
memset(bsdar, 0, sizeof(*bsdar));
+ Dflag = 0;
+ Uflag = 0;
if ((bsdar->progname = getprogname()) == NULL)
bsdar->progname = "ar";
@@ -120,10 +122,12 @@ main(int argc, char **argv)
/* Ignored. */
break;
case 'D':
- bsdar->options |= AR_D;
+ Dflag = 1;
+ Uflag = 0;
break;
case 'U':
- bsdar->options &= ~AR_D;
+ Uflag = 1;
+ Dflag = 0;
break;
case 'V':
ranlib_version();
@@ -140,6 +144,9 @@ main(int argc, char **argv)
if (*argv == NULL)
ranlib_usage();
+ /* Enable determinstic mode unless -U is set. */
+ if (Uflag == 0)
+ bsdar->options |= AR_D;
bsdar->options |= AR_S;
while ((bsdar->filename = *argv++) != NULL)
ar_mode_s(bsdar);
@@ -180,7 +187,8 @@ main(int argc, char **argv)
set_mode(bsdar, opt);
break;
case 'D':
- bsdar->options |= AR_D;
+ Dflag = 1;
+ Uflag = 0;
break;
case 'f':
case 'T':
@@ -220,7 +228,8 @@ main(int argc, char **argv)
set_mode(bsdar, opt);
break;
case 'U':
- bsdar->options &= ~AR_D;
+ Uflag = 1;
+ Dflag = 0;
break;
case 'u':
bsdar->options |= AR_U;
@@ -273,6 +282,10 @@ main(int argc, char **argv)
argv++;
}
+ /* Set determinstic mode for -D, and by default without -U. */
+ if (Dflag || (Uflag == 0 && (bsdar->mode == 'q' || bsdar->mode == 'r')))
+ bsdar->options |= AR_D;
+
if (bsdar->options & AR_A)
only_mode(bsdar, "-a", "mqr");
if (bsdar->options & AR_B)
@@ -281,8 +294,10 @@ main(int argc, char **argv)
only_mode(bsdar, "-c", "qr");
if (bsdar->options & AR_CC)
only_mode(bsdar, "-C", "x");
- if (bsdar->options & AR_D)
+ if (Dflag)
only_mode(bsdar, "-D", "qr");
+ if (Uflag)
+ only_mode(bsdar, "-U", "qr");
if (bsdar->options & AR_O)
only_mode(bsdar, "-o", "x");
if (bsdar->options & AR_SS)
OpenPOWER on IntegriCloud