Unsupported operand types - bizonyos admin menük nem elérhetők

moha képe

Hello!

Drupal 6.19-es van a site-on. Nemrég hozzá lett adva egy új nyelv (Török). Eddig rendben is volt, de beimportáltam a török .po file-t és onnantól kezdve a következő anomáliák jöttek elő:

- Az alapértelmezett nyelv átállt angolra (ezt visszatettem magyarra)
- Ennek ellenére az admin menü linkjei mind angol nyelvűek
- Nem elérhetőek a következő admin oldalak:
node/add, admin/content, admin/build, admin/settings, admin/user, admin/reports. Mindegyik esetében az alábbi hibát kapom:
Fatal error: Unsupported operand types in modules/system/system.module on line 627

Cache ürítés nem segített, török nyelv ki és bekapcsolása szintén nem. Most kicsit belerondítottam a system.module-ba, beraktam egy feltételt, hogy az említett oldalak esetében ne végezze el a 627-es sorban lévő műveletet:
$item += db_fetch_array(db_query("SELECT mlid, menu_name FROM {menu_links} ml WHERE ml.router_path = '%s' AND module = 'system'", $item['path']));
Így legalább el tudom érni az oldalakat (a bal oldali admin menüben megjelennek a pontok, angolul, középen ugyanannak kellene magyarul, az nincs ott, nyilván mert kivettem a sort). Felhasználók nem látják az admin oldalakat, mert nincs user reg az oldalon, de azért nem szeretném ezt így hagyni.
Viszont fogalmam sincs, merre tapogatózzak, vagy, hogy pontosan mi okozhatja ezt.

Egy dolog jut eszembe: anno balga módon csináltam egy custom page-et, aminek van egy alulvonás a nevében (nem kellett volna). Ezt se szerkeszteni, se törölni nem tudom, de eddig nem okozott gondot. Esetleg most bekavarhat?

Előre is kösz a segítséget!

Moha

Drupal verzió: 
Fórum: 
moha képe

Kiegészítés: lehet, hogy az rontotta el, hogy a menu.inc-ben volt egy hack, hogy relatív linkeket is elfogadjon:

www.widgetsandburritos.com/technical/programming/drupal-6-menu-relative-...

Ugyanis elég gyakran kellett relatív, külső hivatkozásokat tennem a menübe és csak így engedte. A nyelv importálásakor ez a hack benne volt a menu.inc-ben.
Most az adatbázist megnézve, szinte mindenhol üres a router_path mező. Kérdés, hogy ezt helyre lehet-e hozni anélkül, hogy az egész menüszerkezetet újra kellene építenem...

0
0
nevergone képe

Tanulság: Ne nyúlj olyanhoz, amihez nem értesz, és ne módosíts az alaprendszerben anélkül, hogy értenéd a rendszer működését és módosítás hatását.
Hogy ontopic is legyek: Attól tartok, megszívtad.

0
0
eager képe

Ha volt biztonsági mentés azt az importot megelőzően, akkor az használható lenne, hogy arra az állapotra visszaállítsd, nem?

0
0
hron84 képe

Hat, ha volt :-)

De eleve egeszsegtelen kornyezetrol beszelgetunk. Eleve a custom hekkelesek miatt az oldal frissithetetlenne valt, emiatt on- es kozveszelyes. Kb. annyira egeszseges a kozeleben tartozkodni, mint egy rosszul szigetelt atomeromunek.

Kozben utanaszamoltam, nem kevesebb, mint 2 azaz ketto security frissites jott ki a 6.19 ota (sorrendben: 6.21, illetve 6.23), mindketto XSS, CSRF valamint bypass tipusu sebezhetosegeket javitott.

0
0

--

()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.
hron84 képe

Haaat...

Az elso es legfontosabb dolog az, hogy azokat a hivatkozasokat, amiket igy, hekkelve csinaltal, azokat egyenkent at kell alakitanod abszolut hivatkozasokka. Eleve nem ertem, hogy ez igy miert volt jo, vagy miert kellett, de nyilvan megvolt ra a jo okod, bar egeszen biztos vagyok benne, hogy a Drupal lehetoseget adott volna arra, hogy maskeppen is megoldd a felmerult problemat.

A kovetkezo, amire szukseg lenne, hogy atnezd a router_path mezoket a db-ben. Ahogy a peldakat elnezem a sajat db-imben, a router_path minden olyan link eseteben ures, amely abszolut, vagy a <front> szoveg van benne. A tobbi eseteben a router_path megegyezik a link_path ertekevel. De mindenkeppen figyelmesen nezd at a bejegyzeseket, illetve ha tudod, egy teszt oldalon vegyel fel minel tobbfajta linket, hogy lasd, peldaul a tobbnyelvu linkek hogyan neznek ki db oldalon. Nagyon korultekintonek kell lenned, es nagyon oda kell figyelned.

Szoval, eloszor is csinalj egy mentest (!!!), majd a db-ben modositsd a fentieknek megfeleloen a router_path mezoket.

Ha ez igy mukodo site-t eredmenyez, akkor utana probalj meg (mentes utan!) egy eredeti Drupal 6.19 -et kicsomagolni, felulirva ezzel a hackolt fajlokat.
Ha meg mindig mukodik az oldalad, akkor eljott az ideje annak, hogy frissitsd 6.25-re, mert tudomasom szerint volt security frissites is a 19 ota.

Es a jovore nezve megjegyzed, hogy a lustasag fel betegseg. Csak a szerencsen mult, hogy az oldaladat meg nem tortek fel kulonbozo, azota mar javitott sebezhetosegek okan. Barmilyen modositas a core kodban ugyanis egy frissithetetlen, menedzselhetetlen oldalt eredemnyez, ami raadasul konstans hibaforraskent szolgal.

Valamint: Nem tudom elegge hangsulyozni, hogy a fenti javitasi tippeket szigoruan csak mentes utan hajtsd vegre, es minden egyes lepes elott/utan mentsel. Ne lustald el, ne hagyd ki, es ne felejtsd el. Igy is eleg eletveszelyes muvelet kessel belevagni a Drupal szivebe kulonosebb hozzaertes nelkul, nem kell ezt meg tetezni.

0
0

--

()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.
moha képe

Muszáj voltam valahogy megoldani, hogy elfogadja a relatív hivatkozásokat, ugyanis jelenleg 10 nyelvű az oldal és legalább 20 domain név mutat rá (különböző nemzeti és nemzetközi domainek), viszont van egy Drupaltól független rendszer is több ezer oldallal, aminek a hivatkozásait be kellett tennem a menübe, de úgy, hogy ugyanazon a domainen maradjon, mint amivel a látogató megnyitotta a Drupal oldalt. Innentől abszolút link kilőve, alapból meg nem fogadja el a relatív linket. Ha van rá beépített megoldás, akkor homályosítsatok fel, mert én csak ezt a hacket találtam.

Egyébként egy jó adag csűrés-csavarás után sikerült megoldani a problémát. Visszaállítottam a hacket majd újraimportáltam a török nyelvi fájlt. Helyreállt a rend, megvannak a router_path-ok és működik minden.
Persze életveszély nem volt, mert ha semmi nem megy, akkor lekapcsolom fél órára az oldalt és visszarakom az egy nappal korábbi mentést. Azt csak azért nem akartam, mert akkor újra fel kellett volna töltenem a török oldalakat.

0
0