Univention Bugzilla – Bug 29216
univention-ipcalc6 kann IPv6 "netmask" nicht parsen
Last modified: 2012-12-12 21:11:06 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.
Negativ bemerkbar hat sich dies auf einem UCS3.1-Master-IPv6-only-System gemacht.
<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.
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.
(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.
(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.
Im Moment sollte es reichen, dass wir in diesem Fall nicht abbrechen.
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.
Created attachment 4822 [details] Fix get_default_netmask()
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/).
Created attachment 4823 [details] Use get_default_netprefix() Neue Funktion und Änderung der Aufrufer
(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.
(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.
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
→ Patch ok → Fehlermeldung tritt nicht mehr auf → DNS-Records für Master werden korrekt angelegt → Changelogeintrag ist ok → VERIFIED
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".