<meta http-equiv="content-type" content="text/html; charset=utf-8">Committed as <meta http-equiv="content-type" content="text/html; charset=utf-8"><span class="Apple-style-span" style="font-family: monospace; font-size: 12px; ">f50bd349377052b367c20896bc0bb0a0dc30d61b</span><br>
<br><div class="gmail_quote">2010/10/27 Raphaël Pinson <span dir="ltr"><<a href="mailto:raphink@gmail.com">raphink@gmail.com</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
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").<div>
<div></div><div class="h5"><div>
<br></div><div><br></div><div><br><div class="gmail_quote">On Wed, Oct 27, 2010 at 10:48 PM, Raphael Pinson <span dir="ltr"><<a href="mailto:raphink@gmail.com" target="_blank">raphink@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
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.<br>


<br>
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".<br>


<br>
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.<br>
<br>
---<br>
 lenses/inetd.aug            |   42 +++++++++++++++++++++++++++-----<br>
 lenses/tests/test_inetd.aug |   55 ++++++++++++++++++++++++++++---------------<br>
 2 files changed, 71 insertions(+), 26 deletions(-)<br>
<br>
diff --git a/lenses/inetd.aug b/lenses/inetd.aug<br>
index 356a8df..c2d0879 100644<br>
--- a/lenses/inetd.aug<br>
+++ b/lenses/inetd.aug<br>
@@ -58,9 +58,8 @@ arguments -- A sequence of arguments to pass to the command.<br>
<br>
 In addition to this straightforward tree, inetd has the ability to set<br>
 "default" listen addresses; this is a little used feature which nonetheless<br>
-comes in handy sometimes.  The key for entries of this type is "#address"<br>
-(to prevent collision with any real services that might one day be called<br>
-"address"), and the subtree should be a sequence of addresses.  "*" can<br>
+comes in handy sometimes.  The key for entries of this type is "address"<br>
+, and the subtree should be a sequence of addresses.  "*" can<br>
 always be used to return the default behaviour of listening on INADDR_ANY.<br>
<br>
 *)<br>
@@ -97,7 +96,7 @@ module Inetd =<br>
         * ELEMENTS<br>
         ***************************)<br>
