1 |
# $Id$ |
# $Id$ |
2 |
|
|
3 |
# # import_resource $table $serial $resource $value |
# loads client classes from $MCORE_LIBDIR |
4 |
# import_resource() |
load_classes() |
5 |
# { |
{ |
6 |
# local table="$1" |
local class |
7 |
# local serial="$2" |
local classtype |
8 |
# local resource="$3" |
|
9 |
# local value="$4" |
case $1 in |
10 |
# |
client|control) classtype="$1" ;; |
11 |
# if [[ ${DEBUG} = 1 ]] |
*) die "Unknown classes type '$1'" ;; |
12 |
# then |
esac |
13 |
# echo "${table}->${resource}=${value}" >> /root/lala.log |
|
14 |
# echo "mysqldo \"update ${table} set ${resource}='${value}' where serial=${serial};\"" >> /root/lala.log |
# client specific |
15 |
# fi |
for class in $(find ${MCORE_LIBDIR}/include -type f -name \*.${classtype}.class) |
16 |
# |
do |
17 |
# mysql_insert "${table}",serial="${serial}","${resource}"="${value}" |
include ${class} || eecho "error loading ${class}" |
18 |
# } |
done |
19 |
|
} |
20 |
|
|
21 |
|
# restarts the whole service via remote cmd |
22 |
|
restart_service() |
23 |
|
{ |
24 |
|
local pid |
25 |
|
for pid in $(pidof sslsvd) |
26 |
|
do |
27 |
|
kill -SIGHUP ${pid} |
28 |
|
done |
29 |
|
} |
30 |
|
|
31 |
|
# stops the whole service via remote cmd |
32 |
|
stop_service() |
33 |
|
{ |
34 |
|
local pid |
35 |
|
for pid in $(pidof sslsvd) |
36 |
|
do |
37 |
|
kill -SIGTERM ${pid} |
38 |
|
done |
39 |
|
} |
40 |
|
|
41 |
# run_class $method $caller $argv1 $argv2 ... $argvN |
# run_class $method $caller $argv1 $argv2 ... $argvN |
42 |
run_class() |
run_class() |
43 |
{ |
{ |
44 |
local method="$1" |
local method="${GLOBAL_ARGV[0]}" |
45 |
local caller="$2" |
local caller="${GLOBAL_ARGV[1]}" |
46 |
local class |
local class |
47 |
local cmd |
local cmd |
48 |
local argv |
local i |
49 |
|
local count |
50 |
|
|
51 |
if valid_session |
if valid_session |
52 |
then |
then |
53 |
class="${caller%.*}" |
class="${caller%.*}" |
54 |
cmd="${caller#*.}" |
cmd="${caller#*.}" |
|
argv="${@/${caller}/}" # remove caller |
|
|
argv="${argv/${method}/}" # remove method |
|
55 |
|
|
56 |
# echo "method=${method}" |
# copy GLOBAL_ARGV to CLASS_ARGV array without method and caller.class |
57 |
# echo "caller=${caller}" |
unset CLASS_ARGV |
58 |
# echo "class=${class}" |
count="${#GLOBAL_ARGV[*]}" |
59 |
# echo "cmd=${cmd}" |
for (( i=2; i<count; i++ )) |
60 |
# echo "argv=${argv}" |
do |
61 |
|
CLASS_ARGV[${i}-2]="${GLOBAL_ARGV[${i}]}" |
62 |
|
done |
63 |
|
|
64 |
|
# decho "method=${method}" |
65 |
|
# decho "caller=${caller}" |
66 |
|
# decho "class=${class}" |
67 |
|
# decho "cmd=${cmd}" |
68 |
|
# decho "class argv=$(printf '\"%s\" ' ${CLASS_ARGV[*]}; printf '\n')" |
69 |
|
|
70 |
# check if class.cmd exist |
# check if class.cmd exist |
71 |
if [[ ! -z $(typeset -f "${method}"_"${class}"_"${cmd}") ]] |
if [[ ! -z $(typeset -f "${method}"_"${class}"_"${cmd}") ]] |
72 |
then |
then |
73 |
"${method}"_"${class}"_"${cmd}" ${argv} |
"${method}"_"${class}"_"${cmd}" |
74 |
else |
else |
75 |
eecho "unkown method '${method}' . class '${class}' . cmd '${cmd}'" |
eecho "unknown method '${method}' . class '${class}' . cmd '${cmd}'" |
76 |
fi |
fi |
77 |
else |
else |
78 |
invalid_session |
invalid_session |
79 |
fi |
fi |
80 |
} |
} |
81 |
|
|
82 |
|
run_push_config() |
83 |
|
{ |
84 |
|
local serial="$1" |
85 |
|
local config |
86 |
|
|
87 |
|
if [[ -z ${serial} ]] |
88 |
|
then |
89 |
|
eecho "missing serial" |
90 |
|
return 1 |
91 |
|
fi |
92 |
|
|
93 |
|
for config in $(NOCOLORS=1 print_push_config) |
94 |
|
do |
95 |
|
if [[ -n $(typeset -f push_config_${config}) ]] |
96 |
|
then |
97 |
|
decho "running: 'push_config_${config} ${serial}'" |
98 |
|
push_config_"${config}" "${serial}" |
99 |
|
else |
100 |
|
decho "no function 'push_config_${config}' for '${config}' found." |
101 |
|
fi |
102 |
|
done |
103 |
|
} |
104 |
|
|
105 |
|
run_push_firstboot() |
106 |
|
{ |
107 |
|
local serial="$1" |
108 |
|
local config |
109 |
|
|
110 |
|
if [[ -z ${serial} ]] |
111 |
|
then |
112 |
|
eecho "missing serial" |
113 |
|
return 1 |
114 |
|
fi |
115 |
|
|
116 |
|
for config in $(NOCOLORS=1 print_push_firstboot) |
117 |
|
do |
118 |
|
if [[ -n $(typeset -f push_firstboot_${config}) ]] |
119 |
|
then |
120 |
|
decho "running: 'push_firstboot_${config} ${serial}'" |
121 |
|
push_firstboot_"${config}" "${serial}" |
122 |
|
else |
123 |
|
decho "no function 'push_firstboot_${config}' for '${config}' found." |
124 |
|
fi |
125 |
|
done |
126 |
|
} |
127 |
|
|
128 |
help_topics() |
help_topics() |
129 |
{ |
{ |
130 |
local i |
local i |
136 |
mecho "\tget - shows current value for a settings" |
mecho "\tget - shows current value for a settings" |
137 |
mecho "\tset - sets value for a setting" |
mecho "\tset - sets value for a setting" |
138 |
mecho "\tauth - authenticate to the daemon" |
mecho "\tauth - authenticate to the daemon" |
139 |
|
mecho "\tcertauth - authenticate to the daemon via fingerprint" |
140 |
mecho "\tprovide - shows provides of a system" |
mecho "\tprovide - shows provides of a system" |
141 |
mecho "\trequire - verify plugin requirements" |
mecho "\trequire - verify plugin requirements" |
142 |
|
mecho "\treload - reloads all client classes plugins" |
143 |
|
mecho "\trestart - restarts the daemon" |
144 |
|
mecho "\tstop - stops the daemon" |
145 |
mecho "\tnocolors - disable colors, useful for the webclient" |
mecho "\tnocolors - disable colors, useful for the webclient" |
146 |
|
mecho "\tcolors - enable colors" |
147 |
mecho "\tquiet - do not print any unecessary messages" |
mecho "\tquiet - do not print any unecessary messages" |
148 |
mecho "\thelp - shows help" |
mecho "\thelp - shows help" |
149 |
|
mecho "\tversion - prints version of the daemon" |
150 |
mecho "\tquit - quits the connection to the server" |
mecho "\tquit - quits the connection to the server" |
151 |
mecho |
mecho |
152 |
mecho "Help topics:" |
mecho "Help topics:" |
163 |
mecho "Type 'help [topic]' for more information about every topic." |
mecho "Type 'help [topic]' for more information about every topic." |
164 |
} |
} |
165 |
|
|
|
# on newer xorg-servers root is not allowed to run progs in a user session |
|
|
x11runas() |
|
|
{ |
|
|
if pidof X |
|
|
then |
|
|
su - "${MCORE_UNPRIV_USER}" -c "DISPLAY=${MCORE_XORG_DISPLAY} $@" |
|
|
fi |
|
|
} |
|
|
|
|
|
addconfig() |
|
|
{ |
|
|
local opts |
|
|
|
|
|
if [[ -z ${CONFIG} ]] |
|
|
then |
|
|
eecho "You must define \$CONFIG varibale first!" |
|
|
return 1 |
|
|
fi |
|
|
|
|
|
if [[ ! -d $(dirname ${CONFIG}) ]] |
|
|
then |
|
|
install -d $(dirname ${CONFIG}) |
|
|
fi |
|
|
|
|
|
# check for opts |
|
|
case $1 in |
|
|
-n) shift; opts=" -n" ;; |
|
|
-e) shift; opts=" -e" ;; |
|
|
esac |
|
|
|
|
|
echo ${opts} "$@" >> ${CONFIG} |
|
|
} |
|
|
|
|
|
clearconfig() |
|
|
{ |
|
|
if [[ -z ${CONFIG} ]] |
|
|
then |
|
|
eecho "You must define \$CONFIG varibale first!" |
|
|
return 1 |
|
|
fi |
|
|
|
|
|
if [[ ! -d $(dirname ${CONFIG}) ]] |
|
|
then |
|
|
install -d $(dirname ${CONFIG}) |
|
|
fi |
|
|
: > ${CONFIG} |
|
|
} |
|
|
|
|
|
# no_duplicate $list $item |
|
|
no_duplicate() |
|
|
{ |
|
|
local i |
|
|
local list="$1" |
|
|
local item="$2" |
|
|
|
|
|
for i in ${list} |
|
|
do |
|
|
[[ ${i} = ${item} ]] && return 1 |
|
|
done |
|
|
|
|
|
return 0 |
|
|
} |
|
|
|
|
166 |
require() |
require() |
167 |
{ |
{ |
168 |
local requires="$@" |
local requires="$@" |
170 |
|
|
171 |
for i in ${requires} |
for i in ${requires} |
172 |
do |
do |
173 |
# check for duplicate provides |
# check for duplicate require |
174 |
if no_duplicate "${PROVIDE}" "${i}" |
if no_duplicate "${REQUIRE}" "${i}" |
175 |
then |
then |
176 |
export REQUIRE="${REQUIRE} ${i}" |
export REQUIRE="${REQUIRE} ${i}" |
177 |
else |
else |
178 |
decho "duplicate provide '${i}' detected!" |
decho "duplicate require '${i}' detected!" |
179 |
fi |
fi |
180 |
done |
done |
181 |
} |
} |
204 |
# show missing and set the right retval |
# show missing and set the right retval |
205 |
if [[ -z ${missing} ]] |
if [[ -z ${missing} ]] |
206 |
then |
then |
207 |
rvecho "${sorted}" |
# do not escape, or CRLFS get printed to screen too |
208 |
|
rvecho ${sorted} |
209 |
return 0 |
return 0 |
210 |
else |
else |
211 |
for req in ${sorted} |
for req in ${sorted} |
213 |
if no_duplicate "${missing}" "$req" |
if no_duplicate "${missing}" "$req" |
214 |
then |
then |
215 |
# print normal |
# print normal |
216 |
rvecho -n " ${req}" |
rvecho -n "${req} " |
217 |
else |
else |
218 |
# print missing |
# print missing |
219 |
eecho -n " ${req}" |
eecho -n "${req} " |
220 |
fi |
fi |
221 |
done |
done |
222 |
|
# print CRLF |
223 |
|
echo |
224 |
return 1 |
return 1 |
225 |
fi |
fi |
226 |
} |
} |
249 |
# sort them alpabetically |
# sort them alpabetically |
250 |
sorted=$(for i in ${PROVIDE}; do echo "${i}"; done | sort) |
sorted=$(for i in ${PROVIDE}; do echo "${i}"; done | sort) |
251 |
# do not escape, or CRLFS get printed to screen too |
# do not escape, or CRLFS get printed to screen too |
252 |
rvecho ${sorted} |
rvecho ${sorted} |
253 |
} |
} |
254 |
|
|
255 |
# message only echo | disabled in quiet mode |
is_provided() |
|
mecho() |
|
256 |
{ |
{ |
257 |
local COLCYAN="\033[1;36m" |
local feature="$1" |
258 |
local COLDEFAULT="\033[0m" |
local i |
259 |
local opts |
local retval |
|
local webcrlf |
|
|
|
|
|
# print nothing if quiet mode was requested |
|
|
[[ ${QUIET} = true ]] && return |
|
|
|
|
|
if [[ ${NOCOLORS} = true ]] |
|
|
then |
|
|
COLCYAN="" |
|
|
COLDEFAULT="" |
|
|
fi |
|
|
|
|
|
[[ ${WEBCRLF} = true ]] && webcrlf="<br>" |
|
260 |
|
|
261 |
# respect -n |
retval=1 |
262 |
case $1 in |
for i in $(print_provide) |
263 |
-n) shift; opts="n" ;; |
do |
264 |
esac |
if [[ ${i} = ${feature} ]] |
265 |
|
then |
266 |
|
retval=0 |
267 |
|
break |
268 |
|
fi |
269 |
|
done |
270 |
|
|
271 |
echo -e${opts} "${COLCYAN}$@${COLDEFAULT}${webcrlf}" |
return "${retval}" |
272 |
} |
} |
273 |
|
|
274 |
# prints error messages | enabled even in quiet mode |
push_config() |
|
eecho() |
|
275 |
{ |
{ |
276 |
local COLRED="\033[1;31m" |
local push_configs="$@" |
277 |
local COLDEFAULT="\033[0m" |
local i |
|
local opts |
|
|
local webcrlf |
|
|
|
|
|
if [[ ${NOCOLORS} = true ]] |
|
|
then |
|
|
COLRED="" |
|
|
COLDEFAULT="" |
|
|
fi |
|
278 |
|
|
279 |
[[ ${WEBCRLF} = true ]] && webcrlf="<br>" |
for i in ${push_configs} |
280 |
|
do |
281 |
|
# check for duplicate provides |
282 |
|
if no_duplicate "${PUSH_CONFIG}" "${i}" |
283 |
|
then |
284 |
|
export PUSH_CONFIG="${PUSH_CONFIG} ${i}" |
285 |
|
else |
286 |
|
decho "duplicate push_config '${i}' detected!" |
287 |
|
fi |
288 |
|
done |
289 |
|
} |
290 |
|
|
291 |
# respect -n |
print_push_config() |
292 |
case $1 in |
{ |
293 |
-n) shift; opts="n" ;; |
local sorted |
|
esac |
|
294 |
|
|
295 |
echo -e${opts} "${COLRED}$@${COLDEFAULT}${webcrlf}" |
# sort them alpabetically |
296 |
|
sorted=$(for i in ${PUSH_CONFIG}; do echo "${i}"; done | sort) |
297 |
|
# do not escape, or CRLFS get printed to screen too |
298 |
|
rvecho ${sorted} |
299 |
} |
} |
300 |
|
|
301 |
# prints return values of get | enabled even in quiet mode |
push_firstboot() |
|
rvecho() |
|
302 |
{ |
{ |
303 |
local COLPURPLE="\033[1;35m" |
local push_firstboots="$@" |
304 |
local COLDEFAULT="\033[0m" |
local i |
|
local opts |
|
|
local webcrlf |
|
|
|
|
|
if [[ ${NOCOLORS} = true ]] |
|
|
then |
|
|
COLPURPLE="" |
|
|
COLDEFAULT="" |
|
|
fi |
|
305 |
|
|
306 |
[[ ${WEBCRLF} = true ]] && webcrlf="<br>" |
for i in ${push_firstboots} |
307 |
|
do |
308 |
|
# check for duplicate provides |
309 |
|
if no_duplicate "${PUSH_FIRSTBOOT}" "${i}" |
310 |
|
then |
311 |
|
export PUSH_FIRSTBOOT="${PUSH_FIRSTBOOT} ${i}" |
312 |
|
else |
313 |
|
decho "duplicate push_firstboot '${i}' detected!" |
314 |
|
fi |
315 |
|
done |
316 |
|
} |
317 |
|
|
318 |
# respect -n |
print_push_firstboot() |
319 |
case $1 in |
{ |
320 |
-n) shift; opts="n" ;; |
local sorted |
|
esac |
|
321 |
|
|
322 |
echo -e${opts} "${COLPURPLE}$@${COLDEFAULT}${webcrlf}" |
# sort them alpabetically |
323 |
|
sorted=$(for i in ${PUSH_FIRSTBOOT}; do echo "${i}"; done | sort) |
324 |
|
# do not escape, or CRLFS get printed to screen too |
325 |
|
rvecho ${sorted} |
326 |
} |
} |
327 |
|
|
328 |
# prints debug messages if requested | enabled even in quiet mode |
help_daemon_mroot() |
|
decho() |
|
329 |
{ |
{ |
330 |
# print nothing if debug mode was *not* requested |
mecho "get daemon.mroot" |
331 |
[[ ${DEBUG} != 1 ]] && return |
mecho " Prints current MROOT variable." |
332 |
|
mecho |
333 |
|
mecho "set daemon.mroot [path]" |
334 |
|
mecho " set MROOT variable to given path." |
335 |
|
} |
336 |
|
|
337 |
eecho "DEBUG: ${@}" |
get_daemon_mroot() |
338 |
|
{ |
339 |
|
rvecho "${MROOT}" |
340 |
} |
} |
341 |
|
|
342 |
path_not_empty() |
set_daemon_mroot() |
343 |
{ |
{ |
344 |
local path="$1" |
local path=$1 |
|
[[ -z ${path} ]] && eecho "path_not_empty(): no path given!" && return 1 |
|
345 |
|
|
346 |
# return ERR if path does not exist |
if [[ -d ${path} ]] |
347 |
[[ ! -d ${path} ]] && return 1 |
then |
348 |
# return ERR if path empty |
export MROOT="${path}" |
349 |
[[ -z $(find "${path}" -mindepth 1 -maxdepth 1) ]] && return 1 |
decho "MROOT='${MROOT}' is set." |
350 |
|
else |
351 |
|
eecho "Path '${path}' does not exist. MROOT not set." |
352 |
|
fi |
353 |
|
} |
354 |
|
|
355 |
# every thing went ok, directory not empty |
print_version() |
356 |
return 0 |
{ |
357 |
|
echo "mcored-$(<${MCORE_LIBDIR}/VERSION)" |
358 |
} |
} |