Bug 29216 - univention-ipcalc6 kann IPv6 "netmask" nicht parsen
univention-ipcalc6 kann IPv6 "netmask" nicht parsen
Status: CLOSED FIXED
Product: UCS
Classification: Unclassified
Component: DNS
UCS 3.0
Other Linux
: P5 normal (vote)
: UCS 3.1
Assigned To: Lukas Walter
Sönke Schwardt-Krummrich
: interim-4
Depends on:
Blocks: 28473
  Show dependency treegraph
 
Reported: 2012-11-13 15:15 CET by Sönke Schwardt-Krummrich
Modified: 2012-12-12 21:11 CET (History)
2 users (show)

See Also:
What kind of report is it?: ---
What type of bug is this?: ---
Who will be affected by this bug?: ---
How will those affected feel about the bug?: ---
User Pain:
Enterprise Customer affected?:
School Customer affected?:
ISV affected?:
Waiting Support:
Flags outvoted (downgraded) after PO Review:
Ticket number:
Bug group (optional):
Max CVSS v3 score:
hahn: Patch_Available+


Attachments
Fix get_default_netmask() (5.09 KB, patch)
2012-11-20 17:42 CET, Philipp Hahn
Details | Diff
Use get_default_netprefix() (28.43 KB, patch)
2012-11-20 18:27 CET, Philipp Hahn
Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Sönke Schwardt-Krummrich univentionstaff 2012-11-13 15:15:32 CET
# univention-ipcalc6 --netmask "ffff:ffff:ffff:ffff:ffff::" --ip \
             "2001:4dd0:ff00:8c42:ff18::21" --output reverse --calcdns

'2001:4dd0:ff00:8c42:ff18::21/ffff:ffff:ffff:ffff:ffff::' does not appear to be an IPv4 or IPv6 network

Wird statt "ffff:ffff:ffff:ffff:ffff::" der Wert "80" angegeben, funktioniert die Berechnung.

Verwendet wird dies in 05_univention-bind.inst. Da die Berechnung nicht erfolgreich war, bricht das Joinskript ab und der Bind läuft nicht, weil dns/master/address nicht gesetzt ist, was zu anderen Problemen beim joinen eines Masters führt.
Comment 1 Sönke Schwardt-Krummrich univentionstaff 2012-11-13 15:16:27 CET
Negativ bemerkbar hat sich dies auf einem UCS3.1-Master-IPv6-only-System gemacht.
Comment 2 Philipp Hahn univentionstaff 2012-11-13 19:03:31 CET
<http://www.ietf.org/rfc/rfc2373.txt>
> The text representation of IPv6 address prefixes is similar to the
>    way IPv4 addresses prefixes are written in CIDR notation.  An IPv6
>    address prefix is represented by the notation:
>
>       ipv6-address/prefix-length
>
>    where
>
>       ipv6-address    is an IPv6 address in any of the notations listed
>                       in section 2.2.
>
>       prefix-length   is a decimal value specifying how many of the
>                       leftmost contiguous bits of the address comprise
>                       the prefix.

Damit ist nur der Name "--netmask" sehr unglücklich gewählt, aber auch nicht mehr änderbar, weil die API so zu UCS-3.0 eingeführt wurde.
Comment 3 Stefan Gohmann univentionstaff 2012-11-14 07:15:30 CET
Es bleibt das Problem, dass das bind Joinskript nicht durchläuft. Das sollten wir in interim-4 noch beheben, damit ein reines IPv6 Setup erfolgreich aufgesetzt werden kann.

