Pydio 5.2.5 Sharefunktion fixen

Leider mußte ich mal wieder den Sharecenter von Pydio fixen, weil es für einen offensichtlichen Bug keinen Patch gibt, wir kennen das ja schon. Mal sehen ob Charles wieder den Aufstand macht, wenn ich ihm den DIFF schicke, statt den Patch auf GitHub hochzuladen 🙂 Leider kann man nicht auf Version 6 Updaten, weil dann Pydio nicht mehr funktioniert.  Wie man dafür 1300 € im Jahr verlangen kann, ist mir ein Rätsel, leider ist es das beste Tool für die Sache, trotz der Fehler.

Zwei Bugs müssen behoben werden:

  1. class.AJXP_Utils.php    error l.1744    message=mcrypt_create_iv(): Cannot open source device
  2. class.ajxp_confAccessDriver.php(2250) : eval()’d code   error l.2       message=mcrypt_decrypt(): Key of size 6 not supported by this algorithm. Only keys of sizes 16, 24 or 32 supported

Fangen wir mal mit Bug #2 an , der ist einfacher :

In der Defaulteinstellung von Pydio steht ein Hashwert der Länge 6. Das ist aber seit einigen PHP Versionen zu kurz, deswegen die MCrypt Meldung.

Bitte hier auf 16 umstellen :

pydiobug1

Bug #1 ist da schon viel anspruchsvoller 🙂 In der Datei „core/classes/class.AJXP_Utils.php“ Zeile 1746 muß ein Wert geändert werden, weil Charles beim Programmieren offensichtlich ein altes Windows PHP benutzt hat, denn da ist „MCRYPT_DEV_URANDOM“ wohl Pflicht.

public static function pbkdf2_create_hash($password)
    {
        // format: algorithm:iterations:salt:hash
        $salt = base64_encode(mcrypt_create_iv(PBKDF2_SALT_BYTE_SIZE, MCRYPT_DEV_URANDOM));
        return PBKDF2_HASH_ALGORITHM . ":" . PBKDF2_ITERATIONS . ":" .  $salt . ":" .
        base64_encode(self::pbkdf2_apply(
            PBKDF2_HASH_ALGORITHM,
            $password,
            $salt,
            PBKDF2_ITERATIONS,
            PBKDF2_HASH_BYTE_SIZE,
            true
        ));
    }

ersetzen durch :

public static function pbkdf2_create_hash($password)
    {
        // format: algorithm:iterations:salt:hash
        $salt = base64_encode(mcrypt_create_iv(PBKDF2_SALT_BYTE_SIZE, MCRYPT_RAND));
        return PBKDF2_HASH_ALGORITHM . ":" . PBKDF2_ITERATIONS . ":" .  $salt . ":" .
        base64_encode(self::pbkdf2_apply(
            PBKDF2_HASH_ALGORITHM,
            $password,
            $salt,
            PBKDF2_ITERATIONS,
            PBKDF2_HASH_BYTE_SIZE,
            true
        ));
    }

Nach dieser kleinen Anpassung „funktioniert“ der Sharecenter wieder, was aber nicht heißt, daß man den Share in dem Sharecenter angezeigt bekommt 🙂

Den muß man dann aus dem Repository extrahieren :

pydiobug2