bug: nicht flexible aufrufe mit idarea, idaction

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

bug: nicht flexible aufrufe mit idarea, idaction

Beitrag von emergence »

bin gerade beim durchforsten von absoluten adressierung

in conlib/local.php

findet man folgendes

Code: Alles auswählen

        $idaction = 330;
        $sql = "INSERT INTO
                    ". $cfg["tab"]["actionlog"]."
                SET
                    idlog = $lastentry,
                    user_id = '" . $uid . "',
                    idclient = $client,
                    idlang = $lang,
                    idaction = $idaction,
                    idcatart = $idcatart,
                    logtimestamp = '$timestamp'";
man sollte die idaction nummer aus der db auslesen lassen - (auf grund der flexibilität) - mittels $idaction = getIDForAction("login");
ich habs jetzt aber nicht getestet, also weiss ich nicht ob diese function zur verfügung steht, bzw wie genau der aufruf aussehen muss.

ich werd diesen thread für mich als interne checkliste verwenden ->
[intern - ok]
Zuletzt geändert von emergence am Mo 10. Nov 2003, 12:29, insgesamt 2-mal geändert.
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

weiters

aufrufe die sich auf die function showareas beziehen findet man reihenweise so an

zB:
showareas(6); etc. (die ziffern varieren. gefunden habe ich bis jetzt 8,10,6,12)

zeitweise findet man dazu noch

$poss_area="'".implode("','",$area_tree["6"])."'"; (hier gilt das selbe mit den ziffern)

ähm ja...

[intern: ok] siehe weiter unten...
Zuletzt geändert von emergence am Mo 10. Nov 2003, 15:01, insgesamt 1-mal geändert.
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

weiters in
include.upl_files_overview.php
findet man am beginn

$tmp_area = 7;

dies sollte jedoch

$tmp_area = "upl";

sein.

weiters in
include.tplcfg_edit_form.php
findet man
$tmp_area = "tplcfg";

ich glaub das stimmt nicht sollte das nicht
$tmp_area = "tpl_cfg";
heissen ?

[intern: ok]
Zuletzt geändert von emergence am Mo 10. Nov 2003, 09:47, insgesamt 1-mal geändert.
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

weiters in
include.lang_left_top.php

findet sich am ende der datei folgendes:

