Index: xinstall.c =================================================================== --- xinstall.c (revision 211522) +++ xinstall.c (working copy) @@ -83,6 +83,7 @@ gid_t gid; uid_t uid; int dobackup, docompare, dodir, dopreserve, dostrip, nommap, safecopy, verbose; +int dotold = 0; mode_t mode = S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH; const char *suffix = BACKUP_SUFFIX; @@ -110,7 +111,7 @@ iflags = 0; group = owner = NULL; - while ((ch = getopt(argc, argv, "B:bCcdf:g:Mm:o:pSsv")) != -1) + while ((ch = getopt(argc, argv, "B:bCcdf:g:Mm:o:pSsvT")) != -1) switch((char)ch) { case 'B': suffix = optarg; @@ -158,6 +159,9 @@ case 's': dostrip = 1; break; + case 'T': + dotold = 1; + break; case 'v': verbose = 1; break; @@ -756,9 +760,15 @@ } if ((gid != (gid_t)-1 || uid != (uid_t)-1) && chown(path, uid, gid)) - warn("chown %u:%u %s", uid, gid, path); + if (dotold) + err(1,"chown %u:%u %s", uid, gid, path); + else + warn("chown %u:%u %s", uid, gid, path); if (chmod(path, mode)) - warn("chmod %o %s", mode, path); + if (dotold) + err(1,"chmod %o %s", mode, path); + else + warn("chmod %o %s", mode, path); } /* @@ -769,11 +779,11 @@ usage() { (void)fprintf(stderr, -"usage: install [-bCcpSsv] [-B suffix] [-f flags] [-g group] [-m mode]\n" +"usage: install [-bCcpSsvT] [-B suffix] [-f flags] [-g group] [-m mode]\n" " [-o owner] file1 file2\n" -" install [-bCcpSsv] [-B suffix] [-f flags] [-g group] [-m mode]\n" +" install [-bCcpSsvT] [-B suffix] [-f flags] [-g group] [-m mode]\n" " [-o owner] file1 ... fileN directory\n" -" install -d [-v] [-g group] [-m mode] [-o owner] directory ...\n"); +" install -d [-Tv] [-g group] [-m mode] [-o owner] directory ...\n"); exit(EX_USAGE); /* NOTREACHED */ } Index: install.1 =================================================================== --- install.1 (revision 211522) +++ install.1 (working copy) @@ -40,7 +40,7 @@ .Nd install binaries .Sh SYNOPSIS .Nm -.Op Fl bCcMpSsv +.Op Fl bCcMpSsTv .Op Fl B Ar suffix .Op Fl f Ar flags .Op Fl g Ar group @@ -48,7 +48,7 @@ .Op Fl o Ar owner .Ar file1 file2 .Nm -.Op Fl bCcMpSsv +.Op Fl bCcMpSsTv .Op Fl B Ar suffix .Op Fl f Ar flags .Op Fl g Ar group @@ -57,7 +57,7 @@ .Ar file1 ... fileN directory .Nm .Fl d -.Op Fl v +.Op Fl Tv .Op Fl g Ar group .Op Fl m Ar mode .Op Fl o Ar owner @@ -160,6 +160,10 @@ See below for how .Nm can be instructed to use another program to strip binaries. +.It Fl T +do what it's told to do. If modes can't be set, fail with an error code. +.Nm +normally just warns if it can't set owner or mode and does not set an error code. .It Fl v Cause .Nm