summaryrefslogtreecommitdiffstats
path: root/sub.sh
diff options
context:
space:
mode:
Diffstat (limited to 'sub.sh')
-rwxr-xr-xsub.sh100
1 files changed, 0 insertions, 100 deletions
diff --git a/sub.sh b/sub.sh
deleted file mode 100755
index 3d68184..0000000
--- a/sub.sh
+++ /dev/null
@@ -1,100 +0,0 @@
-#!/bin/ksh
-# OpenBSD ksh daemon script to process remote spool files over SSH
-
-# Fall back to the running user's home if $HOME is unset
-USER_HOME="${HOME:-$(eval echo "~${USER}")}"
-SSH_CONFIG="${USER_HOME}/.ssh/config"
-
-SSH_HOST="lex-spool"
-SPOOL_DIR="/var/www/var/lex/spool/new"
-DICT_DIR="/var/www/var/lex/dict"
-SOCKET_PATH="/var/run/lexd/sock"
-SLEEP_INTERVAL=5
-
-log_err() {
- logger -t spool_proc -p daemon.err "$1"
-}
-
-log_info() {
- logger -t spool_proc -p daemon.info "$1"
-}
-
-while true; do
- # Fetch one file
- SPOOL_FILE=$(ssh -F "${SSH_CONFIG}" -n "${SSH_HOST}" \
- "ls -1 '${SPOOL_DIR}' 2>/dev/null | head -n 1")
-
- if [ $? -ne 0 ]; then
- log_err "Failed connection attempt to ${SSH_HOST}"
- sleep "${SLEEP_INTERVAL}"
- continue
- fi
-
- # If spool is empty, wait and retry
- if [ -z "${SPOOL_FILE}" ]; then
- sleep "${SLEEP_INTERVAL}"
- continue
- fi
-
- (
- set -e
-
- # Fetch remote spool file content
- raw_prompt=$(ssh -F "${SSH_CONFIG}" -n "${SSH_HOST}" \
- "cat '${SPOOL_DIR}/${SPOOL_FILE}'")
-
- if [ -z "${raw_prompt}" ]; then
- log_err "Empty spool file: ${SPOOL_FILE}"
- exit 1
- fi
-
- # Log truncated input string (up to 60 characters)
- trunc_prompt=$(print -r -- "${raw_prompt}" | cut -c1-60)
- log_info "Processing: \"${trunc_prompt}\""
-
- # Pass prompt to socket
- response=$(print -r -- "${raw_prompt}" | nc -w 3 -U "${SOCKET_PATH}")
-
- if [ -z "${response}" ]; then
- log_err "Empty socket response for: ${SPOOL_FILE}"
- exit 1
- fi
-
- # Extract first word (lowercased)
- target_word=$(print -r -- "${response}" \
- | awk '{print tolower($1); exit}')
-
- if [ -z "${target_word}" ]; then
- log_err "No target filename for: ${SPOOL_FILE}"
- exit 1
- fi
-
- # Validate target word
- case "${target_word}" in
- *[!a-z-]*)
- log_err "Invalid word '${target_word}': ${SPOOL_FILE}"
- exit 1
- ;;
- [!a-z]*|*[!a-z])
- log_err "Bad bounds '${target_word}': ${SPOOL_FILE}"
- exit 1
- ;;
- esac
-
- target_file="${DICT_DIR}/${target_word}"
-
- # Write remote dict file & remove spool file
- print -r -- "${response}" \
- | ssh -F "${SSH_CONFIG}" "${SSH_HOST}" \
- "cat > '${target_file}' && rm -f '${SPOOL_DIR}/${SPOOL_FILE}'"
-
- log_info "Finished processing: ${target_word}"
- )
-
- if [ $? -ne 0 ]; then
- log_err "Processing failed for file: ${SPOOL_FILE}"
- fi
-
- sleep "${SLEEP_INTERVAL}"
-done
-