summaryrefslogtreecommitdiffstats
path: root/core/modules/slxlog
diff options
context:
space:
mode:
authorSimon Rettberg2021-07-09 09:43:52 +0200
committerSimon Rettberg2021-07-09 09:43:52 +0200
commit5733a5d0eb3c7f73ca52acdb466484c83c9b5b02 (patch)
tree97a0925b2bb1cae84f1da6e850420475c12c41f0 /core/modules/slxlog
parentAdd installer mode for stage4 (diff)
downloadmltk-5733a5d0eb3c7f73ca52acdb466484c83c9b5b02.tar.gz
mltk-5733a5d0eb3c7f73ca52acdb466484c83c9b5b02.tar.xz
mltk-5733a5d0eb3c7f73ca52acdb466484c83c9b5b02.zip
[slxlog] Add module
Diffstat (limited to 'core/modules/slxlog')
-rwxr-xr-xcore/modules/slxlog/data/opt/openslx/bin/slxlog104
-rw-r--r--core/modules/slxlog/module.build12
-rw-r--r--core/modules/slxlog/module.conf2
3 files changed, 118 insertions, 0 deletions
diff --git a/core/modules/slxlog/data/opt/openslx/bin/slxlog b/core/modules/slxlog/data/opt/openslx/bin/slxlog
new file mode 100755
index 00000000..f58934bc
--- /dev/null
+++ b/core/modules/slxlog/data/opt/openslx/bin/slxlog
@@ -0,0 +1,104 @@
+#!/bin/ash
+
+##################
+# Remote logging #
+##################
+#
+# Usage: slxlog [-e | --echo] "logtype" "Human readable string" ["file name which's contents should be sent too"]
+# -e or --echo will echo message to stdout too
+#
+
+export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/openslx/sbin:/opt/openslx/bin"
+
+. /opt/openslx/config
+[ -z "$SLX_REMOTE_LOG" ] && exit 3
+
+USER=$(whoami)
+LOGCHECK="/tmp/remote_log_check-$USER"
+NOW=$(date +%s)
+DELFILE=
+SYNC=
+
+while [ $# -gt 0 ]; do
+ case "$1" in
+ -e|--echo)
+ echo "$@"
+ ;;
+ -d|--delete)
+ DELFILE=yes
+ ;;
+ -s|--sync)
+ SYNC=yes
+ ;;
+ *)
+ break
+ ;;
+ esac
+ shift
+done
+
+[ $# -eq 0 ] && exit 0
+
+TYPE="$1"
+
+# Simple spamcheck. Not very tamper-proof, but if you'd want to spam the server
+# you could do it anyways. This is to protect from accidental loops calling this.
+if [ -r "$LOGCHECK" ]; then
+ # Allow max 150 messages in total
+ LINES=$( < "$LOGCHECK" wc -l)
+ [ "$LINES" -gt "150" ] && exit 1
+ # Allow max 5 of same type messages in 30 seconds
+ LINES=$(grep -c "$TYPE" "$LOGCHECK")
+ if [ "$LINES" -ge "5" ]; then
+ LAST=$(grep "$TYPE" "$LOGCHECK" | tail -n 5 | head -n 1 | awk '{print $1}')
+ if [ -n "$LAST" ]; then
+ DIFF="$(( NOW - LAST ))"
+ [ "$DIFF" -lt "30" ] && exit 2
+ fi
+ fi
+fi
+echo "$NOW $TYPE" >> "$LOGCHECK"
+chmod 0600 "$LOGCHECK" 2>/dev/null
+
+if [ $# -lt 2 ]; then
+ MSG="Missing text for $*"
+else
+ MSG="$2"
+fi
+MSG="[$USER] $MSG"
+
+if [ $# -gt 2 ]; then
+ EXTRA="$3"
+fi
+
+if [ -n "$SLX_DEBUG" ]; then
+ CURLLOG="/tmp/slxlog.$USER"
+else
+ CURLLOG="/dev/null"
+fi
+
+UUID=
+if [ -s /etc/system-uuid ]; then
+ UUID=$(cat /etc/system-uuid)
+fi
+
+submitlog () {
+ if [ -n "$EXTRA" ] && [ -r "$EXTRA" ] && [ -s "$EXTRA" ] && [ "$(stat -c %s "$EXTRA")" -lt "10000" ]; then # valid file attachment
+ curl --data-urlencode "uuid=$UUID" --data-urlencode "type=$TYPE" --data-urlencode "description=$MSG" --data-urlencode "longdesc@$EXTRA" "$SLX_REMOTE_LOG" >> "$CURLLOG" 2>&1
+ elif [ -z "$EXTRA" ]; then # no attachment
+ curl --data-urlencode "uuid=$UUID" --data-urlencode "type=$TYPE" --data-urlencode "description=$MSG" "$SLX_REMOTE_LOG" >> "$CURLLOG" 2>&1
+ elif [ -s "$EXTRA" ]; then # attachment file to big (more than 10k)
+ curl --data-urlencode "uuid=$UUID" --data-urlencode "type=$TYPE" --data-urlencode "description=$MSG" --data-urlencode "longdesc=Attachment too large: $EXTRA" "$SLX_REMOTE_LOG" >> "$CURLLOG" 2>&1
+ else # empty attachment file (or missing)
+ curl --data-urlencode "uuid=$UUID" --data-urlencode "type=$TYPE" --data-urlencode "description=$MSG" --data-urlencode "longdesc=Attachment missing/empty: $EXTRA" "$SLX_REMOTE_LOG" >> "$CURLLOG" 2>&1
+ fi
+ [ -n "$DELFILE" ] && [ -n "$EXTRA" ] && rm -f -- "$EXTRA"
+}
+
+if [ -z "$SYNC" ]; then
+ submitlog &
+ exit 0
+fi
+
+submitlog
+
diff --git a/core/modules/slxlog/module.build b/core/modules/slxlog/module.build
new file mode 100644
index 00000000..241bcd5e
--- /dev/null
+++ b/core/modules/slxlog/module.build
@@ -0,0 +1,12 @@
+#!/bin/bash
+fetch_source() {
+ :
+}
+
+build() {
+ pinfo "Static module, nothing to build."
+}
+
+post_copy() {
+ :
+}
diff --git a/core/modules/slxlog/module.conf b/core/modules/slxlog/module.conf
new file mode 100644
index 00000000..d5d021fa
--- /dev/null
+++ b/core/modules/slxlog/module.conf
@@ -0,0 +1,2 @@
+#!/bin/bash
+# Nothing