svn commit: r224172 - in projects/zfsd/head:
cddl/contrib/opensolaris/cmd/zpool
cddl/contrib/opensolaris/lib/libzfs/common lib/libarchive
lib/libarchive/libarchive_fe lib/libarchive/test sbin/fdisk...
Justin T. Gibbs
gibbs at FreeBSD.org
Mon Jul 18 03:40:50 UTC 2011
Author: gibbs
Date: Mon Jul 18 03:40:49 2011
New Revision: 224172
URL: http://svn.freebsd.org/changeset/base/224172
Log:
Integrate from head into ZFSD feature branch as of revision 224171.
Added:
projects/zfsd/head/lib/libarchive/archive_read_support_compression_rpm.c
- copied unchanged from r224171, head/lib/libarchive/archive_read_support_compression_rpm.c
projects/zfsd/head/lib/libarchive/archive_read_support_format_xar.c
- copied unchanged from r224171, head/lib/libarchive/archive_read_support_format_xar.c
projects/zfsd/head/lib/libarchive/libarchive_fe/
- copied from r224171, head/lib/libarchive/libarchive_fe/
projects/zfsd/head/lib/libarchive/test/test_read_format_cpio_svr4_bzip2_rpm.c
- copied unchanged from r224171, head/lib/libarchive/test/test_read_format_cpio_svr4_bzip2_rpm.c
projects/zfsd/head/lib/libarchive/test/test_read_format_cpio_svr4_bzip2_rpm.rpm.uu
- copied unchanged from r224171, head/lib/libarchive/test/test_read_format_cpio_svr4_bzip2_rpm.rpm.uu
projects/zfsd/head/lib/libarchive/test/test_read_format_cpio_svr4_gzip_rpm.c
- copied unchanged from r224171, head/lib/libarchive/test/test_read_format_cpio_svr4_gzip_rpm.c
projects/zfsd/head/lib/libarchive/test/test_read_format_cpio_svr4_gzip_rpm.rpm.uu
- copied unchanged from r224171, head/lib/libarchive/test/test_read_format_cpio_svr4_gzip_rpm.rpm.uu
projects/zfsd/head/lib/libarchive/test/test_read_format_xar.c
- copied unchanged from r224171, head/lib/libarchive/test/test_read_format_xar.c
projects/zfsd/head/usr.bin/cpio/test/test_cmdline.c
- copied unchanged from r224171, head/usr.bin/cpio/test/test_cmdline.c
projects/zfsd/head/usr.bin/cpio/test/test_gcpio_compat_ref_nosym.bin.uu
- copied unchanged from r224171, head/usr.bin/cpio/test/test_gcpio_compat_ref_nosym.bin.uu
projects/zfsd/head/usr.bin/cpio/test/test_gcpio_compat_ref_nosym.crc.uu
- copied unchanged from r224171, head/usr.bin/cpio/test/test_gcpio_compat_ref_nosym.crc.uu
projects/zfsd/head/usr.bin/cpio/test/test_gcpio_compat_ref_nosym.newc.uu
- copied unchanged from r224171, head/usr.bin/cpio/test/test_gcpio_compat_ref_nosym.newc.uu
projects/zfsd/head/usr.bin/cpio/test/test_gcpio_compat_ref_nosym.ustar.uu
- copied unchanged from r224171, head/usr.bin/cpio/test/test_gcpio_compat_ref_nosym.ustar.uu
projects/zfsd/head/usr.bin/cpio/test/test_option_B_upper.c
- copied unchanged from r224171, head/usr.bin/cpio/test/test_option_B_upper.c
projects/zfsd/head/usr.bin/cpio/test/test_option_C_upper.c
- copied unchanged from r224171, head/usr.bin/cpio/test/test_option_C_upper.c
projects/zfsd/head/usr.bin/cpio/test/test_option_J_upper.c
- copied unchanged from r224171, head/usr.bin/cpio/test/test_option_J_upper.c
projects/zfsd/head/usr.bin/cpio/test/test_option_L_upper.c
- copied unchanged from r224171, head/usr.bin/cpio/test/test_option_L_upper.c
projects/zfsd/head/usr.bin/cpio/test/test_option_Z_upper.c
- copied unchanged from r224171, head/usr.bin/cpio/test/test_option_Z_upper.c
projects/zfsd/head/usr.bin/cpio/test/test_option_l.c
- copied unchanged from r224171, head/usr.bin/cpio/test/test_option_l.c
projects/zfsd/head/usr.bin/cpio/test/test_option_lzma.c
- copied unchanged from r224171, head/usr.bin/cpio/test/test_option_lzma.c
projects/zfsd/head/usr.bin/tar/test/test_empty_mtree.c
- copied unchanged from r224171, head/usr.bin/tar/test/test_empty_mtree.c
projects/zfsd/head/usr.bin/tar/test/test_option_T_upper.c
- copied unchanged from r224171, head/usr.bin/tar/test/test_option_T_upper.c
projects/zfsd/head/usr.bin/tar/test/test_option_r.c
- copied unchanged from r224171, head/usr.bin/tar/test/test_option_r.c
Deleted:
projects/zfsd/head/usr.bin/cpio/err.c
projects/zfsd/head/usr.bin/cpio/err.h
projects/zfsd/head/usr.bin/cpio/line_reader.c
projects/zfsd/head/usr.bin/cpio/line_reader.h
projects/zfsd/head/usr.bin/cpio/matching.c
projects/zfsd/head/usr.bin/cpio/matching.h
projects/zfsd/head/usr.bin/cpio/pathmatch.c
projects/zfsd/head/usr.bin/cpio/pathmatch.h
projects/zfsd/head/usr.bin/cpio/test/test_option_B.c
projects/zfsd/head/usr.bin/cpio/test/test_option_L.c
projects/zfsd/head/usr.bin/cpio/test/test_option_ell.c
projects/zfsd/head/usr.bin/tar/err.c
projects/zfsd/head/usr.bin/tar/err.h
projects/zfsd/head/usr.bin/tar/line_reader.c
projects/zfsd/head/usr.bin/tar/line_reader.h
projects/zfsd/head/usr.bin/tar/matching.c
projects/zfsd/head/usr.bin/tar/matching.h
projects/zfsd/head/usr.bin/tar/pathmatch.c
projects/zfsd/head/usr.bin/tar/pathmatch.h
projects/zfsd/head/usr.bin/tar/test/test_option_T.c
Modified:
projects/zfsd/head/cddl/contrib/opensolaris/cmd/zpool/zpool.8
projects/zfsd/head/cddl/contrib/opensolaris/cmd/zpool/zpool_main.c
projects/zfsd/head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs.h
projects/zfsd/head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_import.c
projects/zfsd/head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_pool.c
projects/zfsd/head/lib/libarchive/Makefile
projects/zfsd/head/lib/libarchive/README
projects/zfsd/head/lib/libarchive/archive.h
projects/zfsd/head/lib/libarchive/archive_hash.h
projects/zfsd/head/lib/libarchive/archive_read.3
projects/zfsd/head/lib/libarchive/archive_read_disk_entry_from_file.c
projects/zfsd/head/lib/libarchive/archive_read_disk_set_standard_lookup.c
projects/zfsd/head/lib/libarchive/archive_read_support_compression_all.c
projects/zfsd/head/lib/libarchive/archive_read_support_compression_bzip2.c
projects/zfsd/head/lib/libarchive/archive_read_support_compression_uu.c
projects/zfsd/head/lib/libarchive/archive_read_support_format_all.c
projects/zfsd/head/lib/libarchive/archive_read_support_format_mtree.c
projects/zfsd/head/lib/libarchive/archive_write_disk.c
projects/zfsd/head/lib/libarchive/archive_write_disk_set_standard_lookup.c
projects/zfsd/head/lib/libarchive/archive_write_set_compression_bzip2.c
projects/zfsd/head/lib/libarchive/config_freebsd.h
projects/zfsd/head/lib/libarchive/filter_fork.c
projects/zfsd/head/lib/libarchive/test/Makefile
projects/zfsd/head/lib/libarchive/test/main.c
projects/zfsd/head/lib/libarchive/test/read_open_memory.c
projects/zfsd/head/lib/libarchive/test/test.h
projects/zfsd/head/lib/libarchive/test/test_entry.c
projects/zfsd/head/lib/libarchive/test/test_fuzz.c
projects/zfsd/head/lib/libarchive/test/test_pax_filename_encoding.c
projects/zfsd/head/lib/libarchive/test/test_read_data_large.c
projects/zfsd/head/lib/libarchive/test/test_read_large.c
projects/zfsd/head/lib/libarchive/test/test_read_truncated.c
projects/zfsd/head/lib/libarchive/test/test_ustar_filenames.c
projects/zfsd/head/lib/libarchive/test/test_write_format_cpio.c
projects/zfsd/head/sbin/fdisk/fdisk.c
projects/zfsd/head/sys/dev/gem/if_gem.c
projects/zfsd/head/sys/kern/kern_exec.c
projects/zfsd/head/sys/kern/kern_linker.c
projects/zfsd/head/sys/kern/kern_mib.c
projects/zfsd/head/sys/kern/kern_sysctl.c
projects/zfsd/head/sys/kern/posix4_mib.c
projects/zfsd/head/sys/kern/subr_smp.c
projects/zfsd/head/sys/net/if_var.h
projects/zfsd/head/sys/net/radix.h
projects/zfsd/head/sys/netinet/in_pcb.h
projects/zfsd/head/sys/netinet/tcp_syncache.h
projects/zfsd/head/sys/netinet/tcp_var.h
projects/zfsd/head/sys/sys/sysctl.h
projects/zfsd/head/usr.bin/cpio/Makefile
projects/zfsd/head/usr.bin/cpio/cmdline.c
projects/zfsd/head/usr.bin/cpio/config_freebsd.h
projects/zfsd/head/usr.bin/cpio/cpio.c
projects/zfsd/head/usr.bin/cpio/cpio.h
projects/zfsd/head/usr.bin/cpio/test/Makefile
projects/zfsd/head/usr.bin/cpio/test/main.c
projects/zfsd/head/usr.bin/cpio/test/test.h
projects/zfsd/head/usr.bin/cpio/test/test_0.c
projects/zfsd/head/usr.bin/cpio/test/test_basic.c
projects/zfsd/head/usr.bin/cpio/test/test_format_newc.c
projects/zfsd/head/usr.bin/cpio/test/test_gcpio_compat.c
projects/zfsd/head/usr.bin/cpio/test/test_option_a.c
projects/zfsd/head/usr.bin/cpio/test/test_option_c.c
projects/zfsd/head/usr.bin/cpio/test/test_option_d.c
projects/zfsd/head/usr.bin/cpio/test/test_option_f.c
projects/zfsd/head/usr.bin/cpio/test/test_option_help.c
projects/zfsd/head/usr.bin/cpio/test/test_option_m.c
projects/zfsd/head/usr.bin/cpio/test/test_option_t.c
projects/zfsd/head/usr.bin/cpio/test/test_option_u.c
projects/zfsd/head/usr.bin/cpio/test/test_option_version.c
projects/zfsd/head/usr.bin/cpio/test/test_option_y.c
projects/zfsd/head/usr.bin/cpio/test/test_option_z.c
projects/zfsd/head/usr.bin/cpio/test/test_owner_parse.c
projects/zfsd/head/usr.bin/cpio/test/test_passthrough_dotdot.c
projects/zfsd/head/usr.bin/cpio/test/test_passthrough_reverse.c
projects/zfsd/head/usr.bin/cpio/test/test_pathmatch.c
projects/zfsd/head/usr.bin/tar/Makefile
projects/zfsd/head/usr.bin/tar/bsdtar.1
projects/zfsd/head/usr.bin/tar/bsdtar.c
projects/zfsd/head/usr.bin/tar/cmdline.c
projects/zfsd/head/usr.bin/tar/config_freebsd.h
projects/zfsd/head/usr.bin/tar/read.c
projects/zfsd/head/usr.bin/tar/subst.c
projects/zfsd/head/usr.bin/tar/test/Makefile
projects/zfsd/head/usr.bin/tar/test/main.c
projects/zfsd/head/usr.bin/tar/test/test.h
projects/zfsd/head/usr.bin/tar/test/test_0.c
projects/zfsd/head/usr.bin/tar/test/test_basic.c
projects/zfsd/head/usr.bin/tar/test/test_copy.c
projects/zfsd/head/usr.bin/tar/test/test_help.c
projects/zfsd/head/usr.bin/tar/test/test_option_q.c
projects/zfsd/head/usr.bin/tar/test/test_option_s.c
projects/zfsd/head/usr.bin/tar/test/test_patterns.c
projects/zfsd/head/usr.bin/tar/test/test_patterns_2.tar.uu
projects/zfsd/head/usr.bin/tar/test/test_patterns_3.tar.uu
projects/zfsd/head/usr.bin/tar/test/test_patterns_4.tar.uu
projects/zfsd/head/usr.bin/tar/test/test_stdio.c
projects/zfsd/head/usr.bin/tar/test/test_strip_components.c
projects/zfsd/head/usr.bin/tar/test/test_symlink_dir.c
projects/zfsd/head/usr.bin/tar/test/test_version.c
projects/zfsd/head/usr.bin/tar/util.c
projects/zfsd/head/usr.bin/tar/write.c
projects/zfsd/head/usr.sbin/rtadvctl/rtadvctl.8
Directory Properties:
projects/zfsd/head/ (props changed)
projects/zfsd/head/cddl/contrib/opensolaris/ (props changed)
projects/zfsd/head/contrib/ee/ (props changed)
projects/zfsd/head/contrib/expat/ (props changed)
projects/zfsd/head/contrib/file/ (props changed)
projects/zfsd/head/contrib/gdb/ (props changed)
projects/zfsd/head/contrib/gnu-sort/ (props changed)
projects/zfsd/head/contrib/groff/ (props changed)
projects/zfsd/head/contrib/less/ (props changed)
projects/zfsd/head/contrib/libpcap/ (props changed)
projects/zfsd/head/contrib/ncurses/ (props changed)
projects/zfsd/head/contrib/one-true-awk/ (props changed)
projects/zfsd/head/contrib/openbsm/ (props changed)
projects/zfsd/head/contrib/openpam/ (props changed)
projects/zfsd/head/contrib/pf/ (props changed)
projects/zfsd/head/contrib/tcpdump/ (props changed)
projects/zfsd/head/contrib/tcsh/ (props changed)
projects/zfsd/head/contrib/tnftp/ (props changed)
projects/zfsd/head/contrib/tzcode/stdtime/ (props changed)
projects/zfsd/head/contrib/tzcode/zic/ (props changed)
projects/zfsd/head/contrib/tzdata/ (props changed)
projects/zfsd/head/contrib/wpa/ (props changed)
projects/zfsd/head/lib/libutil/ (props changed)
projects/zfsd/head/lib/libz/ (props changed)
projects/zfsd/head/sbin/ (props changed)
projects/zfsd/head/sbin/ipfw/ (props changed)
projects/zfsd/head/share/mk/bsd.arch.inc.mk (props changed)
projects/zfsd/head/sys/contrib/dev/acpica/ (props changed)
projects/zfsd/head/usr.bin/csup/ (props changed)
projects/zfsd/head/usr.bin/procstat/ (props changed)
projects/zfsd/head/usr.sbin/rtadvctl/ (props changed)
projects/zfsd/head/usr.sbin/rtadvd/ (props changed)
Modified: projects/zfsd/head/cddl/contrib/opensolaris/cmd/zpool/zpool.8
==============================================================================
--- projects/zfsd/head/cddl/contrib/opensolaris/cmd/zpool/zpool.8 Mon Jul 18 03:18:06 2011 (r224171)
+++ projects/zfsd/head/cddl/contrib/opensolaris/cmd/zpool/zpool.8 Mon Jul 18 03:40:49 2011 (r224172)
@@ -82,6 +82,11 @@ zpool \- configures ZFS storage pools
.LP
.nf
+\fBzpool labelclear\fR [\fB-f\fR] \fIdevice\fR
+.fi
+
+.LP
+.nf
\fBzpool list\fR [\fB-H\fR] [\fB-o\fR \fIproperty\fR[,...]] [\fIpool\fR] ...
.fi
@@ -1205,6 +1210,28 @@ Verbose statistics. Reports usage statis
.ne 2
.mk
.na
+\fB\fBzpool labelclear\fR [\fB-f\fR] \fIdevice\fR
+.ad
+.sp .6
+.RS 4n
+Removes ZFS label information from the specified device. The device must not be part of an active pool configuration.
+.sp
+.ne 2
+.mk
+.na
+\fB\fB-f\fR\fR
+.ad
+.RS 12n
+.rt
+Treat exported or foreign devices as inactive.
+.RE
+
+.RE
+
+.sp
+.ne 2
+.mk
+.na
\fB\fBzpool list\fR [\fB-H\fR] [\fB-o\fR \fIprops\fR[,...]] [\fIpool\fR] ...\fR
.ad
.sp .6
Modified: projects/zfsd/head/cddl/contrib/opensolaris/cmd/zpool/zpool_main.c
==============================================================================
--- projects/zfsd/head/cddl/contrib/opensolaris/cmd/zpool/zpool_main.c Mon Jul 18 03:18:06 2011 (r224171)
+++ projects/zfsd/head/cddl/contrib/opensolaris/cmd/zpool/zpool_main.c Mon Jul 18 03:40:49 2011 (r224172)
@@ -57,6 +57,7 @@ static int zpool_do_destroy(int, char **
static int zpool_do_add(int, char **);
static int zpool_do_remove(int, char **);
+static int zpool_do_labelclear(int, char **);
static int zpool_do_list(int, char **);
static int zpool_do_iostat(int, char **);
@@ -113,6 +114,7 @@ typedef enum {
HELP_HISTORY,
HELP_IMPORT,
HELP_IOSTAT,
+ HELP_LABELCLEAR,
HELP_LIST,
HELP_OFFLINE,
HELP_ONLINE,
@@ -149,6 +151,8 @@ static zpool_command_t command_table[] =
{ "add", zpool_do_add, HELP_ADD },
{ "remove", zpool_do_remove, HELP_REMOVE },
{ NULL },
+ { "labelclear", zpool_do_labelclear, HELP_LABELCLEAR },
+ { NULL },
{ "list", zpool_do_list, HELP_LIST },
{ "iostat", zpool_do_iostat, HELP_IOSTAT },
{ "status", zpool_do_status, HELP_STATUS },
@@ -215,6 +219,8 @@ get_usage(zpool_help_t idx) {
case HELP_IOSTAT:
return (gettext("\tiostat [-v] [-T d|u] [pool] ... [interval "
"[count]]\n"));
+ case HELP_LABELCLEAR:
+ return (gettext("\tlabelclear [-f] <vdev>\n"));
case HELP_LIST:
return (gettext("\tlist [-H] [-o property[,...]] "
"[-T d|u] [pool] ... [interval [count]]\n"));
@@ -561,6 +567,125 @@ zpool_do_remove(int argc, char **argv)
}
/*
+ * zpool labelclear <vdev>
+ *
+ * Verifies that the vdev is not active and zeros out the label information
+ * on the device.
+ */
+int
+zpool_do_labelclear(int argc, char **argv)
+{
+ char *vdev, *name;
+ int c, fd = -1, ret = 0;
+ pool_state_t state;
+ boolean_t inuse = B_FALSE;
+ boolean_t force = B_FALSE;
+
+ /* check options */
+ while ((c = getopt(argc, argv, "f")) != -1) {
+ switch (c) {
+ case 'f':
+ force = B_TRUE;
+ break;
+ default:
+ (void) fprintf(stderr, gettext("invalid option '%c'\n"),
+ optopt);
+ usage(B_FALSE);
+ }
+ }
+
+ argc -= optind;
+ argv += optind;
+
+ /* get vdev name */
+ if (argc < 1) {
+ (void) fprintf(stderr, gettext("missing vdev device name\n"));
+ usage(B_FALSE);
+ }
+
+ vdev = argv[0];
+ if ((fd = open(vdev, O_RDWR)) < 0) {
+ (void) fprintf(stderr, gettext("Unable to open %s\n"), vdev);
+ return (B_FALSE);
+ }
+
+ name = NULL;
+ if (zpool_in_use(g_zfs, fd, &state, &name, &inuse) != 0) {
+ if (force)
+ goto wipe_label;
+
+ (void) fprintf(stderr,
+ gettext("Unable to determine pool state for %s\n"
+ "Use -f to force the clearing any label data\n"), vdev);
+
+ return (1);
+ }
+
+ if (inuse) {
+ switch (state) {
+ default:
+ case POOL_STATE_ACTIVE:
+ case POOL_STATE_SPARE:
+ case POOL_STATE_L2CACHE:
+ (void) fprintf(stderr,
+gettext("labelclear operation failed.\n"
+ "\tVdev %s is a member (%s), of pool \"%s\".\n"
+ "\tTo remove label information from this device, export or destroy\n"
+ "\tthe pool, or remove %s from the configuration of this pool\n"
+ "\tand retry the labelclear operation\n"),
+ vdev, zpool_pool_state_to_name(state), name, vdev);
+ ret = 1;
+ goto errout;
+
+ case POOL_STATE_EXPORTED:
+ if (force)
+ break;
+
+ (void) fprintf(stderr,
+gettext("labelclear operation failed.\n"
+ "\tVdev %s is a member of the exported pool \"%s\".\n"
+ "\tUse \"zpool labelclear -f %s\" to force the removal of label\n"
+ "\tinformation.\n"),
+ vdev, name, vdev);
+ ret = 1;
+ goto errout;
+
+ case POOL_STATE_POTENTIALLY_ACTIVE:
+ if (force)
+ break;
+
+ (void) fprintf(stderr,
+gettext("labelclear operation failed.\n"
+ "\tVdev %s is a member of the pool \"%s\".\n"
+ "\tThis pool is unknown to this system, but may be active on\n"
+ "\tanother system. Use \'zpool labelclear -f %s\' to force the\n"
+ "\tremoval of label information.\n"),
+ vdev, name, vdev);
+ ret = 1;
+ goto errout;
+
+ case POOL_STATE_DESTROYED:
+ /* inuse should never be set for a destoryed pool... */
+ break;
+ }
+ }
+
+wipe_label:
+ if (zpool_clear_label(fd) != 0) {
+ (void) fprintf(stderr,
+ gettext("Label clear failed on vdev %s\n"), vdev);
+ ret = 1;
+ }
+
+errout:
+ close(fd);
+ if (name != NULL)
+ free(name);
+
+ return (ret);
+}
+
+/*
* zpool create [-fn] [-o property=value] ...
* [-O file-system-property=value] ...
* [-R root] [-m mountpoint] <pool> <dev> ...
@@ -1052,7 +1177,7 @@ print_status_config(zpool_handle_t *zhp,
char *vname;
uint64_t notpresent;
spare_cbdata_t cb;
- char *state;
+ const char *state;
if (nvlist_lookup_nvlist_array(nv, ZPOOL_CONFIG_CHILDREN,
&child, &children) != 0)
@@ -1084,10 +1209,11 @@ print_status_config(zpool_handle_t *zhp,
}
if (nvlist_lookup_uint64(nv, ZPOOL_CONFIG_NOT_PRESENT,
- ¬present) == 0) {
+ ¬present) == 0 ||
+ vs->vs_state <= VDEV_STATE_CANT_OPEN) {
char *path;
- verify(nvlist_lookup_string(nv, ZPOOL_CONFIG_PATH, &path) == 0);
- (void) printf(" was %s", path);
+ if (nvlist_lookup_string(nv, ZPOOL_CONFIG_PATH, &path) == 0)
+ (void) printf(" was %s", path);
} else if (vs->vs_aux != 0) {
(void) printf(" ");
Modified: projects/zfsd/head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs.h
==============================================================================
--- projects/zfsd/head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs.h Mon Jul 18 03:18:06 2011 (r224171)
+++ projects/zfsd/head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs.h Mon Jul 18 03:40:49 2011 (r224172)
@@ -200,7 +200,8 @@ extern zpool_handle_t *zpool_open_canfai
extern void zpool_close(zpool_handle_t *);
extern const char *zpool_get_name(zpool_handle_t *);
extern int zpool_get_state(zpool_handle_t *);
-extern char *zpool_state_to_name(vdev_state_t, vdev_aux_t);
+extern const char *zpool_state_to_name(vdev_state_t, vdev_aux_t);
+extern const char *zpool_pool_state_to_name(pool_state_t);
extern void zpool_free_handles(libzfs_handle_t *);
/*
@@ -249,7 +250,7 @@ extern nvlist_t *zpool_find_vdev(zpool_h
boolean_t *, boolean_t *);
extern nvlist_t *zpool_find_vdev_by_physpath(zpool_handle_t *, const char *,
boolean_t *, boolean_t *, boolean_t *);
-extern int zpool_label_disk(libzfs_handle_t *, zpool_handle_t *, char *);
+extern int zpool_label_disk(libzfs_handle_t *, zpool_handle_t *, const char *);
/*
* Functions to manage pool properties
Modified: projects/zfsd/head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_import.c
==============================================================================
--- projects/zfsd/head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_import.c Mon Jul 18 03:18:06 2011 (r224171)
+++ projects/zfsd/head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_import.c Mon Jul 18 03:40:49 2011 (r224172)
@@ -1084,8 +1084,8 @@ zpool_open_func(void *arg)
/*
* Given a file descriptor, clear (zero) the label information. This function
- * is currently only used in the appliance stack as part of the ZFS sysevent
- * module.
+ * is used in the appliance stack as part of the ZFS sysevent module and
+ * to implement the "zpool labelclear" command.
*/
int
zpool_clear_label(int fd)
Modified: projects/zfsd/head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_pool.c
==============================================================================
--- projects/zfsd/head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_pool.c Mon Jul 18 03:18:06 2011 (r224171)
+++ projects/zfsd/head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_pool.c Mon Jul 18 03:40:49 2011 (r224172)
@@ -174,7 +174,7 @@ zpool_get_prop_int(zpool_handle_t *zhp,
/*
* Map VDEV STATE to printed strings.
*/
-char *
+const char *
zpool_state_to_name(vdev_state_t state, vdev_aux_t aux)
{
switch (state) {
@@ -202,6 +202,34 @@ zpool_state_to_name(vdev_state_t state,
}
/*
+ * Map POOL STATE to printed strings.
+ */
+const char *
+zpool_pool_state_to_name(pool_state_t state)
+{
+ switch (state) {
+ case POOL_STATE_ACTIVE:
+ return (gettext("ACTIVE"));
+ case POOL_STATE_EXPORTED:
+ return (gettext("EXPORTED"));
+ case POOL_STATE_DESTROYED:
+ return (gettext("DESTROYED"));
+ case POOL_STATE_SPARE:
+ return (gettext("SPARE"));
+ case POOL_STATE_L2CACHE:
+ return (gettext("L2CACHE"));
+ case POOL_STATE_UNINITIALIZED:
+ return (gettext("UNINITIALIZED"));
+ case POOL_STATE_UNAVAIL:
+ return (gettext("UNAVAIL"));
+ case POOL_STATE_POTENTIALLY_ACTIVE:
+ return (gettext("POTENTIALLY_ACTIVE"));
+ }
+
+ return (gettext("UNKNOWN"));
+}
+
+/*
* Get a zpool property value for 'prop' and return the value in
* a pre-allocated buffer.
*/
@@ -3082,15 +3110,25 @@ zpool_vdev_name(libzfs_handle_t *hdl, zp
char buf[64];
vdev_stat_t *vs;
uint_t vsc;
+ int have_stats;
+ int have_path;
- if (nvlist_lookup_uint64(nv, ZPOOL_CONFIG_NOT_PRESENT,
- &value) == 0) {
+ have_stats = nvlist_lookup_uint64_array(nv, ZPOOL_CONFIG_VDEV_STATS,
+ (uint64_t **)&vs, &vsc) == 0;
+ have_path = nvlist_lookup_string(nv, ZPOOL_CONFIG_PATH, &path) == 0;
+
+ /*
+ * If the device is not currently present, assume it will not
+ * come back at the same device path. Display the device by GUID.
+ */
+ if (nvlist_lookup_uint64(nv, ZPOOL_CONFIG_NOT_PRESENT, &value) == 0 ||
+ have_path && have_stats && vs->vs_state <= VDEV_STATE_CANT_OPEN) {
verify(nvlist_lookup_uint64(nv, ZPOOL_CONFIG_GUID,
&value) == 0);
(void) snprintf(buf, sizeof (buf), "%llu",
(u_longlong_t)value);
path = buf;
- } else if (nvlist_lookup_string(nv, ZPOOL_CONFIG_PATH, &path) == 0) {
+ } else if (have_path) {
/*
* If the device is dead (faulted, offline, etc) then don't
@@ -3098,8 +3136,7 @@ zpool_vdev_name(libzfs_handle_t *hdl, zp
* open a misbehaving device, which can have undesirable
* effects.
*/
- if ((nvlist_lookup_uint64_array(nv, ZPOOL_CONFIG_VDEV_STATS,
- (uint64_t **)&vs, &vsc) != 0 ||
+ if ((have_stats == 0 ||
vs->vs_state >= VDEV_STATE_DEGRADED) &&
zhp != NULL &&
nvlist_lookup_string(nv, ZPOOL_CONFIG_DEVID, &devid) == 0) {
@@ -3605,7 +3642,7 @@ find_start_block(nvlist_t *config)
* stripped of any leading /dev path.
*/
int
-zpool_label_disk(libzfs_handle_t *hdl, zpool_handle_t *zhp, char *name)
+zpool_label_disk(libzfs_handle_t *hdl, zpool_handle_t *zhp, const char *name)
{
#ifdef sun
char path[MAXPATHLEN];
Modified: projects/zfsd/head/lib/libarchive/Makefile
==============================================================================
--- projects/zfsd/head/lib/libarchive/Makefile Mon Jul 18 03:18:06 2011 (r224171)
+++ projects/zfsd/head/lib/libarchive/Makefile Mon Jul 18 03:40:49 2011 (r224172)
@@ -13,6 +13,9 @@ DPADD+= ${LIBLZMA}
LDADD+= -llzma
CFLAGS+= -DHAVE_LIBLZMA=1 -DHAVE_LZMA_H=1
+DPADD+= ${LIBBSDXML}
+LDADD+= -lbsdxml
+
# FreeBSD SHLIB_MAJOR value is managed as part of the FreeBSD system.
# It has no real relation to the libarchive version number.
SHLIB_MAJOR= 5
@@ -56,6 +59,7 @@ SRCS= archive_check_magic.c \
archive_read_support_compression_gzip.c \
archive_read_support_compression_none.c \
archive_read_support_compression_program.c \
+ archive_read_support_compression_rpm.c \
archive_read_support_compression_uu.c \
archive_read_support_compression_xz.c \
archive_read_support_format_all.c \
@@ -66,6 +70,7 @@ SRCS= archive_check_magic.c \
archive_read_support_format_mtree.c \
archive_read_support_format_raw.c \
archive_read_support_format_tar.c \
+ archive_read_support_format_xar.c \
archive_read_support_format_zip.c \
archive_string.c \
archive_string_sprintf.c \
Modified: projects/zfsd/head/lib/libarchive/README
==============================================================================
--- projects/zfsd/head/lib/libarchive/README Mon Jul 18 03:18:06 2011 (r224171)
+++ projects/zfsd/head/lib/libarchive/README Mon Jul 18 03:40:49 2011 (r224172)
@@ -21,6 +21,7 @@ Currently, the library automatically det
* gzip compression
* bzip2 compression
* compress/LZW compression
+ * lzma and xz compression
* GNU tar format (including GNU long filenames, long link names, and
sparse files)
* Solaris 9 extended tar format (including ACLs)
@@ -30,18 +31,26 @@ Currently, the library automatically det
* POSIX octet-oriented cpio
* SVR4 ASCII cpio
* Binary cpio (big-endian or little-endian)
- * ISO9660 CD-ROM images (with optional Rockridge extensions)
+ * ISO9660 CD-ROM images (with optional Rockridge or Joliet extensions)
* ZIP archives (with uncompressed or "deflate" compressed entries)
+ * GNU and BSD 'ar' archives
+ * 'mtree' format
The library can write:
* gzip compression
* bzip2 compression
+ * compress/LZW compression
+ * lzma and xz compression
* POSIX ustar
* POSIX pax interchange format
* "restricted" pax format, which will create ustar archives except for
entries that require pax extensions (for long filenames, ACLs, etc).
* POSIX octet-oriented cpio
+ * SVR4 "newc" cpio
* shar archives
+ * ZIP archives (with uncompressed or "deflate" compressed entries)
+ * GNU and BSD 'ar' archives
+ * 'mtree' format
Notes:
* This is a heavily stream-oriented system. There is no direct
Modified: projects/zfsd/head/lib/libarchive/archive.h
==============================================================================
--- projects/zfsd/head/lib/libarchive/archive.h Mon Jul 18 03:18:06 2011 (r224171)
+++ projects/zfsd/head/lib/libarchive/archive.h Mon Jul 18 03:40:49 2011 (r224172)
@@ -52,7 +52,9 @@
/* These should match the types used in 'struct stat' */
#if defined(_WIN32) && !defined(__CYGWIN__)
#define __LA_INT64_T __int64
-# if defined(_WIN64)
+# if defined(_SSIZE_T_DEFINED)
+# define __LA_SSIZE_T ssize_t
+# elif defined(_WIN64)
# define __LA_SSIZE_T __int64
# else
# define __LA_SSIZE_T long
@@ -127,13 +129,13 @@ extern "C" {
* (ARCHIVE_API_VERSION * 1000000 + ARCHIVE_API_FEATURE * 1000)
* #endif
*/
-#define ARCHIVE_VERSION_NUMBER 2007901
+#define ARCHIVE_VERSION_NUMBER 2008004
__LA_DECL int archive_version_number(void);
/*
* Textual name/version of the library, useful for version displays.
*/
-#define ARCHIVE_VERSION_STRING "libarchive 2.7.901a"
+#define ARCHIVE_VERSION_STRING "libarchive 2.8.4"
__LA_DECL const char * archive_version_string(void);
#if ARCHIVE_VERSION_NUMBER < 3000000
@@ -319,6 +321,7 @@ __LA_DECL int archive_read_support_com
(struct archive *, const char *,
const void * /* match */, size_t);
+__LA_DECL int archive_read_support_compression_rpm(struct archive *);
__LA_DECL int archive_read_support_compression_uu(struct archive *);
__LA_DECL int archive_read_support_compression_xz(struct archive *);
@@ -331,6 +334,7 @@ __LA_DECL int archive_read_support_for
__LA_DECL int archive_read_support_format_mtree(struct archive *);
__LA_DECL int archive_read_support_format_raw(struct archive *);
__LA_DECL int archive_read_support_format_tar(struct archive *);
+__LA_DECL int archive_read_support_format_xar(struct archive *);
__LA_DECL int archive_read_support_format_zip(struct archive *);
Modified: projects/zfsd/head/lib/libarchive/archive_hash.h
==============================================================================
--- projects/zfsd/head/lib/libarchive/archive_hash.h Mon Jul 18 03:18:06 2011 (r224171)
+++ projects/zfsd/head/lib/libarchive/archive_hash.h Mon Jul 18 03:40:49 2011 (r224172)
@@ -29,6 +29,10 @@
#error This header is only to be used internally to libarchive.
#endif
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+
/*
* Hash function support in various Operating Systems:
*
@@ -41,43 +45,71 @@
* - OpenBSD 4.4 and earlier have SHA2 in libc with _ after algorithm name
*
* DragonFly and FreeBSD (XXX not used yet):
- * - MD5 in libmd: without _ after algorithm name
- * - SHA{1,256,512} in libmd: with _ after algorithm name (conflicts w/OpenSSL!)
+ * - MD5 and SHA1 in libmd: without _ after algorithm name
+ * - SHA256: with _ after algorithm name
+ *
+ * Mac OS X (10.4 and later):
+ * - MD5, SHA1 and SHA2 in libSystem: with CC_ prefix and _ after algorithm name
*
* OpenSSL:
- * - MD5, SHA1, SHA2, SHA{256,384,512} in libcrypto: with _ after algorithm name
+ * - MD5, SHA1 and SHA2 in libcrypto: with _ after algorithm name
+ *
+ * Windows:
+ * - MD5, SHA1 and SHA2 in archive_windows.c: without algorithm name
+ * and with __la_ prefix.
*/
+#if defined(ARCHIVE_HASH_MD5_WIN) ||\
+ defined(ARCHIVE_HASH_SHA1_WIN) || defined(ARCHIVE_HASH_SHA256_WIN) ||\
+ defined(ARCHIVE_HASH_SHA384_WIN) || defined(ARCHIVE_HASH_SHA512_WIN)
+#include <wincrypt.h>
+typedef struct {
+ int valid;
+ HCRYPTPROV cryptProv;
+ HCRYPTHASH hash;
+} Digest_CTX;
+extern void __la_hash_Init(Digest_CTX *, ALG_ID);
+extern void __la_hash_Final(unsigned char *, size_t, Digest_CTX *);
+extern void __la_hash_Update(Digest_CTX *, const unsigned char *, size_t);
+#endif
-#if defined(HAVE_MD5_H) && defined(HAVE_MD5INIT)
+#if defined(ARCHIVE_HASH_MD5_LIBC)
# include <md5.h>
# define ARCHIVE_HAS_MD5
typedef MD5_CTX archive_md5_ctx;
# define archive_md5_init(ctx) MD5Init(ctx)
# define archive_md5_final(ctx, buf) MD5Final(buf, ctx)
# define archive_md5_update(ctx, buf, n) MD5Update(ctx, buf, n)
-#elif defined(HAVE_OPENSSL_MD5_H)
+#elif defined(ARCHIVE_HASH_MD5_LIBSYSTEM)
+# include <CommonCrypto/CommonDigest.h>
+# define ARCHIVE_HAS_MD5
+typedef CC_MD5_CTX archive_md5_ctx;
+# define archive_md5_init(ctx) CC_MD5_Init(ctx)
+# define archive_md5_final(ctx, buf) CC_MD5_Final(buf, ctx)
+# define archive_md5_update(ctx, buf, n) CC_MD5_Update(ctx, buf, n)
+#elif defined(ARCHIVE_HASH_MD5_OPENSSL)
# include <openssl/md5.h>
# define ARCHIVE_HAS_MD5
typedef MD5_CTX archive_md5_ctx;
# define archive_md5_init(ctx) MD5_Init(ctx)
# define archive_md5_final(ctx, buf) MD5_Final(buf, ctx)
# define archive_md5_update(ctx, buf, n) MD5_Update(ctx, buf, n)
-#elif defined(_WIN32) && !defined(__CYGWIN__) && defined(CALG_MD5)
+#elif defined(ARCHIVE_HASH_MD5_WIN)
# define ARCHIVE_HAS_MD5
-typedef MD5_CTX archive_md5_ctx;
-# define archive_md5_init(ctx) MD5_Init(ctx)
-# define archive_md5_final(ctx, buf) MD5_Final(buf, ctx)
-# define archive_md5_update(ctx, buf, n) MD5_Update(ctx, buf, n)
+# define MD5_DIGEST_LENGTH 16
+typedef Digest_CTX archive_md5_ctx;
+# define archive_md5_init(ctx) __la_hash_Init(ctx, CALG_MD5)
+# define archive_md5_final(ctx, buf) __la_hash_Final(buf, MD5_DIGEST_LENGTH, ctx)
+# define archive_md5_update(ctx, buf, n) __la_hash_Update(ctx, buf, n)
#endif
-#if defined(HAVE_RMD160_H) && defined(HAVE_RMD160INIT)
+#if defined(ARCHIVE_HASH_RMD160_LIBC)
# include <rmd160.h>
# define ARCHIVE_HAS_RMD160
typedef RMD160_CTX archive_rmd160_ctx;
# define archive_rmd160_init(ctx) RMD160Init(ctx)
# define archive_rmd160_final(ctx, buf) RMD160Final(buf, ctx)
# define archive_rmd160_update(ctx, buf, n) RMD160Update(ctx, buf, n)
-#elif defined(HAVE_OPENSSL_RIPEMD_H)
+#elif defined(ARCHIVE_HASH_RMD160_OPENSSL)
# include <openssl/ripemd.h>
# define ARCHIVE_HAS_RMD160
typedef RIPEMD160_CTX archive_rmd160_ctx;
@@ -86,111 +118,164 @@ typedef RIPEMD160_CTX archive_rmd160_ctx
# define archive_rmd160_update(ctx, buf, n) RIPEMD160_Update(ctx, buf, n)
#endif
-#if defined(HAVE_SHA1_H) && defined(HAVE_SHA1INIT)
+#if defined(ARCHIVE_HASH_SHA1_LIBC)
# include <sha1.h>
# define ARCHIVE_HAS_SHA1
typedef SHA1_CTX archive_sha1_ctx;
# define archive_sha1_init(ctx) SHA1Init(ctx)
# define archive_sha1_final(ctx, buf) SHA1Final(buf, ctx)
# define archive_sha1_update(ctx, buf, n) SHA1Update(ctx, buf, n)
-#elif defined(HAVE_OPENSSL_SHA_H)
+#elif defined(ARCHIVE_HASH_SHA1_LIBSYSTEM)
+# include <CommonCrypto/CommonDigest.h>
+# define ARCHIVE_HAS_SHA1
+typedef CC_SHA1_CTX archive_sha1_ctx;
+# define archive_sha1_init(ctx) CC_SHA1_Init(ctx)
+# define archive_sha1_final(ctx, buf) CC_SHA1_Final(buf, ctx)
+# define archive_sha1_update(ctx, buf, n) CC_SHA1_Update(ctx, buf, n)
+#elif defined(ARCHIVE_HASH_SHA1_OPENSSL)
# include <openssl/sha.h>
# define ARCHIVE_HAS_SHA1
typedef SHA_CTX archive_sha1_ctx;
# define archive_sha1_init(ctx) SHA1_Init(ctx)
# define archive_sha1_final(ctx, buf) SHA1_Final(buf, ctx)
# define archive_sha1_update(ctx, buf, n) SHA1_Update(ctx, buf, n)
-#elif defined(_WIN32) && !defined(__CYGWIN__) && defined(CALG_SHA1)
+#elif defined(ARCHIVE_HASH_SHA1_WIN)
# define ARCHIVE_HAS_SHA1
-typedef SHA1_CTX archive_sha1_ctx;
-# define archive_sha1_init(ctx) SHA1_Init(ctx)
-# define archive_sha1_final(ctx, buf) SHA1_Final(buf, ctx)
-# define archive_sha1_update(ctx, buf, n) SHA1_Update(ctx, buf, n)
+# define SHA1_DIGEST_LENGTH 20
+typedef Digest_CTX archive_sha1_ctx;
+# define archive_sha1_init(ctx) __la_hash_Init(ctx, CALG_SHA1)
+# define archive_sha1_final(ctx, buf) __la_hash_Final(buf, SHA1_DIGEST_LENGTH, ctx)
+# define archive_sha1_update(ctx, buf, n) __la_hash_Update(ctx, buf, n)
#endif
-#if defined(HAVE_SHA2_H) && defined(HAVE_SHA256_INIT)
+#if defined(ARCHIVE_HASH_SHA256_LIBC)
# include <sha2.h>
# define ARCHIVE_HAS_SHA256
typedef SHA256_CTX archive_sha256_ctx;
# define archive_sha256_init(ctx) SHA256_Init(ctx)
# define archive_sha256_final(ctx, buf) SHA256_Final(buf, ctx)
# define archive_sha256_update(ctx, buf, n) SHA256_Update(ctx, buf, n)
-#elif defined(HAVE_SHA2_H) && defined(HAVE_SHA256INIT)
+#elif defined(ARCHIVE_HASH_SHA256_LIBC2)
# include <sha2.h>
# define ARCHIVE_HAS_SHA256
typedef SHA256_CTX archive_sha256_ctx;
# define archive_sha256_init(ctx) SHA256Init(ctx)
# define archive_sha256_final(ctx, buf) SHA256Final(buf, ctx)
# define archive_sha256_update(ctx, buf, n) SHA256Update(ctx, buf, n)
-#elif defined(HAVE_OPENSSL_SHA_H) && defined(HAVE_OPENSSL_SHA256_INIT)
+#elif defined(ARCHIVE_HASH_SHA256_LIBC3)
+# include <sha2.h>
+# define ARCHIVE_HAS_SHA256
+typedef SHA2_CTX archive_sha256_ctx;
+# define archive_sha256_init(ctx) SHA256Init(ctx)
+# define archive_sha256_final(ctx, buf) SHA256Final(buf, ctx)
+# define archive_sha256_update(ctx, buf, n) SHA256Update(ctx, buf, n)
+#elif defined(ARCHIVE_HASH_SHA256_LIBSYSTEM)
+# include <CommonCrypto/CommonDigest.h>
+# define ARCHIVE_HAS_SHA256
+typedef CC_SHA256_CTX archive_shs256_ctx;
+# define archive_shs256_init(ctx) CC_SHA256_Init(ctx)
+# define archive_shs256_final(ctx, buf) CC_SHA256_Final(buf, ctx)
+# define archive_shs256_update(ctx, buf, n) CC_SHA256_Update(ctx, buf, n)
+#elif defined(ARCHIVE_HASH_SHA256_OPENSSL)
# include <openssl/sha.h>
# define ARCHIVE_HAS_SHA256
typedef SHA256_CTX archive_sha256_ctx;
# define archive_sha256_init(ctx) SHA256_Init(ctx)
# define archive_sha256_final(ctx, buf) SHA256_Final(buf, ctx)
# define archive_sha256_update(ctx, buf, n) SHA256_Update(ctx, buf, n)
-#elif defined(_WIN32) && !defined(__CYGWIN__) && defined(CALG_SHA_256)
+#elif defined(ARCHIVE_HASH_SHA256_WIN)
# define ARCHIVE_HAS_SHA256
-typedef SHA256_CTX archive_sha256_ctx;
-# define archive_sha256_init(ctx) SHA256_Init(ctx)
-# define archive_sha256_final(ctx, buf) SHA256_Final(buf, ctx)
-# define archive_sha256_update(ctx, buf, n) SHA256_Update(ctx, buf, n)
+# define SHA256_DIGEST_LENGTH 32
+typedef Digest_CTX archive_sha256_ctx;
+# define archive_sha256_init(ctx) __la_hash_Init(ctx, CALG_SHA_256)
+# define archive_sha256_final(ctx, buf) __la_hash_Final(buf, SHA256_DIGEST_LENGTH, ctx)
+# define archive_sha256_update(ctx, buf, n) __la_hash_Update(ctx, buf, n)
#endif
-#if defined(HAVE_SHA2_H) && defined(HAVE_SHA384_INIT)
+#if defined(ARCHIVE_HASH_SHA384_LIBC)
# include <sha2.h>
# define ARCHIVE_HAS_SHA384
typedef SHA384_CTX archive_sha384_ctx;
# define archive_sha384_init(ctx) SHA384_Init(ctx)
# define archive_sha384_final(ctx, buf) SHA384_Final(buf, ctx)
# define archive_sha384_update(ctx, buf, n) SHA384_Update(ctx, buf, n)
-#elif defined(HAVE_SHA2_H) && defined(HAVE_SHA384INIT)
+#elif defined(ARCHIVE_HASH_SHA384_LIBC2)
# include <sha2.h>
# define ARCHIVE_HAS_SHA384
typedef SHA384_CTX archive_sha384_ctx;
# define archive_sha384_init(ctx) SHA384Init(ctx)
# define archive_sha384_final(ctx, buf) SHA384Final(buf, ctx)
# define archive_sha384_update(ctx, buf, n) SHA384Update(ctx, buf, n)
-#elif defined(HAVE_OPENSSL_SHA_H) && defined(HAVE_OPENSSL_SHA384_INIT)
+#elif defined(ARCHIVE_HASH_SHA384_LIBC3)
+# include <sha2.h>
+# define ARCHIVE_HAS_SHA384
+typedef SHA2_CTX archive_sha384_ctx;
+# define archive_sha384_init(ctx) SHA384Init(ctx)
+# define archive_sha384_final(ctx, buf) SHA384Final(buf, ctx)
+# define archive_sha384_update(ctx, buf, n) SHA384Update(ctx, buf, n)
+#elif defined(ARCHIVE_HASH_SHA384_LIBSYSTEM)
+# include <CommonCrypto/CommonDigest.h>
+# define ARCHIVE_HAS_SHA384
+typedef CC_SHA512_CTX archive_shs384_ctx;
+# define archive_shs384_init(ctx) CC_SHA384_Init(ctx)
+# define archive_shs384_final(ctx, buf) CC_SHA384_Final(buf, ctx)
+# define archive_shs384_update(ctx, buf, n) CC_SHA384_Update(ctx, buf, n)
+#elif defined(ARCHIVE_HASH_SHA384_OPENSSL)
# include <openssl/sha.h>
# define ARCHIVE_HAS_SHA384
typedef SHA512_CTX archive_sha384_ctx;
# define archive_sha384_init(ctx) SHA384_Init(ctx)
# define archive_sha384_final(ctx, buf) SHA384_Final(buf, ctx)
# define archive_sha384_update(ctx, buf, n) SHA384_Update(ctx, buf, n)
-#elif defined(_WIN32) && !defined(__CYGWIN__) && defined(CALG_SHA_384)
+#elif defined(ARCHIVE_HASH_SHA384_WIN)
# define ARCHIVE_HAS_SHA384
-typedef SHA512_CTX archive_sha384_ctx;
-# define archive_sha384_init(ctx) SHA384_Init(ctx)
-# define archive_sha384_final(ctx, buf) SHA384_Final(buf, ctx)
-# define archive_sha384_update(ctx, buf, n) SHA384_Update(ctx, buf, n)
+# define SHA384_DIGEST_LENGTH 48
+typedef Digest_CTX archive_sha384_ctx;
+# define archive_sha384_init(ctx) __la_hash_Init(ctx, CALG_SHA_384)
+# define archive_sha384_final(ctx, buf) __la_hash_Final(buf, SHA384_DIGEST_LENGTH, ctx)
+# define archive_sha384_update(ctx, buf, n) __la_hash_Update(ctx, buf, n)
#endif
-#if defined(HAVE_SHA2_H) && defined(HAVE_SHA512_INIT)
+#if defined(ARCHIVE_HASH_SHA512_LIBC)
# include <sha2.h>
# define ARCHIVE_HAS_SHA512
typedef SHA512_CTX archive_sha512_ctx;
# define archive_sha512_init(ctx) SHA512_Init(ctx)
# define archive_sha512_final(ctx, buf) SHA512_Final(buf, ctx)
# define archive_sha512_update(ctx, buf, n) SHA512_Update(ctx, buf, n)
-#elif defined(HAVE_SHA2_H) && defined(HAVE_SHA512INIT)
+#elif defined(ARCHIVE_HASH_SHA512_LIBC2)
# include <sha2.h>
# define ARCHIVE_HAS_SHA512
typedef SHA512_CTX archive_sha512_ctx;
# define archive_sha512_init(ctx) SHA512Init(ctx)
# define archive_sha512_final(ctx, buf) SHA512Final(buf, ctx)
# define archive_sha512_update(ctx, buf, n) SHA512Update(ctx, buf, n)
-#elif defined(HAVE_OPENSSL_SHA_H) && defined(HAVE_OPENSSL_SHA512_INIT)
+#elif defined(ARCHIVE_HASH_SHA512_LIBC3)
+# include <sha2.h>
+# define ARCHIVE_HAS_SHA512
+typedef SHA2_CTX archive_sha512_ctx;
+# define archive_sha512_init(ctx) SHA512Init(ctx)
+# define archive_sha512_final(ctx, buf) SHA512Final(buf, ctx)
+# define archive_sha512_update(ctx, buf, n) SHA512Update(ctx, buf, n)
+#elif defined(ARCHIVE_HASH_SHA512_LIBSYSTEM)
+# include <CommonCrypto/CommonDigest.h>
+# define ARCHIVE_HAS_SHA512
+typedef CC_SHA512_CTX archive_shs512_ctx;
+# define archive_shs512_init(ctx) CC_SHA512_Init(ctx)
+# define archive_shs512_final(ctx, buf) CC_SHA512_Final(buf, ctx)
+# define archive_shs512_update(ctx, buf, n) CC_SHA512_Update(ctx, buf, n)
+#elif defined(ARCHIVE_HASH_SHA512_OPENSSL)
# include <openssl/sha.h>
# define ARCHIVE_HAS_SHA512
typedef SHA512_CTX archive_sha512_ctx;
# define archive_sha512_init(ctx) SHA512_Init(ctx)
# define archive_sha512_final(ctx, buf) SHA512_Final(buf, ctx)
# define archive_sha512_update(ctx, buf, n) SHA512_Update(ctx, buf, n)
-#elif defined(_WIN32) && !defined(__CYGWIN__) && defined(CALG_SHA_512)
+#elif defined(ARCHIVE_HASH_SHA512_WIN)
# define ARCHIVE_HAS_SHA512
-typedef SHA512_CTX archive_sha512_ctx;
-# define archive_sha512_init(ctx) SHA512_Init(ctx)
-# define archive_sha512_final(ctx, buf) SHA512_Final(buf, ctx)
-# define archive_sha512_update(ctx, buf, n) SHA512_Update(ctx, buf, n)
+# define SHA512_DIGEST_LENGTH 64
+typedef Digest_CTX archive_sha512_ctx;
+# define archive_sha512_init(ctx) __la_hash_Init(ctx, CALG_SHA_512)
+# define archive_sha512_final(ctx, buf) __la_hash_Final(buf, SHA512_DIGEST_LENGTH, ctx)
+# define archive_sha512_update(ctx, buf, n) __la_hash_Update(ctx, buf, n)
#endif
Modified: projects/zfsd/head/lib/libarchive/archive_read.3
==============================================================================
--- projects/zfsd/head/lib/libarchive/archive_read.3 Mon Jul 18 03:18:06 2011 (r224171)
+++ projects/zfsd/head/lib/libarchive/archive_read.3 Mon Jul 18 03:40:49 2011 (r224172)
@@ -597,7 +597,7 @@ list_archive(const char *name)
archive_read_support_format_all(a);
archive_read_open(a, mydata, myopen, myread, myclose);
while (archive_read_next_header(a, &entry) == ARCHIVE_OK) {
- printf("%s\\n",archive_entry_pathname(entry));
+ printf("%s\en",archive_entry_pathname(entry));
archive_read_data_skip(a);
}
archive_read_free(a);
Modified: projects/zfsd/head/lib/libarchive/archive_read_disk_entry_from_file.c
==============================================================================
--- projects/zfsd/head/lib/libarchive/archive_read_disk_entry_from_file.c Mon Jul 18 03:18:06 2011 (r224171)
+++ projects/zfsd/head/lib/libarchive/archive_read_disk_entry_from_file.c Mon Jul 18 03:40:49 2011 (r224172)
@@ -208,6 +208,12 @@ setup_acls_posix1e(struct archive_read_d
#if HAVE_ACL_GET_LINK_NP
else if (!a->follow_symlinks)
acl = acl_get_link_np(accpath, ACL_TYPE_ACCESS);
+#else
+ else if ((!a->follow_symlinks)
+ && (archive_entry_filetype(entry) == AE_IFLNK))
+ /* We can't get the ACL of a symlink, so we assume it can't
+ have one. */
+ acl = NULL;
#endif
else
acl = acl_get_file(accpath, ACL_TYPE_ACCESS);
@@ -419,7 +425,8 @@ setup_xattrs(struct archive_read_disk *a
return (ARCHIVE_OK);
}
-#elif HAVE_EXTATTR_GET_FILE && HAVE_EXTATTR_LIST_FILE
+#elif HAVE_EXTATTR_GET_FILE && HAVE_EXTATTR_LIST_FILE && \
+ HAVE_DECL_EXTATTR_NAMESPACE_USER
/*
* FreeBSD extattr interface.
@@ -430,11 +437,11 @@ setup_xattrs(struct archive_read_disk *a
* to not include the system extattrs that hold ACLs; we handle
* those separately.
*/
-int
+static int
setup_xattr(struct archive_read_disk *a, struct archive_entry *entry,
int namespace, const char *name, const char *fullname, int fd);
-int
+static int
setup_xattr(struct archive_read_disk *a, struct archive_entry *entry,
int namespace, const char *name, const char *fullname, int fd)
{
Modified: projects/zfsd/head/lib/libarchive/archive_read_disk_set_standard_lookup.c
==============================================================================
--- projects/zfsd/head/lib/libarchive/archive_read_disk_set_standard_lookup.c Mon Jul 18 03:18:06 2011 (r224171)
+++ projects/zfsd/head/lib/libarchive/archive_read_disk_set_standard_lookup.c Mon Jul 18 03:40:49 2011 (r224172)
@@ -182,6 +182,7 @@ lookup_uname(void *data, uid_t uid)
&lookup_uname_helper, (id_t)uid));
}
+#if HAVE_GETPWUID_R
static const char *
lookup_uname_helper(struct name_cache *cache, id_t id)
{
@@ -222,6 +223,20 @@ lookup_uname_helper(struct name_cache *c
return strdup(result->pw_name);
}
+#else
+static const char *
+lookup_uname_helper(struct name_cache *cache, id_t id)
+{
+ struct passwd *result;
+
+ result = getpwuid((uid_t)id);
+
+ if (result == NULL)
+ return (NULL);
+
+ return strdup(result->pw_name);
+}
+#endif
static const char *
lookup_gname(void *data, gid_t gid)
@@ -231,6 +246,7 @@ lookup_gname(void *data, gid_t gid)
&lookup_gname_helper, (id_t)gid));
}
+#if HAVE_GETGRGID_R
static const char *
lookup_gname_helper(struct name_cache *cache, id_t id)
{
@@ -269,4 +285,19 @@ lookup_gname_helper(struct name_cache *c
return strdup(result->gr_name);
}
+#else
+static const char *
+lookup_gname_helper(struct name_cache *cache, id_t id)
+{
+ struct group *result;
+
+ result = getgrgid((gid_t)id);
+
+ if (result == NULL)
+ return (NULL);
+
+ return strdup(result->gr_name);
+}
+#endif
+
#endif /* ! (_WIN32 && !__CYGWIN__) */
Modified: projects/zfsd/head/lib/libarchive/archive_read_support_compression_all.c
==============================================================================
--- projects/zfsd/head/lib/libarchive/archive_read_support_compression_all.c Mon Jul 18 03:18:06 2011 (r224171)
+++ projects/zfsd/head/lib/libarchive/archive_read_support_compression_all.c Mon Jul 18 03:40:49 2011 (r224172)
@@ -46,6 +46,8 @@ archive_read_support_compression_all(str
archive_read_support_compression_xz(a);
/* The decode code doesn't use an outside library. */
archive_read_support_compression_uu(a);
+ /* The decode code doesn't use an outside library. */
+ archive_read_support_compression_rpm(a);
/* Note: We always return ARCHIVE_OK here, even if some of the
* above return ARCHIVE_WARN. The intent here is to enable
Modified: projects/zfsd/head/lib/libarchive/archive_read_support_compression_bzip2.c
==============================================================================
--- projects/zfsd/head/lib/libarchive/archive_read_support_compression_bzip2.c Mon Jul 18 03:18:06 2011 (r224171)
+++ projects/zfsd/head/lib/libarchive/archive_read_support_compression_bzip2.c Mon Jul 18 03:40:49 2011 (r224172)
@@ -48,7 +48,7 @@ __FBSDID("$FreeBSD$");
#include "archive_private.h"
#include "archive_read_private.h"
-#if HAVE_BZLIB_H
+#if defined(HAVE_BZLIB_H) && defined(BZ_CONFIG_ERROR)
struct private_data {
bz_stream stream;
char *out_block;
@@ -86,7 +86,7 @@ archive_read_support_compression_bzip2(s
reader->init = bzip2_reader_init;
reader->options = NULL;
reader->free = bzip2_reader_free;
-#if HAVE_BZLIB_H
+#if defined(HAVE_BZLIB_H) && defined(BZ_CONFIG_ERROR)
return (ARCHIVE_OK);
#else
archive_set_error(_a, ARCHIVE_ERRNO_MISC,
@@ -146,7 +146,7 @@ bzip2_reader_bid(struct archive_read_fil
return (bits_checked);
}
-#ifndef HAVE_BZLIB_H
+#if !defined(HAVE_BZLIB_H) || !defined(BZ_CONFIG_ERROR)
/*
* If we don't have the library on this system, we can't actually do the
Copied: projects/zfsd/head/lib/libarchive/archive_read_support_compression_rpm.c (from r224171, head/lib/libarchive/archive_read_support_compression_rpm.c)
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ projects/zfsd/head/lib/libarchive/archive_read_support_compression_rpm.c Mon Jul 18 03:40:49 2011 (r224172, copy of r224171, head/lib/libarchive/archive_read_support_compression_rpm.c)
@@ -0,0 +1,288 @@
+/*-
+ * Copyright (c) 2009 Michihiro NAKAJIMA
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "archive_platform.h"
+__FBSDID("$FreeBSD$");
+
+#ifdef HAVE_ERRNO_H
+#include <errno.h>
+#endif
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+
+#include "archive.h"
+#include "archive_endian.h"
+#include "archive_private.h"
+#include "archive_read_private.h"
+
+struct rpm {
+ int64_t total_in;
+ size_t hpos;
+ size_t hlen;
+ unsigned char header[16];
+ enum {
+ ST_LEAD, /* Skipping 'Lead' section. */
+ ST_HEADER, /* Reading 'Header' section;
+ * first 16 bytes. */
+ ST_HEADER_DATA, /* Skipping 'Header' section. */
+ ST_PADDING, /* Skipping padding data after the
+ * 'Header' section. */
+ ST_ARCHIVE /* Reading 'Archive' section. */
+ } state;
+ int first_header;
+};
+#define RPM_LEAD_SIZE 96 /* Size of 'Lead' section. */
+
+static int rpm_bidder_bid(struct archive_read_filter_bidder *,
+ struct archive_read_filter *);
+static int rpm_bidder_init(struct archive_read_filter *);
+
+static ssize_t rpm_filter_read(struct archive_read_filter *,
+ const void **);
+static int rpm_filter_close(struct archive_read_filter *);
+
+int
+archive_read_support_compression_rpm(struct archive *_a)
+{
+ struct archive_read *a = (struct archive_read *)_a;
+ struct archive_read_filter_bidder *bidder;
+
+ bidder = __archive_read_get_bidder(a);
+ archive_clear_error(_a);
+ if (bidder == NULL)
+ return (ARCHIVE_FATAL);
+
+ bidder->data = NULL;
+ bidder->bid = rpm_bidder_bid;
+ bidder->init = rpm_bidder_init;
+ bidder->options = NULL;
+ bidder->free = NULL;
+ return (ARCHIVE_OK);
+}
+
+static int
+rpm_bidder_bid(struct archive_read_filter_bidder *self,
*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
More information about the svn-src-projects
mailing list