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 #
23 # Copyright 2009 Sun Microsystems, Inc. All rights reserved.
24 # Use is subject to license terms.
25 #
26 #
27
28 . /lib/svc/share/smf_include.sh
29 . /lib/svc/share/ipf_include.sh
30
31 # SERVICE = parent service name
32 SERVICE=`echo $SMF_FMRI | /usr/bin/cut -f1,2 -d":"`
33
34 case "$1" in
35 'start')
36
37 isopts=`/usr/sbin/svccfg <<-EOF
38 select $SMF_FMRI
39 listpg cmd_opts
40
41 EOF`
42
43 if [ "$isopts" ] ; then
44
45 #called by /usr/lib/lpsched; use cmd_opts properties only
46
47 num_notifiers=`/bin/svcprop -p cmd_opts/num_notifiers $SMF_FMRI`
48
49 if [ "$num_notifiers" != "" ] ; then
50 OPTS="$OPTS -n $num_notifiers"
51 fi
52
53 num_filters=`/bin/svcprop -p cmd_opts/num_filters $SMF_FMRI`
54
55 if [ "$num_filters" != "" ] ; then
56 OPTS="$OPTS -f $num_filters"
57 fi
58
59 fd_limit=`/bin/svcprop -p cmd_opts/fd_limit $SMF_FMRI`
60
61 if [ "$fd_limit" != "" ] ; then
62 OPTS="$OPTS -p $fd_limit"
63 fi
64
65 reserved_fds=`/bin/svcprop -p cmd_opts/reserved_fds $SMF_FMRI`
66
67 if [ "$reserved_fds" != "" ] ; then
68 OPTS="$OPTS -r $reserved_fds"
69 fi
70
71 # clear out cmd_opts property group
72
73 svccfg <<-EOF
74 select $SMF_FMRI
75 delpg cmd_opts
76
77 EOF
78
79 else
80
81 # We are here through enable; use lpsched properties
82 # Check for saved properties
83
84 num_notifiers=`/bin/svcprop -p lpsched/num_notifiers $SERVICE`
85 if [ "$num_notifiers" != "" ] && [ "$num_notifiers" != "0" ] ; then
86 OPTS="$OPTS -n $num_notifiers"
87 fi
88
89 num_filters=`/bin/svcprop -p lpsched/num_filters $SERVICE`
90 if [ "$num_filters" != "" ] && [ "$num_filters" != "0" ] ; then
91 OPTS="$OPTS -f $num_filters"
92 fi
93
94 fd_limit=`/bin/svcprop -p lpsched/fd_limit $SERVICE`
95 if [ "$fd_limit" != "" ] && [ "$fd_limit" != "0" ]; then
96 OPTS="$OPTS -p $fd_limit"
97 fi
98
99 reserved_fds=`/bin/svcprop -p lpsched/reserved_fds $SERVICE`
100 if [ "$reserved_fds" != "" ] && [ "$reserved_fds" != "0" ] ; then
101 OPTS="$OPTS -r $reserved_fds"
102 fi
103 fi
104
105 # set temporary or permanent properties from OPTS
106
107 [ -f /usr/lib/lp/local/lpsched ] || exit $SMF_EXIT_ERR_CONFIG
108
109 /usr/lib/lp/local/lpsched ${OPTS}
110
111 ;;
112
113 'stop')
114 [ -f /usr/lib/lp/local/lpshut ] || exit $SMF_EXIT_ERR_CONFIG
115
116 /usr/lib/lp/local/lpshut
117 ;;
118
119 'ipfilter')
120 FMRI=$2
121 IPP_FMRI="svc:/application/print/ipp-listener:default"
122 RFC1179_FMRI="svc:/application/print/rfc1179:default"
123 IPP_CONF=/etc/apache2/2.2/httpd-standalone-ipp.conf
124 ip="any"
125
126 policy=`get_policy $FMRI`
127
128 file=`fmri_to_file $RFC1179_FMRI $IPF_SUFFIX`
129 echo "# $RFC1179_FMRI" >$file
130 service_is_enabled ${RFC1179_FMRI}
131 if [ $? -eq 0 ]; then
132 rfc_name=`svcprop -p inetd/name ${RFC1179_FMRI} 2>/dev/null`
133 rfc_proto=`svcprop -p inetd/proto ${RFC1179_FMRI} 2>/dev/null | \
134 sed 's/6/ /'`
135 rfc_port=`$SERVINFO -p -t -s $rfc_name`
136 generate_rules $FMRI $policy $rfc_proto $ip $rfc_port $file
137 fi
138
139 file=`fmri_to_file $IPP_FMRI $IPF_SUFFIX`
140 echo "# $IPP_FMRI" >$file
141 service_is_enabled ${IPP_FMRI}
142 if [ $? -eq 0 ]; then
143 #
144 # If Listen directives are used, it's possibie to listen on
145 # more than one ports. Process the Port directives only when Listen
146 # directives don't exist.
147 #
148 ipp_ports=`grep '^[ \t]*[^# ]*Listen' ${IPP_CONF} | awk '{print $2}'`
149
150 if [ -z "$ipp_ports" ]; then
151 ipp_ports=`grep '^[ \t]*[^# ]*Port' ${IPP_CONF} | \
152 awk '{print $2}' | tail -1`
153 fi
154
155 for port in $ipp_ports; do
156 generate_rules $FMRI $policy "tcp" $ip $port $file
157 done
158 fi
159
160 ;;
161
162 *)
163 echo "Usage: $0 { start | stop }"
164 exit 1
165 ;;
166 esac
167 exit $SMF_EXIT_OK