if ($perm->have_perm_area_action($area, 35)) {
sollte
if ($perm->have_perm_area_action($area, "lang_newlanguage")) {

sein.

zusätzlich typo in user_md5.php bei zeile 185
if (!$perm->have_perm_area_action("user","10")&&!$perm->have_perm_area_action("user_rihgts","10")) {

user_rihgts -> user_rights

[intern: ok]
Zuletzt geändert von emergence am Mo 10. Nov 2003, 09:47, insgesamt 1-mal geändert.
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

weiters was bedeutet bitte:
have_perm_area_action_item("con_editcontent","15", $idcat)

eine action mit 15 gibts ja nicht

sollte dies nicht
have_perm_area_action_item("con_editcontent", "con_editart", $idcat)
sein ?

[intern: ok]
Zuletzt geändert von emergence am Mo 10. Nov 2003, 12:52, insgesamt 1-mal geändert.
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

weiters nur so weils mir aufgefallen ist (für die lesbarkeit des quellcodes besser):

in inludes/include_upl_files_overview.php

findet man

Code: Alles auswählen

                //Beschreibung
                if ($action == 50 && $file == $edit) {
                        $html_description = "<form method=\"post\" action=\"".$sess->url("main.php?frame=$frame")."\">\n
                                             <input type=\"hidden\" name=\"action\" value=\"51\">\n
                                             <input type=\"hidden\" name=\"path\" value=\"$path\">\n
                                             <input type=\"hidden\" name=\"edit\" value=\"$edit\">\n
                                             <input type=\"text\" name=\"newfile\" value=\"".$descript."\">&nbsp;\n
                                             <a href=\"".$sess->url("main.php?area=upl&frame=$frame&path=$path")."\"><img src=\"".$cfg['path']['images']."but_cancel.gif\" border=\"0\" alt=\"".$lngUpl["gen_break"]."\" title=\"".$lngUpl["gen_break"]."\"></a>&nbsp;<input type=\"image\" src=\"".$cfg['path']['images']."but_ok.gif\" alt=\"".$lngUpl["renamefile"]."\" title=\"".$lngUpl["renamefile"]."\">\n
                                             </form>\n";

                } else {
                        $html_description = $descript;
                }


                //Edit Button
                $html_editbutton =  "<a class=\"action\" href=\"".$sess->url("main.php?area=upl&action=50&frame=$frame&path=$path&edit=$file")."#edit\"><img src=\"".$cfg['path']['images']."but_rename.gif\" border=\"0\" alt=\"".i18n("Rename file")."\" title=\"".i18n("Rename file")."\" ></a>&nbsp;";
das diese konstruktion funktioniert ist mir klar, nur sauber umgesetzt finde ich sie nicht.
action 51 sollte man in upl_rename umbenennen die entsprechende änderung in con_actions bei idaction 320 ebenso bei name auf upl_rename
bei action 50 könnte man auch einen aussagekräftigeren namen wählen..
witzig finde ich eigentlich nur, das die action 50 zwar einen code hat, aber ihn vermutlich nicht ausführt weil relevant auf 0 steht... (idarea 29 hmm..)
egal hier meine änderungen dazu:

Code: Alles auswählen

                //Beschreibung
                if ($show == "description" && $file == $edit) {
                        $html_description = "<form method=\"post\" action=\"".$sess->url("main.php?frame=$frame")."\">\n
                                             <input type=\"hidden\" name=\"action\" value=\"upl_rename\">\n
                                             <input type=\"hidden\" name=\"path\" value=\"$path\">\n
                                             <input type=\"hidden\" name=\"edit\" value=\"$edit\">\n
                                             <input type=\"text\" name=\"newfile\" value=\"".$descript."\">&nbsp;\n
                                             <a href=\"".$sess->url("main.php?area=upl&frame=$frame&path=$path")."\"><img src=\"".$cfg['path']['images']."but_cancel.gif\" border=\"0\" alt=\"".i18n("Cancel")."\" title=\"".i18n("Cancel")."\"></a>&nbsp;<input type=\"image\" src=\"".$cfg['path']['images']."but_ok.gif\" alt=\"".i18n("Rename file")."\" title=\"".i18n("Rename file")."\">\n
                                             </form>\n";

                } else {
                        $html_description = $descript;
                }


                //Edit Button
                $html_editbutton =  "<a class=\"action\" href=\"".$sess->url("main.php?area=upl&show=description&frame=$frame&path=$path&edit=$file")."#edit\"><img src=\"".$cfg['path']['images']."but_rename.gif\" border=\"0\" alt=\"".i18n("Rename file")."\" title=\"".i18n("Rename file")."\" ></a>&nbsp;";
als feature erweiterung
bei weiterer durchsicht der datei ist mir noch aufgefallen, die unterscheidung bei den dateien zB bei bilder nur zwischen
.jpg|.png|.gif unterscheidet -> vorschlag änderung auf .jpg|.jpeg|.png|.gif

weiters könnte man eine unterscheidung einbauen für
.doc|.rtf - worddokumente
.xls - excel dokumente
.zip - zipfiles

[intern: ok]
Zuletzt geändert von emergence am Mo 10. Nov 2003, 11:13, insgesamt 1-mal geändert.
timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Re: bug: nicht flexible aufrufe mit idarea, idaction

Beitrag von timo »

emergence hat geschrieben: man sollte die idaction nummer aus der db auslesen lassen - (auf grund der flexibilität) - mittels $idaction = getIDForAction("login");
Ist drin. Warum die Funktion getIDForAction in der Klasse perm steckt weiß ich nicht - ist aber an dieser Stelle kein Problem.
aufrufe die sich auf die function showareas beziehen findet man reihenweise so an
showareas(6);
Was es mit dem showareas auf sich hat weiß wohl keiner der am Projekt beteiligten mehr :)

Scheint wohl irgendwas mit dem Rechtemanagement zu tun zu haben.
include.upl_files_overview.php
findet man am beginn

$tmp_area = 7;
Habe ich mal geändert, kann aber die Verwendung der Variable nicht finden -> altes Gerümpel?
include.tplcfg_edit_form.php
findet man
$tmp_area = "tplcfg";
Wird dort wohl auch nicht mehr benutzt.
if ($perm->have_perm_area_action($area, 35)) {
Ist geändert.
zusätzlich typo in user_md5.php bei zeile 185
Das File wird definitiv nirgendwo mehr benutzt. Ich entferne es mal :)
have_perm_area_action_item("con_editcontent","15", $idcat)
Habe ich geändert.
das diese konstruktion funktioniert ist mir klar, nur sauber umgesetzt finde ich sie nicht.
Meiner Meinung nach sollte im Editor deiner Wahl ein schwarzer Balken mit weißer Schrift "Zensiert" drüber - denn der Code ist echt gruselig.
witzig finde ich eigentlich nur, das die action 50 zwar einen code hat, aber ihn vermutlich nicht ausführt weil relevant auf 0 steht...
Relevant bedeutet nur, daß dieser Eintrag im Rechteeditor erscheint -> die Aktion wird aber trotzdem ausgeführt (bzw sollte so sein).
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Re: bug: nicht flexible aufrufe mit idarea, idaction

Beitrag von emergence »

timo hat geschrieben:Ist drin. Warum die Funktion getIDForAction in der Klasse perm steckt weiß ich nicht - ist aber an dieser Stelle kein Problem.
ähm wie sieht denn der aufruf dort aus ? weil $idaction = getIDForAction("login"); geht nicht
Was es mit dem showareas auf sich hat weiß wohl keiner der am Projekt beteiligten mehr :)
Scheint wohl irgendwas mit dem Rechtemanagement zu tun zu haben.
sehe ich mir noch genauer an... scheinbar wird area_tree dort definiert und erzeugt falls dies nirgendwo anders bereits passiert ist...
>> include.upl_files_overview.php findet man am beginn $tmp_area = 7;

Habe ich mal geändert, kann aber die Verwendung der Variable nicht finden -> altes Gerümpel?
ich habs komplett rausgeschmissen und alle $tmp_area durch "upl" ersetzt.
>> include.tplcfg_edit_form.php findet man $tmp_area = "tplcfg";
Wird dort wohl auch nicht mehr benutzt.
ich habs komplett rausgeschmissen
>>zusätzlich typo in user_md5.php bei zeile 185
Das File wird definitiv nirgendwo mehr benutzt. Ich entferne es mal :)
stimmt keinerlei verweise mehr auf die datei zu finden...
Meiner Meinung nach sollte im Editor deiner Wahl ein schwarzer Balken mit weißer Schrift "Zensiert" drüber - denn der Code ist echt gruselig.
bughunting ist besser wie unreal zu spielen ;-)
Relevant bedeutet nur, daß dieser Eintrag im Rechteeditor erscheint -> die Aktion wird aber trotzdem ausgeführt (bzw sollte so sein).
nachtrag: scheinbar wird die aktion nur ausgeführt wenn die idarea korrekt zugewiesen wurde... sonst würds bei action 50 ne fehlermeldung geben ->
langfileExpand ($expbereich,$expanded);
die funktion ist nirgends definiert, hmm...
timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Re: bug: nicht flexible aufrufe mit idarea, idaction

