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

Alan Somers asomers at freebsd.org
Tue Sep 11 14:24:42 UTC 2018


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 -
> #@ Update protocols and services from IANA.
> #@ 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"
>


More information about the freebsd-current mailing list