Re: Request for Review: Generate /etc/services from the IANA registry

From: Alan Somers <asomers_at_freebsd.org>
Date: Tue, 11 Sep 2018 08:24:25 -0600
Don't worry Steffen.  Python won't be a build requirement for FreeBSD even
after Eric's patch.  His Python script will only need to be run whenever
IANA updates its database, and the results will be checked into source
control.  So for a normal user, there is no change to "make buildworld &&
make installworld".

As for Python vs Awk, I too tried to do this with Awk.  However, Awk can't
easily handle things like IANA's representation of aliases, and it can't
easily format the list in the same order as our current list.  Python is
truly a better choice.

-Alan

On Tue, Sep 11, 2018 at 8:19 AM Steffen Nurpmeso <steffen_at_sdaoden.eu> wrote:

> Eric van Gyzen wrote in <59cd421e-f5d4-855a-83ec-65726f792555_at_vangyzen.net
> >:
>  |On 9/10/18 12:04 PM, Eric van Gyzen wrote:
>  |> Would anyone like to review this change to generate /etc/services from
>  |> the IANA registry?
>  |>
>  |>      https://reviews.freebsd.org/D17106
>  |
>  |If that review made your browser unhappy, try this one instead:
>
> Yes it did.
>
>  | https://reviews.freebsd.org/D17115
>
> I mean, i have nothing to do with FreeBSD except that i use it
> since 4.7 (though some yours only indirectly as Mac OS X), and
> i am in opposition to quite some directions taken, but who am i,
> that is ok, i have a very narrow use case.  But this is one of the
> things i really do not understand, bringing XML and Python stuff
> needlessly into FreeBSD seems very odd.  For example, ArchLinux
> and CRUX Linux use a simple portable awk script to generate
> services and protocols, and all you need to count the number of
> services is a normal Unix pipeline which strips comments and then
> calls wc -l.  I'll paste the script below this.  Thank you.
> And ciao already here
>
> #!/bin/sh -
> #_at_ Update protocols and services from IANA.
> #_at_ Taken from ArchLinux script written by Gaetan Bisson.  Adjusted for
> CRUX.
>
> awk=awk
> curl=curl
> url_pn=
> https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xml
> url_snpn=https://www.iana.org/assignments/service-names-port-numbers/\
> service-names-port-numbers.xml
> <https://www.iana.org/assignments/service-names-port-numbers/%5Cservice-names-port-numbers.xml>
>
> datetime=`date +'%FT%T%z'`
>
> download() {
>    echo 'Downloading protocols'
>    ${curl} -o protocols.xml ${url_pn}
>    [ ${?} -eq 0 ] || exit 20
>    echo 'Downloading services'
>    ${curl} -o services.xml ${url_snpn}
>    [ ${?} -eq 0 ] || exit 21
> }
>
> process() {
>    echo 'Processing protocols'
>    ${awk} -F "[<>]" -v URL="${url_pn}" -v DT="${datetime}" '
>       BEGIN{
>          print "# /etc/protocols, created " DT
>          print "# Source: " URL
>       }
>       /<record/ {v = n = ""}
>       /<value/ {v = $3}
>       /<name/ && $3 !~ / / {n = $3}
>       /<\/record/ && n && v != ""{
>          printf "%-12s %3i %s\n", tolower(n), v, n
>       }
>    ' < protocols.xml > protocols.new
>    [ ${?} -eq 0 ] || exit 30
>
>    echo 'Processing services'
>    ${awk} -F "[<>]" -v URL="${url_snpn}" -v DT="${datetime}" '
>       BEGIN{
>          print "# /etc/services, created " DT
>          print "# Source: " URL
>       }
>       /<record/ {n = u = p = c = ""}
>       /<name/ && !/\(/ {n = $3}
>       /<number/ {u = $3}
>       /<protocol/ {p = $3}
>       /Unassigned/ || /Reserved/ || /historic/ {c = 1}
>       /<\/record/ && n && u && p && !c{
>          printf "%-15s %5i/%s\n", n, u, p
>       }
>    ' < services.xml > services.new
>    [ ${?} -eq 0 ] || exit 31
> }
>
> update() {
>    mv protocols.new protocols
>    [ ${?} -eq 0 ] || exit 40
>    mv services.new services
>    [ ${?} -eq 0 ] || exit 41
>    rm -f protocols.xml services.xml
> }
>
> download
> process
> #update
>
> --steffen
> |
> |Der Kragenbaer,                The moon bear,
> |der holt sich munter           he cheerfully and one by one
> |einen nach dem anderen runter  wa.ks himself off
> |(By Robert Gernhardt)
> _______________________________________________
> freebsd-current_at_freebsd.org mailing list
> https://lists.freebsd.org/mailman/listinfo/freebsd-current
> To unsubscribe, send any mail to "freebsd-current-unsubscribe_at_freebsd.org"
>
Received on Tue Sep 11 2018 - 12:24:41 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:41:18 UTC