net-loc revision 03e9aa6d0661fbdf89669b14e801767d7e504fe8
0N/A# The contents of this file are subject to the terms of the 0N/A# Common Development and Distribution License (the "License"). 2362N/A# You may not use this file except in compliance with the License. 0N/A# See the License for the specific language governing permissions 0N/A# and limitations under the License. 0N/A# When distributing Covered Code, include this CDDL HEADER in each 0N/A# If applicable, add the following below this CDDL HEADER, with the 0N/A# fields enclosed by brackets "[]" replaced with your own identifying 0N/A# information: Portions Copyright [yyyy] [name of copyright owner] 2362N/A# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. # echoes DHCP controlled interfaces separated by commas # Don't parse the output of ifconfig(1M) because interfaces that haven't # acquired a DHCP lease also have the DHCP flag set. # 1. parse netstat(1M) output for v4 interfaces in BOUND # 2. make a space-separated list of interface names $2 ~ /BOUND/ { printf "%s ", $1 } $2 ~ /INFORMATION/ { printf "%s ", $1 }' # echoes the value received through each interface controlled by DHCP; # multiple values are echoed as a space-separated list # 1 => property is not set # Get all interfaces with DHCP control, IFS is " " if [ "$info" = "" ]; then # set_smf_prop <fmri> <property name> <property value> # Starts the service. If the service is already enabled, restarts it. If # it is not enabled, temporarily enables it. # Temporarily disables the service. # copy_default <dir> <file> # Copies <dir>/<file>.dfl to <dir>/<file> # Returns 0 on success, 1 on failure # Write out to temporary file first echo "missing 'dns-nameservice-configsrc' property for '$loc'" echo "DNS nameserver not set for '$loc'" # No DNS search info for IPv4 echo "Unrecognized DNS configsrc ${configsrc}; ignoring" '{ for (i = 1; i <= NF; i++) \ print "domain ", $i }' >> $file.$$ for (i = 1; i <= NF; i++) printf(" %s", $i); \ printf("\n") }' >> $file.$$ '{ for (i = 1; i <= NF; i++) \ print "nameserver ", $i }' >> $file.$$ # Finally, copy our working version to the real thing # Returns 0 on success, 1 on failure echo "missing 'nis-nameservice-configsrc' property for '$loc'" # user-specified default-domain always wins echo "'domainname' not set for '$loc'" # Use only the first name echo "Unrecognized NIS configsrc ${configsrc}; ignoring" '{ for (i = 1; i <= NF; i++) print $i }' \ # Installs LDAP information using ldapclient(1M) for location # Returns 0 on success, 1 on failure echo "missing 'ldap-nameservice-configsrc' property for '$loc'" echo "LDAP configuration could not be set "\ echo "Invalid LDAP configsrc ${configsrc}; ignoring" # Use ldapclient(1M) to initialize LDAP client settings. # Installs different nameservices for location # Returns 0 on success, 1 on failure # Disable nameservices temporarily while we reconfigure. Copy # and set the domainname(1M). echo "missing 'nameservices' property for location '$loc'" echo "missing 'nameservices-config-file' property for '$loc'" # no additional setup needed for files nameservice echo "Unrecognized nameservices value ${ns}; ignoring" # 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. # If config properties are set, update the SMF property and refresh the # service. If config properties are not set, delete the SMF property and # Returns 0 on success, 1 on failure # custom policy with policy file # change policy to "none", no need to clear custom_policy_file # 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. # update_nfs_file <new nfsv4 domain> # 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 $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"/) $1 !~ /NFSMAPID_DOMAIN=/ { # Now add the desired value # Finally, copy our working version to the real thing # Updates NFSv4 domain for location # Returns 0 on success, 1 on failure # activate_loc <location> # Activates the given location # Returns 0 on success, 1 on failure # if we fail to complete any part of the config, # stop activation work and report failure. # Arguments to net-loc are # method ('start' or 'refresh') # If nwam is not enabled, do nothing and return 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. # 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. echo "Usage: $0 start|refresh" # 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. # 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. # We are rewriting configuration variables from the Legacy # location to the User location. Use variable ULP to keep REs $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," \
# 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. # The User location is activated if 'nis' is in a non comment # 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 # property has a value, we activate that location; else we activate # the NoNet location as a default value. # location hasn't been selected; default to NoNet # 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 echo "location '$sel_loc' doesn't exist" # activate selected location