>Synopsis:      relayd hitting a syntax error will continue parsing and give 
>even more confusing errors
>Category:      system
>Environment:
        System      : OpenBSD 6.6
        Details     : OpenBSD 6.6 (GENERIC.MP) #372: Sat Oct 12 10:56:27 MDT 
2019
                         
[email protected]:/usr/src/sys/arch/amd64/compile/GENERIC.MP

        Architecture: OpenBSD.amd64
        Machine     : amd64


>Description:

        relayd gives a nonsense error if a relay has two protocols but the 
first is invalid.

>How-To-Repeat:

        ```
        # relayd.conf
        table <web> { "127.0.0.1" }
        table <app> { "127.0.0.1" }

        http protocol web {
                return error

                # syntax error: missing quotes:
                tls ca file /etc/ssl/cert.pem
        }

        http protocol web_app {
                return error

                match request path "/app/*" forward to <app>
        }

        relay https_proxy {
                listen on 0.0.0.0 port 80

                protocol web
                forward to <web> port 8080

                protocol web_app
                forward to <app> port 8082
        }
        ```

        ```
        $ doas relayd -d -v -f relayd.conf 
        startup
        relayd.conf:8: syntax error
        relayd.conf:20: no such protocol: web
        relayd.conf:23: protocol web_app defined twice
        no actions, nothing to do
        unused protocol: web_app
        ca exiting, pid 3075
        relay exiting, pid 71928
        pfe exiting, pid 81431
        hce exiting, pid 95455
        ca exiting, pid 62478
        relay exiting, pid 9500
        relay exiting, pid 64011
        ca exiting, pid 18935
        ```

        Or,

        ```
        # relayd.conf                                                           
                                              
        table <web> { "127.0.0.1" }
        table <app> { "127.0.0.1" }

        http protocol web {
                return error

                tls ca file "/etc/ssl/cert.pem"
        }

        http protocol blah {
                return error

                match request path "/app/*" forward to <app>
        }

        relay https_proxy {
                listen on 0.0.0.0 port 80

                # error: undefined protocol
                protocol web2
                forward to <app> port 8082

                protocol web
                forward to <web> port 8080
        }
        ```

        ```
        $ doas relayd -d -v -f relayd.conf  
        startup
        relayd.conf:20: no such protocol: web2
        relayd.conf:23: protocol web defined twice
        no actions, nothing to do
        unused protocol: web
        unused protocol: blah
        hce exiting, pid 49635
        pfe exiting, pid 65232
        ca exiting, pid 43948
        ca exiting, pid 20719
        ca exiting, pid 85785
        relay exiting, pid 21295
        relay exiting, pid 13943
        relay exiting, pid 46257
        ```

        Those protocols were never defined twice, of course.

Reply via email to