From 5733a5d0eb3c7f73ca52acdb466484c83c9b5b02 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Fri, 9 Jul 2021 09:43:52 +0200 Subject: [slxlog] Add module --- core/modules/slxlog/data/opt/openslx/bin/slxlog | 104 ++++++++++++++++++++++++ core/modules/slxlog/module.build | 12 +++ core/modules/slxlog/module.conf | 2 + 3 files changed, 118 insertions(+) create mode 100755 core/modules/slxlog/data/opt/openslx/bin/slxlog create mode 100644 core/modules/slxlog/module.build create mode 100644 core/modules/slxlog/module.conf (limited to 'core/modules/slxlog') 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 -- cgit v1.2.3-55-g7522