#!/bin/bash # Copyright (C) 2025 Mike Gabriel # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. if [ $(id -u) -gt 0 ]; then echo "ERROR: This script has to run as super-user root." exit 1 fi usage() { echo "$(basename ${0}) [-t|--today] [--exclude=] [--include=]" exit 1 } ignore_repaired_hosts="" if [ -e /etc/debian-edu/itzks-puppetserver-fixed-puppet-hosts ]; then ignore_repaired_hosts=$(cat /etc/debian-edu/itzks-puppetserver-fixed-puppet-hosts | grep -v -E "^#.*") fi for arg in "$@"; do case "${arg}" in -t|--today) TODAY=true ;; --exclude=*) EXCLUDE="${arg#*=}" ;; --include=*) INCLUDE="${arg#*=}" ;; --include|--exclude) # options used in wrong way usage ;; *) # unknown option usage ;; esac done TMPFILE=$(mktemp) if [[ ! $TODAY ]]; then ls /var/log/puppetserver/puppetserver-access-*.log.gz | sort | while read file; do zcat $file >> "${TMPFILE}" done fi cat /var/log/puppetserver/puppetserver-access.log >> "${TMPFILE}" iplist_with_puppeterrors=$(cat ${TMPFILE} | grep -v ' 200 ' | awk '{ print $1 }' | sort | uniq) for ip in ${iplist_with_puppeterrors}; do fqdn=$(dig +short -x "${ip}" | sed -e "s/.\$//g") if [ "${fqdn}" = "${HOSTNAME}" ]; then continue fi if [ -n "${fqdn}" ] && echo "${ignore_repaired_hosts}" | grep -q "${fqdn}"; then continue fi if [[ -n "${INCLUDE}" ]] && ! echo "${ip} ${fqdn}" | grep -q -E "${INCLUDE}"; then continue fi if [[ -n "${EXCLUDE}" ]] && ! echo "${ip} ${fqdn}" | grep -v -q -E "${EXCLUDE}"; then continue fi if [[ -n "$fqdn" ]]; then echo -e "$fqdn\t-\t$ip" else echo -e "(unknown)\t-\t$ip" fi done rm "${TMPFILE}"