Beitrag von timo »

emergence hat geschrieben:
timo hat geschrieben:Ist drin. Warum die Funktion getIDForAction in der Klasse perm steckt weiß ich nicht - ist aber an dieser Stelle kein Problem.
ähm wie sieht denn der aufruf dort aus ? weil $idaction = getIDForAction("login"); geht nicht
$perm->getIDForAction("login") :)
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

ja beim checken der dateien wiedermal was gefunden

im prinzip gehts nur darum das aufrufe mit
have_perm_item ("con");
showareas ("con");
funktionieren...

für starre konstrukte wie zB.: $area_tree ("6"); kommt auch noch was weiter unten...

die änderungen sind minimal
in perm.inc - function have_perm_item
eine ergänzung nach der global definierung

Code: Alles auswählen

    $mainarea = $this->getIDForArea($mainarea);
(das geht)

in functions_general.php
kommt ne neue funktion dazu (vor der function getParentAreaId)

Code: Alles auswählen

function getIDForArea($area)  {

    global $client, $lang, $cfg, $sess;

    $db = new DB_Contenido;

    if (!is_numeric($area))
    {
        $sql = "SELECT
                    idarea
                FROM
                    ".$cfg["tab"]["area"]."
                WHERE
                    name = '".$area."'";

        $db->query($sql);
        if ($db->next_record()) {
            $area = $db->f(0);
        }
    }

    return $area;

}
noch was bei function getParentAreaId
findet man bei beiden querys folgendes

