Lines Matching +full:libarchive +full:- +full:dev

1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause
4 * Copyright (c) 2003-2008 Tim Kientzle
58 // Libarchive 4.0 and later will NOT define _PATH_DEFTAPE
62 #define _PATH_DEFTAPE "/dev/st0"
66 #define _PATH_DEFTAPE "/dev/tape"
70 #define _PATH_STDIO "-"
107 /* A basic set of security flags to request from libarchive. */
124 ".arch-ids", "{arch}", "=RELEASE-ID", "=meta-update", "=update",
148 * Use a pointer for consistency, but stack-allocated storage in main()
153 bsdtar->fd = -1; /* Mark as "unused" */ in main()
154 bsdtar->gid = -1; in main()
155 bsdtar->uid = -1; in main()
156 bsdtar->flags = 0; in main()
192 bsdtar->day_first = (*nl_langinfo(D_MD_ORDER) == 'd'); in main()
197 bsdtar->user_uid = geteuid(); in main()
200 bsdtar->filename = getenv("TAPE"); in main()
202 if (bsdtar->filename == NULL) { in main()
209 bsdtar->filename = _PATH_DEFTAPE; in main()
213 if (bsdtar->filename == NULL) { in main()
214 bsdtar->filename = _PATH_STDIO; in main()
218 bsdtar->bytes_per_block = DEFAULT_BYTES_PER_BLOCK; in main()
219 /* Allow library to default this unless user specifies -b. */ in main()
220 bsdtar->bytes_in_last_block = -1; in main()
223 bsdtar->extract_flags = ARCHIVE_EXTRACT_TIME; in main()
226 bsdtar->extract_flags |= SECURITY; in main()
229 /* On POSIX systems, assume --same-owner and -p when run by in main()
231 if (bsdtar->user_uid == 0) { in main()
232 /* --same-owner */ in main()
233 bsdtar->extract_flags |= ARCHIVE_EXTRACT_OWNER; in main()
234 /* -p */ in main()
235 bsdtar->extract_flags |= ARCHIVE_EXTRACT_PERM; in main()
236 bsdtar->extract_flags |= ARCHIVE_EXTRACT_ACL; in main()
237 bsdtar->extract_flags |= ARCHIVE_EXTRACT_XATTR; in main()
238 bsdtar->extract_flags |= ARCHIVE_EXTRACT_FFLAGS; in main()
239 bsdtar->extract_flags |= ARCHIVE_EXTRACT_MAC_METADATA; in main()
247 bsdtar->readdisk_flags |= ARCHIVE_READDISK_MAC_COPYFILE; in main()
250 bsdtar->readdisk_flags &= ~ARCHIVE_READDISK_MAC_COPYFILE; in main()
254 * On Mac OS ACLs are archived with copyfile() (--mac-metadata) in main()
255 * Translation to NFSv4 ACLs has to be requested explicitly with --acls in main()
257 bsdtar->readdisk_flags |= ARCHIVE_READDISK_NO_ACL; in main()
260 bsdtar->matching = archive_match_new(); in main()
261 if (bsdtar->matching == NULL) in main()
263 bsdtar->cset = cset_new(); in main()
264 if (bsdtar->cset == NULL) in main()
267 bsdtar->argv = argv; in main()
268 bsdtar->argc = argc; in main()
276 while ((opt = bsdtar_getopt(bsdtar)) != -1) { in main()
279 bsdtar->flags |= OPTFLAG_AUTO_COMPRESS; in main()
282 bsdtar->extract_flags |= ARCHIVE_EXTRACT_ACL; in main()
283 bsdtar->readdisk_flags &= ~ARCHIVE_READDISK_NO_ACL; in main()
284 bsdtar->flags |= OPTFLAG_ACLS; in main()
287 /* libarchive doesn't need this; just ignore it. */ in main()
291 l = strtol(bsdtar->argument, &tptr, 10); in main()
293 *(bsdtar->argument) == '\0' || tptr == NULL || in main()
296 "(1..8192) argument to -b"); in main()
298 bsdtar->bytes_per_block = 512 * (int)l; in main()
299 /* Explicit -b forces last block size. */ in main()
300 bsdtar->bytes_in_last_block = bsdtar->bytes_per_block; in main()
305 "Can't specify both --uuencode and " in main()
306 "--b64encode"); in main()
311 if (strlen(bsdtar->argument) == 0) in main()
313 "Meaningless option: -C ''"); in main()
315 set_chdir(bsdtar, bsdtar->argument); in main()
321 bsdtar->flags |= OPTFLAG_WARN_LINKS; in main()
324 bsdtar->flags |= OPTFLAG_CHROOT; in main()
327 bsdtar->extract_flags |= in main()
332 bsdtar->matching, bsdtar->argument) != ARCHIVE_OK) in main()
334 "Couldn't exclude %s\n", bsdtar->argument); in main()
339 bsdtar->matching, in main()
346 bsdtar->extract_flags |= ARCHIVE_EXTRACT_FFLAGS; in main()
347 bsdtar->readdisk_flags &= ~ARCHIVE_READDISK_NO_FFLAGS; in main()
348 bsdtar->flags |= OPTFLAG_FFLAGS; in main()
351 cset_set_format(bsdtar->cset, bsdtar->argument); in main()
354 bsdtar->filename = bsdtar->argument; in main()
358 l = strtol(bsdtar->argument, &tptr, 10); in main()
359 if (l < 0 || l >= INT_MAX || *(bsdtar->argument) == '\0' || in main()
361 lafe_errc(1, 0, "Invalid argument to --gid"); in main()
363 bsdtar->gid = (int)l; in main()
366 bsdtar->gname = bsdtar->argument; in main()
371 uptr = strchr(bsdtar->argument, ':'); in main()
374 lafe_errc(1, 0, "Invalid argument to --group (missing id after :)"); in main()
381 lafe_errc(1, 0, "Invalid argument to --group (%s is not a number)", uptr); in main()
383 bsdtar->gid = (int)l; in main()
385 bsdtar->gname = bsdtar->argument; in main()
387 l = strtol(bsdtar->argument, &tptr, 10); in main()
388 if (l < 0 || l >= INT_MAX || *(bsdtar->argument) == '\0' || in main()
390 bsdtar->gname = bsdtar->argument; in main()
392 bsdtar->gid = (int)l; in main()
393 bsdtar->gname = ""; in main()
400 "Can't specify both -%c and -%c", opt, in main()
406 bsdtar->symlink_mode = 'H'; in main()
408 case 'h': /* Linux Standards Base, gtar; synonym for -L */ in main()
409 bsdtar->symlink_mode = 'L'; in main()
410 /* Hack: -h by itself is the "help" command. */ in main()
417 bsdtar->extract_flags |= in main()
421 bsdtar->flags |= OPTFLAG_IGNORE_ZEROS; in main()
434 bsdtar->names_from_file = bsdtar->argument; in main()
442 if (archive_match_include_pattern(bsdtar->matching, in main()
443 bsdtar->argument) != ARCHIVE_OK) in main()
446 bsdtar->argument); in main()
451 "Can't specify both -%c and -%c", opt, in main()
459 "Can't specify both -%c and -%c", opt, in main()
465 bsdtar->extract_flags |= ARCHIVE_EXTRACT_NO_OVERWRITE; in main()
468 bsdtar->extract_flags |= ARCHIVE_EXTRACT_NO_OVERWRITE_NEWER; in main()
471 bsdtar->symlink_mode = 'L'; in main()
474 /* GNU tar 1.13 used -l for --one-file-system */ in main()
475 bsdtar->flags |= OPTFLAG_WARN_LINKS; in main()
485 "Can't specify both -%c and -%c", opt, in main()
498 bsdtar->extract_flags &= ~ARCHIVE_EXTRACT_TIME; in main()
501 bsdtar->readdisk_flags |= ARCHIVE_READDISK_MAC_COPYFILE; in main()
502 bsdtar->extract_flags |= ARCHIVE_EXTRACT_MAC_METADATA; in main()
503 bsdtar->flags |= OPTFLAG_MAC_METADATA; in main()
506 bsdtar->flags |= OPTFLAG_NO_SUBDIRS; in main()
510 * --newer-?time='date' Only files newer than 'date' in main()
511 * --newer-?time-than='file' Only files newer than time in main()
515 if (archive_match_include_date(bsdtar->matching, in main()
517 bsdtar->argument) != ARCHIVE_OK) in main()
519 archive_error_string(bsdtar->matching)); in main()
522 if (archive_match_include_file_time(bsdtar->matching, in main()
524 bsdtar->argument) != ARCHIVE_OK) in main()
526 archive_error_string(bsdtar->matching)); in main()
529 if (archive_match_include_date(bsdtar->matching, in main()
531 bsdtar->argument) != ARCHIVE_OK) in main()
533 archive_error_string(bsdtar->matching)); in main()
536 if (archive_match_include_file_time(bsdtar->matching, in main()
538 bsdtar->argument) != ARCHIVE_OK) in main()
540 archive_error_string(bsdtar->matching)); in main()
543 bsdtar->readdisk_flags |= ARCHIVE_READDISK_HONOR_NODUMP; in main()
547 bsdtar->extract_flags |= in main()
551 bsdtar->extract_flags &= ~ARCHIVE_EXTRACT_ACL; in main()
552 bsdtar->readdisk_flags |= ARCHIVE_READDISK_NO_ACL; in main()
553 bsdtar->flags |= OPTFLAG_NO_ACLS; in main()
556 bsdtar->extract_flags &= ~ARCHIVE_EXTRACT_FFLAGS; in main()
557 bsdtar->readdisk_flags |= ARCHIVE_READDISK_NO_FFLAGS; in main()
558 bsdtar->flags |= OPTFLAG_NO_FFLAGS; in main()
561 bsdtar->readdisk_flags &= ~ARCHIVE_READDISK_MAC_COPYFILE; in main()
562 bsdtar->extract_flags &= ~ARCHIVE_EXTRACT_MAC_METADATA; in main()
563 bsdtar->flags |= OPTFLAG_NO_MAC_METADATA; in main()
566 bsdtar->readdisk_flags |= ARCHIVE_READDISK_NO_SPARSE; in main()
567 bsdtar->flags |= OPTFLAG_NO_READ_SPARSE; in main()
570 bsdtar->extract_flags &= ~ARCHIVE_EXTRACT_SAFE_WRITES; in main()
573 bsdtar->extract_flags &= ~ARCHIVE_EXTRACT_OWNER; in main()
576 bsdtar->extract_flags &= ~ARCHIVE_EXTRACT_PERM; in main()
577 bsdtar->extract_flags &= ~ARCHIVE_EXTRACT_ACL; in main()
578 bsdtar->extract_flags &= ~ARCHIVE_EXTRACT_XATTR; in main()
579 bsdtar->extract_flags &= ~ARCHIVE_EXTRACT_FFLAGS; in main()
580 bsdtar->extract_flags &= ~ARCHIVE_EXTRACT_MAC_METADATA; in main()
583 bsdtar->extract_flags &= ~ARCHIVE_EXTRACT_XATTR; in main()
584 bsdtar->readdisk_flags |= ARCHIVE_READDISK_NO_XATTR; in main()
585 bsdtar->flags |= OPTFLAG_NO_XATTRS; in main()
588 bsdtar->flags |= OPTFLAG_NULL; in main()
591 bsdtar->uname = ""; in main()
592 bsdtar->gname = ""; in main()
593 bsdtar->flags |= OPTFLAG_NUMERIC_OWNER; in main()
596 bsdtar->flags |= OPTFLAG_STDOUT; in main()
599 bsdtar->flags |= OPTFLAG_O; in main()
603 * --older-?time='date' Only files older than 'date' in main()
604 * --older-?time-than='file' Only files older than time in main()
608 if (archive_match_include_date(bsdtar->matching, in main()
610 bsdtar->argument) != ARCHIVE_OK) in main()
612 archive_error_string(bsdtar->matching)); in main()
615 if (archive_match_include_file_time(bsdtar->matching, in main()
617 bsdtar->argument) != ARCHIVE_OK) in main()
619 archive_error_string(bsdtar->matching)); in main()
622 if (archive_match_include_date(bsdtar->matching, in main()
624 bsdtar->argument) != ARCHIVE_OK) in main()
626 archive_error_string(bsdtar->matching)); in main()
629 if (archive_match_include_file_time(bsdtar->matching, in main()
631 bsdtar->argument) != ARCHIVE_OK) in main()
633 archive_error_string(bsdtar->matching)); in main()
636 bsdtar->readdisk_flags |= in main()
640 if (bsdtar->option_options != NULL) { in main()
643 bsdtar->option_options); in main()
645 bsdtar->option_options = bsdtar->argument; in main()
650 uptr = strchr(bsdtar->argument, ':'); in main()
653 lafe_errc(1, 0, "Invalid argument to --owner (missing id after :)"); in main()
660 lafe_errc(1, 0, "Invalid argument to --owner (%s is not a number)", uptr); in main()
662 bsdtar->uid = (int)l; in main()
664 bsdtar->uname = bsdtar->argument; in main()
666 l = strtol(bsdtar->argument, &tptr, 10); in main()
667 if (l < 0 || l >= INT_MAX || *(bsdtar->argument) == '\0' || in main()
669 bsdtar->uname = bsdtar->argument; in main()
671 bsdtar->uid = (int)l; in main()
672 bsdtar->uname = ""; in main()
678 * The common BSD -P option is not necessary, since in main()
680 * them. This is convenient, as -P conflicts with GNU in main()
688 bsdtar->extract_flags &= ~SECURITY; in main()
689 bsdtar->flags |= OPTFLAG_ABSOLUTE_PATHS; in main()
692 bsdtar->extract_flags |= ARCHIVE_EXTRACT_PERM; in main()
693 bsdtar->extract_flags |= ARCHIVE_EXTRACT_ACL; in main()
694 bsdtar->extract_flags |= ARCHIVE_EXTRACT_XATTR; in main()
695 bsdtar->extract_flags |= ARCHIVE_EXTRACT_FFLAGS; in main()
696 bsdtar->extract_flags |= ARCHIVE_EXTRACT_MAC_METADATA; in main()
699 bsdtar->passphrase = bsdtar->argument; in main()
702 cset_set_format(bsdtar->cset, "pax"); in main()
704 case 'q': /* FreeBSD GNU tar --fast-read, NetBSD -q */ in main()
705 bsdtar->flags |= OPTFLAG_FAST_READ; in main()
711 bsdtar->readdisk_flags &= ~ARCHIVE_READDISK_NO_SPARSE; in main()
712 bsdtar->flags |= OPTFLAG_READ_SPARSE; in main()
714 case 'S': /* NetBSD pax-as-tar */ in main()
715 bsdtar->extract_flags |= ARCHIVE_EXTRACT_SPARSE; in main()
717 case 's': /* NetBSD pax-as-tar */ in main()
719 add_substitution(bsdtar, bsdtar->argument); in main()
722 "-s is not supported by this version of bsdtar"); in main()
727 bsdtar->extract_flags |= ARCHIVE_EXTRACT_SAFE_WRITES; in main()
730 bsdtar->extract_flags |= ARCHIVE_EXTRACT_OWNER; in main()
734 l = strtol(bsdtar->argument, &tptr, 10); in main()
735 if (l < 0 || l > 100000L || *(bsdtar->argument) == '\0' || in main()
738 "--strip-components"); in main()
740 bsdtar->strip_components = (int)l; in main()
743 bsdtar->names_from_file = bsdtar->argument; in main()
747 bsdtar->verbose++; in main()
750 bsdtar->flags |= OPTFLAG_TOTALS; in main()
753 bsdtar->extract_flags |= ARCHIVE_EXTRACT_UNLINK; in main()
754 bsdtar->flags |= OPTFLAG_UNLINK_FIRST; in main()
761 l = strtol(bsdtar->argument, &tptr, 10); in main()
762 if (l < 0 || l >= INT_MAX || *(bsdtar->argument) == '\0' || in main()
764 lafe_errc(1, 0, "Invalid argument to --uid"); in main()
766 bsdtar->uid = (int)l; in main()
769 bsdtar->uname = bsdtar->argument; in main()
774 "Can't specify both --uuencode and " in main()
775 "--b64encode"); in main()
780 bsdtar->verbose++; in main()
787 * The -W longopt feature is handled inside of in main()
788 * bsdtar_getopt(), so -W is not available here. in main()
794 bsdtar->flags |= OPTFLAG_INTERACTIVE; in main()
798 bsdtar->matching, bsdtar->argument, 0) in main()
801 archive_error_string(bsdtar->matching)); in main()
807 bsdtar->extract_flags |= ARCHIVE_EXTRACT_XATTR; in main()
808 bsdtar->readdisk_flags &= ~ARCHIVE_READDISK_NO_XATTR; in main()
809 bsdtar->flags |= OPTFLAG_XATTRS; in main()
814 "Can't specify both -%c and -%c", opt, in main()
822 "Can't specify both -%c and -%c", opt, in main()
830 "Can't specify both -%c and -%c", opt, in main()
836 compress_program = bsdtar->argument; in main()
844 * Sanity-check options. in main()
847 /* If no "real" mode was specified, treat -h as --help. */ in main()
848 if ((bsdtar->mode == '\0') && possible_help_request) { in main()
853 if (bsdtar->mode == '\0') in main()
855 "Must specify one of -c, -r, -t, -u, -x"); in main()
858 if (bsdtar->flags & OPTFLAG_AUTO_COMPRESS) { in main()
859 only_mode(bsdtar, "-a", "cx"); in main()
860 if (bsdtar->mode == 'x') { in main()
861 bsdtar->flags &= ~OPTFLAG_AUTO_COMPRESS; in main()
863 "Ignoring option -a in mode -x"); in main()
866 if (bsdtar->readdisk_flags & ARCHIVE_READDISK_NO_TRAVERSE_MOUNTS) in main()
867 only_mode(bsdtar, "--one-file-system", "cru"); in main()
868 if (bsdtar->flags & OPTFLAG_FAST_READ) in main()
869 only_mode(bsdtar, "--fast-read", "xt"); in main()
870 if (bsdtar->extract_flags & ARCHIVE_EXTRACT_HFS_COMPRESSION_FORCED) in main()
871 only_mode(bsdtar, "--hfsCompression", "x"); in main()
872 if (bsdtar->extract_flags & ARCHIVE_EXTRACT_NO_HFS_COMPRESSION) in main()
873 only_mode(bsdtar, "--nopreserveHFSCompression", "x"); in main()
874 if (bsdtar->readdisk_flags & ARCHIVE_READDISK_HONOR_NODUMP) in main()
875 only_mode(bsdtar, "--nodump", "cru"); in main()
876 if (bsdtar->flags & OPTFLAG_ACLS) in main()
877 only_mode(bsdtar, "--acls", "crux"); in main()
878 if (bsdtar->flags & OPTFLAG_NO_ACLS) in main()
879 only_mode(bsdtar, "--no-acls", "crux"); in main()
880 if (bsdtar->flags & OPTFLAG_XATTRS) in main()
881 only_mode(bsdtar, "--xattrs", "crux"); in main()
882 if (bsdtar->flags & OPTFLAG_NO_XATTRS) in main()
883 only_mode(bsdtar, "--no-xattrs", "crux"); in main()
884 if (bsdtar->flags & OPTFLAG_FFLAGS) in main()
885 only_mode(bsdtar, "--fflags", "crux"); in main()
886 if (bsdtar->flags & OPTFLAG_NO_FFLAGS) in main()
887 only_mode(bsdtar, "--no-fflags", "crux"); in main()
888 if (bsdtar->flags & OPTFLAG_MAC_METADATA) in main()
889 only_mode(bsdtar, "--mac-metadata", "crux"); in main()
890 if (bsdtar->flags & OPTFLAG_NO_MAC_METADATA) in main()
891 only_mode(bsdtar, "--no-mac-metadata", "crux"); in main()
892 if (bsdtar->flags & OPTFLAG_O) { in main()
893 switch (bsdtar->mode) { in main()
896 * In GNU tar, -o means "old format." The in main()
898 * supported by libarchive. in main()
900 cset_set_format(bsdtar->cset, "ustar"); in main()
901 /* TODO: bsdtar->create_format = "v7"; */ in main()
904 /* POSIX-compatible behavior. */ in main()
905 bsdtar->flags |= OPTFLAG_NO_OWNER; in main()
906 bsdtar->extract_flags &= ~ARCHIVE_EXTRACT_OWNER; in main()
909 only_mode(bsdtar, "-o", "xc"); in main()
913 if (bsdtar->flags & OPTFLAG_STDOUT) in main()
914 only_mode(bsdtar, "-O", "xt"); in main()
915 if (bsdtar->flags & OPTFLAG_UNLINK_FIRST) in main()
916 only_mode(bsdtar, "-U", "x"); in main()
917 if (bsdtar->flags & OPTFLAG_WARN_LINKS) in main()
918 only_mode(bsdtar, "--check-links", "cr"); in main()
920 if ((bsdtar->flags & OPTFLAG_AUTO_COMPRESS) && in main()
921 cset_auto_compress(bsdtar->cset, bsdtar->filename)) { in main()
922 /* Ignore specified compressions if auto-compress works. */ in main()
928 only_mode(bsdtar, "--use-compress-program", "cxt"); in main()
929 cset_add_filter_program(bsdtar->cset, compress_program); in main()
937 strcpy(buff, "-?"); in main()
941 strcpy(buff, "--"); in main()
946 cset_add_filter(bsdtar->cset, compression_name); in main()
949 strcpy(buff, "--"); in main()
952 cset_add_filter(bsdtar->cset, compression2_name); in main()
954 if (cset_get_format(bsdtar->cset) != NULL) in main()
955 only_mode(bsdtar, "--format", "cru"); in main()
956 if (bsdtar->symlink_mode != '\0') { in main()
957 strcpy(buff, "-?"); in main()
958 buff[1] = bsdtar->symlink_mode; in main()
969 archive_match_set_inclusion_recursion(bsdtar->matching, in main()
970 !(bsdtar->flags & OPTFLAG_NO_SUBDIRS)); in main()
972 /* Filename "-" implies stdio. */ in main()
973 if (strcmp(bsdtar->filename, "-") == 0) in main()
974 bsdtar->filename = NULL; in main()
976 switch(bsdtar->mode) { in main()
994 archive_match_free(bsdtar->matching); in main()
998 cset_free(bsdtar->cset); in main()
999 passphrase_free(bsdtar->ppbuff); in main()
1001 if (bsdtar->return_value != 0) in main()
1004 return (bsdtar->return_value); in main()
1010 if (bsdtar->mode != '\0' && bsdtar->mode != opt) in set_mode()
1012 "Can't specify both -%c and -%c", opt, bsdtar->mode); in set_mode()
1013 bsdtar->mode = opt; in set_mode()
1022 if (strchr(valid_modes, bsdtar->mode) == NULL) in only_mode()
1024 "Option %s is not permitted in mode -%c", in only_mode()
1025 opt, bsdtar->mode); in only_mode()
1037 fprintf(stderr, " List: %s -tf <archive-filename>\n", p); in usage()
1038 fprintf(stderr, " Extract: %s -xf <archive-filename>\n", p); in usage()
1039 fprintf(stderr, " Create: %s -cf <archive-filename> [filenames...]\n", p); in usage()
1040 fprintf(stderr, " Help: %s --help\n", p); in usage()
1047 printf("bsdtar %s - %s \n", in version()
1055 " -c Create -r Add/Replace -t List -u Update -x Extract\n"
1057 " -b # Use # 512-byte records per I/O block\n"
1058 " -f <filename> Location of archive (default " _PATH_DEFTAPE ")\n"
1059 " -v Verbose\n"
1060 " -w Interactive\n"
1061 "Create: %p -c [options] [<file> | <dir> | @<archive> | -C <dir> ]\n"
1063 " -z, -j, -J, --lzma Compress archive with gzip/bzip2/xz/lzma\n"
1064 " --format {ustar|pax|cpio|shar} Select archive format\n"
1065 " --exclude <pattern> Skip files that match pattern\n"
1066 " -C <dir> Change to <dir> before processing remaining files\n"
1068 "List: %p -t [options] [<patterns>]\n"
1070 "Extract: %p -x [options] [<patterns>]\n"
1072 " -k Keep (don't overwrite) existing files\n"
1073 " -m Don't restore modification times\n"
1074 " -O Write entries to stdout, don't restore to disk\n"
1075 " -p Restore permissions (including ACLs, owner, file flags)\n";
1085 * if (tar --help 2>&1 | grep bsdtar >/dev/null 2>&1 ) then \