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

_______________________________________________
augeas-devel mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/augeas-devel

Reply via email to