diff options
Diffstat (limited to 'usr/src')
43 files changed, 1003 insertions, 246 deletions
| diff --git a/usr/src/Makefile.master b/usr/src/Makefile.master index 448c06de81..b0283d1b5a 100644 --- a/usr/src/Makefile.master +++ b/usr/src/Makefile.master @@ -204,7 +204,12 @@ PERL_ARCH =		i86pc-solaris-64int  $(SPARC_BLD)PERL_ARCH =	sun4-solaris-64int  PYTHON_VERSION=	2.7  PYTHON_PKGVERS=	-27 +PYTHON_SUFFIX=  PYTHON=		/usr/bin/python$(PYTHON_VERSION) +PYTHON3_VERSION=	3.5 +PYTHON3_PKGVERS=	-35 +PYTHON3_SUFFIX=		m +PYTHON3=		/usr/bin/python$(PYTHON3_VERSION)  SORT=		/usr/bin/sort  TOUCH=		/usr/bin/touch  WC=		/usr/bin/wc diff --git a/usr/src/Targetdirs b/usr/src/Targetdirs index e7ec8b9a39..3398e81a6e 100644 --- a/usr/src/Targetdirs +++ b/usr/src/Targetdirs @@ -29,6 +29,7 @@  # Copyright 2016 Nexenta Systems, Inc.  # Copyright 2017 RackTop Systems.  # Copyright (c) 2018, Joyent, Inc. +# Copyright 2018 OmniOS Community Edition (OmniOSce) Association.  #  # @@ -71,6 +72,29 @@ sparc_64ONLY= $(POUND_SIGN)  $(64ONLY) MACH32_DIRS=/usr/ucb/$(MACH32) +PYTHON2_DIRS= +PYTHON2_64DIRS= +PYTHON3_DIRS= + +$(BUILDPY2)PYTHON2_DIRS += \ +	/usr/lib/python$(PYTHON_VERSION) \ +	/usr/lib/python$(PYTHON_VERSION)/vendor-packages \ +	/usr/lib/python$(PYTHON_VERSION)/vendor-packages/solaris \ +	/usr/lib/python$(PYTHON_VERSION)/vendor-packages/zfs + +$(BUILDPY2)PYTHON2_64DIRS += \ +	/usr/lib/python$(PYTHON_VERSION)/vendor-packages/64 \ +	/usr/lib/python$(PYTHON_VERSION)/vendor-packages/solaris/64 \ +	/usr/lib/python$(PYTHON_VERSION)/vendor-packages/zfs/64 + +$(BUILDPY3)PYTHON3_DIRS += \ +	/usr/lib/python$(PYTHON3_VERSION) \ +	/usr/lib/python$(PYTHON3_VERSION)/vendor-packages \ +	/usr/lib/python$(PYTHON3_VERSION)/vendor-packages/solaris \ +	/usr/lib/python$(PYTHON3_VERSION)/vendor-packages/solaris/__pycache__ \ +	/usr/lib/python$(PYTHON3_VERSION)/vendor-packages/zfs \ +	/usr/lib/python$(PYTHON3_VERSION)/vendor-packages/zfs/__pycache__ +  DIRS= \  	/boot \  	/boot/solaris \ @@ -289,12 +313,7 @@ DIRS= \  	/usr/net \  	/usr/net/servers \  	/usr/lib/pool \ -	/usr/lib/python$(PYTHON_VERSION) \ -	/usr/lib/python$(PYTHON_VERSION)/vendor-packages \ -	/usr/lib/python$(PYTHON_VERSION)/vendor-packages/64 \ -	/usr/lib/python$(PYTHON_VERSION)/vendor-packages/solaris \ -	/usr/lib/python$(PYTHON_VERSION)/vendor-packages/zfs \ -	/usr/lib/python$(PYTHON_VERSION)/vendor-packages/beadm \ +	$(PYTHON2_DIRS) \  	/usr/lib/rcap \  	/usr/lib/rcap/$(MACH32) \  	/usr/lib/sa  \ @@ -463,6 +482,8 @@ DIRS64= \  	/usr/lib/lwp/$(MACH64) \  	/usr/lib/mdb/kvm/$(MACH64) \  	/usr/lib/mdb/proc/$(MACH64) \ +	$(PYTHON2_64DIRS) \ +	$(PYTHON3_DIRS) \  	/usr/lib/rcap/$(MACH64) \  	/usr/lib/sasl/$(MACH64) \  	/usr/lib/scsi/$(MACH64) \ @@ -654,28 +675,28 @@ $(DIRLINKS:%=$(ROOT)%):= \  # Special symlinks to populate usr/ccs/lib, whose objects  # have actually been moved to usr/lib  # Rather than adding another set of rules, we add usr/lib/lwp files here -$(ROOT)/usr/ccs/lib/libcurses.so:= 	REALPATH=../../../lib/libcurses.so.1 -$(ROOT)/usr/ccs/lib/llib-lcurses:= 	REALPATH=../../../lib/llib-lcurses -$(ROOT)/usr/ccs/lib/llib-lcurses.ln:= 	REALPATH=../../../lib/llib-lcurses.ln +$(ROOT)/usr/ccs/lib/libcurses.so:=	REALPATH=../../../lib/libcurses.so.1 +$(ROOT)/usr/ccs/lib/llib-lcurses:=	REALPATH=../../../lib/llib-lcurses +$(ROOT)/usr/ccs/lib/llib-lcurses.ln:=	REALPATH=../../../lib/llib-lcurses.ln  $(ROOT)/usr/ccs/lib/libform.so:=	REALPATH=../../lib/libform.so.1 -$(ROOT)/usr/ccs/lib/llib-lform:= 	REALPATH=../../lib/llib-lform -$(ROOT)/usr/ccs/lib/llib-lform.ln:= 	REALPATH=../../lib/llib-lform.ln +$(ROOT)/usr/ccs/lib/llib-lform:=	REALPATH=../../lib/llib-lform +$(ROOT)/usr/ccs/lib/llib-lform.ln:=	REALPATH=../../lib/llib-lform.ln  $(ROOT)/usr/ccs/lib/libgen.so:=		REALPATH=../../../lib/libgen.so.1 -$(ROOT)/usr/ccs/lib/llib-lgen:= 	REALPATH=../../../lib/llib-lgen -$(ROOT)/usr/ccs/lib/llib-lgen.ln:= 	REALPATH=../../../lib/llib-lgen.ln +$(ROOT)/usr/ccs/lib/llib-lgen:=		REALPATH=../../../lib/llib-lgen +$(ROOT)/usr/ccs/lib/llib-lgen.ln:=	REALPATH=../../../lib/llib-lgen.ln  $(ROOT)/usr/ccs/lib/libmalloc.so:=	REALPATH=../../lib/libmalloc.so.1  $(ROOT)/usr/ccs/lib/libmenu.so:=	REALPATH=../../lib/libmenu.so.1 -$(ROOT)/usr/ccs/lib/llib-lmenu:= 	REALPATH=../../lib/llib-lmenu -$(ROOT)/usr/ccs/lib/llib-lmenu.ln:= 	REALPATH=../../lib/llib-lmenu.ln +$(ROOT)/usr/ccs/lib/llib-lmenu:=	REALPATH=../../lib/llib-lmenu +$(ROOT)/usr/ccs/lib/llib-lmenu.ln:=	REALPATH=../../lib/llib-lmenu.ln  $(ROOT)/usr/ccs/lib/libpanel.so:=	REALPATH=../../lib/libpanel.so.1 -$(ROOT)/usr/ccs/lib/llib-lpanel:= 	REALPATH=../../lib/llib-lpanel -$(ROOT)/usr/ccs/lib/llib-lpanel.ln:= 	REALPATH=../../lib/llib-lpanel.ln +$(ROOT)/usr/ccs/lib/llib-lpanel:=	REALPATH=../../lib/llib-lpanel +$(ROOT)/usr/ccs/lib/llib-lpanel.ln:=	REALPATH=../../lib/llib-lpanel.ln  $(ROOT)/usr/ccs/lib/libtermlib.so:=	REALPATH=../../../lib/libcurses.so.1 -$(ROOT)/usr/ccs/lib/llib-ltermlib:= 	REALPATH=../../../lib/llib-lcurses -$(ROOT)/usr/ccs/lib/llib-ltermlib.ln:= 	REALPATH=../../../lib/llib-lcurses.ln +$(ROOT)/usr/ccs/lib/llib-ltermlib:=	REALPATH=../../../lib/llib-lcurses +$(ROOT)/usr/ccs/lib/llib-ltermlib.ln:=	REALPATH=../../../lib/llib-lcurses.ln  $(ROOT)/usr/ccs/lib/libtermcap.so:=	REALPATH=../../../lib/libtermcap.so.1 -$(ROOT)/usr/ccs/lib/llib-ltermcap:= 	REALPATH=../../../lib/llib-ltermcap -$(ROOT)/usr/ccs/lib/llib-ltermcap.ln:= 	REALPATH=../../../lib/llib-ltermcap.ln +$(ROOT)/usr/ccs/lib/llib-ltermcap:=	REALPATH=../../../lib/llib-ltermcap +$(ROOT)/usr/ccs/lib/llib-ltermcap.ln:=	REALPATH=../../../lib/llib-ltermcap.ln  $(ROOT)/usr/ccs/lib/values-Xa.o:=	REALPATH=../../lib/values-Xa.o  $(ROOT)/usr/ccs/lib/values-Xc.o:=	REALPATH=../../lib/values-Xc.o  $(ROOT)/usr/ccs/lib/values-Xs.o:=	REALPATH=../../lib/values-Xs.o @@ -683,9 +704,9 @@ $(ROOT)/usr/ccs/lib/values-Xt.o:=	REALPATH=../../lib/values-Xt.o  $(ROOT)/usr/ccs/lib/values-xpg4.o:=	REALPATH=../../lib/values-xpg4.o  $(ROOT)/usr/ccs/lib/values-xpg6.o:=	REALPATH=../../lib/values-xpg6.o  $(ROOT)/usr/ccs/lib/libl.so:=		REALPATH=../../lib/libl.so.1 -$(ROOT)/usr/ccs/lib/llib-ll.ln:= 	REALPATH=../../lib/llib-ll.ln +$(ROOT)/usr/ccs/lib/llib-ll.ln:=	REALPATH=../../lib/llib-ll.ln  $(ROOT)/usr/ccs/lib/liby.so:=		REALPATH=../../lib/liby.so.1 -$(ROOT)/usr/ccs/lib/llib-ly.ln:= 	REALPATH=../../lib/llib-ly.ln +$(ROOT)/usr/ccs/lib/llib-ly.ln:=	REALPATH=../../lib/llib-ly.ln  $(ROOT)/usr/lib/lwp/libthread.so.1:=	REALPATH=../libthread.so.1  $(ROOT)/usr/lib/lwp/libthread_db.so.1:=	REALPATH=../libthread_db.so.1 @@ -1697,7 +1718,7 @@ SYM.USRLIB= \  	/usr/lib/fm/llib-lfmevent \  	/usr/lib/fm/llib-lfmevent.ln -sparcv9_SYM.USRLIB64=  +sparcv9_SYM.USRLIB64=  amd64_SYM.USRLIB64=	\  	/usr/lib/amd64/libfdisk.so	\ diff --git a/usr/src/boot/sys/boot/efi/libefi/env.c b/usr/src/boot/sys/boot/efi/libefi/env.c index 9fda7f22cc..a1f1e812d2 100644 --- a/usr/src/boot/sys/boot/efi/libefi/env.c +++ b/usr/src/boot/sys/boot/efi/libefi/env.c @@ -652,7 +652,8 @@ efi_print_var(CHAR16 *varnamearg, EFI_GUID *matchguid, int lflag)  	UINTN		datasz;  	EFI_STATUS	status;  	UINT32		attr; -	char		*str, *data; +	char		*str; +	uint8_t		*data;  	int		rv = CMD_OK;  	str = NULL; diff --git a/usr/src/boot/sys/boot/efi/loader/main.c b/usr/src/boot/sys/boot/efi/loader/main.c index ef917ac632..337192c373 100644 --- a/usr/src/boot/sys/boot/efi/loader/main.c +++ b/usr/src/boot/sys/boot/efi/loader/main.c @@ -496,6 +496,23 @@ command_reboot(int argc __unused, char *argv[] __unused)  	return (CMD_ERROR);  } +COMMAND_SET(poweroff, "poweroff", "power off the system", command_poweroff); + +static int +command_poweroff(int argc __unused, char *argv[] __unused) +{ +	int i; + +	for (i = 0; devsw[i] != NULL; ++i) +		if (devsw[i]->dv_cleanup != NULL) +			(devsw[i]->dv_cleanup)(); + +	RS->ResetSystem(EfiResetShutdown, EFI_SUCCESS, 0, NULL); + +	/* NOTREACHED */ +	return (CMD_ERROR); +} +  COMMAND_SET(memmap, "memmap", "print memory map", command_memmap);  static int diff --git a/usr/src/cmd/more/more.c b/usr/src/cmd/more/more.c index 4ed3046629..14742fc6b2 100644 --- a/usr/src/cmd/more/more.c +++ b/usr/src/cmd/more/more.c @@ -1520,15 +1520,40 @@ initterm(void)              dumb++; ul_opt = 0;          }          else { +	    int row, col; +	    struct winsize w; +	    char *s; +  	    reset_shell_mode(); -            if (((Lpp = lines) < 0) || hard_copy) { +	    row = col = -1; +	    if (ioctl(fileno(stdout), TIOCGWINSZ, &w) == 0) { +		if (w.ws_row > 0) +		    row = w.ws_row; +		if (w.ws_col > 0) +		    col = w.ws_col; +	    } +	    if (row < 0) { +		if ((s = getenv("LINES")) != NULL) +		    row = atoi(s); +	    } +	    if (col < 0) { +		if ((s = getenv("COLUMNS")) != NULL) +		    col = atoi(s); +	    } + +	    if (row > 0) +		Lpp = row; +	    else if (((Lpp = lines) < 0) || hard_copy) {                  hard++; /* Hard copy terminal */                  Lpp = 24;              } +	    if (col > 0) +		Mcol = col; +	    else if ((Mcol = columns) < 0) +                Mcol = 80; +              if (tailequ(fnames[0], "page") || !hard && (scroll_forward == NULL))                  noscroll++; -            if ((Mcol = columns) < 0) -                Mcol = 80;              Wrap = tigetflag("am");              /*               *  Set up for underlining:  some terminals don't need it; diff --git a/usr/src/cmd/pyzfs/pyzfs.py b/usr/src/cmd/pyzfs/pyzfs.py index 03f29062d0..7df7d09bfe 100644 --- a/usr/src/cmd/pyzfs/pyzfs.py +++ b/usr/src/cmd/pyzfs/pyzfs.py @@ -20,6 +20,7 @@  # CDDL HEADER END  #  # Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. +# Copyright 2018 OmniOS Community Edition (OmniOSce) Association.  #  # Note, we want SIGINT (control-c) to exit the process quietly, to mimic @@ -65,11 +66,11 @@ try:  	try:  		subfunc() -	except zfs.util.ZFSError, e: +	except zfs.util.ZFSError as e:  		print(e)  		sys.exit(1) -except IOError, e: +except IOError as e:  	import errno  	import sys diff --git a/usr/src/lib/pylibbe/Makefile b/usr/src/lib/pylibbe/Makefile index ee2a576b8a..670615ee8c 100644 --- a/usr/src/lib/pylibbe/Makefile +++ b/usr/src/lib/pylibbe/Makefile @@ -22,12 +22,15 @@  #  # Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.  # Copyright 2012 OmniTI Computer Consulting, Inc.  All rights reserved. +# Copyright 2018 OmniOS Community Edition (OmniOSce) Association.  #  include	../Makefile.lib -SUBDIRS=	$(MACH) -$(BUILD64)SUBDIRS += $(MACH64) +SUBDIRS= +$(BUILDPY2)SUBDIRS += $(MACH) +$(BUILD64)$(BUILDPY2)SUBDIRS += $(MACH64) +$(BUILD64)$(BUILDPY3)SUBDIRS += py3  XGETTEXT=	$(GNUXGETTEXT)  XGETFLAGS=	$(GNUXGETFLAGS) diff --git a/usr/src/lib/pylibbe/Makefile.com b/usr/src/lib/pylibbe/Makefile.com index 3a2d866213..431bcfea1c 100644 --- a/usr/src/lib/pylibbe/Makefile.com +++ b/usr/src/lib/pylibbe/Makefile.com @@ -22,6 +22,7 @@  #  # Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.  # Copyright 2012 OmniTI Computer Consulting, Inc.  All rights reserved. +# Copyright 2018 OmniOS Community Edition (OmniOSce) Association.  #  LIBRARY =	libbe_py.a @@ -30,12 +31,11 @@ OBJECTS =	libbe_py.o  include ../../Makefile.lib -LIBLINKS =  +LIBLINKS =  SRCDIR =	../common  ROOTLIBDIR=	$(ROOT)/usr/lib/python$(PYTHON_VERSION)/vendor-packages  ROOTLIBDIR64=	$(ROOT)/usr/lib/python$(PYTHON_VERSION)/vendor-packages/64 -PYOBJS=		$(PYSRCS:%.py=$(SRCDIR)/%.pyc) -PYFILES=	$(PYSRCS) $(PYSRCS:%.py=%.pyc) +PYFILES=	$(PYSRCS)  ROOTPYBEFILES=  $(PYFILES:%=$(ROOTLIBDIR)/%)  CSTD=        $(CSTD_GNU99) @@ -43,20 +43,17 @@ CSTD=        $(CSTD_GNU99)  LIBS =		$(DYNLIB)  LDLIBS +=	-lbe -lnvpair -lc  CFLAGS +=	$(CCVERBOSE) -CPPFLAGS +=	-I$(ADJUNCT_PROTO)/usr/include/python$(PYTHON_VERSION) \ -		-D_FILE_OFFSET_BITS=64 -I../../libbe/common +CPPFLAGS +=	-D_FILE_OFFSET_BITS=64 -I../../libbe/common \ +	-I$(ADJUNCT_PROTO)/usr/include/python$(PYTHON_VERSION)$(PYTHON_SUFFIX)  .KEEP_STATE: -all install := LDLIBS += -lpython$(PYTHON_VERSION) +all install := LDLIBS += -lpython$(PYTHON_VERSION)$(PYTHON_SUFFIX)  all: $(PYOBJS) $(LIBS)  install: all $(ROOTPYBEFILES) -$(ROOTLIBDIR)/%: % -	$(INS.pyfile) -  lint: lintcheck  include ../../Makefile.targ diff --git a/usr/src/lib/pylibbe/common/libbe_py.c b/usr/src/lib/pylibbe/common/libbe_py.c index fb5102bdb6..3b4a3a3c42 100644 --- a/usr/src/lib/pylibbe/common/libbe_py.c +++ b/usr/src/lib/pylibbe/common/libbe_py.c @@ -60,7 +60,6 @@ PyObject *beUnmount(PyObject *, PyObject *);  PyObject *bePrintErrors(PyObject *, PyObject *);  PyObject *beGetErrDesc(PyObject *, PyObject *);  char *beMapLibbePyErrorToString(int); -void initlibbe_py();  static boolean_t convertBEInfoToDictionary(be_node_list_t *be,      PyObject **listDict); @@ -204,8 +203,8 @@ beCopy(PyObject *self, PyObject *args)  		}  		while (PyDict_Next(beNameProperties, &pos, &pkey, &pvalue)) {  			if (!convertPyArgsToNvlist(&beProps, 2, -			    PyString_AsString(pkey), -			    PyString_AsString(pvalue))) { +			    PyBytes_AS_STRING(pkey), +			    PyBytes_AS_STRING(pvalue))) {  				nvlist_free(beProps);  				nvlist_free(beAttrs);  				return (Py_BuildValue("[iss]", BE_PY_ERR_NVLIST, @@ -833,21 +832,21 @@ convertBEInfoToDictionary(be_node_list_t *be, PyObject **listDict)  {  	if (be->be_node_name != NULL) {  		if (PyDict_SetItemString(*listDict, BE_ATTR_ORIG_BE_NAME, -		    PyString_FromString(be->be_node_name)) != 0) { +		    PyUnicode_FromString(be->be_node_name)) != 0) {  			return (B_FALSE);  		}  	}  	if (be->be_rpool != NULL) {  		if (PyDict_SetItemString(*listDict, BE_ATTR_ORIG_BE_POOL, -		    PyString_FromString(be->be_rpool)) != 0) { +		    PyUnicode_FromString(be->be_rpool)) != 0) {  			return (B_FALSE);  		}  	}  	if (be->be_mntpt != NULL) {  		if (PyDict_SetItemString(*listDict, BE_ATTR_MOUNTPOINT, -		    PyString_FromString(be->be_mntpt)) != 0) { +		    PyUnicode_FromString(be->be_mntpt)) != 0) {  			return (B_FALSE);  		}  	} @@ -881,7 +880,7 @@ convertBEInfoToDictionary(be_node_list_t *be, PyObject **listDict)  	if (be->be_root_ds != NULL) {  		if (PyDict_SetItemString(*listDict, BE_ATTR_ROOT_DS, -		    PyString_FromString(be->be_root_ds)) != 0) { +		    PyUnicode_FromString(be->be_root_ds)) != 0) {  			return (B_FALSE);  		}  	} @@ -895,14 +894,14 @@ convertBEInfoToDictionary(be_node_list_t *be, PyObject **listDict)  	if (be->be_policy_type != NULL) {  		if (PyDict_SetItemString(*listDict, BE_ATTR_POLICY, -		    PyString_FromString(be->be_policy_type)) != 0) { +		    PyUnicode_FromString(be->be_policy_type)) != 0) {  			return (B_FALSE);  		}  	}  	if (be->be_uuid_str != NULL) {  		if (PyDict_SetItemString(*listDict, BE_ATTR_UUID_STR, -		    PyString_FromString(be->be_uuid_str)) != 0) { +		    PyUnicode_FromString(be->be_uuid_str)) != 0) {  			return (B_FALSE);  		}  	} @@ -915,7 +914,7 @@ convertDatasetInfoToDictionary(be_dataset_list_t *ds, PyObject **listDict)  {  	if (ds->be_dataset_name != NULL) {  		if (PyDict_SetItemString(*listDict, BE_ATTR_DATASET, -		    PyString_FromString(ds->be_dataset_name)) != 0) { +		    PyUnicode_FromString(ds->be_dataset_name)) != 0) {  			return (B_FALSE);  		}  	} @@ -927,7 +926,7 @@ convertDatasetInfoToDictionary(be_dataset_list_t *ds, PyObject **listDict)  	if (ds->be_ds_mntpt != NULL) {  		if (PyDict_SetItemString(*listDict, BE_ATTR_MOUNTPOINT, -		    PyString_FromString(ds->be_ds_mntpt)) != 0) { +		    PyUnicode_FromString(ds->be_ds_mntpt)) != 0) {  			return (B_FALSE);  		}  	} @@ -947,14 +946,14 @@ convertDatasetInfoToDictionary(be_dataset_list_t *ds, PyObject **listDict)  	if (ds->be_dataset_name != 0) {  		if (PyDict_SetItemString(*listDict, BE_ATTR_DATASET, -		    PyString_FromString(ds->be_dataset_name)) != 0) { +		    PyUnicode_FromString(ds->be_dataset_name)) != 0) {  			return (B_FALSE);  		}  	}  	if (ds->be_ds_plcy_type != NULL) {  		if (PyDict_SetItemString(*listDict, BE_ATTR_POLICY, -		    PyString_FromString(ds->be_ds_plcy_type)) != 0) { +		    PyUnicode_FromString(ds->be_ds_plcy_type)) != 0) {  			return (B_FALSE);  		}  	} @@ -974,7 +973,7 @@ convertSnapshotInfoToDictionary(be_snapshot_list_t *ss, PyObject **listDict)  {  	if (ss->be_snapshot_name != NULL) {  		if (PyDict_SetItemString(*listDict, BE_ATTR_SNAP_NAME, -		    PyString_FromString(ss->be_snapshot_name)) != 0) { +		    PyUnicode_FromString(ss->be_snapshot_name)) != 0) {  			return (B_FALSE);  		}  	} @@ -988,7 +987,7 @@ convertSnapshotInfoToDictionary(be_snapshot_list_t *ss, PyObject **listDict)  	if (ss->be_snapshot_type != NULL) {  		if (PyDict_SetItemString(*listDict, BE_ATTR_POLICY, -		    PyString_FromString(ss->be_snapshot_type)) != 0) { +		    PyUnicode_FromString(ss->be_snapshot_type)) != 0) {  			return (B_FALSE);  		}  	} @@ -1103,9 +1102,42 @@ static struct PyMethodDef libbeMethods[] = {  	{NULL, NULL, 0, NULL}  }; -void -initlibbe_py() +#if PY_MAJOR_VERSION >= 3 +static struct PyModuleDef libbe_module = { +	PyModuleDef_HEAD_INIT, +	"libbe_py", +	NULL, +	-1, +	libbeMethods +}; +#endif + +static PyObject * +moduleinit()  {  	/* PyMODINIT_FUNC; */ +#if PY_MAJOR_VERSION >= 3 +	return (PyModule_Create(&libbe_module)); +#else +	/* +	 * Python2 module initialisation functions are void and may not return +	 * a value. However, they will set an exception if appropriate. +	 */  	(void) Py_InitModule("libbe_py", libbeMethods); +	return (NULL); +#endif +} + +#if PY_MAJOR_VERSION >= 3 +PyMODINIT_FUNC +PyInit_libbe_py(void) +{ +	return (moduleinit()); +} +#else +PyMODINIT_FUNC +initlibbe_py(void) +{ +	(void) moduleinit();  } +#endif diff --git a/usr/src/lib/pylibbe/common/mapfile-py3 b/usr/src/lib/pylibbe/common/mapfile-py3 new file mode 100644 index 0000000000..ea39f9cfd8 --- /dev/null +++ b/usr/src/lib/pylibbe/common/mapfile-py3 @@ -0,0 +1,47 @@ +# +# CDDL HEADER START +# +# The contents of this file are subject to the terms of the +# Common Development and Distribution License (the "License"). +# You may not use this file except in compliance with the License. +# +# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE +# or http://www.opensolaris.org/os/licensing. +# See the License for the specific language governing permissions +# and limitations under the License. +# +# When distributing Covered Code, include this CDDL HEADER in each +# file and include the License file at usr/src/OPENSOLARIS.LICENSE. +# If applicable, add the following below this CDDL HEADER, with the +# fields enclosed by brackets "[]" replaced with your own identifying +# information: Portions Copyright [yyyy] [name of copyright owner] +# +# CDDL HEADER END +# +# +# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. +# Copyright 2018 OmniOS Community Edition (OmniOSce) Association. +# + +# +# MAPFILE HEADER START +# +# WARNING:  STOP NOW.  DO NOT MODIFY THIS FILE. +# Object versioning must comply with the rules detailed in +# +#	usr/src/lib/README.mapfiles +# +# You should not be making modifications here until you've read the most current +# copy of that file. If you need help, contact a gatekeeper for guidance. +# +# MAPFILE HEADER END +# + +$mapfile_version 2 + +SYMBOL_VERSION SUNWprivate { +    global: +	PyInit_libbe_py; +    local: +	*; +}; diff --git a/usr/src/lib/pylibbe/py3/Makefile b/usr/src/lib/pylibbe/py3/Makefile new file mode 100644 index 0000000000..d146f8c62c --- /dev/null +++ b/usr/src/lib/pylibbe/py3/Makefile @@ -0,0 +1,28 @@ +# CDDL HEADER START +# +# This file and its contents are supplied under the terms of the +# Common Development and Distribution License ("CDDL"), version 1.0. +# You may only use this file in accordance with the terms of version +# 1.0 of the CDDL. +# +# A full copy of the text of the CDDL should have accompanied this +# source. A copy of the CDDL is also available via the Internet at +# http://www.illumos.org/license/CDDL. +# CDDL HEADER END + +# Copyright 2018 OmniOS Community Edition (OmniOSce) Association. + +include ../Makefile.com +include ../../Makefile.lib.64 + +PYTHON = $(PYTHON3) +PYTHON_VERSION = $(PYTHON3_VERSION) +PYTHON_SUFFIX = $(PYTHON3_SUFFIX) +LDLIBS64 += -L$(ADJUNCT_PROTO)/usr/lib/$(MACH64) +MAPFILES = $(SRCDIR)/mapfile-py3 +$(ROOTLIBDIR)/$(DYNLIB) := FILEMODE= 755 + +$(ROOTLIBS): +	$(INS.file) $(DYNLIB) + +install: all $(ROOTLIBS) diff --git a/usr/src/lib/pysolaris/Makefile b/usr/src/lib/pysolaris/Makefile index df3d21faa4..2c588428c3 100644 --- a/usr/src/lib/pysolaris/Makefile +++ b/usr/src/lib/pysolaris/Makefile @@ -21,11 +21,15 @@  #  # Copyright 2010 Sun Microsystems, Inc.  All rights reserved.  # Use is subject to license terms. +# Copyright 2018 OmniOS Community Edition (OmniOSce) Association.  #  include	../Makefile.lib -SUBDIRS=	$(MACH) +SUBDIRS= +$(BUILDPY2)SUBDIRS += $(MACH) +$(BUILD64)$(BUILDPY2)SUBDIRS += $(MACH64) +$(BUILD64)$(BUILDPY3)SUBDIRS += py3  all :=		TARGET= all  install :=	TARGET= install @@ -34,7 +38,7 @@ clobber :=	TARGET= clobber  lint :=		TARGET= lint  PYCFIND =	$(FIND) . -name '*.pyc' -PYCFILES = 	$(PYCFIND:sh) +PYCFILES =	$(PYCFIND:sh)  .KEEP_STATE: diff --git a/usr/src/lib/pysolaris/Makefile.com b/usr/src/lib/pysolaris/Makefile.com index 4a70113ab4..3d4c4777ce 100644 --- a/usr/src/lib/pysolaris/Makefile.com +++ b/usr/src/lib/pysolaris/Makefile.com @@ -20,6 +20,7 @@  #  #  # Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. +# Copyright 2018 OmniOS Community Edition (OmniOSce) Association.  #  LIBRARY =	misc.a @@ -30,28 +31,28 @@ PYSRCS=		__init__.py  include ../../Makefile.lib -LIBLINKS =  +LIBLINKS =  SRCDIR =	../common  ROOTLIBDIR=	$(ROOT)/usr/lib/python$(PYTHON_VERSION)/vendor-packages/solaris +ROOTLIBDIR64=	$(ROOTLIBDIR)/64  PYOBJS=		$(PYSRCS:%.py=$(SRCDIR)/%.pyc)  PYFILES=	$(PYSRCS) $(PYSRCS:%.py=%.pyc) -ROOTPYSOLFILES= $(PYFILES:%=$(ROOTLIBDIR)/%) +ROOTPYSOLFILES=	$(PYFILES:%=$(ROOTLIBDIR)/%) -CSTD=        $(CSTD_GNU99) -C99LMODE=       -Xc99=%all +CSTD=		$(CSTD_GNU99) +C99LMODE=	-Xc99=%all  LIBS =		$(DYNLIB) -LDLIBS +=	-lc -lsec -lidmap -lpython$(PYTHON_VERSION) +LDLIBS +=	-lc -lsec -lidmap -lpython$(PYTHON_VERSION)$(PYTHON_SUFFIX)  CFLAGS +=	$(CCVERBOSE)  CPPFLAGS +=	-I$(ADJUNCT_PROTO)/usr/include/python2.6  CERRWARN +=	-_gcc=-Wno-unused-variable -CPPFLAGS +=	-I$(ADJUNCT_PROTO)/usr/include/python$(PYTHON_VERSION) +CPPFLAGS +=	\ +	-I$(ADJUNCT_PROTO)/usr/include/python$(PYTHON_VERSION)$(PYTHON_SUFFIX) -.KEEP_STATE: - -all: $(PYOBJS) $(LIBS) +all: -install: all $(ROOTPYSOLFILES) +.KEEP_STATE:  $(ROOTLIBDIR)/%: %  	$(INS.pyfile) diff --git a/usr/src/lib/pysolaris/amd64/Makefile b/usr/src/lib/pysolaris/amd64/Makefile new file mode 100644 index 0000000000..4fa33a90bd --- /dev/null +++ b/usr/src/lib/pysolaris/amd64/Makefile @@ -0,0 +1,23 @@ +# +# CDDL HEADER START +# +# This file and its contents are supplied under the terms of the +# Common Development and Distribution License ("CDDL"), version 1.0. +# You may only use this file in accordance with the terms of version +# 1.0 of the CDDL. +# +# A full copy of the text of the CDDL should have accompanied this +# source. A copy of the CDDL is also available via the Internet at +# http://www.illumos.org/license/CDDL. +# +# CDDL HEADER END + +# +# Copyright 2018 OmniOS Community Edition (OmniOSce) Association. +# + +include ../Makefile.com +include ../../Makefile.lib.64 + +all: $(LIBS) +install: all $(ROOTLIBS64) diff --git a/usr/src/lib/pysolaris/common/mapfile-py3 b/usr/src/lib/pysolaris/common/mapfile-py3 new file mode 100644 index 0000000000..6e14724a62 --- /dev/null +++ b/usr/src/lib/pysolaris/common/mapfile-py3 @@ -0,0 +1,47 @@ +# +# CDDL HEADER START +# +# The contents of this file are subject to the terms of the +# Common Development and Distribution License (the "License"). +# You may not use this file except in compliance with the License. +# +# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE +# or http://www.opensolaris.org/os/licensing. +# See the License for the specific language governing permissions +# and limitations under the License. +# +# When distributing Covered Code, include this CDDL HEADER in each +# file and include the License file at usr/src/OPENSOLARIS.LICENSE. +# If applicable, add the following below this CDDL HEADER, with the +# fields enclosed by brackets "[]" replaced with your own identifying +# information: Portions Copyright [yyyy] [name of copyright owner] +# +# CDDL HEADER END +# +# +# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. +# Copyright 2018 OmniOS Community Edition (OmniOSce) Association. +# + +# +# MAPFILE HEADER START +# +# WARNING:  STOP NOW.  DO NOT MODIFY THIS FILE. +# Object versioning must comply with the rules detailed in +# +#	usr/src/lib/README.mapfiles +# +# You should not be making modifications here until you've read the most current +# copy of that file. If you need help, contact a gatekeeper for guidance. +# +# MAPFILE HEADER END +# + +$mapfile_version 2 + +SYMBOL_VERSION SUNWprivate { +    global: +	PyInit_misc; +    local: +	*; +}; diff --git a/usr/src/lib/pysolaris/common/misc.c b/usr/src/lib/pysolaris/common/misc.c index 13280d461f..211ab1b983 100644 --- a/usr/src/lib/pysolaris/common/misc.c +++ b/usr/src/lib/pysolaris/common/misc.c @@ -21,6 +21,7 @@  /*   * Copyright 2010 Sun Microsystems, Inc.  All rights reserved.   * Use is subject to license terms. + * Copyright 2018 OmniOS Community Edition (OmniOSce) Association.   */  #include <Python.h> @@ -85,7 +86,7 @@ py_sid_to_name(PyObject *self, PyObject *args)  		return (NULL);  	} -	ret = PyString_FromString(name); +	ret = PyUnicode_FromString(name);  	free(name);  	return (ret);  } @@ -121,8 +122,37 @@ static PyMethodDef solarismethods[] = {  	{NULL, NULL, 0, NULL}  }; -void +#if PY_MAJOR_VERSION >= 3 +static struct PyModuleDef solaris_module = { +	PyModuleDef_HEAD_INIT, +	"solaris.misc", +	NULL, +	-1, +	solarismethods +}; +#endif + +static PyObject * +moduleinit() +{ +#if PY_MAJOR_VERSION >= 3 +	return (PyModule_Create(&solaris_module)); +#else +	(void) Py_InitModule("solaris.misc", solarismethods); +	return (NULL); +#endif +} + +#if PY_MAJOR_VERSION >= 3 +PyMODINIT_FUNC +PyInit_misc(void) +{ +	return (moduleinit()); +} +#else +PyMODINIT_FUNC  initmisc(void)  { -	PyObject *solaris_misc = Py_InitModule("solaris.misc", solarismethods); +	(void) moduleinit();  } +#endif diff --git a/usr/src/lib/pysolaris/i386/Makefile b/usr/src/lib/pysolaris/i386/Makefile index cf68e8eb6d..926da3004e 100644 --- a/usr/src/lib/pysolaris/i386/Makefile +++ b/usr/src/lib/pysolaris/i386/Makefile @@ -20,8 +20,10 @@  #  # Copyright 2010 Sun Microsystems, Inc.  All rights reserved.  # Use is subject to license terms. +# Copyright 2018 OmniOS Community Edition (OmniOSce) Association.  #  include ../Makefile.com -install: all $(ROOTLIBS) +all: $(PYOBJS) $(LIBS) +install: all $(ROOTPYSOLFILES) $(ROOTLIBS) diff --git a/usr/src/lib/pysolaris/py3/Makefile b/usr/src/lib/pysolaris/py3/Makefile new file mode 100644 index 0000000000..700cc16ca5 --- /dev/null +++ b/usr/src/lib/pysolaris/py3/Makefile @@ -0,0 +1,37 @@ +# CDDL HEADER START +# +# This file and its contents are supplied under the terms of the +# Common Development and Distribution License ("CDDL"), version 1.0. +# You may only use this file in accordance with the terms of version +# 1.0 of the CDDL. +# +# A full copy of the text of the CDDL should have accompanied this +# source. A copy of the CDDL is also available via the Internet at +# http://www.illumos.org/license/CDDL. +# +# CDDL HEADER END + +# Copyright 2018 OmniOS Community Edition (OmniOSce) Association. + +include ../Makefile.com +include ../../Makefile.lib.64 + +PYTHON = $(PYTHON3) +PYTHON_VERSION = $(PYTHON3_VERSION) +PYTHON_SUFFIX = $(PYTHON3_SUFFIX) + +LDLIBS64 += -L$(ADJUNCT_PROTO)/usr/lib/$(MACH64) +MAPFILES= $(SRCDIR)/mapfile-py3 +ROOTPYSOLFILES=	$(PYSRCS:%=$(ROOTLIBDIR)/%) +$(ROOTLIBDIR)/$(DYNLIB) := FILEMODE= 755 + +all: $(LIBS) +install: all $(ROOTLIBS) $(ROOTPYSOLFILES) + +$(ROOTLIBDIR)/%.so: %.so +	$(INS.file) + +$(ROOTLIBDIR)/%: ../common/% +	$(INS.pyfile) +	$(PYTHON) -mpy_compile $@ + diff --git a/usr/src/lib/pyzfs/Makefile b/usr/src/lib/pyzfs/Makefile index c69270f58f..2cf7b8a517 100644 --- a/usr/src/lib/pyzfs/Makefile +++ b/usr/src/lib/pyzfs/Makefile @@ -21,11 +21,15 @@  #  # Copyright 2009 Sun Microsystems, Inc.  All rights reserved.  # Use is subject to license terms. +# Copyright 2018 OmniOS Community Edition (OmniOSce) Association.  #  include	../Makefile.lib -SUBDIRS=	$(MACH) +SUBDIRS= +$(BUILDPY2)SUBDIRS += $(MACH) +$(BUILD64)$(BUILDPY2)SUBDIRS += $(MACH64) +$(BUILD64)$(BUILDPY3)SUBDIRS += py3  XGETTEXT=	$(GNUXGETTEXT)  XGETFLAGS=	$(GNUXGETFLAGS) @@ -38,7 +42,7 @@ lint :=		TARGET= lint  MSGFIND =	$(FIND) . -name '*.py' -o -name '*.c'  MSGFILES =	$(MSGFIND:sh)  PYCFIND =	$(FIND) . -name '*.pyc' -PYCFILES = 	$(PYCFIND:sh) +PYCFILES =	$(PYCFIND:sh)  POFILE =	pyzfs.po  .KEEP_STATE: diff --git a/usr/src/lib/pyzfs/Makefile.com b/usr/src/lib/pyzfs/Makefile.com index 59720a8334..347b4316eb 100644 --- a/usr/src/lib/pyzfs/Makefile.com +++ b/usr/src/lib/pyzfs/Makefile.com @@ -20,6 +20,7 @@  #  #  # Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. +# Copyright 2018 OmniOS Community Edition (OmniOSce) Association.  #  LIBRARY =	ioctl.a @@ -27,15 +28,15 @@ VERS =  OBJECTS =	ioctl.o  PYSRCS=		__init__.py util.py dataset.py \ -	allow.py unallow.py \ -	userspace.py groupspace.py holds.py table.py - +		allow.py unallow.py \ +		userspace.py groupspace.py holds.py table.py  include ../../Makefile.lib -LIBLINKS =  +LIBLINKS =  SRCDIR =	../common  ROOTLIBDIR=	$(ROOT)/usr/lib/python$(PYTHON_VERSION)/vendor-packages/zfs +ROOTLIBDIR64=	$(ROOTLIBDIR)/64  PYOBJS=		$(PYSRCS:%.py=$(SRCDIR)/%.pyc)  PYFILES=	$(PYSRCS) $(PYSRCS:%.py=%.pyc)  ROOTPYZFSFILES= $(PYFILES:%=$(ROOTLIBDIR)/%) @@ -44,18 +45,17 @@ CSTD=        $(CSTD_GNU99)  C99LMODE=       -Xc99=%all  LIBS =		$(DYNLIB) -LDLIBS +=	-lc -lnvpair -lpython$(PYTHON_VERSION) -lzfs +LDLIBS +=	-lc -lnvpair -lpython$(PYTHON_VERSION)$(PYTHON_SUFFIX) -lzfs  CFLAGS +=	$(CCVERBOSE)  CERRWARN +=	-_gcc=-Wno-unused-variable -CPPFLAGS +=	-I$(ADJUNCT_PROTO)/usr/include/python$(PYTHON_VERSION) +CPPFLAGS +=	\ +	-I$(ADJUNCT_PROTO)/usr/include/python$(PYTHON_VERSION)$(PYTHON_SUFFIX)  CPPFLAGS +=	-I../../../uts/common/fs/zfs  CPPFLAGS +=	-I../../../common/zfs  .KEEP_STATE: -all: $(PYOBJS) $(LIBS) - -install: all $(ROOTPYZFSFILES) +all:  $(ROOTLIBDIR)/%: %  	$(INS.pyfile) @@ -63,6 +63,12 @@ $(ROOTLIBDIR)/%: %  $(ROOTLIBDIR)/%: ../common/%  	$(INS.pyfile) +$(ROOTLIBDIR64)/%: % +	$(INS.pyfile) + +$(ROOTLIBDIR64)/%: ../common/% +	$(INS.pyfile) +  lint: lintcheck  include ../../Makefile.targ diff --git a/usr/src/lib/pyzfs/amd64/Makefile b/usr/src/lib/pyzfs/amd64/Makefile new file mode 100644 index 0000000000..f3fde27d22 --- /dev/null +++ b/usr/src/lib/pyzfs/amd64/Makefile @@ -0,0 +1,21 @@ +# CDDL HEADER START +# +# This file and its contents are supplied under the terms of the +# Common Development and Distribution License ("CDDL"), version 1.0. +# You may only use this file in accordance with the terms of version +# 1.0 of the CDDL. +# +# A full copy of the text of the CDDL should have accompanied this +# source. A copy of the CDDL is also available via the Internet at +# http://www.illumos.org/license/CDDL. +# CDDL HEADER END + +# +# Copyright 2018 OmniOS Community Edition (OmniOSce) Association. +# + +include ../Makefile.com +include ../../Makefile.lib.64 + +all: $(LIBS) +install: all $(ROOTLIBS64) diff --git a/usr/src/lib/pyzfs/common/allow.py b/usr/src/lib/pyzfs/common/allow.py index 2c01280b4b..91d4834679 100644 --- a/usr/src/lib/pyzfs/common/allow.py +++ b/usr/src/lib/pyzfs/common/allow.py @@ -21,6 +21,7 @@  #  # Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.  # Copyright (c) 2013 by Delphix. All rights reserved. +# Copyright 2018 OmniOS Community Edition (OmniOSce) Association.  #  """This module implements the "zfs allow" and "zfs unallow" subcommands. @@ -146,7 +147,7 @@ def args_to_perms(parser, options, who, perms):  		baseperms = None  	d = dict() -	 +  	def storeperm(typechr, inheritchr, arg):  		assert typechr in "ugecs"  		assert inheritchr in "ld-" @@ -251,20 +252,20 @@ def canonicalized_perm(permname):  	except KeyError:  		raise zfs.util.ZFSError(errno.EINVAL, permname,  		    _("invalid permission")) -		 +  def print_perms():  	"""Print the set of supported permissions."""  	print(_("\nThe following permissions are supported:\n"))  	fmt = "%-16s %-14s\t%s"  	print(fmt % (_("NAME"), _("TYPE"), _("NOTES"))) -	for (name, note) in sorted(perms_subcmd.iteritems()): +	for (name, note) in sorted(perms_subcmd.items()):  		print(fmt % (name, _("subcommand"), note)) -	for (name, note) in sorted(perms_other.iteritems()): +	for (name, note) in sorted(perms_other.items()):  		print(fmt % (name, _("other"), note)) -	for (name, prop) in sorted(zfs.dataset.proptable.iteritems()): +	for (name, prop) in sorted(zfs.dataset.proptable.items()):  		if prop.visible and prop.delegatable():  			print(fmt % (name, _("property"), "")) @@ -335,7 +336,6 @@ def do_allow():  			print(s + "-" * (70-len(s)))  			print(p[fs])  		return -	  	(options, args) = parser.parse_args(sys.argv[2:]) diff --git a/usr/src/lib/pyzfs/common/dataset.py b/usr/src/lib/pyzfs/common/dataset.py index 9d4652235a..752449486f 100644 --- a/usr/src/lib/pyzfs/common/dataset.py +++ b/usr/src/lib/pyzfs/common/dataset.py @@ -20,6 +20,7 @@  # CDDL HEADER END  #  # Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. +# Copyright 2018 OmniOS Community Edition (OmniOSce) Association.  #  """Implements the Dataset class, providing methods for manipulating ZFS @@ -69,7 +70,7 @@ class Property(object):  		return self.attr != "readonly"  proptable = dict() -for name, t in zfs.ioctl.get_proptable().iteritems(): +for name, t in zfs.ioctl.get_proptable().items():  	proptable[name] = Property(t)  del name, t @@ -79,7 +80,7 @@ def getpropobj(name):  	try:  		return proptable[name]  	except KeyError: -		for p in proptable.itervalues(): +		for p in proptable.values():  			if p.colname and p.colname.lower() == name:  				return p  		raise @@ -90,7 +91,7 @@ class Dataset(object):  	Generally, this class provides interfaces to the C functions in  	zfs.ioctl which actually interface with the kernel to manipulate  	datasets. -	 +  	Unless otherwise noted, any method can raise a ZFSError to  	indicate failure.""" @@ -101,7 +102,7 @@ class Dataset(object):  	    types=("filesystem", "volume"), snaps=True):  		"""Open the named dataset, checking that it exists and  		is of the specified type. -		 +  		name is the string name of this dataset.  		props is the property settings dict from zfs.ioctl.next_dataset. @@ -137,7 +138,7 @@ class Dataset(object):  		Currently only works for native properties (those with a  		Property object.) -		 +  		Raises KeyError if propname does not specify a native property.  		Does not raise ZFSError.  		""" @@ -165,7 +166,7 @@ class Dataset(object):  			yield ds  			for child in ds.descendents():  				yield child -	 +  	def userspace(self, prop):  		"""A generator function which iterates over a  		userspace-type property. @@ -177,14 +178,14 @@ class Dataset(object):  		"""  		d = zfs.ioctl.userspace_many(self.name, prop) -		for ((domain, rid), space) in d.iteritems(): +		for ((domain, rid), space) in d.items():  			yield (domain, rid, space)  	def userspace_upgrade(self):  		"""Initialize the accounting information for  		userused@... and groupused@... properties."""  		return zfs.ioctl.userspace_upgrade(self.name) -	 +  	def set_fsacl(self, un, d):  		"""Add to the "zfs allow"-ed permissions on this Dataset. @@ -219,7 +220,7 @@ def snapshots_fromcmdline(dsnames, recursive):  		try:  			ds = Dataset(dsname)  			yield ds -		except zfs.util.ZFSError, e: +		except zfs.util.ZFSError as e:  			if not recursive or e.errno != errno.ENOENT:  				raise  		if recursive: @@ -229,6 +230,6 @@ def snapshots_fromcmdline(dsnames, recursive):  				try:  					yield Dataset(child.name + "@" +  					    snapname) -				except zfs.util.ZFSError, e: +				except zfs.util.ZFSError as e:  					if e.errno != errno.ENOENT:  						raise diff --git a/usr/src/lib/pyzfs/common/holds.py b/usr/src/lib/pyzfs/common/holds.py index 0a1508e76a..63645e329c 100644 --- a/usr/src/lib/pyzfs/common/holds.py +++ b/usr/src/lib/pyzfs/common/holds.py @@ -20,6 +20,7 @@  # CDDL HEADER END  #  # Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. +# Copyright 2018 OmniOS Community Edition (OmniOSce) Association.  #  """This module implements the "zfs holds" subcommand. @@ -59,12 +60,12 @@ def do_holds():  	fields = ("name", "tag", "timestamp")  	rjustfields = () -	printing = False  +	printing = False  	gotone = False -	t = zfs.table.Table(fields, rjustfields)  +	t = zfs.table.Table(fields, rjustfields)  	for ds in zfs.dataset.snapshots_fromcmdline(args, options.recursive):  		gotone = True -		for tag, tm in ds.get_holds().iteritems(): +		for tag, tm in ds.get_holds().items():  			val = {"name": ds.name, "tag": tag,  			    "timestamp": time.ctime(tm)}  			t.addline(ds.name, val) diff --git a/usr/src/lib/pyzfs/common/ioctl.c b/usr/src/lib/pyzfs/common/ioctl.c index d8c0d18679..55c03fc2b8 100644 --- a/usr/src/lib/pyzfs/common/ioctl.c +++ b/usr/src/lib/pyzfs/common/ioctl.c @@ -21,6 +21,7 @@  /*   * Copyright 2010 Sun Microsystems, Inc.  All rights reserved.   * Use is subject to license terms. + * Copyright 2018 OmniOS Community Edition (OmniOSce) Association.   */  #include <Python.h> @@ -131,7 +132,7 @@ dict2nvl(PyObject *d)  	nvlist_t *nvl;  	int err;  	PyObject *key, *value; -	int pos = 0; +	Py_ssize_t pos = 0;  	if (!PyDict_Check(d)) {  		PyErr_SetObject(PyExc_ValueError, d); @@ -142,7 +143,11 @@ dict2nvl(PyObject *d)  	assert(err == 0);  	while (PyDict_Next(d, &pos, &key, &value)) { +#if PY_MAJOR_VERSION >= 3 +		char *keystr = PyBytes_AsString(key); +#else  		char *keystr = PyString_AsString(key); +#endif  		if (keystr == NULL) {  			PyErr_SetObject(PyExc_KeyError, key);  			nvlist_free(nvl); @@ -155,11 +160,19 @@ dict2nvl(PyObject *d)  			nvlist_free(valnvl);  		} else if (value == Py_None) {  			err = nvlist_add_boolean(nvl, keystr); +#if PY_MAJOR_VERSION >= 3 +		} else if (PyBytes_Check(value)) { +#else  		} else if (PyString_Check(value)) { +#endif +#if PY_MAJOR_VERSION >= 3 +			char *valstr = PyBytes_AsString(value); +#else  			char *valstr = PyString_AsString(value); +#endif  			err = nvlist_add_string(nvl, keystr, valstr); -		} else if (PyInt_Check(value)) { -			uint64_t valint = PyInt_AsUnsignedLongLongMask(value); +		} else if (PyLong_Check(value)) { +			uint64_t valint = PyLong_AsUnsignedLongLongMask(value);  			err = nvlist_add_uint64(nvl, keystr, valint);  		} else if (PyBool_Check(value)) {  			boolean_t valbool = value == Py_True ? B_TRUE : B_FALSE; @@ -525,19 +538,49 @@ static PyMethodDef zfsmethods[] = {  	{NULL, NULL, 0, NULL}  }; -void -initioctl(void) +#if PY_MAJOR_VERSION >= 3 +static struct PyModuleDef zfs_module = { +	PyModuleDef_HEAD_INIT, +	"zfs.ioctl", +	NULL, +	-1, +	zfsmethods +}; +#endif + +static PyObject * +moduleinit()  { -	PyObject *zfs_ioctl = Py_InitModule("zfs.ioctl", zfsmethods); -	PyObject *zfs_util = PyImport_ImportModule("zfs.util"); -	PyObject *devfile; +	PyObject *zfs_ioctl, *zfs_util, *devfile; +#if PY_MAJOR_VERSION >= 3 +	zfs_ioctl = PyModule_Create(&zfs_module); +#else +	zfs_ioctl = Py_InitModule("zfs.ioctl", zfsmethods); +#endif +	zfs_util = PyImport_ImportModule("zfs.util");  	if (zfs_util == NULL) -		return; +		return (NULL);  	ZFSError = PyObject_GetAttrString(zfs_util, "ZFSError");  	devfile = PyObject_GetAttrString(zfs_util, "dev");  	zfsdevfd = PyObject_AsFileDescriptor(devfile);  	zfs_prop_init(); + +	return (zfs_ioctl); +} + +#if PY_MAJOR_VERSION >= 3 +PyMODINIT_FUNC +PyInit_ioctl(void) +{ +	return (moduleinit());  } +#else +PyMODINIT_FUNC +initioctl(void) +{ +	(void) moduleinit(); +} +#endif diff --git a/usr/src/lib/pyzfs/common/mapfile-py3 b/usr/src/lib/pyzfs/common/mapfile-py3 new file mode 100644 index 0000000000..a45e760e01 --- /dev/null +++ b/usr/src/lib/pyzfs/common/mapfile-py3 @@ -0,0 +1,47 @@ +# +# CDDL HEADER START +# +# The contents of this file are subject to the terms of the +# Common Development and Distribution License (the "License"). +# You may not use this file except in compliance with the License. +# +# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE +# or http://www.opensolaris.org/os/licensing. +# See the License for the specific language governing permissions +# and limitations under the License. +# +# When distributing Covered Code, include this CDDL HEADER in each +# file and include the License file at usr/src/OPENSOLARIS.LICENSE. +# If applicable, add the following below this CDDL HEADER, with the +# fields enclosed by brackets "[]" replaced with your own identifying +# information: Portions Copyright [yyyy] [name of copyright owner] +# +# CDDL HEADER END +# +# +# Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. +# Copyright 2018 OmniOS Community Edition (OmniOSce) Association. +# + +# +# MAPFILE HEADER START +# +# WARNING:  STOP NOW.  DO NOT MODIFY THIS FILE. +# Object versioning must comply with the rules detailed in +# +#	usr/src/lib/README.mapfiles +# +# You should not be making modifications here until you've read the most current +# copy of that file. If you need help, contact a gatekeeper for guidance. +# +# MAPFILE HEADER END +# + +$mapfile_version 2 + +SYMBOL_VERSION SUNWprivate { +    global: +	PyInit_ioctl; +    local: +	*; +}; diff --git a/usr/src/lib/pyzfs/common/table.py b/usr/src/lib/pyzfs/common/table.py index 87aab1d6f1..173f06b5a0 100644 --- a/usr/src/lib/pyzfs/common/table.py +++ b/usr/src/lib/pyzfs/common/table.py @@ -20,6 +20,7 @@  # CDDL HEADER END  #  # Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. +# Copyright 2018 OmniOS Community Edition (OmniOSce) Association.  #  import zfs.util @@ -34,7 +35,7 @@ class Table:  		self.rjustfields = rjustfields  		self.maxfieldlen = dict.fromkeys(fields, 0)  		self.lines = list() -	 +  	def __updatemax(self, k, v):  		self.maxfieldlen[k] = max(self.maxfieldlen.get(k, None), v) @@ -46,6 +47,8 @@ class Table:  			v = str(values[f])  			va.append(v)  			self.__updatemax(f, len(v)) +		if sortkey == None: +			sortkey = []  		self.lines.append((sortkey, va))  	def printme(self, headers=True): diff --git a/usr/src/lib/pyzfs/common/userspace.py b/usr/src/lib/pyzfs/common/userspace.py index 79355e1e23..89cc18b241 100644 --- a/usr/src/lib/pyzfs/common/userspace.py +++ b/usr/src/lib/pyzfs/common/userspace.py @@ -20,6 +20,7 @@  # CDDL HEADER END  #  # Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. +# Copyright 2018 OmniOS Community Edition (OmniOSce) Association.  #  """This module implements the "zfs userspace" and "zfs groupspace" subcommands. @@ -115,7 +116,7 @@ def process_one_raw(acct, options, prop, elem):  		except KeyError:  			pass;  	key = (isgroup, domain, rid) -		 +  	try:  		v = acct[key]  	except KeyError: @@ -241,6 +242,6 @@ def do_userspace():  		return l  	t = zfs.table.Table(options.fields, rjustfields) -	for val in acct.itervalues(): +	for val in acct.values():  		t.addline(cmpkey(val), val)  	t.printme(not options.noheaders) diff --git a/usr/src/lib/pyzfs/common/util.py b/usr/src/lib/pyzfs/common/util.py index cfc21ac57c..f384501c11 100644 --- a/usr/src/lib/pyzfs/common/util.py +++ b/usr/src/lib/pyzfs/common/util.py @@ -20,6 +20,7 @@  # CDDL HEADER END  #  # Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. +# Copyright 2018 OmniOS Community Edition (OmniOSce) Association.  #  """This module provides utility functions for ZFS. @@ -54,11 +55,11 @@ def default_repr(self):  		return "<%s %s>" % \  		    (self.__class__.__name__, repr(self.__dict__)) -class ZFSError(StandardError): +class ZFSError(Exception):  	"""This exception class represents a potentially user-visible  	ZFS error.  If uncaught, it will be printed and the process will  	exit with exit code 1. -	 +  	errno -- the error number (eg, from ioctl(2))."""  	__slots__ = "why", "task", "errno" diff --git a/usr/src/lib/pyzfs/i386/Makefile b/usr/src/lib/pyzfs/i386/Makefile index 4ce880c2ae..82d8120e69 100644 --- a/usr/src/lib/pyzfs/i386/Makefile +++ b/usr/src/lib/pyzfs/i386/Makefile @@ -20,8 +20,10 @@  #  # Copyright 2009 Sun Microsystems, Inc.  All rights reserved.  # Use is subject to license terms. +# Copyright 2018 OmniOS Community Edition (OmniOSce) Association.  #  include ../Makefile.com -install: all $(ROOTLIBS) +all: $(PBOJECT) $(LIBS) +install: all $(ROOTPYZFSFILES) $(ROOTLIBS) diff --git a/usr/src/lib/pyzfs/py3/Makefile b/usr/src/lib/pyzfs/py3/Makefile new file mode 100644 index 0000000000..27e04f084e --- /dev/null +++ b/usr/src/lib/pyzfs/py3/Makefile @@ -0,0 +1,39 @@ +# CDDL HEADER START +# +# This file and its contents are supplied under the terms of the +# Common Development and Distribution License ("CDDL"), version 1.0. +# You may only use this file in accordance with the terms of version +# 1.0 of the CDDL. +# +# A full copy of the text of the CDDL should have accompanied this +# source. A copy of the CDDL is also available via the Internet at +# http://www.illumos.org/license/CDDL. +# +# CDDL HEADER END + +# +# Copyright 2018 OmniOS Community Edition (OmniOSce) Association. +# + +include ../Makefile.com +include ../../Makefile.lib.64 + +PYTHON = $(PYTHON3) +PYTHON_VERSION = $(PYTHON3_VERSION) +PYTHON_SUFFIX = $(PYTHON3_SUFFIX) + +LDLIBS64 += -L$(ADJUNCT_PROTO)/usr/lib/$(MACH64) +MAPFILES= $(SRCDIR)/mapfile-py3 +ROOTPYZFSFILES=	$(PYSRCS:%=$(ROOTLIBDIR)/%) +$(ROOTLIBDIR)/$(DYNLIB) := FILEMODE= 755 + +all: $(LIBS) +install: all $(ROOTLIBS) $(ROOTPYZFSFILES) + +$(ROOTLIBDIR)/%.so: %.so +	$(INS.file) + +$(ROOTLIBDIR)/%: ../common/% +	$(INS.pyfile) +	$(PYTHON) -mpy_compile $@ + diff --git a/usr/src/pkg/Makefile b/usr/src/pkg/Makefile index 28b315f22c..cacaa22aca 100644 --- a/usr/src/pkg/Makefile +++ b/usr/src/pkg/Makefile @@ -23,6 +23,7 @@  # Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.  # Copyright 2015, OmniTI Computer Consulting, Inc. All rights reserved.  # Copyright 2015 Igor Kozhukhov <ikozhukhov@gmail.com> +# Copyright 2018 OmniOS Community Edition (OmniOSce) Association.  #  include $(SRC)/Makefile.master @@ -189,7 +190,11 @@ PKGMOG_DEFINES= \  	PERL_VERSION=$(PERL_VERSION) \  	PERL_PKGVERS=$(PERL_PKGVERS) \  	PYTHON_VERSION=$(PYTHON_VERSION) \ +	PYTHON3_VERSION=$(PYTHON3_VERSION) \  	PYTHON_PKGVERS=$(PYTHON_PKGVERS) \ +	PYTHON3_PKGVERS=$(PYTHON3_PKGVERS) \ +	python2_ONLY=$(BUILDPY2) \ +	python3_ONLY=$(BUILDPY3) \  	JAVA_8_ONLY=$(JAVA_8_ONLY) \  	JAVA_7_ONLY=$(JAVA_7_ONLY) @@ -230,7 +235,28 @@ CLOBBERFILES= $(PDIR) proto_list_$(PKGMACH) install-$(PKGMACH).out \  # build environment and then reference (implicitly or explicitly) the all  # or install targets.  # -MANIFESTS :sh= (cd manifests; print *.mf) +# We want some manifests to optionally build based on environment options, so +# those are excluded when generating the list of manifests and added back in if +# necessary. We also want a relatively easy way to add files to the list of +# manifests given special treatment. Add any other special ones to the +# SPECIAL_MANIFESTS variable. It can contain wildcards in regexp form, i.e. +# SUNW.* as one useful example. +# +SPECIAL_MANIFESTS = system-library-python-.* +LIST_MANIFESTS_CMD = (cd manifests ; /usr/bin/ls -1 *.mf |\ +	$(SED) $(SPECIAL_MANIFESTS:%=-e '/^%$$/d') ) +MANIFESTS = $(LIST_MANIFESTS_CMD:sh) + +# Conditionally add back python modules +$(BUILDPY2) MANIFESTS += \ +	system-library-python-libbe-2.mf \ +	system-library-python-solaris-2.mf \ +	system-library-python-zfs-2.mf +$(BUILDPY3) MANIFESTS += \ +	system-library-python-libbe-3.mf \ +	system-library-python-solaris-3.mf \ +	system-library-python-zfs-3.mf +  PKGS= $(MANIFESTS:%.mf=%)  DEP_PKGS= $(PKGS:%=$(PDIR)/%.dep)  PROC_PKGS= $(PKGS:%=$(PDIR)/%.mog) @@ -269,9 +295,9 @@ PUB_PKGS= $(SYNTH_PKGS:%=$(PDIR)/%.pub) $(PKGS:%=$(PDIR)/%.pub)  #  # The meanings of each package status are as follows:  # -# 	PKGSTAT		meaning -# 	----------	---------------------------------------------------- -# 	noincorp	Do not include in incorporation or group package +#	PKGSTAT		meaning +#	----------	---------------------------------------------------- +#	noincorp	Do not include in incorporation or group package  #	obsolete	Include in incorporation, but not group package  #	renamed		Include in incorporation, but not group package  #	current		Include in incorporation and group package @@ -310,7 +336,7 @@ PKGLISTS= \  #		| use pkgsend to publish the package  #		|  #	placeholder to indicate successful publication (mypkg.pub) -#	 +#  # * This may be suppressed via SUPPRESSPKGDEP.  The resulting  #   packages will install correctly, but care must be taken to  #   install all dependencies, because pkg will not have the input @@ -350,16 +376,16 @@ PKGLISTS= \  #		 |		|  #		 |		| pkgsend publish  #		 |		| -#	  repositories 	    resolved dependencies +#	  repositories	    resolved dependencies  #		 |			|  # pkgsend	 |			| pkgdepend resolve -# create-repository	 	 	| +# create-repository			|  #		 |		generated dependencies  #	 repo directories		|  #					| pkgdepend  #					|  #				processed manifests -#  +#  ALL_TARGETS= $(PROC_SYNTH_PKGS) proto_list_$(PKGMACH) @@ -685,7 +711,7 @@ protocmp: makesilent  pmodes: makesilent  	@validate_pkg -a $(PKGMACH) -M -m $(PDIR) \ -		-e $(CODEMGR_WS)/exception_lists/pmodes  +		-e $(CODEMGR_WS)/exception_lists/pmodes  check: protocmp pmodes diff --git a/usr/src/pkg/manifests/install-beadm.mf b/usr/src/pkg/manifests/install-beadm.mf index 05f83de46b..9234f3f3f6 100644 --- a/usr/src/pkg/manifests/install-beadm.mf +++ b/usr/src/pkg/manifests/install-beadm.mf @@ -22,6 +22,7 @@  # Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.  # Copyright 2010 Nexenta Systems, Inc. All rights reserved.  # Copyright 2012 OmniTI Computer Consulting, Inc.  All rights reserved. +# Copyright 2018 OmniOS Community Edition (OmniOSce) Association.  #  set name=pkg.fmri value=pkg:/install/beadm@$(PKGVERS) @@ -34,10 +35,6 @@ dir path=usr group=sys  dir path=usr/include  dir path=usr/lib  dir path=usr/lib/$(ARCH64) -dir path=usr/lib/python$(PYTHON_VERSION) -dir path=usr/lib/python$(PYTHON_VERSION)/vendor-packages -dir path=usr/lib/python$(PYTHON_VERSION)/vendor-packages/64 -dir path=usr/lib/python$(PYTHON_VERSION)/vendor-packages/beadm  dir path=usr/sbin  dir path=usr/share  dir path=usr/share/man @@ -49,11 +46,13 @@ file path=usr/lib/$(ARCH64)/llib-lbe.ln  file path=usr/lib/libbe.so.1  file path=usr/lib/llib-lbe  file path=usr/lib/llib-lbe.ln -file path=usr/lib/python$(PYTHON_VERSION)/vendor-packages/64/libbe_py.so -file path=usr/lib/python$(PYTHON_VERSION)/vendor-packages/libbe_py.so  file path=usr/share/man/man1m/beadm.1m  license cr_Sun license=cr_Sun  license lic_CDDL license=lic_CDDL  link path=usr/lib/$(ARCH64)/libbe.so target=./libbe.so.1  link path=usr/lib/libbe.so target=./libbe.so.1  link path=usr/sbin/beadm target=../../sbin/beadm +$(python3_ONLY)depend fmri=system/library/python/libbe$(PYTHON3_PKGVERS) \ +    predicate=runtime/python$(PYTHON3_PKGVERS) type=conditional +$(python2_ONLY)depend fmri=system/library/python/libbe$(PYTHON_PKGVERS) \ +    predicate=runtime/python$(PYTHON_PKGVERS) type=conditional diff --git a/usr/src/pkg/manifests/system-file-system-zfs.mf b/usr/src/pkg/manifests/system-file-system-zfs.mf index 7a2e44ed8b..69f9c71fcc 100644 --- a/usr/src/pkg/manifests/system-file-system-zfs.mf +++ b/usr/src/pkg/manifests/system-file-system-zfs.mf @@ -23,6 +23,7 @@  # Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.  # Copyright (c) 2012, 2017 by Delphix. All rights reserved.  # Copyright (c) 2013 by Saso Kiselkov. All rights reserved. +# Copyright 2018 OmniOS Community Edition (OmniOSce) Association.  #  set name=pkg.fmri value=pkg:/system/file-system/zfs@$(PKGVERS) @@ -30,12 +31,6 @@ set name=pkg.description value="ZFS libraries and commands"  set name=pkg.summary value=ZFS  set name=info.classification \      value="org.opensolaris.category.2008:System/File System" - -# -# Skip manifest generation until build 134 can be required on the -# build systems, due to a Python flavor identification bug in pkgdepend. -# -set name=org.opensolaris.nodepend value=true  set name=variant.arch value=$(ARCH)  dir path=etc group=sys  dir path=etc/fs group=sys @@ -66,9 +61,6 @@ dir path=usr/lib/mdb/kvm/$(ARCH64) group=sys  dir path=usr/lib/mdb/proc group=sys  $(sparc_ONLY)dir path=usr/lib/mdb/proc/$(ARCH64) group=sys  $(i386_ONLY)dir path=usr/lib/mdb/proc/$(ARCH64) -dir path=usr/lib/python$(PYTHON_VERSION) -dir path=usr/lib/python$(PYTHON_VERSION)/vendor-packages -dir path=usr/lib/python$(PYTHON_VERSION)/vendor-packages/zfs  dir path=usr/lib/sysevent  dir path=usr/lib/sysevent/modules  dir path=usr/lib/zfs @@ -105,25 +97,6 @@ $(i386_ONLY)file path=usr/lib/libzpool.so.1  file path=usr/lib/mdb/kvm/$(ARCH64)/zfs.so group=sys mode=0555  file path=usr/lib/mdb/proc/$(ARCH64)/libzpool.so group=sys mode=0555  file path=usr/lib/mdb/proc/libzpool.so group=sys mode=0555 -file path=usr/lib/python$(PYTHON_VERSION)/vendor-packages/zfs/__init__.py -file path=usr/lib/python$(PYTHON_VERSION)/vendor-packages/zfs/__init__.pyc -file path=usr/lib/python$(PYTHON_VERSION)/vendor-packages/zfs/allow.py -file path=usr/lib/python$(PYTHON_VERSION)/vendor-packages/zfs/allow.pyc -file path=usr/lib/python$(PYTHON_VERSION)/vendor-packages/zfs/dataset.py -file path=usr/lib/python$(PYTHON_VERSION)/vendor-packages/zfs/dataset.pyc -file path=usr/lib/python$(PYTHON_VERSION)/vendor-packages/zfs/groupspace.py -file path=usr/lib/python$(PYTHON_VERSION)/vendor-packages/zfs/groupspace.pyc -file path=usr/lib/python$(PYTHON_VERSION)/vendor-packages/zfs/holds.py -file path=usr/lib/python$(PYTHON_VERSION)/vendor-packages/zfs/holds.pyc -file path=usr/lib/python$(PYTHON_VERSION)/vendor-packages/zfs/ioctl.so -file path=usr/lib/python$(PYTHON_VERSION)/vendor-packages/zfs/table.py -file path=usr/lib/python$(PYTHON_VERSION)/vendor-packages/zfs/table.pyc -file path=usr/lib/python$(PYTHON_VERSION)/vendor-packages/zfs/unallow.py -file path=usr/lib/python$(PYTHON_VERSION)/vendor-packages/zfs/unallow.pyc -file path=usr/lib/python$(PYTHON_VERSION)/vendor-packages/zfs/userspace.py -file path=usr/lib/python$(PYTHON_VERSION)/vendor-packages/zfs/userspace.pyc -file path=usr/lib/python$(PYTHON_VERSION)/vendor-packages/zfs/util.py -file path=usr/lib/python$(PYTHON_VERSION)/vendor-packages/zfs/util.pyc  file path=usr/lib/sysevent/modules/zfs_mod.so group=sys  file path=usr/lib/zfs/availdevs mode=0555  file path=usr/lib/zfs/pyzfs.py mode=0555 @@ -184,4 +157,7 @@ link path=usr/lib/llib-lzfs_core target=../../lib/llib-lzfs_core  link path=usr/lib/llib-lzfs_core.ln target=../../lib/llib-lzfs_core.ln  link path=usr/sbin/zfs target=../../sbin/zfs  link path=usr/sbin/zpool target=../../sbin/zpool -depend fmri=runtime/python$(PYTHON_PKGVERS) type=require +$(python3_ONLY)depend fmri=system/library/python/zfs$(PYTHON3_PKGVERS) \ +    predicate=runtime/python$(PYTHON3_PKGVERS) type=conditional +$(python2_ONLY)depend fmri=system/library/python/zfs$(PYTHON_PKGVERS) \ +    predicate=runtime/python$(PYTHON_PKGVERS) type=conditional diff --git a/usr/src/pkg/manifests/system-library-python-libbe-2.mf b/usr/src/pkg/manifests/system-library-python-libbe-2.mf new file mode 100644 index 0000000000..c4d108c5f9 --- /dev/null +++ b/usr/src/pkg/manifests/system-library-python-libbe-2.mf @@ -0,0 +1,41 @@ +# +# CDDL HEADER START +# +# The contents of this file are subject to the terms of the +# Common Development and Distribution License (the "License"). +# You may not use this file except in compliance with the License. +# +# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE +# or http://www.opensolaris.org/os/licensing. +# See the License for the specific language governing permissions +# and limitations under the License. +# +# When distributing Covered Code, include this CDDL HEADER in each +# file and include the License file at usr/src/OPENSOLARIS.LICENSE. +# If applicable, add the following below this CDDL HEADER, with the +# fields enclosed by brackets "[]" replaced with your own identifying +# information: Portions Copyright [yyyy] [name of copyright owner] +# +# CDDL HEADER END +# +# +# Copyright 2018 OmniOS Community Edition (OmniOSce) Association. +# + +set name=pkg.fmri \ +    value=pkg:/system/library/python/libbe$(PYTHON_PKGVERS)@$(PKGVERS) +set name=pkg.description value="Boot Environment Management Python2 Module" +set name=pkg.summary value="py_libbe module, python2" +set name=variant.arch value=$(ARCH) +dir path=usr group=sys +dir path=usr/lib +$(python2_ONLY)dir path=usr/lib/python$(PYTHON_VERSION) +$(python2_ONLY)dir path=usr/lib/python$(PYTHON_VERSION)/vendor-packages +$(python2_ONLY)dir path=usr/lib/python$(PYTHON_VERSION)/vendor-packages/64 +$(python2_ONLY)file \ +    path=usr/lib/python$(PYTHON_VERSION)/vendor-packages/64/libbe_py.so +$(python2_ONLY)file \ +    path=usr/lib/python$(PYTHON_VERSION)/vendor-packages/libbe_py.so +license cr_Sun license=cr_Sun +license lic_CDDL license=lic_CDDL +$(python2_ONLY)depend fmri=runtime/python$(PYTHON_PKGVERS) type=require diff --git a/usr/src/pkg/manifests/system-library-python-libbe-3.mf b/usr/src/pkg/manifests/system-library-python-libbe-3.mf new file mode 100644 index 0000000000..43ab32586b --- /dev/null +++ b/usr/src/pkg/manifests/system-library-python-libbe-3.mf @@ -0,0 +1,38 @@ +# +# CDDL HEADER START +# +# The contents of this file are subject to the terms of the +# Common Development and Distribution License (the "License"). +# You may not use this file except in compliance with the License. +# +# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE +# or http://www.opensolaris.org/os/licensing. +# See the License for the specific language governing permissions +# and limitations under the License. +# +# When distributing Covered Code, include this CDDL HEADER in each +# file and include the License file at usr/src/OPENSOLARIS.LICENSE. +# If applicable, add the following below this CDDL HEADER, with the +# fields enclosed by brackets "[]" replaced with your own identifying +# information: Portions Copyright [yyyy] [name of copyright owner] +# +# CDDL HEADER END +# +# +# Copyright 2018 OmniOS Community Edition (OmniOSce) Association. +# + +set name=pkg.fmri \ +    value=pkg:/system/library/python/libbe$(PYTHON3_PKGVERS)@$(PKGVERS) +set name=pkg.description value="Boot Environment Management Python3 Module" +set name=pkg.summary value="py_libbe module, python3" +set name=variant.arch value=$(ARCH) +dir path=usr group=sys +dir path=usr/lib +$(python3_ONLY)dir path=usr/lib/python$(PYTHON3_VERSION) +$(python3_ONLY)dir path=usr/lib/python$(PYTHON3_VERSION)/vendor-packages +$(python3_ONLY)file \ +    path=usr/lib/python$(PYTHON3_VERSION)/vendor-packages/libbe_py.so +license cr_Sun license=cr_Sun +license lic_CDDL license=lic_CDDL +$(python3_ONLY)depend fmri=runtime/python$(PYTHON3_PKGVERS) type=require diff --git a/usr/src/pkg/manifests/system-library-python-solaris-2.mf b/usr/src/pkg/manifests/system-library-python-solaris-2.mf new file mode 100644 index 0000000000..4b2bced94e --- /dev/null +++ b/usr/src/pkg/manifests/system-library-python-solaris-2.mf @@ -0,0 +1,47 @@ +# +# CDDL HEADER START +# +# The contents of this file are subject to the terms of the +# Common Development and Distribution License (the "License"). +# You may not use this file except in compliance with the License. +# +# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE +# or http://www.opensolaris.org/os/licensing. +# See the License for the specific language governing permissions +# and limitations under the License. +# +# When distributing Covered Code, include this CDDL HEADER in each +# file and include the License file at usr/src/OPENSOLARIS.LICENSE. +# If applicable, add the following below this CDDL HEADER, with the +# fields enclosed by brackets "[]" replaced with your own identifying +# information: Portions Copyright [yyyy] [name of copyright owner] +# +# CDDL HEADER END +# + +# Copyright 2018 OmniOS Community Edition (OmniOSce) Association. + +set name=pkg.fmri \ +    value=pkg:/system/library/python/solaris$(PYTHON_PKGVERS)@$(PKGVERS) +set name=pkg.description value="Solaris Python2 Module" +set name=pkg.summary value="solaris module, python2" +set name=variant.arch value=$(ARCH) +dir path=usr group=sys +dir path=usr/lib +$(python2_ONLY)dir path=usr/lib/python$(PYTHON_VERSION) +$(python2_ONLY)dir path=usr/lib/python$(PYTHON_VERSION)/vendor-packages +$(python2_ONLY)dir \ +    path=usr/lib/python$(PYTHON_VERSION)/vendor-packages/solaris +$(python2_ONLY)dir \ +    path=usr/lib/python$(PYTHON_VERSION)/vendor-packages/solaris/64 +$(python2_ONLY)file \ +    path=usr/lib/python$(PYTHON_VERSION)/vendor-packages/solaris/64/misc.so +$(python2_ONLY)file \ +    path=usr/lib/python$(PYTHON_VERSION)/vendor-packages/solaris/__init__.py +$(python2_ONLY)file \ +    path=usr/lib/python$(PYTHON_VERSION)/vendor-packages/solaris/__init__.pyc +$(python2_ONLY)file \ +    path=usr/lib/python$(PYTHON_VERSION)/vendor-packages/solaris/misc.so +license cr_Sun license=cr_Sun +license lic_CDDL license=lic_CDDL +$(python2_ONLY)depend fmri=runtime/python$(PYTHON_PKGVERS) type=require diff --git a/usr/src/pkg/manifests/system-library-python-solaris-3.mf b/usr/src/pkg/manifests/system-library-python-solaris-3.mf new file mode 100644 index 0000000000..92c3c3a9dd --- /dev/null +++ b/usr/src/pkg/manifests/system-library-python-solaris-3.mf @@ -0,0 +1,45 @@ +# +# CDDL HEADER START +# +# The contents of this file are subject to the terms of the +# Common Development and Distribution License (the "License"). +# You may not use this file except in compliance with the License. +# +# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE +# or http://www.opensolaris.org/os/licensing. +# See the License for the specific language governing permissions +# and limitations under the License. +# +# When distributing Covered Code, include this CDDL HEADER in each +# file and include the License file at usr/src/OPENSOLARIS.LICENSE. +# If applicable, add the following below this CDDL HEADER, with the +# fields enclosed by brackets "[]" replaced with your own identifying +# information: Portions Copyright [yyyy] [name of copyright owner] +# +# CDDL HEADER END +# + +# Copyright 2018 OmniOS Community Edition (OmniOSce) Association. + +set name=pkg.fmri \ +    value=pkg:/system/library/python/solaris$(PYTHON3_PKGVERS)@$(PKGVERS) +set name=pkg.description value="Solaris Python3 Module" +set name=pkg.summary value="solaris module, python3" +set name=variant.arch value=$(ARCH) +dir path=usr group=sys +dir path=usr/lib +$(python3_ONLY)dir path=usr/lib/python$(PYTHON3_VERSION) +$(python3_ONLY)dir path=usr/lib/python$(PYTHON3_VERSION)/vendor-packages +$(python3_ONLY)dir \ +    path=usr/lib/python$(PYTHON3_VERSION)/vendor-packages/solaris +$(python3_ONLY)dir \ +    path=usr/lib/python$(PYTHON3_VERSION)/vendor-packages/solaris/__pycache__ +$(python3_ONLY)file \ +    path=usr/lib/python$(PYTHON3_VERSION)/vendor-packages/solaris/__init__.py +$(python3_ONLY)file \ +    path=usr/lib/python$(PYTHON3_VERSION)/vendor-packages/solaris/__pycache__/__init__.cpython$(PYTHON3_PKGVERS).pyc +$(python3_ONLY)file \ +    path=usr/lib/python$(PYTHON3_VERSION)/vendor-packages/solaris/misc.so +license cr_Sun license=cr_Sun +license lic_CDDL license=lic_CDDL +$(python3_ONLY)depend fmri=runtime/python$(PYTHON3_PKGVERS) type=require diff --git a/usr/src/pkg/manifests/system-library-python-zfs-2.mf b/usr/src/pkg/manifests/system-library-python-zfs-2.mf new file mode 100644 index 0000000000..b95b383e76 --- /dev/null +++ b/usr/src/pkg/manifests/system-library-python-zfs-2.mf @@ -0,0 +1,79 @@ +# +# CDDL HEADER START +# +# The contents of this file are subject to the terms of the +# Common Development and Distribution License (the "License"). +# You may not use this file except in compliance with the License. +# +# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE +# or http://www.opensolaris.org/os/licensing. +# See the License for the specific language governing permissions +# and limitations under the License. +# +# When distributing Covered Code, include this CDDL HEADER in each +# file and include the License file at usr/src/OPENSOLARIS.LICENSE. +# If applicable, add the following below this CDDL HEADER, with the +# fields enclosed by brackets "[]" replaced with your own identifying +# information: Portions Copyright [yyyy] [name of copyright owner] +# +# CDDL HEADER END +# + +# +# Copyright 2018 OmniOS Community Edition (OmniOSce) Association. +# + +set name=pkg.fmri \ +    value=pkg:/system/library/python/zfs$(PYTHON_PKGVERS)@$(PKGVERS) +set name=pkg.description value="ZFS Python2 Module" +set name=pkg.summary value="zfs module, python2" +set name=variant.arch value=$(ARCH) +dir path=usr group=sys +dir path=usr/lib +$(python2_ONLY)dir path=usr/lib/python$(PYTHON_VERSION) +$(python2_ONLY)dir path=usr/lib/python$(PYTHON_VERSION)/vendor-packages +$(python2_ONLY)dir path=usr/lib/python$(PYTHON_VERSION)/vendor-packages/zfs +$(python2_ONLY)dir path=usr/lib/python$(PYTHON_VERSION)/vendor-packages/zfs/64 +$(python2_ONLY)file \ +    path=usr/lib/python$(PYTHON_VERSION)/vendor-packages/zfs/64/ioctl.so +$(python2_ONLY)file \ +    path=usr/lib/python$(PYTHON_VERSION)/vendor-packages/zfs/__init__.py +$(python2_ONLY)file \ +    path=usr/lib/python$(PYTHON_VERSION)/vendor-packages/zfs/__init__.pyc +$(python2_ONLY)file \ +    path=usr/lib/python$(PYTHON_VERSION)/vendor-packages/zfs/allow.py +$(python2_ONLY)file \ +    path=usr/lib/python$(PYTHON_VERSION)/vendor-packages/zfs/allow.pyc +$(python2_ONLY)file \ +    path=usr/lib/python$(PYTHON_VERSION)/vendor-packages/zfs/dataset.py +$(python2_ONLY)file \ +    path=usr/lib/python$(PYTHON_VERSION)/vendor-packages/zfs/dataset.pyc +$(python2_ONLY)file \ +    path=usr/lib/python$(PYTHON_VERSION)/vendor-packages/zfs/groupspace.py +$(python2_ONLY)file \ +    path=usr/lib/python$(PYTHON_VERSION)/vendor-packages/zfs/groupspace.pyc +$(python2_ONLY)file \ +    path=usr/lib/python$(PYTHON_VERSION)/vendor-packages/zfs/holds.py +$(python2_ONLY)file \ +    path=usr/lib/python$(PYTHON_VERSION)/vendor-packages/zfs/holds.pyc +$(python2_ONLY)file \ +    path=usr/lib/python$(PYTHON_VERSION)/vendor-packages/zfs/ioctl.so +$(python2_ONLY)file \ +    path=usr/lib/python$(PYTHON_VERSION)/vendor-packages/zfs/table.py +$(python2_ONLY)file \ +    path=usr/lib/python$(PYTHON_VERSION)/vendor-packages/zfs/table.pyc +$(python2_ONLY)file \ +    path=usr/lib/python$(PYTHON_VERSION)/vendor-packages/zfs/unallow.py +$(python2_ONLY)file \ +    path=usr/lib/python$(PYTHON_VERSION)/vendor-packages/zfs/unallow.pyc +$(python2_ONLY)file \ +    path=usr/lib/python$(PYTHON_VERSION)/vendor-packages/zfs/userspace.py +$(python2_ONLY)file \ +    path=usr/lib/python$(PYTHON_VERSION)/vendor-packages/zfs/userspace.pyc +$(python2_ONLY)file \ +    path=usr/lib/python$(PYTHON_VERSION)/vendor-packages/zfs/util.py +$(python2_ONLY)file \ +    path=usr/lib/python$(PYTHON_VERSION)/vendor-packages/zfs/util.pyc +license cr_Sun license=cr_Sun +license lic_CDDL license=lic_CDDL +$(python2_ONLY)depend fmri=runtime/python$(PYTHON_PKGVERS) type=require diff --git a/usr/src/pkg/manifests/system-library-python-zfs-3.mf b/usr/src/pkg/manifests/system-library-python-zfs-3.mf new file mode 100644 index 0000000000..86236f5127 --- /dev/null +++ b/usr/src/pkg/manifests/system-library-python-zfs-3.mf @@ -0,0 +1,78 @@ +# +# CDDL HEADER START +# +# The contents of this file are subject to the terms of the +# Common Development and Distribution License (the "License"). +# You may not use this file except in compliance with the License. +# +# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE +# or http://www.opensolaris.org/os/licensing. +# See the License for the specific language governing permissions +# and limitations under the License. +# +# When distributing Covered Code, include this CDDL HEADER in each +# file and include the License file at usr/src/OPENSOLARIS.LICENSE. +# If applicable, add the following below this CDDL HEADER, with the +# fields enclosed by brackets "[]" replaced with your own identifying +# information: Portions Copyright [yyyy] [name of copyright owner] +# +# CDDL HEADER END +# + +# +# Copyright 2018 OmniOS Community Edition (OmniOSce) Association. +# + +set name=pkg.fmri \ +    value=pkg:/system/library/python/zfs$(PYTHON3_PKGVERS)@$(PKGVERS) +set name=pkg.description value="ZFS Python3 Module" +set name=pkg.summary value="zfs module, python3" +set name=variant.arch value=$(ARCH) +dir path=usr group=sys +dir path=usr/lib +$(python3_ONLY)dir path=usr/lib/python$(PYTHON3_VERSION) +$(python3_ONLY)dir path=usr/lib/python$(PYTHON3_VERSION)/vendor-packages +$(python3_ONLY)dir path=usr/lib/python$(PYTHON3_VERSION)/vendor-packages/zfs +$(python3_ONLY)dir \ +    path=usr/lib/python$(PYTHON3_VERSION)/vendor-packages/zfs/__pycache__ +$(python3_ONLY)file \ +    path=usr/lib/python$(PYTHON3_VERSION)/vendor-packages/zfs/__init__.py +$(python3_ONLY)file \ +    path=usr/lib/python$(PYTHON3_VERSION)/vendor-packages/zfs/__pycache__/__init__.cpython$(PYTHON3_PKGVERS).pyc +$(python3_ONLY)file \ +    path=usr/lib/python$(PYTHON3_VERSION)/vendor-packages/zfs/__pycache__/allow.cpython$(PYTHON3_PKGVERS).pyc +$(python3_ONLY)file \ +    path=usr/lib/python$(PYTHON3_VERSION)/vendor-packages/zfs/__pycache__/dataset.cpython$(PYTHON3_PKGVERS).pyc +$(python3_ONLY)file \ +    path=usr/lib/python$(PYTHON3_VERSION)/vendor-packages/zfs/__pycache__/groupspace.cpython$(PYTHON3_PKGVERS).pyc +$(python3_ONLY)file \ +    path=usr/lib/python$(PYTHON3_VERSION)/vendor-packages/zfs/__pycache__/holds.cpython$(PYTHON3_PKGVERS).pyc +$(python3_ONLY)file \ +    path=usr/lib/python$(PYTHON3_VERSION)/vendor-packages/zfs/__pycache__/table.cpython$(PYTHON3_PKGVERS).pyc +$(python3_ONLY)file \ +    path=usr/lib/python$(PYTHON3_VERSION)/vendor-packages/zfs/__pycache__/unallow.cpython$(PYTHON3_PKGVERS).pyc +$(python3_ONLY)file \ +    path=usr/lib/python$(PYTHON3_VERSION)/vendor-packages/zfs/__pycache__/userspace.cpython$(PYTHON3_PKGVERS).pyc +$(python3_ONLY)file \ +    path=usr/lib/python$(PYTHON3_VERSION)/vendor-packages/zfs/__pycache__/util.cpython$(PYTHON3_PKGVERS).pyc +$(python3_ONLY)file \ +    path=usr/lib/python$(PYTHON3_VERSION)/vendor-packages/zfs/allow.py +$(python3_ONLY)file \ +    path=usr/lib/python$(PYTHON3_VERSION)/vendor-packages/zfs/dataset.py +$(python3_ONLY)file \ +    path=usr/lib/python$(PYTHON3_VERSION)/vendor-packages/zfs/groupspace.py +$(python3_ONLY)file \ +    path=usr/lib/python$(PYTHON3_VERSION)/vendor-packages/zfs/holds.py +$(python3_ONLY)file \ +    path=usr/lib/python$(PYTHON3_VERSION)/vendor-packages/zfs/ioctl.so +$(python3_ONLY)file \ +    path=usr/lib/python$(PYTHON3_VERSION)/vendor-packages/zfs/table.py +$(python3_ONLY)file \ +    path=usr/lib/python$(PYTHON3_VERSION)/vendor-packages/zfs/unallow.py +$(python3_ONLY)file \ +    path=usr/lib/python$(PYTHON3_VERSION)/vendor-packages/zfs/userspace.py +$(python3_ONLY)file \ +    path=usr/lib/python$(PYTHON3_VERSION)/vendor-packages/zfs/util.py +license cr_Sun license=cr_Sun +license lic_CDDL license=lic_CDDL +$(python3_ONLY)depend fmri=runtime/python$(PYTHON3_PKGVERS) type=require diff --git a/usr/src/pkg/manifests/system-library.mf b/usr/src/pkg/manifests/system-library.mf index 94ae932b59..941e64f74c 100644 --- a/usr/src/pkg/manifests/system-library.mf +++ b/usr/src/pkg/manifests/system-library.mf @@ -106,9 +106,6 @@ dir path=usr/lib/iconv/$(ARCH64)  $(i386_ONLY)dir path=usr/lib/libc  dir path=usr/lib/lwp  dir path=usr/lib/lwp/$(ARCH64) -dir path=usr/lib/python$(PYTHON_VERSION) -dir path=usr/lib/python$(PYTHON_VERSION)/vendor-packages -dir path=usr/lib/python$(PYTHON_VERSION)/vendor-packages/solaris  dir path=usr/lib/raidcfg  dir path=usr/lib/raidcfg/$(ARCH64)  dir path=usr/lib/scsi @@ -473,9 +470,6 @@ file path=usr/lib/libzoneinfo.so.1  file path=usr/lib/nss_ad.so.1  file path=usr/lib/nss_ldap.so.1  file path=usr/lib/passwdutil.so.1 -file path=usr/lib/python$(PYTHON_VERSION)/vendor-packages/solaris/__init__.py -file path=usr/lib/python$(PYTHON_VERSION)/vendor-packages/solaris/__init__.pyc -file path=usr/lib/python$(PYTHON_VERSION)/vendor-packages/solaris/misc.so  file path=usr/lib/raidcfg/$(ARCH64)/mpt.so.1  file path=usr/lib/raidcfg/mpt.so.1  file path=usr/lib/scsi/$(ARCH64)/libscsi.so.1 @@ -1327,6 +1321,10 @@ link path=usr/lib/straddr.so target=./straddr.so.2  link path=usr/xpg4/lib/$(ARCH64)/libcurses.so target=libcurses.so.2  link path=usr/xpg4/lib/64 target=$(ARCH64)  link path=usr/xpg4/lib/libcurses.so target=./libcurses.so.2 +$(python3_ONLY)depend fmri=system/library/python/solaris$(PYTHON3_PKGVERS) \ +    predicate=runtime/python$(PYTHON3_PKGVERS) type=conditional +$(python2_ONLY)depend fmri=system/library/python/solaris$(PYTHON_PKGVERS) \ +    predicate=runtime/python$(PYTHON_PKGVERS) type=conditional  #  # libses.so needs to dlopen(3C) plugins from usr/lib/scsi/plugins/ses/vendor/,  # a dependency which cannot be automatically derived diff --git a/usr/src/tools/env/illumos.sh b/usr/src/tools/env/illumos.sh index bc223c4fd3..56137d4beb 100644 --- a/usr/src/tools/env/illumos.sh +++ b/usr/src/tools/env/illumos.sh @@ -22,6 +22,7 @@  # Copyright 2015 Nexenta Systems, Inc.  All rights reserved.  # Copyright 2012 Joshua M. Clulow <josh@sysmgr.org>  # Copyright 2015, OmniTI Computer Consulting, Inc. All rights reserved. +# Copyright 2018 OmniOS Community Edition (OmniOSce) Association.  #  # Configuration variables for the runtime environment of the nightly @@ -245,8 +246,8 @@ export ENABLE_SMB_PRINTING=  # If your distro uses certain versions of Perl, make sure either Makefile.master  # contains your new defaults OR your .env file sets them. -# These are how you would override for building on OmniOS r151012, for example. -#export PERL_VERSION=5.16.1 +# These are how you would override for building on OmniOS r151028, for example. +#export PERL_VERSION=5.28  #export PERL_ARCH=i86pc-solaris-thread-multi-64int  #export PERL_PKGVERS=-5161 @@ -255,3 +256,17 @@ export ENABLE_SMB_PRINTING=  # proto area, that we then fail the build.  #  export LD_TOXIC_PATH="$ROOT/lib:$ROOT/usr/lib" + +# If your distro uses certain versions of Python, make sure either +# Makefile.master contains your new defaults OR your .env file sets them. +#export PYTHON_VERSION=2.7 +#export PYTHON_PKGVERS=-27 +#export PYTHON_SUFFIX= +#export PYTHON3_VERSION=3.5 +#export PYTHON3_PKGVERS=-35 +#export PYTHON3_SUFFIX=m + +# To disable building with either Python2 or Python 3 (or both), uncomment +# these lines: +#export BUILDPY2='#' +#export BUILDPY3='#' diff --git a/usr/src/uts/common/fs/nfs/nfs4_srv.c b/usr/src/uts/common/fs/nfs/nfs4_srv.c index 814ac758d4..30c45a71cd 100644 --- a/usr/src/uts/common/fs/nfs/nfs4_srv.c +++ b/usr/src/uts/common/fs/nfs/nfs4_srv.c @@ -3649,81 +3649,6 @@ out:  }  /* - * set_rdattr_params sets up the variables used to manage what information - * to get for each directory entry. - */ -static nfsstat4 -set_rdattr_params(struct nfs4_svgetit_arg *sargp, -    bitmap4 attrs, bool_t *need_to_lookup) -{ -	uint_t	va_mask; -	nfsstat4 status; -	bitmap4 objbits; - -	status = bitmap4_to_attrmask(attrs, sargp); -	if (status != NFS4_OK) { -		/* -		 * could not even figure attr mask -		 */ -		return (status); -	} -	va_mask = sargp->vap->va_mask; - -	/* -	 * dirent's d_ino is always correct value for mounted_on_fileid. -	 * mntdfid_set is set once here, but mounted_on_fileid is -	 * set in main dirent processing loop for each dirent. -	 * The mntdfid_set is a simple optimization that lets the -	 * server attr code avoid work when caller is readdir. -	 */ -	sargp->mntdfid_set = TRUE; - -	/* -	 * Lookup entry only if client asked for any of the following: -	 * a) vattr attrs -	 * b) vfs attrs -	 * c) attrs w/per-object scope requested (change, filehandle, etc) -	 *    other than mounted_on_fileid (which we can take from dirent) -	 */ -	objbits = attrs ? attrs & NFS4_VP_ATTR_MASK : 0; - -	if (va_mask || sargp->sbp || (objbits & ~FATTR4_MOUNTED_ON_FILEID_MASK)) -		*need_to_lookup = TRUE; -	else -		*need_to_lookup = FALSE; - -	if (sargp->sbp == NULL) -		return (NFS4_OK); - -	/* -	 * If filesystem attrs are requested, get them now from the -	 * directory vp, as most entries will have same filesystem. The only -	 * exception are mounted over entries but we handle -	 * those as we go (XXX mounted over detection not yet implemented). -	 */ -	sargp->vap->va_mask = 0;	/* to avoid VOP_GETATTR */ -	status = bitmap4_get_sysattrs(sargp); -	sargp->vap->va_mask = va_mask; - -	if ((status != NFS4_OK) && sargp->rdattr_error_req) { -		/* -		 * Failed to get filesystem attributes. -		 * Return a rdattr_error for each entry, but don't fail. -		 * However, don't get any obj-dependent attrs. -		 */ -		sargp->rdattr_error = status;	/* for rdattr_error */ -		*need_to_lookup = FALSE; -		/* -		 * At least get fileid for regular readdir output -		 */ -		sargp->vap->va_mask &= AT_NODEID; -		status = NFS4_OK; -	} - -	return (status); -} - -/*   * readlink: args: CURRENT_FH.   *	res: status. If success - CURRENT_FH unchanged, return linktext.   */ | 
