[augeas-devel] [PATCH] Add support for rpc services in inetd.aug, rework lens to allow it and add tests accordingly.

Raphaël Pinson raphink at gmail.com
Tue Nov 2 23:13:38 UTC 2010


Committed as f50bd349377052b367c20896bc0bb0a0dc30d61b

2010/10/27 Raphaël Pinson <raphink at gmail.com>

> As a note, using "#rpc" nodes would prevent from breaking compatibility,
> but I'm really not in favor of using "#field" nodes, as I'd rather keep them
> for special uses (such as "#comment").
>
>
>
> On Wed, Oct 27, 2010 at 10:48 PM, Raphael Pinson <raphink at gmail.com>wrote:
>
>> This patch adds support for RPC service lines in inetd.aug (fixes ticket
>> #109). This requires to change the logic of the lens, because the services
>> are currently mapped using key, so mapping rpc lines leads to a union.put
>> conflict.
>>
>> The normal service lines are now mapped with a "service" label, while RPC
>> services are mapped using a "rpc_service" label. Once this change is made,
>> the "#address" special label is not necessary anymore (it used "#" to
>> prevent conflicts with normal services nodes) and is thus renamed as
>> "address".
>>
>> I believe this lens could get a bit of refactoring love still while we're
>> busy breaking compatibility, but at least this fixes the reported issue.
>>
>> ---
>>  lenses/inetd.aug            |   42 +++++++++++++++++++++++++++-----
>>  lenses/tests/test_inetd.aug |   55
>> ++++++++++++++++++++++++++++---------------
>>  2 files changed, 71 insertions(+), 26 deletions(-)
>>
>> diff --git a/lenses/inetd.aug b/lenses/inetd.aug
>> index 356a8df..c2d0879 100644
>> --- a/lenses/inetd.aug
>> +++ b/lenses/inetd.aug
>> @@ -58,9 +58,8 @@ arguments -- A sequence of arguments to pass to the
>> command.
>>
>>  In addition to this straightforward tree, inetd has the ability to set
>>  "default" listen addresses; this is a little used feature which
>> nonetheless
>> -comes in handy sometimes.  The key for entries of this type is "#address"
>> -(to prevent collision with any real services that might one day be called
>> -"address"), and the subtree should be a sequence of addresses.  "*" can
>> +comes in handy sometimes.  The key for entries of this type is "address"
>> +, and the subtree should be a sequence of addresses.  "*" can
>>  always be used to return the default behaviour of listening on
>> INADDR_ANY.
>>
>>  *)
>> @@ -97,7 +96,7 @@ module Inetd =
>>         * ELEMENTS
>>         ***************************)
>>
>> -       let service = ( [label "address" . address_list . del_str ":" ]? .
>> key /[^ \t\n\/:#]+/ )
>> +       let service (l:string) = ( label l . [label "address" .
>> address_list . del_str ":" ]? . store /[^ \t\n\/:#]+/ )
>>
>>        let socket = [ label "socket" . store /[^ \t\n#]+/ ]
>>
>> @@ -122,7 +121,7 @@ module Inetd =
>>         * SERVICE LINES
>>         ***************************)
>>
>> -       let service_line = [ service
>> +       let service_line = [ service "service"
>>                             . sep
>>                             . socket
>>                             . sep
>> @@ -136,11 +135,40 @@ module Inetd =
>>                             . eol
>>                           ]
>>
>> +
>> +       (***************************
>> +        * RPC LINES
>> +        ***************************)
>> +
>> +       let rpc_service = service "rpc_service" . Util.del_str "/"
>> +                        . [ label "version" . store Rx.integer ]
>> +
>> +        let rpc_endpoint = [ label "endpoint-type" . store Rx.word ]
>> +        let rpc_protocol = Util.del_str "rpc/"
>> +                         . (Build.opt_list
>> +                             [label "protocol" . store /[^ \t\n,#]+/ ]
>> +                             Sep.comma)
>> +
>> +       let rpc_line = [ rpc_service
>> +                            . sep
>> +                            . rpc_endpoint
>> +                            . sep
>> +                            . rpc_protocol
>> +                            . sep
>> +                            . wait
>> +                            . sep
>> +                            . usergroup
>> +                            . sep
>> +                            . command
>> +                            . eol
>> +                          ]
>> +
>> +
>>        (***************************
>>         * DEFAULT LISTEN ADDRESSES
>>         ***************************)
>>
>> -       let default_listen_address = [ label "#address"
>> +       let default_listen_address = [ label "address"
>>                                       . address_list
>>                                       . del_str ":"
>>                                       . eol
>> @@ -150,7 +178,7 @@ module Inetd =
>>         * LENS / FILTER
>>         ***********************)
>>
>> -       let lns = (comment|empty|service_line|default_listen_address)*
>> +       let lns =
>> (comment|empty|service_line|rpc_line|default_listen_address)*
>>
>>        let filter = incl "/etc/inetd.conf"
>>
>> diff --git a/lenses/tests/test_inetd.aug b/lenses/tests/test_inetd.aug
>> index cc9c6ad..8f9f656 100644
>> --- a/lenses/tests/test_inetd.aug
>> +++ b/lenses/tests/test_inetd.aug
>> @@ -22,19 +22,21 @@ dotgroupsrv stream  tcp     nowait  fred.wilma
>>  /usr/bin/dotgroupsrv
>>  colongroupsrv  stream  tcp     nowait  fred:wilma
>>  /usr/bin/colongroupsrv
>>
>>  maxsrv         stream  tcp     nowait.20       fred    /usr/bin/maxsrv
>> +
>> +dummy/1       tli     rpc/circuit_v,udp       wait    root
>>  /tmp/test_svc   test_svc
>>  "
>>
>>        test Inetd.lns get conf =
>>                { "#comment" = "Blah di blah comment" }
>>                {}
>> -               { "simplesrv"
>> +               { "service" = "simplesrv"
>>                        { "socket" = "stream" }
>>                        { "protocol" = "tcp" }
>>                        { "wait" = "nowait" }
>>                        { "user" = "fred" }
>>                        { "command" = "/usr/bin/simplesrv" }
>>                }
>> -               { "arguserve"
>> +               { "service" = "arguserve"
>>                        { "socket" = "dgram" }
>>                        { "protocol" = "udp" }
>>                        { "wait" = "wait" }
>> @@ -47,7 +49,7 @@ maxsrv                stream  tcp     nowait.20
>> fred    /usr/bin/maxsrv
>>                        }
>>                }
>>                {}
>> -               { "1234"
>> +               { "service" = "1234"
>>                        { "socket" = "stream" }
>>                        { "protocol" = "tcp" }
>>                        { "wait" = "nowait" }
>> @@ -55,7 +57,7 @@ maxsrv                stream  tcp     nowait.20
>> fred    /usr/bin/maxsrv
>>                        { "command" = "/usr/bin/numbersrv" }
>>                }
>>                {}
>> -               { "addrsrv"
>> +               { "service" = "addrsrv"
>>                        { "address"
>>                                { "1" = "127.0.0.1" }
>>                        }
>> @@ -65,7 +67,7 @@ maxsrv                stream  tcp     nowait.20
>> fred    /usr/bin/maxsrv
>>                        { "user" = "fred" }
>>                        { "command" = "/usr/bin/addrsrv" }
>>                }
>> -               { "multiaddrsrv"
>> +               { "service" = "multiaddrsrv"
>>                        { "address"
>>                                { "1" = "127.0.0.1" }
>>                                { "2" = "10.0.0.1" }
>> @@ -76,18 +78,18 @@ maxsrv              stream  tcp     nowait.20
>> fred    /usr/bin/maxsrv
>>                        { "user" = "fred" }
>>                        { "command" = "/usr/bin/multiaddrsrv" }
>>                }
>> -               { "#address"
>> +               { "address"
>>                        { "1" = "faff.fred.com" }
>>                }
>> -               { "#address"
>> +               { "address"
>>                        { "1" = "127.0.0.1" }
>>                        { "2" = "faff.fred.com" }
>>                }
>> -               { "#address"
>> +               { "address"
>>                        { "1" = "*" }
>>                }
>>                {}
>> -               { "sndbufsrv"
>> +               { "service" = "sndbufsrv"
>>                        { "socket" = "stream" }
>>                        { "protocol" = "tcp" }
>>                        { "sndbuf" = "12k" }
>> @@ -95,7 +97,7 @@ maxsrv                stream  tcp     nowait.20
>> fred    /usr/bin/maxsrv
>>                        { "user" = "fred" }
>>                        { "command" = "/usr/bin/sndbufsrv" }
>>                }
>> -               { "rcvbufsrv"
>> +               { "service" = "rcvbufsrv"
>>                        { "socket" = "stream" }
>>                        { "protocol" = "tcp" }
>>                        { "rcvbuf" = "24k" }
>> @@ -103,7 +105,7 @@ maxsrv              stream  tcp     nowait.20
>> fred    /usr/bin/maxsrv
>>                        { "user" = "fred" }
>>                        { "command" = "/usr/bin/rcvbufsrv" }
>>                }
>> -               { "allbufsrv"
>> +               { "service" = "allbufsrv"
>>                        { "socket" = "stream" }
>>                        { "protocol" = "tcp" }
>>                        { "sndbuf" = "1m" }
>> @@ -113,7 +115,7 @@ maxsrv              stream  tcp     nowait.20
>> fred    /usr/bin/maxsrv
>>                        { "command" = "/usr/bin/allbufsrv" }
>>                }
>>                {}
>> -               { "dotgroupsrv"
>> +               { "service" = "dotgroupsrv"
>>                        { "socket" = "stream" }
>>                        { "protocol" = "tcp" }
>>                        { "wait" = "nowait" }
>> @@ -121,7 +123,7 @@ maxsrv              stream  tcp     nowait.20
>> fred    /usr/bin/maxsrv
>>                        { "group" = "wilma" }
>>                        { "command" = "/usr/bin/dotgroupsrv" }
>>                }
>> -               { "colongroupsrv"
>> +               { "service" = "colongroupsrv"
>>                        { "socket" = "stream" }
>>                        { "protocol" = "tcp" }
>>                        { "wait" = "nowait" }
>> @@ -130,7 +132,7 @@ maxsrv              stream  tcp     nowait.20
>> fred    /usr/bin/maxsrv
>>                        { "command" = "/usr/bin/colongroupsrv" }
>>                }
>>                {}
>> -               { "maxsrv"
>> +               { "service" = "maxsrv"
>>                        { "socket" = "stream" }
>>                        { "protocol" = "tcp" }
>>                        { "wait" = "nowait" }
>> @@ -138,6 +140,18 @@ maxsrv             stream  tcp     nowait.20
>> fred    /usr/bin/maxsrv
>>                        { "user" = "fred" }
>>                        { "command" = "/usr/bin/maxsrv" }
>>                }
>> +                {}
>> +                { "rpc_service" = "dummy"
>> +                        { "version" = "1" }
>> +                        { "endpoint-type" = "tli" }
>> +                        { "protocol" = "circuit_v" }
>> +                        { "protocol" = "udp" }
>> +                        { "wait" = "wait" }
>> +                        { "user" = "root" }
>> +                        { "command" = "/tmp/test_svc" }
>> +                        { "arguments"
>> +                           { "1" = "test_svc" } }
>> +                }
>>
>>
>>
>>  (**************************************************************************)
>> @@ -145,9 +159,12 @@ maxsrv             stream  tcp     nowait.20
>> fred    /usr/bin/maxsrv
>>        (* Test new file creation *)
>>
>>        test Inetd.lns put "" after
>> -               set "/faffsrv/socket" "stream";
>> -               set "/faffsrv/protocol" "tcp";
>> -               set "/faffsrv/wait" "nowait";
>> -               set "/faffsrv/user" "george";
>> -               set "/faffsrv/command" "/sbin/faffsrv"
>> +                set "/service" "faffsrv";
>> +               set "/service/socket" "stream";
>> +               set "/service/protocol" "tcp";
>> +               set "/service/wait" "nowait";
>> +               set "/service/user" "george";
>> +               set "/service/command" "/sbin/faffsrv"
>>        = "faffsrv      stream  tcp     nowait  george  /sbin/faffsrv\n"
>> +
>> +
>> --
>> 1.7.0.4
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listman.redhat.com/archives/augeas-devel/attachments/20101103/4f25a7ee/attachment.htm>


More information about the augeas-devel mailing list