Wenn ich es richtig sehe, dann war das univention-ipcalc6 Verhalten in 3.0 auch schon so, nur hat das Joinskript damals nicht abgebrochen.
Comment 4 Philipp Hahn univentionstaff 2012-11-14 08:36:21 CET
(In reply to comment #3)
> Es bleibt das Problem, dass das bind Joinskript nicht durchläuft. Das sollten
> wir in interim-4 noch beheben, damit ein reines IPv6 Setup erfolgreich
> aufgesetzt werden kann.

Das war die entscheidende Information, die bisher an diesem Bugreport gefehlt hat: Ggf. sollte man hier dem bind-Join-Skript den Unsinn abgewöhnen, eine "Bitmask" an univention-ipcacl6 zu übergeben, die sowieso keine Bitmask im klassischen Sinne ist, sondern lediglich die Prefixlänge zu übergeben.

> Wenn ich es richtig sehe, dann war das univention-ipcalc6 Verhalten in 3.0 auch
> schon so, nur hat das Joinskript damals nicht abgebrochen.

Ja, das hatte ich gestern nämlich auch getestet, nur das in 3.0 sogar noch der komplette Traceback ausgegeben wurde; das tut 3.1 jetzt nicht mehr, sondern gibt nur noch die Meldung aus, daß das Format ungültig ist.
Comment 5 Sönke Schwardt-Krummrich univentionstaff 2012-11-14 10:41:09 CET
(In reply to comment #4)
> (In reply to comment #3)
> > Es bleibt das Problem, dass das bind Joinskript nicht durchläuft. Das sollten
> > wir in interim-4 noch beheben, damit ein reines IPv6 Setup erfolgreich
> > aufgesetzt werden kann.
> 
> Das war die entscheidende Information, die bisher an diesem Bugreport gefehlt
> hat: Ggf. sollte man hier dem bind-Join-Skript den Unsinn abgewöhnen, eine
> "Bitmask" an univention-ipcacl6 zu übergeben, die sowieso keine Bitmask im
> klassischen Sinne ist, sondern lediglich die Prefixlänge zu übergeben.

Das bind-Joinskript verwendet "get_default_netmask" aus der Shell-Lib. Man sollte eher dort den Fix ansetzen, was aber auch erheblich mehr Nebenwirkungen haben kann.
Comment 6 Stefan Gohmann univentionstaff 2012-11-20 16:38:11 CET
Im Moment sollte es reichen, dass wir in diesem Fall nicht abbrechen.
Comment 7 Philipp Hahn univentionstaff 2012-11-20 17:41:32 CET
get_default_netmask() wird an 3 Stellen in der Form
 NETMASK="$(get_default_netmask)"
aufgerufen:

 management/univention-join/univention-join:385
  wird per -netmask an univention-server-join:313 weitergeleitet wird:
   subnet="$(univention-ipcalc6 --ip "$IP" --netmask "$NETMASK" --output reverse --calcdns)"

 management/univention-ldap/10univention-ldap-server.inst:54
  Hier wird einmal direkt univention-uipcal6 aufgerufen:
   reverse=$(univention-ipcalc6 --netmask "$NETMASK" --ip "$IP" --output reverse --calcdns)
  Ansonsten wird es an UDM weitergegeben:
   udm networks/network create "$@" ... --set netmask="$NETMASK" ...
 
 services/univention-bind/05univention-bind.inst:65
  Hier wird zewimal ipcalc6 aufgerufen:
   reversezone=$(univention-ipcalc6 --netmask "$NETMASK" --ip "$IP" --output reverse --calcdns)
   ptr=$(univention-ipcalc6 --netmask "$NETMASK" --ip "$IP" --output pointer --calcdns)

Da "udm network/network" sowieso als "netmask" selbst bei IPv4 die Prefixlänge ausgiebt, und univention-ipcalc6 sowieso die Prefixlänge erwartet, ist die einfachste Änderung, statt der "Netmask" einfach die "Prefixlänge" auszugeben.
Damit ist der Name der Funktion zwar völlig irreführend, aber das kann ggf. später über einem 2. Bug korrigiert werden.
Comment 8 Philipp Hahn univentionstaff 2012-11-20 17:42:06 CET
Created attachment 4822 [details]
Fix get_default_netmask()
Comment 9 Philipp Hahn univentionstaff 2012-11-20 18:10:09 CET
Die sauberere Lösung wäre (Sönke ist dacor), die alte Funktion so zu belassen, die neue daneben zu legen, und die 3 Aufrufer zu ändern (ggf. auch dort s/NETMASK/NETPREFIXLEN/).
Comment 10 Philipp Hahn univentionstaff 2012-11-20 18:27:06 CET
Created attachment 4823 [details]
Use get_default_netprefix()

Neue Funktion und Änderung der Aufrufer
Comment 11 Stefan Gohmann univentionstaff 2012-11-22 17:43:46 CET
(In reply to comment #6)
> Im Moment sollte es reichen, dass wir in diesem Fall nicht abbrechen.

Bitte im ersten Schritt nur die einfache Variante umsetzen, den Rest dann über einen neuen Bug.
Comment 12 Stefan Gohmann univentionstaff 2012-11-22 17:45:27 CET
(In reply to comment #11)
> (In reply to comment #6)
> > Im Moment sollte es reichen, dass wir in diesem Fall nicht abbrechen.
> 
> Bitte im ersten Schritt nur die einfache Variante umsetzen, den Rest dann über
> einen neuen Bug.

Damit meine ich "|| die" entfernen. Dann haben wir das 3.0 Verhalten, der Rest kann dann später umgesetzt werden.
Comment 13 Lukas Walter univentionstaff 2012-11-26 17:10:08 CET
get_default_netmask() wurde übearbeitet und erkennt nun ob es sich bei der default Addresse um eine IPv4 oder IPv6 Adresse handelt - davon hängt dann ab ob eine Netzmaske oder die Prefixlänge zurück gegeben wird.

Ich habe testweise eine IPv6 only Installation mit dieser Änderung durchgeführt.
Die Installation lief erfolgreich durch, DNS/RDNS funktionierte danach.



univention-lib (2.0.16-1) unstable; urgency=low
  * base.sh: get_default_netmask() will return a netmask for
    IPv4 addresses and a prefix for IPv6 addresses (Bug #29216)

svn 37481
Comment 14 Sönke Schwardt-Krummrich univentionstaff 2012-11-28 16:12:20 CET
→ Patch ok
→ Fehlermeldung tritt nicht mehr auf
→ DNS-Records für Master werden korrekt angelegt
→ Changelogeintrag ist ok
→ VERIFIED
Comment 15 Stefan Gohmann univentionstaff 2012-12-12 21:11:06 CET
UCS 3.1-0 has been released: 
 http://forum.univention.de/viewtopic.php?f=54&t=2125

If this error occurs again, please use "Clone This Bug".