[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
Wed Oct 27 20:51:10 UTC 2010
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/20101027/d1457f8b/attachment.htm>
More information about the augeas-devel
mailing list