<br>
-       let service = ( [label "address" . address_list . del_str ":" ]? . key /[^ \t\n\/:#]+/ )<br>
+       let service (l:string) = ( label l . [label "address" . address_list . del_str ":" ]? . store /[^ \t\n\/:#]+/ )<br>
<br>
        let socket = [ label "socket" . store /[^ \t\n#]+/ ]<br>
<br>
@@ -122,7 +121,7 @@ module Inetd =<br>
         * SERVICE LINES<br>
         ***************************)<br>
<br>
-       let service_line = [ service<br>
+       let service_line = [ service "service"<br>
                             . sep<br>
                             . socket<br>
                             . sep<br>
@@ -136,11 +135,40 @@ module Inetd =<br>
                             . eol<br>
                           ]<br>
<br>
+<br>
+       (***************************<br>
+        * RPC LINES<br>
+        ***************************)<br>
+<br>
+       let rpc_service = service "rpc_service" . Util.del_str "/"<br>
+                        . [ label "version" . store Rx.integer ]<br>
+<br>
+        let rpc_endpoint = [ label "endpoint-type" . store Rx.word ]<br>
+        let rpc_protocol = Util.del_str "rpc/"<br>
+                         . (Build.opt_list<br>
+                             [label "protocol" . store /[^ \t\n,#]+/ ]<br>
+                             Sep.comma)<br>
+<br>
+       let rpc_line = [ rpc_service<br>
+                            . sep<br>
+                            . rpc_endpoint<br>
+                            . sep<br>
+                            . rpc_protocol<br>
+                            . sep<br>
+                            . wait<br>
+                            . sep<br>
+                            . usergroup<br>
+                            . sep<br>
+                            . command<br>
+                            . eol<br>
+                          ]<br>
+<br>
+<br>
        (***************************<br>
         * DEFAULT LISTEN ADDRESSES<br>
         ***************************)<br>
<br>
-       let default_listen_address = [ label "#address"<br>
+       let default_listen_address = [ label "address"<br>
                                       . address_list<br>
                                       . del_str ":"<br>
                                       . eol<br>
@@ -150,7 +178,7 @@ module Inetd =<br>
         * LENS / FILTER<br>
         ***********************)<br>
<br>
-       let lns = (comment|empty|service_line|default_listen_address)*<br>
+       let lns = (comment|empty|service_line|rpc_line|default_listen_address)*<br>
<br>
        let filter = incl "/etc/inetd.conf"<br>
<br>
diff --git a/lenses/tests/test_inetd.aug b/lenses/tests/test_inetd.aug<br>
index cc9c6ad..8f9f656 100644<br>
--- a/lenses/tests/test_inetd.aug<br>
+++ b/lenses/tests/test_inetd.aug<br>
@@ -22,19 +22,21 @@ dotgroupsrv stream  tcp     nowait  fred.wilma      /usr/bin/dotgroupsrv<br>
 colongroupsrv  stream  tcp     nowait  fred:wilma      /usr/bin/colongroupsrv<br>
<br>
 maxsrv         stream  tcp     nowait.20       fred    /usr/bin/maxsrv<br>
+<br>
+dummy/1       tli     rpc/circuit_v,udp       wait    root    /tmp/test_svc   test_svc<br>
 "<br>
<br>
        test Inetd.lns get conf =<br>
                { "#comment" = "Blah di blah comment" }<br>
                {}<br>
-               { "simplesrv"<br>
+               { "service" = "simplesrv"<br>
                        { "socket" = "stream" }<br>
                        { "protocol" = "tcp" }<br>
                        { "wait" = "nowait" }<br>
                        { "user" = "fred" }<br>
                        { "command" = "/usr/bin/simplesrv" }<br>
                }<br>
-               { "arguserve"<br>
+               { "service" = "arguserve"<br>
                        { "socket" = "dgram" }<br>
                        { "protocol" = "udp" }<br>
                        { "wait" = "wait" }<br>
@@ -47,7 +49,7 @@ maxsrv                stream  tcp     nowait.20       fred    /usr/bin/maxsrv<br>
                        }<br>
                }<br>
                {}<br>
-               { "1234"<br>
+               { "service" = "1234"<br>
                        { "socket" = "stream" }<br>
                        { "protocol" = "tcp" }<br>
                        { "wait" = "nowait" }<br>
@@ -55,7 +57,7 @@ maxsrv                stream  tcp     nowait.20       fred    /usr/bin/maxsrv<br>
                        { "command" = "/usr/bin/numbersrv" }<br>
                }<br>
                {}<br>
-               { "addrsrv"<br>
+               { "service" = "addrsrv"<br>
                        { "address"<br>
                                { "1" = "127.0.0.1" }<br>
                        }<br>
@@ -65,7 +67,7 @@ maxsrv                stream  tcp     nowait.20       fred    /usr/bin/maxsrv<br>
                        { "user" = "fred" }<br>
                        { "command" = "/usr/bin/addrsrv" }<br>
                }<br>
-               { "multiaddrsrv"<br>
+               { "service" = "multiaddrsrv"<br>
                        { "address"<br>
                                { "1" = "127.0.0.1" }<br>
                                { "2" = "10.0.0.1" }<br>
@@ -76,18 +78,18 @@ maxsrv              stream  tcp     nowait.20       fred    /usr/bin/maxsrv<br>
                        { "user" = "fred" }<br>
                        { "command" = "/usr/bin/multiaddrsrv" }<br>
                }<br>
-               { "#address"<br>
+               { "address"<br>
                        { "1" = "<a href="http://faff.fred.com" target="_blank">faff.fred.com</a>" }<br>
                }<br>
-               { "#address"<br>
+               { "address"<br>
                        { "1" = "127.0.0.1" }<br>
                        { "2" = "<a href="http://faff.fred.com" target="_blank">faff.fred.com</a>" }<br>
                }<br>
-               { "#address"<br>
+               { "address"<br>
                        { "1" = "*" }<br>
                }<br>
                {}<br>
-               { "sndbufsrv"<br>
+               { "service" = "sndbufsrv"<br>
                        { "socket" = "stream" }<br>
                        { "protocol" = "tcp" }<br>
                        { "sndbuf" = "12k" }<br>
@@ -95,7 +97,7 @@ maxsrv                stream  tcp     nowait.20       fred    /usr/bin/maxsrv<br>
                        { "user" = "fred" }<br>
                        { "command" = "/usr/bin/sndbufsrv" }<br>
                }<br>
-               { "rcvbufsrv"<br>
+               { "service" = "rcvbufsrv"<br>
                        { "socket" = "stream" }<br>
                        { "protocol" = "tcp" }<br>
                        { "rcvbuf" = "24k" }<br>
@@ -103,7 +105,7 @@ maxsrv              stream  tcp     nowait.20       fred    /usr/bin/maxsrv<br>
                        { "user" = "fred" }<br>
                        { "command" = "/usr/bin/rcvbufsrv" }<br>
                }<br>
-               { "allbufsrv"<br>
+               { "service" = "allbufsrv"<br>
                        { "socket" = "stream" }<br>
                        { "protocol" = "tcp" }<br>
                        { "sndbuf" = "1m" }<br>
@@ -113,7 +115,7 @@ maxsrv              stream  tcp     nowait.20       fred    /usr/bin/maxsrv<br>
                        { "command" = "/usr/bin/allbufsrv" }<br>
                }<br>
                {}<br>
-               { "dotgroupsrv"<br>
+               { "service" = "dotgroupsrv"<br>
                        { "socket" = "stream" }<br>
                        { "protocol" = "tcp" }<br>
                        { "wait" = "nowait" }<br>
@@ -121,7 +123,7 @@ maxsrv              stream  tcp     nowait.20       fred    /usr/bin/maxsrv<br>
                        { "group" = "wilma" }<br>
                        { "command" = "/usr/bin/dotgroupsrv" }<br>
                }<br>
-               { "colongroupsrv"<br>
+               { "service" = "colongroupsrv"<br>
                        { "socket" = "stream" }<br>
                        { "protocol" = "tcp" }<br>
                        { "wait" = "nowait" }<br>
@@ -130,7 +132,7 @@ maxsrv              stream  tcp     nowait.20       fred    /usr/bin/maxsrv<br>
                        { "command" = "/usr/bin/colongroupsrv" }<br>
                }<br>
                {}<br>
-               { "maxsrv"<br>
+               { "service" = "maxsrv"<br>
                        { "socket" = "stream" }<br>
                        { "protocol" = "tcp" }<br>
                        { "wait" = "nowait" }<br>
@@ -138,6 +140,18 @@ maxsrv             stream  tcp     nowait.20       fred    /usr/bin/maxsrv<br>
                        { "user" = "fred" }<br>
                        { "command" = "/usr/bin/maxsrv" }<br>
                }<br>
+                {}<br>
+                { "rpc_service" = "dummy"<br>
+                        { "version" = "1" }<br>
+                        { "endpoint-type" = "tli" }<br>
+                        { "protocol" = "circuit_v" }<br>
+                        { "protocol" = "udp" }<br>
+                        { "wait" = "wait" }<br>
+                        { "user" = "root" }<br>
+                        { "command" = "/tmp/test_svc" }<br>
+                        { "arguments"<br>
+                           { "1" = "test_svc" } }<br>
+                }<br>
<br>
<br>
 (**************************************************************************)<br>
@@ -145,9 +159,12 @@ maxsrv             stream  tcp     nowait.20       fred    /usr/bin/maxsrv<br>
        (* Test new file creation *)<br>
<br>
        test Inetd.lns put "" after<br>
-               set "/faffsrv/socket" "stream";<br>
-               set "/faffsrv/protocol" "tcp";<br>
-               set "/faffsrv/wait" "nowait";<br>
-               set "/faffsrv/user" "george";<br>
-               set "/faffsrv/command" "/sbin/faffsrv"<br>
+                set "/service" "faffsrv";<br>
+               set "/service/socket" "stream";<br>
+               set "/service/protocol" "tcp";<br>
+               set "/service/wait" "nowait";<br>
+               set "/service/user" "george";<br>
+               set "/service/command" "/sbin/faffsrv"<br>
        = "faffsrv      stream  tcp     nowait  george  /sbin/faffsrv\n"<br>
+<br>
+<br>
<font color="#888888">--<br>
1.7.0.4<br>
<br>
</font></blockquote></div><br></div>
</div></div></blockquote></div><br>