Написал скрипт, который должен при вхолде пользователя в домен писать пару вида ПОЛЬЗОВАТЕЛЬ@ХОСТ в файл /var/log/samba/WhoIsIn, а при выходе - удалять её оттуда или же удалять сам файл. Параллельно пишется небольшой лог. Теперь вижу следующую картину: При входе пользователя в логе появляется 3-4 записи о входе (столько раз запускался скрипт), при выходе и, к сожалению, даже не только при выходе - ещё 3-4 записи о выходе в этот же лог пишутся. Вопрос: почему скрипт root preexec/postexec запускается, мягко говоря, слишком часто? Собственно скрипт приводится ниже (вызывается по имени hndlDomainUserEnter для preexec и hndlDomainUserOut для postexec, с hndlDomainUserEnter на hndlDomainUserOut создана симв. ссылка) ---------- #!/bin/bash slf="${0##*/hndlDomainUser}" . /etc/sysconfig/functions/cmn . /etc/sysconfig/functions/rxdef echo "Event: $slf Who: $@" >> /var/log/samba/dummylog rxIP="$rxIP_ADDR" rxmIP= rxHOST='[A-Z][A-Z0-9_-]*[A-Z0-9]' rxmHOST='I' rxUSR='([A-Z]+|[A-Z]{,2}[a-z]+)[0-9]*' rxmUSR= while [ $# -ne 0 ]; do key="$1"; shift [ $# -gt 0 ] || exit 1 case "$key" in i|-i|--ip-addr) id=IP ;; u|-u|--user-name) id=USR ;; h|-h|--host) id=HOST ;; esac set_aliases "$id" rx rxm flAlreadyUsed chk_fl $flAlreadyUsed && exit 1 [ "`echo \"$1\" | eval \"sed -nr 's%^${!rx}$%MATCH%p${!rxm}'\"`" = "MATCH" ] || exit 1 eval val${id}=\"$1\"; shift done fileWhoIsIn="/var/log/samba/WhoIsIn" #[ -w "$fileWhoIsIn" ] || exit 1 case "$slf" in Enter) if [ -f "$fileWhoIsIn" ] ; then grep -qE "^${valUSR}@${valHOST}$" $fileWhoIsIn && exit 1 echo "$valUSR@$valHOST" >> $fileWhoIsIn else cat >"$fileWhoIsIn" <<-EOF # List of users, who has entered the samba domain # File format: <start of string>USERNAME@HOST<end of string> # See description of parameters prerootexec and postrootexec in man smb.conf # This file was created by script $0 $valUSR@$valHOST EOF fi ;; Out) grep -qE "^${valUSR}@${valHOST}$" "$fileWhoIsIn" || exit 1 fileTMP="`mktemp`" if [ -z "`grep -vP \"^(\s*(#.*)?|${valUSR}@${valHOST})$\" \"$fileWhoIsIn\"`" ]; then rm -f "$fileWhoIsIn" else grep -vE "^${valUSR}@${valHOST}$" "$fileWhoIsIn" > "$fileTMP" mv -f "$fileTMP" "$fileWhoIsIn" fi ;; *) exit 1 ;; esac
|