Thu, 04 Oct 2012 20:30:05 +0200
Correct out of date build configuration, porting to Solaris 11 network
link infrastructure and new libpcap logic. This additionally allows for
device drivers in subdirectories of /dev. Correct packaged nmap
personalities and signatures to work out of the box. Finally, hack
arpd logic to properly close sockets and quit on TERM by repeating
signaling in the run command script. Sadly, all this fails to correct
the run time behaviour of honeyd which fails to bind to the IP layer.
1 ##
2 ## @l_prefix@/etc/rc.func -- Run-Command Helper Functions
3 ## Copyright (c) 2000-2012 OpenPKG GmbH <http://openpkg.com/>
4 ##
5 ## This software is property of the OpenPKG GmbH, DE MUC HRB 160208.
6 ## All rights reserved. Licenses which grant limited permission to use,
7 ## copy, modify and distribute this software are available from the
8 ## OpenPKG GmbH.
9 ##
10 ## THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED
11 ## WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
12 ## MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
13 ## IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
14 ## CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
15 ## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
16 ## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
17 ## USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
18 ## ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
19 ## OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
20 ## OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
21 ## SUCH DAMAGE.
22 ##
24 ##
25 ## NOTICE: This script is a collection of reusable shell functions
26 ## running under GNU Bash during the execution of OpenPKG run-command
27 ## sections.
28 ##
30 #
31 # rcMsg (display message)
32 #
33 # Usage: rcMsg [-e] [-w] <message>
34 # Example: rcMsg -e "invalid command line"
35 # Description: display a regular/warning/error message.
36 #
37 rcMsg () {
38 local prefix="rc:"
39 while [ $# -gt 0 ]; do
40 case $1 in
41 -e ) prefix="${prefix}ERROR:"; shift ;;
42 -w ) prefix="${prefix}WARNING:"; shift ;;
43 * ) break ;;
44 esac
45 done
46 echo "${prefix} $*"
47 return 0
48 }
50 #
51 # rcPath (manipulate colon-separated PATH-style variable)
52 #
53 # Usage: rcPath [-a] [-r] [-p] [-e] <var> <dir> [<dir> ...]
54 # Example: rcPath -a -e PATH /bin /sbin /usr/bin /usr/sbin /usr/ccs/bin
55 # Description: removes (-r) or adds (-a) by appending or prepending
56 # (-p) one or more directories <dir> (optionally have
57 # to be existing if -e is given) to a colon-separated
58 # PATH-style variable <var>. In case a directory already
59 # exists, it is first removed.
60 #
61 rcPath () {
62 local mode=""
63 local prepend=0
64 local exists=0
65 while [ $# -gt 0 ]; do
66 case $1 in
67 -a ) mode="add"; shift ;;
68 -r ) mode="remove"; shift ;;
69 -p ) prepend=1; shift ;;
70 -e ) exists=1; shift ;;
71 * ) break ;;
72 esac
73 done
74 local var="$1"
75 shift
76 if [ ".${mode}" = .add ]; then
77 local edit_del=""
78 local edit_add=""
79 local dir
80 for dir in "$@"; do
81 if [ ".${exists}" = .1 ] && [ ! -d "${dir}" ]; then
82 continue
83 fi
84 edit_del="${edit_del} -e 's;^${dir}\$;;' -e 's;^${dir}:;;'"
85 edit_del="${edit_del} -e 's;:${dir}:;:;' -e 's;:${dir}\$;;'"
86 if [ ".${prepend}" = .0 ]; then
87 edit_add="${edit_add} -e 's;\$;:${dir};'"
88 else
89 edit_add="-e 's;^;${dir}:;' ${edit_add}"
90 fi
91 done
92 if [ ".${edit_del}${edit_add}" != . ]; then
93 eval "${var}=\`echo \"\$${var}\" | sed ${edit_del} ${edit_add}\`"
94 fi
95 return 0
96 elif [ ".${mode}" = .remove ]; then
97 local edit=""
98 local dir
99 for dir in "$@"; do
100 edit="${edit} -e 's;^${dir}\$;;' -e 's;^${dir}:;;'"
101 edit="${edit} -e 's;:${dir}:;:;' -e 's;:${dir}\$;;'"
102 done
103 eval "${var}=\`echo \"\$${var}\" | sed ${edit}\`"
104 return 0
105 else
106 rcMsg -e "rcPath: neither add (-a) nor remove (-r) operation specified"
107 return 1
108 fi
109 }
111 #
112 # rcTmp (temporary file handling)
113 #
114 # Usage: rcTmp [-i] [-f [-n <name>]] [-k]
115 # Example: rcTmp -i; tmpfile=`rcTmp -f -n tmp`; ...; rcTmp -k
116 # Description: ???
117 #
118 rcTmp () {
119 local mode=""
120 local name=""
121 while [ $# -gt 0 ]; do
122 case $1 in
123 -i ) mode="init"; shift ;;
124 -f ) mode="file"; shift ;;
125 -k ) mode="kill"; shift ;;
126 -n ) name="$2"; shift; shift ;;
127 * ) break ;;
128 esac
129 done
130 if [ ".${mode}" = .init ]; then
131 if [ ".${RC_TMPDIR}" = . ]; then
132 local i=0
133 while [ ${i} -lt 10 ]; do
134 RC_TMPDIR="@l_prefix@/RPM/TMP/rc-`date '+%Y%m%d%H%M%S'`-$$"
135 (umask 022; mkdir ${RC_TMPDIR} >/dev/null 2>&1) && break
136 i=$((${i} + 1))
137 sleep 1
138 done
139 if [ ${i} -eq 10 ]; then
140 rcMsg -e "rcTmp: unable to establish secure temporary directory" 1>&2
141 return 1
142 fi
143 declare -r RC_TMPDIR
144 fi
145 return 0
146 elif [ ".${mode}" = .file ]; then
147 echo "${RC_TMPDIR}/${name:-tmp}"
148 return 0
149 elif [ ".${mode}" = .kill ]; then
150 if [ ".${RC_TMPDIR}" = . ]; then
151 rcMsg -e "rcTmp: no secure temporary directory known"
152 return 1
153 else
154 rm -rf ${RC_TMPDIR}
155 return 0
156 fi
157 else
158 rcMsg -e "rcTmp: neither init (-i), file (-f) nor kill (-k) operation specified"
159 return 1
160 fi
161 }
163 #
164 # rcService (check for service status enable/active/usable)
165 #
166 # Usage: rcService <pkg> <service> <val>
167 # Example: if rcService openssh enable yes; then ...
168 # Description: check <service> of package <pkg> against value <val>.
169 # <service> has to be one of "enable", "active" or "usable".
170 # <val> has to be either "no", "yes", or "unknown".
171 #
172 rcService () {
173 local pkg="`echo ${1} | sed -e 's;-;_;g'`"
174 local var="${pkg}_${2}"
175 local chk="${3}"
176 eval "local val=\$${var}"
177 if [ ".${val}" = . ]; then
178 eval `@l_prefix@/bin/openpkg rc 2>/dev/null --silent ${1} status || true`
179 eval "local val=\$${var}"
180 fi
181 if [ ".${val}" = ".${chk}" ]; then
182 return 0
183 else
184 return 1
185 fi
186 }
188 #
189 # rcVarIsYes (check variable for positive value)
190 #
191 # Usage: rcVarIsYes <var>
192 # Example: if rcVarIsYes foo; then ...
193 # Description: check whether a variable <var> contains a positive
194 # value, i.e., the values "yes", "true", "on" or "1" in
195 # arbitrary lower or upper case.
196 #
197 rcVarIsYes () {
198 local var="${1}"
199 eval "local val=\"\$${var}\""
200 case "${val}" in
201 [Yy][Ee][Ss] | [Tt][Rr][Uu][Ee] | [Oo][Nn] | 1 )
202 return 0
203 ;;
204 * )
205 return 1
206 ;;
207 esac
208 }