xref: /illumos-gate/usr/src/cmd/tsol/zones/zoneshare.sh (revision f875b4eb)
1#!/sbin/sh
2#
3# CDDL HEADER START
4#
5# The contents of this file are subject to the terms of the
6# Common Development and Distribution License (the "License").
7# You may not use this file except in compliance with the License.
8#
9# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10# or http://www.opensolaris.org/os/licensing.
11# See the License for the specific language governing permissions
12# and limitations under the License.
13#
14# When distributing Covered Code, include this CDDL HEADER in each
15# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16# If applicable, add the following below this CDDL HEADER, with the
17# fields enclosed by brackets "[]" replaced with your own identifying
18# information: Portions Copyright [yyyy] [name of copyright owner]
19#
20# CDDL HEADER END
21#
22# Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
23# Use is subject to license terms.
24#
25#ident	"%Z%%M%	%I%	%E% SMI"
26#
27# zoneshare  -- share zone resources
28
29# Processes a non-global zone's dfstab file after translating
30# its zone-relative pathnames to global zone pathnames
31
32USAGE="zoneshare -z zonename [- | file]"
33set -- `getopt z: $*`
34if [ $? != 0 ]		# invalid options
35	then
36	echo $USAGE >&2
37	exit 1
38fi
39for i in $*		# pick up the options
40do
41	case $i in
42	-z)  zonename=$2; shift 2;;
43	--)  shift; break;;
44	esac
45done
46
47zoneattr=`/usr/sbin/zoneadm -z $zonename list -p 2> /dev/null`
48if [ $? -ne 0 ]		# invalid zone
49	then
50	echo $USAGE >&2
51	exit 1
52fi
53
54prefix=`echo $zoneattr | cut -d ":" -f4`
55rootpath=$prefix/root
56
57if [ $# -gt 1 ]		# accept only one argument
58then
59	echo $USAGE >&2
60	exit 1
61elif [ $# = 1 ]
62then
63	case $1 in
64	-)	infile=;;	# use stdin
65	*)	infile=$1;;	# use a given source file
66	esac
67else
68	infile=$prefix/etc/dfs/dfstab	# default
69fi
70
71# Prepend each exported pathname with the zone's rootpath
72# Skip over comments and lines without a share command
73# Run each share command in its own shell
74
75while read line				# get complete lines
76do
77	echo $line
78done < $infile |
79	`egrep -v "(^[#])" | nawk  -v rootpath=$rootpath \
80	    '/share/ { ORS = " "; for (i = 1; i < NF; i++) print $i ; \
81	     print rootpath $NF ";" } ' | /sbin/sh`
82