svc-pkg-depot revision 1902
661N/A# The contents of this file are subject to the terms of the 661N/A# Common Development and Distribution License (the "License"). 661N/A# You may not use this file except in compliance with the License. 661N/A# See the License for the specific language governing permissions 661N/A# and limitations under the License. 661N/A# When distributing Covered Code, include this CDDL HEADER in each 661N/A# If applicable, add the following below this CDDL HEADER, with the 661N/A# fields enclosed by brackets "[]" replaced with your own identifying 661N/A# information: Portions Copyright [yyyy] [name of copyright owner] 1902N/A# Copyright (c) 2009, 2010 Oracle and/or its affiliates. All rights reserved. 661N/A# Load SMF constants and functions 812N/A echo "this script can only be invoked by smf(5)" 661N/A # Handles depot startup 661N/A # boolean_props are properties which are communicated to the depot 661N/A # via a flag being present or absent on the command line. 661N/A # short_option_props are properties which are communicated to the depot 661N/A # via a single character flag which takes an argument. 661N/A # short_option_props are properties which are communicated to the depot 661N/A # via a long option flag which takes an argument. 1902N/A log_errors proxy_base sort_file_max_size ssl_cert_file \ 1902N/A ssl_dialog ssl_key_file writable_root" 1902N/A "file-root" "log-access" "log-errors" "proxy-base" \
1902N/A "sort-file-max-size" "ssl-cert-file" "ssl-dialog" "ssl-key-file" \
1518N/A # retrieve the pkg_root property. If the variable is left empty 1518N/A # make sure pkg_root ends with a / 1518N/A # adjust the PYTHONPATH to point to the current environment 1527N/A # we need to make sure to adjust the PYTHONPATH accordingly 1527N/A # to a Python 2.4 or 2.6 environment 661N/A # Go through each property in boolean_props and, if its value is set 661N/A # to true in SMF, add the appropriate command line flag to the string. 849N/A echo "service property pkg/$b not defined for" \
849N/A # If the property is set to true, add the flag. 661N/A # Go through each property in short_option_props and, if its value is 858N/A # set to something other than "", add the appropriate command line 812N/A # flag and argument to the string. 849N/A echo "service property pkg/$o not defined for" \
849N/A # If the SMF property is set to something other than 'none', add 849N/A # the flag and its argument to the command. 661N/A # Go through each property in long_option_props and, if its value is 858N/A # set to something other than "", add the appropriate command line 812N/A # flag and argument to the string. 849N/A echo "service property pkg/$o not defined for" \
1518N/A # check if content_root is a relative or absolute path, if 1518N/A # relative append to pkg_root 1518N/A if [[ $o ==
'content_root' ]];
then 1518N/A # pkg_root has been checked to end with a slash 849N/A # If the SMF property is set to something other than 'none', add 849N/A # the flag and its argument to the command. 849N/A if [[ $o ==
'ssl_dialog' &&
$val ==
'smf' ]];
then 812N/A # Determine if fork and exec are needed. 812N/A # If we don't need them, drop fork and exec. 849N/A echo "Dropping fork(2) and exec(2) privileges." 719N/A # If this process has net_privaddr, then we pass it along. 719N/A # If not, we ensure that we don't specify it, since that will 719N/A # cause ppriv to throw an error. 849N/A echo "Dropping net_privaddr privilege." 719N/A # We build up the privileges available starting with "basic". 719N/A # This provides some protection even when the depot runs as root. 661N/A # Echo the command so that the log contains the command used to start 775N/A # Strategy: First, try shutting down depot using polite kill. Use up 775N/A # as much as possible of the allotted timeout period waiting for polite 775N/A # kill to take effect. As time runs out, try a more aggressive kill. 775N/A # Note that we're working around an oddity in smf_kill_contract: it 775N/A # waits in 5 second chunks and can overshoot the specified timeout 775N/A # by as many as 4 seconds. Example: a specified wait of 6 will result 775N/A # in a wait of 10 seconds in reality. Since we may potentially do a 775N/A # first kill and then a second, we must ensure that at least 8 seconds 775N/A # of slop is left in reserve. To be paranoid, we go for 10. 849N/A # '2' indicates timeout with non-empty contract. 849N/A echo "Gentle contract kill timed out after" 849N/A # Again, despite the specified timeout, this will 849N/A # take a minimum of 5 seconds to complete. 849N/A # If the timeout is too short, we just try once, politely. 775N/A echo "Usage: $0 { start | stop }"