Az IRF második házi feladatára készülve szokás szerint megnéztem a kapcsolódó eszközök aktuális verzióját, bővítgettem a segédletet különböző lekérdezésekkel. Közben sikerült azért sajnos jó pár hibába belefutnom. Ezek között voltak kisebbek (nem implementált kapcsoló, jelszó kiírása a log fájlba), de volt három érdekes is.
Enumeration with selector filter returning only one instance: Selector dialektust használó szűrés esetén csak egy példányt adott vissza a lekérdezés, közben pedig volt több is, ami megfelelt a feltételnek. Kikeresve a kódban a megfelelő részt viszonylag gyorsan megtalálható a probléma: az eredményeket tároló tömb feltöltésekor az indexet elfelejtették növelni.
Segmentation fault when the selector filter contains comma: a következő már trükkösebb volt. Ha Selector dialektust használó szűrőfeltételben vessző volt, akkor segmentation fault lett az eredmény. Kicsit hosszabb volt végigkövetni a hívási láncot, itt már a gdb segített. A probléma az, hogy nem ellenőrzi a kód az URI feldolgozásának eredményét, és null visszatérési érték esetén is simán továbbmegy.
Core dump when using XPath filter with SfcbLocal frontend: a szűrőfeltételt lehet elvileg XPath lekérdezéssel is megfogalmazni, de erre sajnos nincs túl sok példa. Már nagyjából az első próbálkozásom is segmentation faultot okozott:). Irány a gdb, stack trace, lekérdezés adatait tároló struktúra kiíratása, eszerint a lekérdezést WQL dialektusban adtuk meg. Fejvakarás, elküldött wsman XML nézegetése, forrás vizsgálata. Kiderült, hogy rosszul állítja be az alapesetet a kód, ráadásul az XPath lekérdezés nincs is implementálva.
Küldtem módosításokat, remélhetőleg a következő verzióban már ezek javítva lesznek.
A hibáknál sokat segít, ha van debug információ is az adott programokhoz. Ha a hivatalos csomagokat raktuk fel, akkor a CentOS-hez tartozó debuginfo csomagokat is szedjük le. Ehhez létre kell hozni egy debuginfo.repo nevű fájlt a /etc/yum.repo.d/ könyvtárban a következő tartalommal:
[debuginfo] name=CentOS-$releasever - DebugInfo baseurl=http://debuginfo.centos.org/$releasever/$basearch/ gpgcheck=0 enabled=1
Ha az opensuse build szerveréről raktunk fel frissebb verziót a programokból, akkor pedig onnan a debug szót tartalmazó verziókat kell felrakni.
Szép munka! \o/