Guten Abend,
wir wurden vorhin von unserem Kunden über die Problematik informiert und haben uns das Problem angeschaut. Ich bin einmal so frei und veröffentliche die ursprüngliche Funktion unseres Moduls:
function domainoffensive_GetNameservers($params) {
if(!($c = domainoffensive_GetClient())) return Array("error" => "Es ist ein Fehler beim Login aufgetreten.");
$det = $c->GetDomainDetails(strtolower($params['domainname']));
$i = 1;
foreach($det['nameserver'] as $n){
if(!empty($n['ns'])){
$params['ns' . $i] = $n["ns"];
$i++;
}
}
return $params;
}
Alles anzeigen
Wir geben also das Array $params genauso zurück, wie wir es von WHMCS erhalten haben, bis auf neue Array-Elemente mit den Keys ns1, ns2, ..., nsx. Bisher hat das mit WHMCS problemlos funktioniert, da WHMCS nur auf die entsprechenden Elemente zugreifen sollte.
Schaut man sich das Beispiel-Modul von WHMCS an (sample-registrar-module/registrarmodule.php at master · WHMCS/sample-registrar-module · GitHub), wird hier zwar ein kleineres Array zurückgegeben, allerdings auch mit den Keys ns1, ns2, ..., nsx. Bisher hat WHMCS also mit diesen Keys gearbeitet, auch um die Reihenfolge sicherzustellen.
Was jetzt passiert ist, kann ich mir nur dadurch erklären, dass WHMCS per array_values() auf das Element an zweiter, dritter usw. Stelle zugreift. Damit geht die Bedeutung der Keys komplett verloren. Auch bei uns ist die zweite und dritte Stelle eben genau der Benutzername und das Passwort.
Selbstverständlich haben wir in unserem Git-Repository einen Fix eingespielt. Diesen stellen wir auch hier zur Verfügung:
function domainoffensive_GetNameservers($params) {
if(!($c = domainoffensive_GetClient())) return Array("error" => "Es ist ein Fehler beim Login aufgetreten.");
$det = $c->GetDomainDetails(strtolower($params['domainname']));
$return = Array(
"success" => true,
);
$i = 1;
foreach($det['nameserver'] as $n){
if(!empty($n['ns'])){
$return['ns' . $i] = $n["ns"];
$i++;
}
}
return $return;
}
Alles anzeigen
Es ist aber nochmal zu betonen, dass dieses kritische Problem durch unbedachte Änderungen von WHMCS hervorgerufen wurde und die erwarteten Rückgabewerte zudem schlecht dokumentiert sind.