bug conlib/local.php

Gesperrt
emergence
Beiträge: 10645
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

bug conlib/local.php

Beitrag von emergence » Fr 11. Aug 2006, 11:05

damit ich es mal erwähnt hab... wollte eigentlich ganz was anders versuchen aber na ja...

folgendes findet sich mehrfach in conlib/local.php

Code: Alles auswählen

    while($this->db->next_record()) {
      $uid   = $this->db->f("user_id");
      $perm  = $this->db->f("perms");
      $pass  = $this->db->f("password");   ## Password is stored as a md5 hash

        if (is_array($auth_handlers))
        {
            if (in_array($pass, $auth_handlers))
            {
                $success = call_user_func($pass, $username, $password);

                if ($success)
                {
                    $uid = md5($username);
                    $pass = md5($password);
                }
            }
        }
    }
gut, folgende funktion zum registrieren eigener auth handler gibts da auch noch

Code: Alles auswählen

/* Registers an external auth handler */
function register_auth_handler($handler)
{
    global $auth_handlers;

    if (!is_array($auth_handlers))
    {
        $auth_handlers = array();
    }

    if (!in_array($handler, $auth_handlers))
    {
        $auth_handlers[] = $handler;
    }
}
tja und der aufruf des handlers erfolgt nur dann wenn das passwort dem handlernamen entspricht...

jetzt komm ich zum bug...
da $pass immer ein md5 kodierter wert ist, kann das hier
if (in_array($pass, $auth_handlers))
nie stimmen...

die funktion müsste dann
function *md5 kodierter wert des handlers* () { }
heissen....

entweder ist das in der doku(Pluggable Authentification) falsch beschrieben, oder der code wurde in der form noch eingesetzt als das pw noch nicht md5 kodiert war...
*** make your own tools (wishlist :: thx)

emergence
Beiträge: 10645
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » Fr 11. Aug 2006, 11:25

ich hab jetzt etwas geändert, damit läuft das zumindestens bei mir so, wie es dokumentiert wurde...

die funktion wurde geändert (und kann nun auch mehrere handler auf einmal registrieren...)

Code: Alles auswählen

/* Registers an external auth handler */
function register_auth_handler($handlers) {
	global $auth_handlers;

	if (!is_array($auth_handlers))
	{
		$auth_handlers = array();
	}

	if (!is_array($handlers)) {
		$handlers = Array($handlers);
	}

	foreach ($handlers as $handler) {
		if (!in_array($handler, $auth_handlers)) {
			$auth_handlers[md5($handler)] = $handler;
		}
	}

}
und die passage zum checken ob ein handler gültig ist sieht bei mir nun so aus

Code: Alles auswählen

		while ($this->db->next_record()) {
			$uid = $this->db->f("user_id");
			$perm = $this->db->f("perms");
			$pass = $this->db->f("password"); ## Password is stored as a md5 hash

			if (is_array($auth_handlers)) {
				if (isset($auth_handlers[$pass])) {
					$success = call_user_func($auth_handlers[$pass], $username, $password);

					if ($success) {
						$uid = md5($username);
						$pass = md5($password);
					}
				}
			}

		}
die andere variante des call_user_func würde noch bei allen nicht Crypt klassen lauffähig sein...
*** make your own tools (wishlist :: thx)

emergence
Beiträge: 10645
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » Fr 11. Aug 2006, 11:34

und weil ich schon dabei bin

class Contenido_Frontend_Challenge_Crypt_Auth

function auth_validatelogin()

Code: Alles auswählen

    $perm = "sysadmin";
rausnehmen... ein backenduser hätte im frontend wenn man darauf hingehend kontrolliert automatisch perm sysadmin...
hat da wirklich nichts verloren...
*** make your own tools (wishlist :: thx)

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Mo 2. Okt 2006, 17:13

Das mit dem $perm habe ich mal rausgenommen (da bin ich gespannt, ob das nicht 4fb-Projekte betrifft...).

Zum anderen: Kann ich überhaupt nicht einschätzen/testen. Kann das jemals vorher funktioniert haben bzw. wenn es in der jetzigen Form funktioniert hat, ist die Änderung mit ggf. vorhandenen Handlern/Code kompatibel?

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

emergence
Beiträge: 10645
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » Mo 2. Okt 2006, 17:22

gute frage...
ich denke das construct wurde mal für die nicht crypt klassen geschrieben... dort würde es ja funktionieren...
*** make your own tools (wishlist :: thx)

emergence
Beiträge: 10645
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » Fr 6. Okt 2006, 12:02

ach ja lt. che hat das noch nie wirklich funktioniert...
*** make your own tools (wishlist :: thx)

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Di 5. Jun 2007, 23:42

Soweit eingebaut. Wäre ein

Code: Alles auswählen

if (array_key_exists($pass, $auth_handlers))
statt

Code: Alles auswählen

if (isset($auth_handlers[$pass]))
eventuell robuster?

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

emergence
Beiträge: 10645
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » Mi 6. Jun 2007, 05:39

HerrB hat geschrieben:Soweit eingebaut. Wäre ein

Code: Alles auswählen

if (array_key_exists($pass, $auth_handlers))
statt

Code: Alles auswählen

if (isset($auth_handlers[$pass]))
eventuell robuster?
möglich... müsste auch funktionieren...
*** make your own tools (wishlist :: thx)

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » So 24. Jun 2007, 18:51

Done.

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

Gesperrt