net-loc revision 03e9aa6d0661fbdf89669b14e801767d7e504fe8
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan#!/sbin/sh
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan#
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan# CDDL HEADER START
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan#
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan# The contents of this file are subject to the terms of the
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan# Common Development and Distribution License (the "License").
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan# You may not use this file except in compliance with the License.
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan#
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan# or http://www.opensolaris.org/os/licensing.
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan# See the License for the specific language governing permissions
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan# and limitations under the License.
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan#
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan# When distributing Covered Code, include this CDDL HEADER in each
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan# If applicable, add the following below this CDDL HEADER, with the
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan# fields enclosed by brackets "[]" replaced with your own identifying
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan# information: Portions Copyright [yyyy] [name of copyright owner]
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan#
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan# CDDL HEADER END
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan#
9404882939d18ddd3c94a5bd3da7a0449c195a5dranenc#
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan#
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan. /lib/svc/share/smf_include.sh
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan. /lib/svc/share/net_include.sh
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan# FMRI consts
4bac220845f606f60663ed6f3a2b88caa00ae87enarayanAUTOFS_FMRI="svc:/system/filesystem/autofs"
4bac220845f606f60663ed6f3a2b88caa00ae87enarayanDNS_CLIENT_FMRI="svc:/network/dns/client"
4bac220845f606f60663ed6f3a2b88caa00ae87enarayanIPSEC_IKE_FMRI="svc:/network/ipsec/ike"
4bac220845f606f60663ed6f3a2b88caa00ae87enarayanIPSEC_POLICY_FMRI="svc:/network/ipsec/policy"
4bac220845f606f60663ed6f3a2b88caa00ae87enarayanIPFILTER_FMRI="svc:/network/ipfilter:default"
4bac220845f606f60663ed6f3a2b88caa00ae87enarayanLDAP_CLIENT_FMRI="svc:/network/ldap/client"
4bac220845f606f60663ed6f3a2b88caa00ae87enarayanLOCATION_FMRI="svc:/network/location:default"
4bac220845f606f60663ed6f3a2b88caa00ae87enarayanMAPID_FMRI="svc:/network/nfs/mapid:default"
4bac220845f606f60663ed6f3a2b88caa00ae87enarayanNIS_CLIENT_FMRI="svc:/network/nis/client"
4bac220845f606f60663ed6f3a2b88caa00ae87enarayanNWAM_FMRI="svc:/network/physical:nwam"
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan# commands
4bac220845f606f60663ed6f3a2b88caa00ae87enarayanCP=/usr/bin/cp
4bac220845f606f60663ed6f3a2b88caa00ae87enarayanDHCPINFO=/sbin/dhcpinfo
4bac220845f606f60663ed6f3a2b88caa00ae87enarayanDOMAINNAME=/usr/bin/domainname
4bac220845f606f60663ed6f3a2b88caa00ae87enarayanGREP=/usr/bin/grep
4bac220845f606f60663ed6f3a2b88caa00ae87enarayanLDAPCLIENT=/usr/sbin/ldapclient
4bac220845f606f60663ed6f3a2b88caa00ae87enarayanMKDIR=/usr/bin/mkdir
4bac220845f606f60663ed6f3a2b88caa00ae87enarayanMV=/usr/bin/mv
4bac220845f606f60663ed6f3a2b88caa00ae87enarayanNAWK=/usr/bin/nawk
4bac220845f606f60663ed6f3a2b88caa00ae87enarayanNWAMADM=/usr/sbin/nwamadm
4bac220845f606f60663ed6f3a2b88caa00ae87enarayanNWAMCFG=/usr/sbin/nwamcfg
4bac220845f606f60663ed6f3a2b88caa00ae87enarayanRM=/usr/bin/rm
4bac220845f606f60663ed6f3a2b88caa00ae87enarayanSED=/usr/bin/sed
4bac220845f606f60663ed6f3a2b88caa00ae87enarayanSVCADM=/usr/sbin/svcadm
4bac220845f606f60663ed6f3a2b88caa00ae87enarayanSVCCFG=/usr/sbin/svccfg
4bac220845f606f60663ed6f3a2b88caa00ae87enarayanSVCPROP=/usr/bin/svcprop
4bac220845f606f60663ed6f3a2b88caa00ae87enarayanTOUCH=/usr/bin/touch
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan# Path to directories
4bac220845f606f60663ed6f3a2b88caa00ae87enarayanETC_DEFAULT_DOMAIN=/etc/defaultdomain
4bac220845f606f60663ed6f3a2b88caa00ae87enarayanNIS_BIND_PATH=/var/yp/binding
4bac220845f606f60663ed6f3a2b88caa00ae87enarayanLEGACY_LOC_PATH=/etc/nwam/loc/Legacy
4bac220845f606f60663ed6f3a2b88caa00ae87enarayanUSER_LOC_PATH=/etc/nwam/loc/User
4bac220845f606f60663ed6f3a2b88caa00ae87enarayanSCRIPT_PATH=/etc/svc/volatile/nwam
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan#
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan# echoes DHCP controlled interfaces separated by commas
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan#
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan# Don't parse the output of ifconfig(1M) because interfaces that haven't
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan# acquired a DHCP lease also have the DHCP flag set.
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan#
4bac220845f606f60663ed6f3a2b88caa00ae87enarayanget_dhcp_interfaces () {
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan #
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan # 1. parse netstat(1M) output for v4 interfaces in BOUND
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan # or INFORMATION state
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan # 2. make a space-separated list of interface names
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan #
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan netstat -D -f inet | $NAWK '
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan $2 ~ /BOUND/ { printf "%s ", $1 }
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan $2 ~ /INFORMATION/ { printf "%s ", $1 }'
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan}
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan#
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan# get_dhcpinfo <code/identifier>
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan#
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan# echoes the value received through each interface controlled by DHCP;
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan# multiple values are echoed as a space-separated list
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan#
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan# returns:
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan# 0 => property is set
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan# 1 => property is not set
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan#
4bac220845f606f60663ed6f3a2b88caa00ae87enarayanget_dhcpinfo () {
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan code=$1
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan # Get all interfaces with DHCP control, IFS is " "
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan interfaces=`get_dhcp_interfaces`
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan info=""
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan for intf in $interfaces; do
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan val=`$DHCPINFO -i $intf $code`
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan if [ $? -eq 0 ]; then
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan if [ "$info" = "" ]; then
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan info="$val"
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan else
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan info="$info $val"
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan fi
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan fi
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan done
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan echo $info
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan}
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan#
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan# set_smf_prop <fmri> <property name> <property value>
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan#
4bac220845f606f60663ed6f3a2b88caa00ae87enarayanset_smf_prop () {
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan $SVCCFG -s $1 setprop $2 = astring: "$3" && return
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan}
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan#
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan# refresh_svc <fmri>
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan#
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan# Refreshes the service.
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan#
4bac220845f606f60663ed6f3a2b88caa00ae87enarayanrefresh_svc () {
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan $SVCADM refresh $1
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan}
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan#
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan# restart_svc <fmri>
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan#
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan# Restarts the service.
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan#
4bac220845f606f60663ed6f3a2b88caa00ae87enarayanrestart_svc () {
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan $SVCADM restart $1
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan}
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan#
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan# start_svc <fmri>
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan#
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan# Starts the service. If the service is already enabled, restarts it. If
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan# it is not enabled, temporarily enables it.
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan#
4bac220845f606f60663ed6f3a2b88caa00ae87enarayanstart_svc () {
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan if service_is_enabled $1; then
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan $SVCADM restart $1
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan else
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan $SVCADM enable -t $1
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan fi
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan}
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan#
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan# stop_svc <fmri>
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan#
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan# Temporarily disables the service.
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan#
4bac220845f606f60663ed6f3a2b88caa00ae87enarayanstop_svc () {
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan $SVCADM disable -t $1
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan}
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan#
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan# copy_default <dir> <file>
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan#
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan# Copies <dir>/<file>.dfl to <dir>/<file>
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan#
4bac220845f606f60663ed6f3a2b88caa00ae87enarayancopy_default () {
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan $CP -p $1/$2.dfl $1/$2
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan}
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan#
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan# do_dns <location>
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan#
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan# Installs DNS information on /etc/resolv.conf for location
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan#
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan# Returns 0 on success, 1 on failure
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan#
4bac220845f606f60663ed6f3a2b88caa00ae87enarayando_dns () {
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan loc=$1
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan file=/etc/resolv.conf
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan # Write out to temporary file first
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan $TOUCH $file.$$
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan DNS_CONFIGSRC=`nwam_get_loc_list_prop $loc dns-nameservice-configsrc`
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan if [ -z "$DNS_CONFIGSRC" ]; then
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan echo "missing 'dns-nameservice-configsrc' property for '$loc'"
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan return 1
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan fi
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan for configsrc in $DNS_CONFIGSRC; do
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan case "$configsrc" in
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan 'manual')
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan DNS_SERVERS=`nwam_get_loc_list_prop $loc \
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan dns-nameservice-servers`
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan if [ -z "$DNS_SERVERS" ]; then
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan echo "DNS nameserver not set for '$loc'"
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan return 1
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan fi
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan DNS_DOMAIN=`nwam_get_loc_prop $loc \
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan dns-nameservice-domain`
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan DNS_SEARCH=`nwam_get_loc_list_prop $loc \
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan dns-nameservice-search`
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan ;;
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan 'dhcp')
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan DNS_DOMAIN=`get_dhcpinfo DNSdmain`
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan DNS_SERVERS=`get_dhcpinfo DNSserv`
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan # No DNS search info for IPv4
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan ;;
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan '*')
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan echo "Unrecognized DNS configsrc ${configsrc}; ignoring"
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan ;;
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan esac
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan # Write DNS settings
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan if [ -n "$DNS_DOMAIN" ]; then
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan echo "$DNS_DOMAIN" | $NAWK \
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan '{ for (i = 1; i <= NF; i++) \
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan print "domain ", $i }' >> $file.$$
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan fi
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan if [ -n "$DNS_SEARCH" ]; then
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan echo "$DNS_SEARCH" | $NAWK \
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan '{ printf("search"); \
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan for (i = 1; i <= NF; i++) printf(" %s", $i); \
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan printf("\n") }' >> $file.$$
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan fi
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan if [ -n "$DNS_SERVERS" ]; then
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan echo "$DNS_SERVERS" | $NAWK \
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan '{ for (i = 1; i <= NF; i++) \
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan print "nameserver ", $i }' >> $file.$$
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan fi
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan done
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan # Finally, copy our working version to the real thing
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan $MV -f $file.$$ $file
3af08d828975d7e2581b6829e0eecff14d87a483lm start_svc $DNS_CLIENT_FMRI
468f746cc700b507592bdf4849bdcc9d7ada0bd2lm
3af08d828975d7e2581b6829e0eecff14d87a483lm return 0
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan}
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan#
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan# do_nis <location>
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan#
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan# Installs NIS information on /var/yp/binding/ for location
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan#
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan# Returns 0 on success, 1 on failure
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan#
4bac220845f606f60663ed6f3a2b88caa00ae87enarayando_nis () {
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan loc=$1
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan NIS_CONFIGSRC=`nwam_get_loc_list_prop $loc nis-nameservice-configsrc`
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan if [ -z "$NIS_CONFIGSRC" ]; then
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan echo "missing 'nis-nameservice-configsrc' property for '$loc'"
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan return 1
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan fi
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan for configsrc in $NIS_CONFIGSRC; do
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan case "$configsrc" in
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan 'manual')
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan NIS_SERVERS=`nwam_get_loc_list_prop $loc \
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan nis-nameservice-servers`
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan DEFAULT_DOMAIN=`nwam_get_loc_prop $loc default-domain`
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan # user-specified default-domain always wins
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan if [ -n "$DEFAULT_DOMAIN" ]; then
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan $DOMAINNAME $DEFAULT_DOMAIN
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan $DOMAINNAME > $ETC_DEFAULT_DOMAIN
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan else
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan echo "'domainname' not set for '$loc'"
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan return 1
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan fi
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan ;;
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan 'dhcp')
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan # Use only the first name
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan DEFAULT_DOMAIN=`get_dhcpinfo NISdmain | \
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan $NAWK '{ print $1 }'`
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan NIS_SERVERS=`get_dhcpinfo NISservs`
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan if [ "$domainname_set" = "false" ]; then
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan $DOMAINNAME $DEFAULT_DOMAIN
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan $DOMAINNAME > $ETC_DEFAULT_DOMAIN
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan fi
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan ;;
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan '*')
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan echo "Unrecognized NIS configsrc ${configsrc}; ignoring"
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan ;;
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan esac
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan # Place NIS settings in appropriate directory/file.
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan if [ ! -d "$NIS_BIND_PATH/$DEFAULT_DOMAIN" ]; then
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan $MKDIR -p $NIS_BIND_PATH/$DEFAULT_DOMAIN
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan fi
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan if [ -n "$NIS_SERVERS" ]; then
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan echo "$NIS_SERVERS" | $NAWK \
9404882939d18ddd3c94a5bd3da7a0449c195a5dranenc '{ for (i = 1; i <= NF; i++) print $i }' \
9404882939d18ddd3c94a5bd3da7a0449c195a5dranenc > $NIS_BIND_PATH/$DEFAULT_DOMAIN/ypservers
9404882939d18ddd3c94a5bd3da7a0449c195a5dranenc fi
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan done
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan start_svc $NIS_CLIENT_FMRI
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan return 0
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan}
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan#
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan# do_ldap <location>
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan#
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan# Installs LDAP information using ldapclient(1M) for location
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan#
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan# Returns 0 on success, 1 on failure
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan#
4bac220845f606f60663ed6f3a2b88caa00ae87enarayando_ldap () {
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan loc=$1
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan LDAP_CONFIGSRC=`nwam_get_loc_list_prop $loc ldap-nameservice-configsrc`
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan if [ -z "$LDAP_CONFIGSRC" ]; then
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan echo "missing 'ldap-nameservice-configsrc' property for '$loc'"
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan return 1
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan fi
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan for configsrc in $LDAP_CONFIGSRC; do
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan case "$configsrc" in
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan 'manual')
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan LDAP_SERVERS=`nwam_get_loc_list_prop $loc \
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan ldap-nameservice-servers`
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan DEFAULT_DOMAIN=`nwam_get_loc_prop $loc default-domain`
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan if [ -z $LDAP_SERVERS -o -z $DEFAULT_DOMAIN ]; then
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan echo "LDAP configuration could not be set "\
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan "for '$loc'"
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan return 1
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan fi
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan $DOMAINNAME $DEFAULT_DOMAIN
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan $DOMAINNAME > $ETC_DEFAULT_DOMAIN
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan ;;
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan '*')
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan echo "Invalid LDAP configsrc ${configsrc}; ignoring"
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan ;;
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan esac
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan # Use ldapclient(1M) to initialize LDAP client settings.
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan if [ -n "$DEFAULT_DOMAIN" -o -n "$LDAP_SERVERS" ]; then
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan $LDAPCLIENT init -a domainName=$DEFAULT_DOMAIN \
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan $LDAP_SERVERS
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan fi
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan done
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan start_svc $LDAP_CLIENT_FMRI
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan return 0
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan}
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan#
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan# do_ns <location>
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan#
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan# Installs different nameservices for location
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan#
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan# Returns 0 on success, 1 on failure
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan#
4bac220845f606f60663ed6f3a2b88caa00ae87enarayando_ns () {
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan loc=$1
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan #
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan # Disable nameservices temporarily while we reconfigure. Copy
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan # /etc/nsswitch.files to /etc/nsswitch.conf first so that only "files"
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan # are used.
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan #
4bac220845f606f60663ed6f3a2b88caa00ae87enarayan $CP -p /etc/nsswitch.files /etc/nsswitch.conf
stop_svc $DNS_CLIENT_FMRI
stop_svc $NIS_CLIENT_FMRI
stop_svc $LDAP_CLIENT_FMRI
#
# Remove /etc/defaultdomain and unset domainname(1M). If NIS
# and/or LDAP is configured, they will create /etc/defaultdomain
# and set the domainname(1M).
#
$RM -f $ETC_DEFAULT_DOMAIN
$DOMAINNAME " "
NAMESERVICES=`nwam_get_loc_list_prop $loc nameservices`
if [ -z "$NAMESERVICES" ]; then
echo "missing 'nameservices' property for location '$loc'"
return 1
fi
NAMESERVICES_CONFIG_FILE=`nwam_get_loc_prop \
$loc nameservices-config-file`
if [ -z "$NAMESERVICES_CONFIG_FILE" ]; then
echo "missing 'nameservices-config-file' property for '$loc'"
return 1
fi
$CP -p $NAMESERVICES_CONFIG_FILE /etc/nsswitch.conf
for ns in $NAMESERVICES; do
case "$ns" in
'files')
# no additional setup needed for files nameservice
;;
'dns')
do_dns $loc || return 1
;;
'nis')
do_nis $loc || return 1
;;
'ldap')
do_ldap $loc || return 1
;;
'*')
echo "Unrecognized nameservices value ${ns}; ignoring"
;;
esac
done
#
# Restart other related services
#
# We explicitly restart here, as restart will only have an
# effect if the service is already enabled. We don't want
# to enable the service if it's currently disabled.
#
restart_svc $AUTOFS_FMRI
return 0
}
#
# do_sec <location>
#
# If config properties are set, update the SMF property and refresh the
# service. If config properties are not set, delete the SMF property and
# stop the service.
#
# Returns 0 on success, 1 on failure
#
do_sec () {
loc=$1
ike_file=`nwam_get_loc_prop $loc ike-config-file`
pol_file=`nwam_get_loc_prop $loc ipsecpolicy-config-file`
ipf_file=`nwam_get_loc_prop $loc ipfilter-config-file`
ipf6_file=`nwam_get_loc_prop $loc ipfilter-v6-config-file`
ipnat_file=`nwam_get_loc_prop $loc ipnat-config-file`
ippool_file=`nwam_get_loc_prop $loc ippool-config-file`
# IKE
if [ -n "$ike_file" ]; then
set_smf_prop $IPSEC_IKE_FMRI config/config_file $ike_file
refresh_svc $IPSEC_IKE_FMRI
start_svc $IPSEC_IKE_FMRI
else
stop_svc $IPSEC_IKE_FMRI
fi
# IPsec
if [ -n "$pol_file" ]; then
set_smf_prop $IPSEC_POLICY_FMRI config/config_file $pol_file
refresh_svc $IPSEC_POLICY_FMRI
start_svc $IPSEC_POLICY_FMRI
else
stop_svc $IPSEC_POLICY_FMRI
fi
# IPFilter
refresh_ipf=false
if [ -n "$ipf_file" ]; then
if [ "$ipf_file" = "/none" ]; then
set_smf_prop $IPFILTER_FMRI \
firewall_config_default/policy "none"
elif [ "$ipf_file" = "/deny" ]; then
set_smf_prop $IPFILTER_FMRI \
firewall_config_default/policy "deny"
elif [ "$ipf_file" = "/allow" ]; then
set_smf_prop $IPFILTER_FMRI \
firewall_config_default/policy "allow"
else
# custom policy with policy file
set_smf_prop $IPFILTER_FMRI \
firewall_config_default/policy "custom"
set_smf_prop $IPFILTER_FMRI \
firewall_config_default/custom_policy_file $ipf_file
fi
refresh_ipf=true
else
# change policy to "none", no need to clear custom_policy_file
set_smf_prop $IPFILTER_FMRI firewall_config_default/policy \
"none"
# IPFilter has to be refreshed to make the changes effective.
# Don't set $refresh_ipf as it keeps IPFilter online rather
# than disabled. Refresh after IPFilter is disabled below.
fi
if [ -n "$ipf6_file" ]; then
set_smf_prop $IPFILTER_FMRI config/ipf6_config_file $ipf6_file
refresh_ipf=true
fi
if [ -n "$ipnat_file" ]; then
set_smf_prop $IPFILTER_FMRI config/ipnat_config_file $ipnat_file
refresh_ipf=true
fi
if [ -n "$ippool_file" ]; then
set_smf_prop $IPFILTER_FMRI config/ippool_config_file \
$ippool_file
refresh_ipf=true
fi
if [ "$refresh_ipf" = "true" ]; then
refresh_svc $IPFILTER_FMRI
start_svc $IPFILTER_FMRI
else
stop_svc $IPFILTER_FMRI
refresh_svc $IPFILTER_FMRI
fi
return 0
}
#
# update_nfs_file <new nfsv4 domain>
#
update_nfs_file () {
domain=$1
file=/etc/default/nfs
#
# For non-commented-out lines that set NFSMAPID_DOMAIN:
# if not previously added by nwam, comment out with a note
# if previously added by nwam, remove
# For commented-out lines that set NFSMAPID_DOMAIN:
# if not commented out by NWAM, leave as-is
# if commented out by NWAM, remove
# All other lines: leave as-is
#
$NAWK ' \
$0 ~ /^NFSMAPID_DOMAIN=/ {
if (index($0, "# Added by NWAM") == 0)
printf("#%s # Commented out by NWAM\n", $0);
}
$0 ~ /^#NFSMAPID_DOMAIN=/ {
if ($0 !~ /"# Commented out by NWAM"/)
printf("%s\n", $0);
}
$1 !~ /NFSMAPID_DOMAIN=/ {
printf("%s\n", $0);
}' $file >$file.$$
# Now add the desired value
echo "NFSMAPID_DOMAIN=$domain # Added by NWAM" >> $file.$$
# Finally, copy our working version to the real thing
$MV -f $file.$$ $file
}
#
# do_nfsv4 <location>
#
# Updates NFSv4 domain for location
#
# Returns 0 on success, 1 on failure
#
do_nfsv4 () {
loc=$1
nfsv4domain=`nwam_get_loc_prop $loc nfsv4-domain`
if [ $? -eq 0 ]; then
update_nfs_file $nfsv4domain
start_svc $MAPID_FMRI
else
stop_svc $MAPID_FMRI
fi
return 0
}
#
# activate_loc <location>
#
# Activates the given location
#
# Returns 0 on success, 1 on failure
#
activate_loc () {
loc=$1
echo activating $loc location
#
# if we fail to complete any part of the config,
# stop activation work and report failure.
#
do_sec $loc && do_ns $loc && do_nfsv4 $loc && return 0
return 1
}
#
# Script entry point
#
# Arguments to net-loc are
# method ('start' or 'refresh')
#
# If nwam is not enabled, do nothing and return OK.
#
service_is_enabled $NWAM_FMRI || exit $SMF_EXIT_OK
#
# In a shared-IP zone we need this service to be up, but all of the work
# it tries to do is irrelevant (and will actually lead to the service
# failing if we try to do it), so just bail out.
# In the global zone and exclusive-IP zones we proceed.
#
smf_configure_ip || exit $SMF_EXIT_OK
case "$1" in
'start')
#
# We need to create the default (NoNet and Automatic)
# locations, if they don't already exist. So: first check
# for the existence of each, and then run the appropriate
# nwamcfg script(s) as needed. Restart nwamd if a location is
# created, as it needs to read it in.
#
LOC_CREATED="false"
$NWAMCFG list loc Automatic >/dev/null 2>&1
if [ $? -eq 1 ]; then
$NWAMCFG -f /etc/nwam/loc/create_loc_auto
LOC_CREATED="true"
fi
$NWAMCFG list loc NoNet >/dev/null 2>&1
if [ $? -eq 1 ]; then
NONETPATH=/etc/nwam/loc/NoNet
NONETFILES="ipf.conf ipf6.conf"
for file in $NONETFILES; do
copy_default $NONETPATH $file
done
$NWAMCFG -f /etc/nwam/loc/create_loc_nonet
LOC_CREATED="true"
fi
if [ "$LOC_CREATED" = "true" ]; then
refresh_svc $NWAM_FMRI
fi
# location selection/activation happens below
;;
'refresh')
# location selection/activation happens below
;;
*)
echo "Usage: $0 start|refresh"
exit 1
;;
esac
#
# If the Legacy location doesn't exist and the file to create the Legacy
# location exists, create the Legacy location. Make a copy of it as the user's
# intentions before upgrade. Then activate the User location if nis is
# involved. Because NIS affects more parts of the system (e.g. automounts) we
# are not willing to make NIS part of the Automatic location (i.e. enable it
# automatically based on external input) as we do with DHCP-driven DNS.
#
activate_user_loc=0
$NWAMCFG list loc Legacy >/dev/null 2>&1
if [ $? -eq 1 -a -f "$SCRIPT_PATH/create_loc_legacy" ]; then
#
# We built the script in and pointing to /etc/svc/volatile because we
# may not have a writable filesystem in net-nwam. So here we move the
# components and rewrite the script to point at the writable filesystem.
#
$CP -r $SCRIPT_PATH/Legacy $LEGACY_LOC_PATH
$MV $SCRIPT_PATH/create_loc_legacy $SCRIPT_PATH/vcreate_loc_legacy
$SED -e's,/etc/svc/volatile/nwam/Legacy,/etc/nwam/loc/Legacy,' \
$SCRIPT_PATH/vcreate_loc_legacy >$SCRIPT_PATH/create_loc_legacy
$NWAMCFG -f $SCRIPT_PATH/create_loc_legacy
loc_ver=`$SVCPROP -c -p location_upgrade/version $LOCATION_FMRI \
2>/dev/null`
if [ $? -eq 1 ]; then
#
# We are rewriting configuration variables from the Legacy
# location to the User location. Use variable ULP to keep REs
# within a line.
#
ULP=$USER_LOC_PATH
$SED -e's,Legacy,User,' \
-e's,activation-mode=system,activation-mode=manual,' \
-e"s,\(ipfilter-config-file=\).*/\(.*\),\1$ULP/\2," \
-e"s,\(ipfilter-v6-config-file=\).*/\(.*\),\1$ULP/\2," \
-e"s,\(ipnat-config-file=\).*/\(.*\),\1$ULP/\2," \
-e"s,\(ippool-config-file=\).*/\(.*\),\1$ULP/\2," \
-e"s,\(ike-config-file=\).*/\(.*\),\1$ULP/\2," \
-e"s,\(ipsecpolicy-config-file=\).*/\(.*\),\1$ULP/\2," \
$SCRIPT_PATH/create_loc_legacy | \
$SED -e's,/etc/nwam/loc/User/none,/none,' \
-e's,/etc/nwam/loc/User/allow,/allow,' \
-e's,/etc/nwam/loc/User/deny,/deny,' \
>$SCRIPT_PATH/create_loc_user
#
# We are creating the User location here. The User location
# is an appromixation of the machine configuration when the
# user change or upgraded to this version of NWAM. First
# we make sure there isn't an existing User location or any
# existing User location data. We then copy all the data
# from the Legacy location and create a location pointing at
# that data. Lastly we create a version property to note
# that we have done this.
#
$NWAMCFG destroy loc User 2>/dev/null
$RM -rf $USER_LOC_PATH
$CP -r $LEGACY_LOC_PATH $USER_LOC_PATH
$RM -f $USER_LOC_PATH/resolv.conf
$NWAMCFG -f $SCRIPT_PATH/create_loc_user
# The User location is activated if 'nis' is in a non comment
# line of nsswitch.conf.
$GREP -v "^#" $USER_LOC_PATH/nsswitch.conf |\
$SED -e 's/[^:]*://' | $GREP nis >/dev/null 2>&1
if [ $? -eq 0 ]; then
activate_user_loc=1
fi
$SVCCFG -s $SMF_FMRI addpg location_upgrade application \
2>/dev/null
$SVCCFG -s $SMF_FMRI setprop location_upgrade/version = \
astring: "1"
fi
fi
#
# Activate a location. If we've just finished upgrading, and
# the User location should be activated, do that (and use nwamadm
# to do so, so the enabled property gets set and nwamd knows this
# selection has been made). Otherwise, if our location/selected
# property has a value, we activate that location; else we activate
# the NoNet location as a default value.
#
if [ $activate_user_loc -eq 1 ]; then
$NWAMADM enable -p loc User
else
sel_loc=`$SVCPROP -c -p location/selected $SMF_FMRI 2>/dev/null`
if [ $? -eq 1 ]; then
# location hasn't been selected; default to NoNet
activate_loc NoNet
else
#
# If the selected location does not exist, or if we fail
# to activate it completely, we fall back to the NoNet
# location. Also poke nwamd, so it will check conditions
# for a better choice.
#
$NWAMCFG list loc $sel_loc >/dev/null 2>&1
if [ $? -eq 1 ]; then
echo "location '$sel_loc' doesn't exist"
activate_loc NoNet
refresh_svc $NWAM_FMRI
else
# activate selected location
if ! activate_loc $sel_loc; then
echo "failed to activate '$sel_loc'"
activate_loc NoNet
refresh_svc $NWAM_FMRI
fi
fi
fi
fi
exit $SMF_EXIT_OK