Blame lenses/services.aug

Packit Service a2ae7a
(*
Packit Service a2ae7a
Module: Services
Packit Service a2ae7a
 Parses /etc/services
Packit Service a2ae7a
Packit Service a2ae7a
Author: Raphael Pinson <raphink@gmail.com>
Packit Service a2ae7a
Packit Service a2ae7a
About: Reference
Packit Service a2ae7a
 This lens tries to keep as close as possible to 'man services' where possible.
Packit Service a2ae7a
Packit Service a2ae7a
The definitions from 'man services' are put as commentaries for reference
Packit Service a2ae7a
throughout the file. More information can be found in the manual.
Packit Service a2ae7a
Packit Service a2ae7a
About: License
Packit Service a2ae7a
  This file is licensed under the LGPL v2+, like the rest of Augeas.
Packit Service a2ae7a
Packit Service a2ae7a
About: Lens Usage
Packit Service a2ae7a
  Sample usage of this lens in augtool
Packit Service a2ae7a
Packit Service a2ae7a
    * Get the name of the service running on port 22 with protocol tcp
Packit Service a2ae7a
      > match "/files/etc/services/service-name[port = '22'][protocol = 'tcp']"
Packit Service a2ae7a
    * Remove the tcp entry for "domain" service
Packit Service a2ae7a
      > rm "/files/etc/services/service-name[. = 'domain'][protocol = 'tcp']"
Packit Service a2ae7a
    * Add a tcp service named "myservice" on port 55234
Packit Service a2ae7a
      > ins service-name after /files/etc/services/service-name[last()]
Packit Service a2ae7a
      > set /files/etc/services/service-name[last()] "myservice"
Packit Service a2ae7a
      > set "/files/etc/services/service-name[. = 'myservice']/port" "55234"
Packit Service a2ae7a
      > set "/files/etc/services/service-name[. = 'myservice']/protocol" "tcp"
Packit Service a2ae7a
Packit Service a2ae7a
About: Configuration files
Packit Service a2ae7a
  This lens applies to /etc/services. See <filter>.
Packit Service a2ae7a
*)
Packit Service a2ae7a
Packit Service a2ae7a
module Services =
Packit Service a2ae7a
  autoload xfm
Packit Service a2ae7a
Packit Service a2ae7a
Packit Service a2ae7a
(************************************************************************
Packit Service a2ae7a
 * Group:                 USEFUL PRIMITIVES
Packit Service a2ae7a
 *************************************************************************)
Packit Service a2ae7a
Packit Service a2ae7a
(* Group: Generic primitives *)
Packit Service a2ae7a
Packit Service a2ae7a
(* Variable: eol *)
Packit Service a2ae7a
let eol         = del /[ \t]*(#)?[ \t]*\n/ "\n"
Packit Service a2ae7a
let indent      = Util.indent
Packit Service a2ae7a
let comment     = Util.comment
Packit Service a2ae7a
let comment_or_eol = Util.comment_or_eol
Packit Service a2ae7a
let empty       = Util.empty
Packit Service a2ae7a
let protocol_re = /[a-zA-Z]+/
Packit Service a2ae7a
let word_re     = /[a-zA-Z0-9_.+*\/:-]+/
Packit Service a2ae7a
let num_re      = /[0-9]+/
Packit Service a2ae7a
Packit Service a2ae7a
(* Group: Separators *)
Packit Service a2ae7a
let sep_spc = Util.del_ws_spc
Packit Service a2ae7a
Packit Service a2ae7a
Packit Service a2ae7a
(************************************************************************
Packit Service a2ae7a
 * Group:                 LENSES
Packit Service a2ae7a
 *************************************************************************)
Packit Service a2ae7a
Packit Service a2ae7a
(* View: port *)
Packit Service a2ae7a
let port = [ label "port" . store num_re ]
Packit Service a2ae7a
Packit Service a2ae7a
(* View: port_range *)
Packit Service a2ae7a
let port_range = [ label "start" . store num_re ]
Packit Service a2ae7a
                   . Util.del_str "-"
Packit Service a2ae7a
                   . [ label "end" . store num_re ]
Packit Service a2ae7a
Packit Service a2ae7a
(* View: protocol *)
Packit Service a2ae7a
let protocol = [ label "protocol" . store protocol_re ]
Packit Service a2ae7a
Packit Service a2ae7a
(* View: alias *)
Packit Service a2ae7a
let alias = [ label "alias" . store word_re ]
Packit Service a2ae7a
Packit Service a2ae7a
(*
Packit Service a2ae7a
 * View: record
Packit Service a2ae7a
 *   A standard /etc/services record
Packit Service a2ae7a
 *   TODO: make sure a space is added before a comment on new nodes
Packit Service a2ae7a
 *)
Packit Service a2ae7a
let record = [ label "service-name" . store word_re
Packit Service a2ae7a
                 . sep_spc . (port | port_range)
Packit Service a2ae7a
                 . del "/" "/" . protocol . ( sep_spc . alias )*
Packit Service a2ae7a
                 . comment_or_eol ]
Packit Service a2ae7a
Packit Service a2ae7a
(* View: lns
Packit Service a2ae7a
    The services lens is either <empty>, <comment> or <record> *)
Packit Service a2ae7a
let lns = ( empty | comment | record )*
Packit Service a2ae7a
Packit Service a2ae7a
Packit Service a2ae7a
(* View: filter *)
Packit Service a2ae7a
let filter = (incl "/etc/services")
Packit Service a2ae7a
Packit Service a2ae7a
let xfm = transform lns filter