/usr/share/augeas/lenses/dist/inetd.aug is in augeas-lenses 1.2.0-0ubuntu1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 | (* inetd.conf lens definition for Augeas
Auther: Matt Palmer <mpalmer@hezmatt.org>
Copyright (C) 2009 Matt Palmer, All Rights Reserved
This program is free software: you can redistribute it and/or modify it
under the terms of the GNU Lesser General Public License version 2.1 as
published by the Free Software Foundation.
This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
Public License for more details.
You should have received a copy of the GNU General Public License along
with this program. If not, see <http://www.gnu.org/licenses/>.
This lens parses /etc/inetd.conf. The current format is based on the
syntax documented in the inetd manpage shipped with Debian's openbsd-inetd
package version 0.20080125-2. Apologies if your inetd.conf doesn't follow
the same format.
Each top-level entry will have a key being that of the service name (the
first column in the service definition, which is the name or number of the
port that the service should listen on). The attributes for the service all
sit under that. In regular Augeas style, the order of the attributes
matter, and attempts to set things in a different order will fail miserably.
The defined attribute names (and the order in which they must appear) are as
follows (with mandatory parameters indicated by [*]):
address -- a sequence of IP addresses or hostnames on which this service
should listen.
socket[*] -- The type of the socket that will be created (either stream or
dgram, although the lens doesn't constrain the possibilities here)
protocol[*] -- The socket protocol. I believe that the usual possibilities
are "tcp", "udp", or "unix", but no restriction is made on what you
can actually put here.
sndbuf -- Specify a non-default size for the send buffer of the connection.
rcvbuf -- Specify a non-default size for the receive buffer of the connection.
wait[*] -- Whether to wait for new connections ("wait"), or just terminate
immediately ("nowait").
max -- The maximum number of times that a service can be invoked in one minute.
user[*] -- The user to run the service as.
group -- A group to set the running service to, rather than the primary
group of the previously specified user.
command[*] -- What program to run.
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"
, and the subtree should be a sequence of addresses. "*" can
always be used to return the default behaviour of listening on INADDR_ANY.
*)
module Inetd =
autoload xfm
(***************************
* PRIMITIVES
***************************)
(* Store whitespace *)
let wsp = del /[ \t]+/ " "
let sep = del /[ \t]+/ " "
let owsp(t:string) = del /[ \t]*/ t
(* It's the end of the line as we know it... doo, doo, dooooo *)
let eol = Util.eol
(* In the beginning, the earth was without form, and void *)
let empty = Util.empty
let comment = Util.comment
let del_str = Util.del_str
let address = [ seq "addrseq" . store /([a-zA-Z0-9.-]+|\[[A-Za-z0-9:?*%]+\]|\*)/ ]
let address_list = ( counter "addrseq" . (address . del_str ",")* . address )
let argument = [ seq "argseq" . store /[^ \t\n]+/ ]
let argument_list = ( counter "argseq" . [ label "arguments" . (argument . wsp)* . argument ] )
(***************************
* ELEMENTS
***************************)
let service (l:string) = ( label l . [label "address" . address_list . del_str ":" ]? . store /[^ \t\n\/:#]+/ )
let socket = [ label "socket" . store /[^ \t\n#]+/ ]
let protocol = ( [ label "protocol" . store /[^ \t\n,#]+/ ]
. [ del_str "," . key /sndbuf/ . del_str "=" . store /[^ \t\n,]+/ ]?
. [ del_str "," . key /rcvbuf/ . del_str "=" . store /[^ \t\n,]+/ ]?
)
let wait = ( [ label "wait" . store /(wait|nowait)/ ]
. [ del_str "." . label "max" . store /[0-9]+/ ]?
)
let usergroup = ( [ label "user" . store /[^ \t\n:.]+/ ]
. [ del /[:.]/ ":" . label "group" . store /[^ \t\n:.]+/ ]?
)
let command = ( [ label "command" . store /[^ \t\n]+/ ]
. (wsp . argument_list)?
)
(***************************
* SERVICE LINES
***************************)
let service_line = [ service "service"
. sep
. socket
. sep
. protocol
. sep
. wait
. sep
. usergroup
. sep
. command
. 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"
. address_list
. del_str ":"
. eol
]
(***********************
* LENS / FILTER
***********************)
let lns = (comment|empty|service_line|rpc_line|default_listen_address)*
let filter = incl "/etc/inetd.conf"
let xfm = transform lns filter
|