Magellan Linux

Annotation of /mcore-src/trunk/mcore-tools/src/include/common.global.class.in

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2817 - (hide annotations) (download)
Wed Apr 12 13:21:50 2017 UTC (7 years, 1 month ago) by niro
File size: 7806 byte(s)
-fixed iface_for_remote_addr(), honor routes with and without a gateway
1 niro 2140 # $Id$
2    
3     # message only echo | disabled in quiet mode
4     mecho()
5     {
6     local COLCYAN="\033[1;36m"
7     local COLDEFAULT="\033[0m"
8     local opts
9     local webcrlf
10    
11     # print nothing if quiet mode was requested
12 niro 2479 [[ ${QUIET} = 1 ]] && return
13 niro 2140
14 niro 2479 if [[ ${NOCOLORS} = 1 ]]
15 niro 2140 then
16     COLCYAN=""
17     COLDEFAULT=""
18     fi
19    
20 niro 2479 [[ ${WEBCRLF} = 1 ]] && webcrlf="<br>"
21 niro 2140
22     # respect -n
23     case $1 in
24     -n) shift; opts="n" ;;
25     esac
26    
27     echo -e${opts} "${COLCYAN}$@${COLDEFAULT}${webcrlf}"
28     }
29    
30     # prints error messages | enabled even in quiet mode
31     eecho()
32     {
33     local COLRED="\033[1;31m"
34     local COLDEFAULT="\033[0m"
35     local opts
36     local webcrlf
37    
38 niro 2479 if [[ ${NOCOLORS} = 1 ]]
39 niro 2140 then
40     COLRED=""
41     COLDEFAULT=""
42     fi
43    
44 niro 2479 [[ ${WEBCRLF} = 1 ]] && webcrlf="<br>"
45 niro 2140
46     # respect -n
47     case $1 in
48     -n) shift; opts="n" ;;
49     esac
50    
51 niro 2637 echo -e${opts} "${COLRED}$@${COLDEFAULT}${webcrlf}"
52 niro 2140 }
53    
54     # prints return values of get | enabled even in quiet mode
55     rvecho()
56     {
57     local COLPURPLE="\033[1;35m"
58     local COLDEFAULT="\033[0m"
59     local opts
60     local webcrlf
61    
62 niro 2479 if [[ ${NOCOLORS} = 1 ]]
63 niro 2140 then
64     COLPURPLE=""
65     COLDEFAULT=""
66     fi
67    
68 niro 2479 [[ ${WEBCRLF} = 1 ]] && webcrlf="<br>"
69 niro 2140
70     # respect -n
71     case $1 in
72     -n) shift; opts="n" ;;
73     esac
74    
75     echo -e${opts} "${COLPURPLE}$@${COLDEFAULT}${webcrlf}"
76     }
77    
78     # prints debug messages if requested | enabled even in quiet mode
79     decho()
80     {
81     # print nothing if debug mode was *not* requested
82     [[ ${DEBUG} != 1 ]] && return
83    
84     eecho "DEBUG: ${@}"
85     }
86    
87 niro 2257 # source a file with debug information
88     include()
89     {
90     local retval
91    
92     if [ -f $@ ]
93     then
94     decho "including '$@'"
95     source $@
96     retval=$?
97     else
98     decho "include: '$@' not found"
99     retval=1
100     fi
101    
102     return ${retval}
103     }
104    
105 niro 2140 # adds a line to a configuration file defined by the $CONFIG variable
106     # $CONFIG="/etc/conf.d/mcore" addconfig 'LIBDIR="/usr/lib"'
107     addconfig()
108     {
109     local opts
110    
111     if [[ -z ${CONFIG} ]]
112     then
113     eecho "You must define \$CONFIG varibale first!"
114     return 1
115     fi
116    
117     if [[ ! -d $(dirname ${CONFIG}) ]]
118     then
119     install -d $(dirname ${CONFIG})
120     fi
121    
122     # check for opts
123     case $1 in
124     -n) shift; opts=" -n" ;;
125     -e) shift; opts=" -e" ;;
126     esac
127    
128     echo ${opts} "$@" >> ${CONFIG}
129     }
130    
131     # creates or clears a configuration file defined by the $CONFIG variable
132     # CONFIG="/etc/conf.d/mcore" clearconfig
133     clearconfig()
134     {
135     if [[ -z ${CONFIG} ]]
136     then
137     eecho "You must define \$CONFIG varibale first!"
138     return 1
139     fi
140    
141     if [[ ! -d $(dirname ${CONFIG}) ]]
142     then
143     install -d $(dirname ${CONFIG})
144     fi
145     : > ${CONFIG}
146     }
147    
148     # root is not allowed to run progs in a user session with newer xorg-servers
149     # this wrapper runs a command in the xsession of the unpriv_user
150     x11runas()
151     {
152 niro 2632 if [[ -n $(pidof X) ]] || [[ -n $(pidof Xorg) ]] || [[ -n $(pidof Xorg.bin) ]]
153 niro 2140 then
154 niro 2351 su - "${MCORE_UNPRIV_USER}" -c "DISPLAY=${MCORE_XORG_DISPLAY} $@"
155 niro 2633 else
156     decho "x11runas(): No running X, Xorg or Xorg.bin process found"
157 niro 2140 fi
158     }
159    
160     # no_duplicate $list $item
161     no_duplicate()
162     {
163     local i
164     local list="$1"
165     local item="$2"
166    
167     for i in ${list}
168     do
169     [[ ${i} = ${item} ]] && return 1
170     done
171    
172     return 0
173     }
174    
175     # checks if given path is empty
176     path_not_empty()
177     {
178     local path="$1"
179     [[ -z ${path} ]] && eecho "path_not_empty(): no path given!" && return 1
180    
181     # return ERR if path does not exist
182     [[ ! -d ${path} ]] && return 1
183     # return ERR if path empty
184     [[ -z $(find "${path}" -mindepth 1 -maxdepth 1) ]] && return 1
185    
186     # every thing went ok, directory not empty
187     return 0
188     }
189    
190     # list all files in a given directory
191     list_files_in_directory()
192     {
193     local i
194     local retval
195     local path
196     local opts
197     local type
198    
199     # basic getops
200     for i in $*
201     do
202     case $1 in
203     -mindepth) shift; opts+=" -mindepth $1" ;;
204     -maxdepth) shift; opts+=" -maxdepth $1" ;;
205     -type) shift; type="$1" ;;
206     -name) shift; opts+=" -name $1" ;;
207     '') continue ;;
208     *) path="$1" ;;
209     esac
210     shift
211     done
212    
213     if [[ -z ${path} ]]
214     then
215     eecho "No path given."
216     return 1
217     fi
218    
219     if [[ ! -d ${path} ]]
220     then
221     eecho "Directory '${path}' does not exist."
222     return 1
223     fi
224    
225     # default to files
226     [[ -z ${type} ]] && type=f
227    
228     for i in $(find ${path} ${opts} -type ${type} -printf '%f\n' | sort)
229     do
230     if [[ -z ${retval} ]]
231     then
232     retval="${i}"
233     else
234     retval+=" ${i}"
235     fi
236     done
237    
238     rvecho "${retval}"
239     }
240    
241     # runs a command in the chroot of $MROOT
242     system_chroot()
243     {
244     local cmd="$@"
245     if [[ -z ${MROOT} ]]
246     then
247     echo "system_chroot(): \$MROOT was not set, doing nothing!"
248     return 1
249     fi
250     if [ ! -d ${MROOT} ]
251     then
252     eecho "system_chroot(): MROOT='${MROOT}' does not exist."
253     return 1
254     fi
255    
256     chroot ${MROOT} ${cmd}
257     }
258 niro 2407
259     # gets interface used to reach given ip
260     iface_for_remote_addr()
261     {
262     set -- $(ip -o route get to $1)
263 niro 2817 # honor routes with and without a gateway
264     case $@ in
265     *via*) echo $5 ;;
266     *) echo $3 ;;
267     esac
268 niro 2407 }
269    
270 niro 2809 validate_ip_addr()
271     {
272     local ip="$1"
273     local retval=1
274     local _ifs
275    
276     if [[ ${ip} =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]
277     then
278     _ifs=$IFS
279     IFS='.'
280     # convert to an array
281     ip=($ip)
282     IFS=$_ifs
283    
284     if [[ ${ip[0]} -le 255 ]] &&
285     [[ ${ip[1]} -le 255 ]] &&
286     [[ ${ip[2]} -le 255 ]] &&
287     [[ ${ip[3]} -le 255 ]]
288     then
289     retval=$?
290     fi
291     fi
292    
293     return ${retval}
294     }
295    
296 niro 2407 # get ip from dns name
297     dns_to_ip()
298     {
299 niro 2809 if ! validate_ip_addr $1
300     then
301     set -- $(getent hosts $1)
302     fi
303 niro 2407 echo $1
304     }
305 niro 2420
306     iface_for_ip()
307     {
308     set -- $(ip -o addr show to $1)
309     echo $2
310     }
311    
312     iface_for_mac()
313     {
314     local interface="" mac="$(echo $1 | sed 'y/ABCDEF/abcdef/')"
315     for interface in /sys/class/net/*; do
316     if [ $(cat $interface/address) = "$mac" ]; then
317     echo ${interface##*/}
318     fi
319     done
320     }
321    
322     mac_for_iface()
323     {
324     local iface="$1"
325     if [ -f /sys/class/net/${iface}/address ]
326     then
327     cat /sys/class/net/${iface}/address
328     fi
329     }
330 niro 2428
331     certificate_fingerprint()
332     {
333     local cert_fingerprint
334     local retval
335    
336     if [[ ! -f ${MCORE_CERT_FILE} ]]
337     then
338     eecho "MCORE_CERT_FILE '${MCORE_CERT_FILE}' does not exist."
339     return 1
340     fi
341    
342     cert_fingerprint=$(openssl x509 -noout -modulus -in "${MCORE_CERT_FILE}" | openssl sha1 | sed 's:(stdin)=\ ::')
343     retval="$?"
344    
345     if [[ ${retval} != 0 ]]
346     then
347     eecho "Error '${retval}' while generating cert_fingerprint."
348     return 1
349     fi
350    
351     if [[ -z ${cert_fingerprint} ]]
352     then
353     eecho "Error: cert_fingerprint is empty"
354     return 1
355     else
356     echo "${cert_fingerprint}"
357     fi
358     }
359    
360     key_fingerprint()
361     {
362     local key_fingerprint
363     local retval
364    
365     if [[ ! -f ${MCORE_KEY_FILE} ]]
366     then
367     eecho "MCORE_KEY_FILE '${MCORE_KEY_FILE}' does not exist."
368     return 1
369     fi
370    
371     key_fingerprint=$(openssl rsa -noout -modulus -in "${MCORE_KEY_FILE}" | openssl sha1 | sed 's:(stdin)=\ ::')
372     retval="$?"
373    
374     if [[ ${retval} != 0 ]]
375     then
376     eecho "Error '${retval}' while generating key_fingerprint."
377     return 1
378     fi
379    
380     if [[ -z ${key_fingerprint} ]]
381     then
382     eecho "Error: key_fingerprint is empty"
383     return 1
384     else
385     echo "${key_fingerprint}"
386     fi
387     }
388    
389 niro 2429 nsslsay()
390     {
391     nssl "${SSLSAY_IP}" "${SSLSAY_PORT}" << EOF
392     auth ${SSLSAY_USER} ${SSLSAY_PASS}
393     $@
394     quit
395     EOF
396     }
397    
398     nsslsay_fingerprint()
399     {
400     nssl "${SSLSAY_IP}" "${SSLSAY_PORT}" << EOF
401     certauth $(certificate_fingerprint)
402     $@
403     quit
404     EOF
405     }
406 niro 2485
407     nsslsay_queue_init()
408     {
409     SSLSAY_QUEUE=()
410     }
411    
412     nsslsay_queue_add()
413     {
414     SSLSAY_QUEUE+=( "$@" )
415     }
416    
417     nsslsay_queue_print()
418     {
419     local count
420     local i
421    
422     count="${#SSLSAY_QUEUE[*]}"
423     for ((i=0; i < count; i++))
424     do
425     echo "${SSLSAY_QUEUE[${i}]}"
426     done
427     }
428    
429     nsslsay_queue_run()
430     {
431     nsslsay "$(nsslsay_queue_print)"
432     }
433    
434     nsslsay_queue_run_fingerprint()
435     {
436     nsslsay_fingerprint "$(nsslsay_queue_print)"
437     }
438 niro 2767
439     # read_cmdline "$variable"
440     # eg: read_cmdline "lang="
441     # returns the value of the cmdline variable lang
442     # eg: read_cmdline "rd.info"
443     # returns bool 1 if the variable was defined
444     #
445     read_cmdline()
446     {
447     local variable="$1"
448     local retval
449     local i
450    
451     if [[ -z ${variable} ]]
452     then
453     eecho "no variable given"
454     return 1
455     fi
456    
457     if [ ! -e /proc/cmdline ]
458     then
459     eecho "read_cmdline(): /proc/cmdline does not exists"
460     return 1
461     fi
462    
463     for i in $(</proc/cmdline)
464     do
465     if [[ ${i} = ${variable}* ]]
466     then
467     case ${variable} in
468     *=*) retval="${i#*=}" ;;
469     *) retval=1 ;; # bool
470     esac
471     fi
472     done
473    
474     echo "${retval}"
475     return 0
476     }