On 11/02/2015 09:27 AM, matt darfeuille wrote:
> 
> With the current code the return value of the function 
> syslog_circular_buffer is 1 instead of 0!
> 
> It looks like return 0 does not break the loops!
> 
> So what I did:
> syslog_circular_buffer() {
>     local pid
>     local tty
>     local flags
>     local time
>     local path
>     local args
>     local arg
> 
>     ps w 2> /dev/null | while read pid tty stat time path args; do
>         case $path in
>             syslogd|*/syslogd)
>                 for arg in $args; do
>                     case $arg in
>                         -C*)
>                             return 0
>                             ;;
>                     esac
>                 done
>                 ;;
>             logd|*/logd)
>                 for arg in $args; do
>                     case $arg in
>                         -S*)
> return 0
>                             ;;
> *)
> return 1
> ;;
>                     esac
>                 done
>                 ;;
>         esac
> done
> 
> if [ $? -ne 0 ]; then
> return 1
> fi
> }
> 
> Basicly it needs to break first from the loop and then the function 
> needs to return 0 if there is a match and 1 if there is no match!
> 
> Hopefully you will understant what I am trying to say!!!:)
> 

I tested the above and if fails to find a running 'syslogd -C16' unless
that process is the first process displayed by 'ps -w'. The while loop
is running in a sub-shell, so the 'return' just exits that sub-shell.

I've gone back to using 'echo':

syslog_circular_buffer() {
    local pid
    local tty
    local flags
    local time
    local path
    local args
    local arg

    ps w 2> /dev/null | while read pid tty stat time path args; do
        case $path in
            syslogd|*/syslogd)
                for arg in $args; do
                    case $arg in
                        -C*)
                            echo "Yes"
                            return 0
                            ;;
                    esac
                done
                ;;
            logd|*/logd)
                for arg in $args; do
                    case $arg in
                        -S*)
                            echo "Yes"
                            return 0
                            ;;
                    esac
                done
                ;;
        esac
    done
}

setup_logread() {
    [ -z "$LOGFILE" ] && LOGFILE=/var/log/messages

    if [ -n "$(syslog_circular_buffer)" ]; then
        LOGFILE=logread

That seems to work reliably.

-Tom
-- 
Tom Eastep        \ When I die, I want to go like my Grandfather who
Shoreline,         \ died peacefully in his sleep. Not screaming like
Washington, USA     \ all of the passengers in his car
http://shorewall.net \________________________________________________

Attachment: signature.asc
Description: OpenPGP digital signature

------------------------------------------------------------------------------
_______________________________________________
Shorewall-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/shorewall-users

Reply via email to