ich habe ein seltsames Phänomen bei bestimmten Passwörtern (connect scheitert) und mich würde interessieren, ob ihr das reproduzieren könnt.
Setup: ein Webserver (recht aktueller xampp apache auf win10), der mit einem Firebird 3.0.4 und einem Firebird 2.5.9 Server reden muss. Entsprechend bekommt er eine 3.0.4er fbclient.dll ins apache/bin-Verzeichnis, da er ja auch den 3er Server ansprechen muss. Eigentlich müsste der Effekt aber bei jeder Art Client auftreten, nicht nur bei einem Webserver.
Das Testpasswort ist °!"§$%&/
also einmal auf der Tastatur die ersten 8 Zeichen mit Shift-Taste. Zwei davon, das Grad-Symbol und das Paragraphenzeichen liegen oberhalb Ascii 127.
Testskript:
Code: Alles auswählen
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>testconnect</title>
</head>
<body>
<?php
// testconnect
$uid = 'tester';
$pw = '°!"§$%&/';
$pw = mb_convert_encoding($pw, 'ISO-8859-1', 'UTF-8');
$hex = '';
for ($i = 0; $i < strlen($pw); $i++) {
$ord = ord($pw[$i]);
$hexCode = dechex($ord);
$hex .= substr('0' . $hexCode, -2);
}
echo $hex;
// b0 21 22 a7 24 25 26 2f
// bzw ohne umkodierung nach latin1
// c2 b0 21 22 c2 a7 24 25 26 2f
$dec = array();
for ($i = 0; $i < strlen($pw); $i++) {
$dec[] = ord($pw[$i]);
}
echo '<pre>'; print_r($dec); echo '</pre>';
echo '<br>';
echo "connecte als $uid ..." . '<br>';
$conn = ibase_connect(<db-alias>, $uid, $pw, 'ISO8859_1', 0, 3); // <db-alias> ist eine 2.5er DB
var_dump($conn);
echo '<br>';
if ($conn)
echo 'connected';
else {
echo 'not connected<br>';
echo ibase_errmsg();
}
?>
</body>
</html>
Der Effekt müsste sich auch mit anderen client-Anwendungen reproduzieren lassen. Der connect-Zeichensatz scheint bei dem Vorgang egal zu sein. Die Zeichenkodierung der Skriptdatei ist utf8, und damit auch das Passwort-Literal.
Also wenn ihr eine Idee habt ... immer her damit, ich leg mir gerade die Karten

Grüße, Volker