Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2898 - (hide annotations) (download)
Mon Sep 11 13:41:09 2023 UTC (8 months ago) by niro
File size: 8123 byte(s)
-respect newer openssl, which prints '<used_cipher>(stdin)=' instead of just '(stdin)='
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 niro 2818 # gets ip for given interface
260     get_iface_ip()
261     {
262     local iface="$1" ip=""
263     ip=$(ip -o -f inet addr show $iface)
264     ip=${ip%%/*}
265     ip=${ip##* }
266     echo $ip
267     }
268    
269 niro 2407 # gets interface used to reach given ip
270     iface_for_remote_addr()
271     {
272     set -- $(ip -o route get to $1)
273 niro 2817 # honor routes with and without a gateway
274     case $@ in
275     *via*) echo $5 ;;
276     *) echo $3 ;;
277     esac
278 niro 2407 }
279    
280 niro 2809 validate_ip_addr()
281     {
282     local ip="$1"
283     local retval=1
284     local _ifs
285    
286     if [[ ${ip} =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]
287     then
288     _ifs=$IFS
289     IFS='.'
290     # convert to an array
291     ip=($ip)
292     IFS=$_ifs
293    
294     if [[ ${ip[0]} -le 255 ]] &&
295     [[ ${ip[1]} -le 255 ]] &&
296     [[ ${ip[2]} -le 255 ]] &&
297     [[ ${ip[3]} -le 255 ]]
298     then
299     retval=$?
300     fi
301     fi
302    
303     return ${retval}
304     }
305    
306 niro 2407 # get ip from dns name
307     dns_to_ip()
308     {
309 niro 2809 if ! validate_ip_addr $1
310     then
311     set -- $(getent hosts $1)
312     fi
313 niro 2407 echo $1
314     }
315 niro 2420
316     iface_for_ip()
317     {
318     set -- $(ip -o addr show to $1)
319     echo $2
320     }
321    
322     iface_for_mac()
323     {
324     local interface="" mac="$(echo $1 | sed 'y/ABCDEF/abcdef/')"
325     for interface in /sys/class/net/*; do
326     if [ $(cat $interface/address) = "$mac" ]; then
327     echo ${interface##*/}
328     fi
329     done
330     }
331    
332     mac_for_iface()
333     {
334     local iface="$1"
335     if [ -f /sys/class/net/${iface}/address ]
336     then
337     cat /sys/class/net/${iface}/address
338     fi
339     }
340 niro 2428
341     certificate_fingerprint()
342     {
343     local cert_fingerprint
344     local retval
345    
346     if [[ ! -f ${MCORE_CERT_FILE} ]]
347     then
348     eecho "MCORE_CERT_FILE '${MCORE_CERT_FILE}' does not exist."
349     return 1
350     fi
351    
352 niro 2898 cert_fingerprint=$(openssl x509 -noout -modulus -in "${MCORE_CERT_FILE}" | openssl sha1 | sed 's:.*(stdin)=\ ::')
353 niro 2428 retval="$?"
354    
355     if [[ ${retval} != 0 ]]
356     then
357     eecho "Error '${retval}' while generating cert_fingerprint."
358     return 1
359     fi
360    
361     if [[ -z ${cert_fingerprint} ]]
362     then
363     eecho "Error: cert_fingerprint is empty"
364     return 1
365     else
366     echo "${cert_fingerprint}"
367     fi
368     }
369    
370     key_fingerprint()
371     {
372     local key_fingerprint
373     local retval
374    
375     if [[ ! -f ${MCORE_KEY_FILE} ]]
376     then
377     eecho "MCORE_KEY_FILE '${MCORE_KEY_FILE}' does not exist."
378     return 1
379     fi
380    
381 niro 2898 key_fingerprint=$(openssl rsa -noout -modulus -in "${MCORE_KEY_FILE}" | openssl sha1 | sed 's:.*(stdin)=\ ::')
382 niro 2428 retval="$?"
383    
384     if [[ ${retval} != 0 ]]
385     then
386     eecho "Error '${retval}' while generating key_fingerprint."
387     return 1
388     fi
389    
390     if [[ -z ${key_fingerprint} ]]
391     then
392     eecho "Error: key_fingerprint is empty"
393     return 1
394     else
395     echo "${key_fingerprint}"
396     fi
397     }
398    
399 niro 2429 nsslsay()
400     {
401     nssl "${SSLSAY_IP}" "${SSLSAY_PORT}" << EOF
402     auth ${SSLSAY_USER} ${SSLSAY_PASS}
403     $@
404     quit
405     EOF
406     }
407    
408     nsslsay_fingerprint()
409     {
410     nssl "${SSLSAY_IP}" "${SSLSAY_PORT}" << EOF
411     certauth $(certificate_fingerprint)
412     $@
413     quit
414     EOF
415     }
416 niro 2485
417     nsslsay_queue_init()
418     {
419     SSLSAY_QUEUE=()
420     }
421    
422     nsslsay_queue_add()
423     {
424     SSLSAY_QUEUE+=( "$@" )
425     }
426    
427     nsslsay_queue_print()
428     {
429     local count
430     local i
431    
432     count="${#SSLSAY_QUEUE[*]}"
433     for ((i=0; i < count; i++))
434     do
435     echo "${SSLSAY_QUEUE[${i}]}"
436     done
437     }
438    
439     nsslsay_queue_run()
440     {
441     nsslsay "$(nsslsay_queue_print)"
442     }
443    
444     nsslsay_queue_run_fingerprint()
445     {
446     nsslsay_fingerprint "$(nsslsay_queue_print)"
447     }
448 niro 2767
449     # read_cmdline "$variable"
450     # eg: read_cmdline "lang="
451     # returns the value of the cmdline variable lang
452     # eg: read_cmdline "rd.info"
453     # returns bool 1 if the variable was defined
454     #
455     read_cmdline()
456     {
457     local variable="$1"
458     local retval
459     local i
460    
461     if [[ -z ${variable} ]]
462     then
463     eecho "no variable given"
464     return 1
465     fi
466    
467     if [ ! -e /proc/cmdline ]
468     then
469     eecho "read_cmdline(): /proc/cmdline does not exists"
470     return 1
471     fi
472    
473     for i in $(</proc/cmdline)
474     do
475     if [[ ${i} = ${variable}* ]]
476     then
477     case ${variable} in
478     *=*) retval="${i#*=}" ;;
479     *) retval=1 ;; # bool
480     esac
481     fi
482     done
483    
484     echo "${retval}"
485     return 0
486     }
487 niro 2834
488     trysudo()
489     {
490     local try_sudo
491    
492     if [[ $(id -u) -ne 0 ]] && [[ $(id -u -n) = ${MCORE_SYS_USER} ]]
493     then
494     try_sudo="sudo"
495     else
496     try_sudo=""
497     fi
498    
499     ${try_sudo} $@
500     }