Code: Alles auswählen

                    ".$cfg["tab"]["area"]." AS a,
                    ".$cfg["tab"]["area"]." AS b
ähm bringts das ?

- function showareas
eine ergänzung nach der global definierung

Code: Alles auswählen

         $mainarea = getIDForArea($mainarea);
(das geht jetzt... ansonsten -> Call to a member function on a non-object )
am ende der funktion bevor sie geschlossen wird eine ergänzung

Code: Alles auswählen

return $mainarea;
anmerkung zu $area_tree
im normalfall sollte jetzt ja ein
$area_tree[showareas("con")] möglich sein... (das geht auch)

okay so weit so gut... nach dem tests läuft dies bis jetzt ohne fehlermeldung...

vergebene rechte in con_rights werden auch korrekt wieder entfernt wenn ein modul layout template etc gelöscht wird, eintragungen stimmen auch...

[intern: ok]
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

weiters in verbindung mit den vorgehenden änderungen...

änderungen in functions.lay.php
showareas("8"); komplett raus (2x)

$poss_area="'".implode("','",$area_tree["8")])."'";
ersetzen durch
$poss_area="'".implode("','",$area_tree[showareas("lay")])."'";

änderungen in functions.mod.php
showareas("10"); komplett raus (2x)

$poss_area="'".implode("','",$area_tree["10")])."'";
ersetzen durch
$poss_area="'".implode("','",$area_tree[showareas("lay")])."'";

änderungen in functions.tpl.php
showareas("12"); komplett raus (2x)

$poss_area="'".implode("','",$area_tree["12")])."'";
ersetzen durch
$poss_area="'".implode("','",$area_tree[showareas("tpl")])."'";

änderungen in functions.str.php
ca bei zeile 105 showareas("6"); komplett raus
gleich darunter
$poss_area="'".implode("','",$area_tree[6])."'";
ersetzen durch
$poss_area="'".implode("','",$area_tree[showareas("str")])."'";

die gleiche ersetzung ca bei zeile 205, 586 vornehmen

verbleiben 2x showareas("6"); diese durch showareas("str"); ersetzen...

somit wäre dieser teil auch komplett fertig...

[intern: ok]
Zuletzt geändert von emergence am Di 11. Nov 2003, 16:24, insgesamt 1-mal geändert.
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

irgendwie errinnert mich das an hornbach -> es gibt immer was zu tun... ;-)

weiters in
include.str_overview.php
zeile: 206
$perm->have_perm_item("6", $value->id) ){
ersetzen durch
$perm->have_perm_item($tmp_area, $value->id) ){

in
include.con_art_overview.php
zeile: 47

Code: Alles auswählen

    		$perm->have_perm_area_action(1)) && $perm->have_perm_item(6, $idcat))   ||
ersetzen durch

Code: Alles auswählen

    		$perm->have_perm_area_action("con")) && $perm->have_perm_item("str", $idcat))   ||
das müsste es mal ganz grob gewesen sein...
[intern: ok]
Zuletzt geändert von emergence am Di 11. Nov 2003, 16:23, insgesamt 1-mal geändert.
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

weiters
hat jetzt zwar nichts mit absoluter adressierung zu tun:
in include.str_overview.php
zeile 445

($action==="str_newtree")
ähm sollte das nicht
($action=="str_newtree")

sein.
timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag von timo »

Ich weiß, daß ich das mal mit absicht reingebaut habe, da irgendein PHP-Bug da mitgespielt hat (3 Gleichheitszeichen vergleicht auch den Typ, und durch einen dummen Zufall war ($action == "str_newtree") true, obwohl $action leer war).
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

okay die letzten beiden ersetzungen wo noch absolut adressiert wird, jedoch hängen die vermutlich noch direkt mit den con_actions numerischen namen zusammen.

dies findet sich unter
include.con_editcontent.php ($action == 20) , ($action == 10)
und in rights.php ($action == 10)

sind anscheinend fake actions
ich belasse die mal so wie sie momentan sind $action == 20 wird aber anscheinen nirgendwo mehr aufgerufen (könnte man entfernen)
Gesperrt