X-Git-Url: https://git.wh0rd.org/?p=dump.git;a=blobdiff_plain;f=restore%2Fmain.c;h=82bde9295de43424f077745b3f469d5e4ba50013;hp=77b9d7daf13fd787e8b72633fa94da618c73ad45;hb=refs%2Fheads%2Fmaster;hpb=d1925e0c515fcb4f815d75292566d600fd715ff5 diff --git a/restore/main.c b/restore/main.c index 77b9d7d..82bde92 100644 --- a/restore/main.c +++ b/restore/main.c @@ -37,7 +37,7 @@ #ifndef lint static const char rcsid[] = - "$Id: main.c,v 1.45 2003/10/26 16:05:48 stelian Exp $"; + "$Id: main.c,v 1.53 2009/06/18 09:42:12 stelian Exp $"; #endif /* not lint */ #include @@ -92,6 +92,7 @@ int abortifconnerr = 1; /* set to 1 if lib dumprmt.o should exit on connection int aflag = 0, bflag = 0, cvtflag = 0, dflag = 0, vflag = 0, yflag = 0; int hflag = 1, mflag = 1, Mflag = 0, Nflag = 0, Vflag = 0, zflag = 0; int uflag = 0, lflag = 0, Lflag = 0, oflag = 0; +int ufs2flag = 0; char *Afile = NULL; int dokerberos = 0; char command = '\0'; @@ -111,6 +112,8 @@ char filesys[NAMELEN]; static const char *stdin_opt = NULL; char *bot_script = NULL; dump_ino_t volinfo[TP_NINOS]; +int wdfd; +int dirhash_size = 1; #ifdef USE_QFA FILE *gTapeposfp; @@ -124,6 +127,11 @@ unsigned long qfadumpdate; long long curtapepos; #endif /* USE_QFA */ +#ifdef TRANSSELINUX /*GAN6May06 SELinux MLS */ +int transselinuxflag = 0; +char *transselinuxarg = NULL; +#endif + long smtc_errno; #if defined(__linux__) || defined(sunos) @@ -154,6 +162,9 @@ main(int argc, char *argv[]) tapeposflag = 0; createtapeposflag = 0; #endif /* USE_QFA */ +#ifdef TRANSSELINUX /*GAN6May06 SELinux MLS */ + char transselinuxopt; +#endif /* Temp files should *not* be readable. We set permissions later. */ orig_umask = umask(FORCED_UMASK); @@ -175,7 +186,11 @@ main(int argc, char *argv[]) ; obsolete(&argc, &argv); while ((ch = getopt(argc, argv, - "aA:b:CcdD:f:F:hi" + "aA:b:CcdD:" +#ifdef TRANSSELINUX /*GAN6May06 SELinux MLS */ + "eE:" +#endif + "f:F:hH:i" #ifdef KERBEROS "k" #endif @@ -208,6 +223,17 @@ main(int argc, char *argv[]) strncpy(filesys, optarg, NAMELEN); filesys[NAMELEN - 1] = '\0'; break; +#ifdef TRANSSELINUX /*GAN6May06 SELinux MLS */ + case 'e': + transselinuxflag = 1; + transselinuxopt = ch; + break; + case 'E': + transselinuxflag = 1; + transselinuxarg = optarg; + transselinuxopt = ch; + break; +#endif case 'T': tmpdir = optarg; break; @@ -225,6 +251,13 @@ main(int argc, char *argv[]) case 'h': hflag = 0; break; + case 'H': + dirhash_size = strtol(optarg, &p, 10); + if (*p) + errx(1, "illegal hash size -- %s", optarg); + if (dirhash_size < 1) + errx(1, "hash size must be greater than 0"); + break; #ifdef KERBEROS case 'k': dokerberos = 1; @@ -330,6 +363,11 @@ main(int argc, char *argv[]) if (Afile && command != 'i' && command != 'x' && command != 't') errx(1, "A option is not valid for %c command", command); +#ifdef TRANSSELINUX /*GAN6May06 SELinux MLS */ + if (transselinuxflag && !strchr("CirRx", command)) + errx(1, "%c option is not valid for %c command", transselinuxopt, command); +#endif + if (signal(SIGINT, onintr) == SIG_IGN) (void) signal(SIGINT, SIG_IGN); if (signal(SIGTERM, onintr) == SIG_IGN) @@ -355,6 +393,10 @@ main(int argc, char *argv[]) else setinput(inputdev); + wdfd = open(".", O_RDONLY); + if (wdfd < 0) + err(1, "can't get current directory"); + if (argc == 0 && !filelist) { argc = 1; *--argv = "."; @@ -418,6 +460,8 @@ main(int argc, char *argv[]) Vprintf(stdout, "Begin compare restore\n"); compare_ignore_not_found = 0; compare_errors = 0; + Nflag = 1; + aflag = 1; setup(); printf("filesys = %s\n", filesys); if (STAT(filesys, &stbuf) < 0) @@ -426,12 +470,13 @@ main(int argc, char *argv[]) err(1, "cannot cd to %s", filesys); compare_ignore_not_found = dumptime > 0; initsymtable((char *)0); - extractdirs(0); + extractdirs(1); treescan(".", ROOTINO, nodeupdates); compareleaves(); + comparedirmodes(); checkrestore(); if (compare_errors) { - printf("Some files were modified!\n"); + printf("Some files were modified! %d compare errors\n", compare_errors); exit(2); } break; @@ -669,24 +714,31 @@ usage(void) #define qfaflag #endif +#ifdef TRANSSELINUX /*GAN6May06 SELinux MLS */ +# define tseflag "e" +# define tsEflag "[-E mls] " +#else +# define tseflag +# define tsEflag +#endif fprintf(stderr, "usage:" - "\t%s -C [-cd" kerbflag "lMvVy] [-b blocksize] [-D filesystem] [-f file]\n" - "\t%s [-F script] [-L limit] [-s fileno]\n" - "\t%s -i [-acdh" kerbflag "lmMouvVy] [-A file] [-b blocksize] [-f file]\n" - "\t%s [-F script] " qfaflag "[-s fileno]\n" + "\t%s -C [-cd" tseflag "H" kerbflag "lMvVy] [-b blocksize] [-D filesystem] " tsEflag"\n" + "\t%s [-f file] [-F script] [-L limit] [-s fileno]\n" + "\t%s -i [-acd" tseflag "hH" kerbflag "lmMouvVy] [-A file] [-b blocksize] " tsEflag"\n" + "\t%s [-f file] [-F script] " qfaflag "[-s fileno]\n" #ifdef USE_QFA - "\t%s -P file [-acdh" kerbflag "lmMuvVy] [-A file] [-b blocksize]\n" + "\t%s -P file [-acdhH" kerbflag "lmMuvVy] [-b blocksize]\n" "\t%s [-f file] [-F script] [-s fileno] [-X filelist] [file ...]\n" #endif - "\t%s -r [-cd" kerbflag "lMuvVy] [-b blocksize] [-f file] [-F script]\n" - "\t%s [-s fileno] [-T directory]\n" - "\t%s -R [-cd" kerbflag "lMuvVy] [-b blocksize] [-f file] [-F script]\n" - "\t%s [-s fileno] [-T directory]\n" - "\t%s -t [-cdh" kerbflag "lMuvVy] [-A file] [-b blocksize] [-f file]\n" - "\t%s [-F script] " qfaflag "[-s fileno] [-X filelist] [file ...]\n" - "\t%s -x [-acdh" kerbflag "lmMouvVy] [-A file] [-b blocksize] [-f file]\n" - "\t%s [-F script] " qfaflag "[-s fileno] [-X filelist] [file ...]\n", + "\t%s -r [-cd" tseflag "H" kerbflag "lMuvVy] [-b blocksize] " tsEflag"\n" + "\t%s [-f file] [-F script] [-s fileno] [-T directory]\n" + "\t%s -R [-cd" tseflag "H" kerbflag "lMuvVy] [-b blocksize] " tsEflag"\n" + "\t%s [-f file] [-F script] [-s fileno] [-T directory]\n" + "\t%s -t [-cdhH" kerbflag "lMuvVy] [-A file] [-b blocksize]\n" + "\t%s [-f file] [-F script] " qfaflag "[-s fileno] [-X filelist] [file ...]\n" + "\t%s -x [-acd" tseflag "hH" kerbflag "lmMouvVy] [-A file] [-b blocksize] " tsEflag"\n" + "\t%s [-f file] [-F script] " qfaflag "[-s fileno] [-X filelist] [file ...]\n", __progname, white, __progname, white, #ifdef USE_QFA @@ -734,6 +786,7 @@ obsolete(int *argcp, char **argvp[]) case 'D': case 'f': case 'F': + case 'H': case 'L': case 'Q': case 's':