Michal Čihař - Archive for 9/2008

Gammu test version 1.20.94

In few hours after releasing 1.20.93 it became obvious that I will need another testing release, because number of bug fixes grow too much. So here it comes. Schedule for 1.21.0 is Tuesday next week, so please report any problems you face with this testing version.

Full list of changes in 1.20.94:

  • Automatically switch to nodtr connection if DTR/RTS setting fails.
  • More verbose debug messages in API.
  • Free phone data after testing model to avoid memory leaks.
  • Properly handle if IMEI is too long (bug #709).
  • Try to handle situation when CMGL does not list all messages.
  • Fix typo in MySQL file (bug #716).
  • Better parsing of USSD replies (bug #718).
  • Properly restore caller groups on Nokia 2630 (bug #706).
  • Fix listing of used calendar locations on Nokia (bug #710).
  • Properly encode class and coding to SMS (bug #714).
  • SMSD for MySQL no longer fails when sending message (bug #715).
  • SMSD stores signal and battery state in PostgreSQL.
  • Properly handle multiline firmware information.

You can download from usual place: http://cihar.com/gammu/, Debian users will find packages in experimental soon.

Tam a zase zpátky

Když jsem před třemi a půl lety opouštěl SUSE, myslel jsem si, že je to definitivní a osud už mě zavane někam jinam. Práce v nové firmě mi připadala zajímavá a příležitosti něco se tam naučit bohaté.

Nicméně po pár letech mě už práce u nového zaměstnavatele přestala bavit a motivovat a bylo na čase udělat změnu. První rozhodnutí bylo jednoduché - koncem května jsem podal výpověď a naplánoval si prázdniny. Idea byla taková, že během výpovědní lhůty se poohlédnu po jiném místě a od září zase začnu dělat.

Idea to byla pěkná, ale během těch dvou měsíců jsem se nějak nebyl schopný rozhodnout kam jít. Tak jsem to dočasně uložil k ledu a užíval si volna. Odpočinek od počítačů se skvělá věc, ale když je člověk trochu aktivní v pár projektech, nepřejte si vidět to množství mailů, které se nahromadí. Já se posledními nahromaděnými prokousal až včera.

Jak se blížil začátek září a tím termín, kdy jsem chtěl začít pracovat, do práce se mi chtělo čím dál tím méně. No tak co, práce mi nikam neuteče, udělám si volno ještě v září :-). V té době už v mém hledáčku zůstaly jen dvě nabídky - vývoj na Xenomai pro firmu Inova a L3 support v SUSE . Obojí mělo své výhody, ale nakonec převážila možnost práce na mých projektech v pracovní době v SUSE a tak se tedy po třech a půl letech vracím na místo činu. Uvidíme jak dlouho tam vydržím tentokrát :-).

PS: Debian právě dosáhl významného milníku - byla nahlášena chyba číslo 500000 .

Gammu test version 1.20.93

I finally managed to process all my mails and it's not time to push Gammu towards stable release. If everything goes without problems, the just born 1.20.93 will be followed by 1.21.0.

Version 1.20.93 fixes several crashes with parsing strange data from phones and changes a bit initialization of FBUS protocols. If you are using this connection type, please test this new code whether it behaves better or worse than older version.

Full list of changes:

  • Fix crash when decoding EMS pictures (bug #549).
  • Motorola phones sometimes reply in UCS2 instead of HEX (bug #712).
  • Use native functions sleep/usleep if available.
  • Improve FBUS initialization sequence.
  • Fixed reading for ringtones from Nokia 5510 (bug #529).
  • Do not crash if ringtone name is too long (bug #529).
  • Fix possible crash while reading of messages using AT.
  • Increase timeout when writing SMS message (bug #596).
  • Cleaned up issues with reading from Bluez (bug #670).

You can download from usual place: http://cihar.com/gammu/, Debian users will find packages in experimental soon.

Gammu test version 1.20.92

New testing version of Gammu was just born. It brings quite a lot of fixes. Also the Windows binary should be again a bit more stable.

Full list of changes:

  • Fixed Windows binary (define properly MSVCRT to use) (bug #683).
  • Fixed compilation with CURL on Windows.
  • Windows binary now has only MySQL and CURL support (bug #683).
  • Fill in timezone information (bug #696).
  • Detect reserver message type (bug #691).
  • Increase timeout for switching to OBEX (bug #690).
  • Disable postal address for Nokia 2600 (bug #659).
  • Encode phone number only with phones which need it (bug #654).
  • Increase timeout for writing memory entry (bug #654).
  • Handle properly when phoned does not tell SMSC (bug #616).
  • Initial support for waiting calls in AT engine (bug #551).
  • Fixed dialing on some AT phones (bug #471).
  • Support for skipping location when reading (bug #467).
  • Improved detection of serial port Bluetooth channel.
  • SMSD reconnects to MySQL (thanks to Wouter D'Haeseleer).
  • SMSD stores signal and battery state in MySQL (thanks to Wouter D'Haeseleer).
  • Initial support for reading messages in simple text mode.
  • Report if monitor failed because of an error.
  • Handle not found errors on OBEX connect (bug #705).

You can download from usual place: http://cihar.com/gammu/, Debian users will find packages in experimental soon.

PS: I still have about 50 unread mails about Gammu, so please be patient.

Gammu test version 1.20.91

New testing version of Gammu was just born. It brings quite a lot of fixes - I simply release it because changelog got too big :-).

Full list of changes:

  • Report more verbosely that some feature has been disabled on compile time.
  • Add ID for Nokia 5200 (thanks to Andreas Metzler).
  • Add two IDs for Nokia 2600 (bug #659).
  • Add ID for lot's of Sony Ericsson phones.
  • Use AT parser for AT+CPBS? reply.
  • Use all possible ways to get memory status (bug #687).
  • Detect more error codes from Nokia phones (bug #659).
  • Fix decoding of text using iconv (bug #687).
  • Fix linker flags check, caused failures on MacOS X.
  • Add second ID for Nokia 2610 (thanks to Nicolas Forget).
  • Add ID for Nokia 6060.
  • Try to use OPP and PBAP Bluetooth profiles also (not tested!).
  • DumpMessage is not printing last char (bug #692).
  • Support for favorite messaging number (bug #693).
  • Add ID for Nokia 2630 (bug #693).
  • First attempt for Bluetooth support on OS X.
  • Do not open debug file for second time when using global debug.
  • Fix DC memory name printing (bug #698).
  • Add API function GSM_MemoryTypeToString.
  • Report correct size of DC/RC/MC memory on DCT4 phones (bug #699).
  • Store favorite messaging as phone number, not only as ID (bug #693).
  • Avoid empty line at beginning of vCard backup (bug #701).
  • Add ID for Nokia 2760.
  • Catch not acceptable errors in OBEX (bug #702).
  • Operation not allowed is not an unknown problem (bug #678).
  • Add ID for Nokia 5000 (bug #677).
  • Increase limit of files for DCT4 and check array size (bug #676).
  • Allow to enter PIN code from stdin (bug #633).
  • Handle HEX reply instead of UCS-2 from Motorola (bug #697).
  • Avoid decoding of @ in email address (bug #697).

You can download from usual place: http://cihar.com/gammu/, Debian users will find packages in experimental soon.

PS: I still have about 50 unread mails about Gammu, so please be patient.

White Russian and Aiccu problems

Today, I wanted to finish something what looked like easy task from beginning. To bing IPv6 connectivity to my home using tunnel from Sixxs. As I have an OpenWRT, I expected it should not be harder than setting up same thing on my Debian notebook.

There exists several howtos on the net, we can take the one on Sixxs wiki as a good starting point. Just follow the instructions and you should get it working right? Unfortunately not. Aiccu connects, IPv6 addresses are assigned, subnet is correctly distributed over network using radvd, but IPv6 connectivity does not work.

Going deeper into this issue, I found out that some packets go out, but nothing comes back. When comparing results with Aiccu set up on my Debian notebook, I noticed that packets from OpenWRT router are few bytes larger, but I didn't though it could be a reason. Unfortunately it was -- OpenWRT contains wrongly compiled Aiccu, which does not strip ethernet headers from outgoing packets and gateway then throws them out.

This is a well known bug, but unfortunately nobody fixed it for White Russian. Anyway I'm not going to reinstall whole system to Kamikaze just to make the thing work, so I compiled the Aiccu package on my own and now the tunnel works fine. If you are interested, you can get the package here.

phpMyAdminovi je 10 let

9. září 1998 byla vydána první verze phpMyAdmina. O deset let později tento projekt stále existuje a vyvíjí se. Proto je na místě poděkovat všem, kteří toto umožnili:

  • vývojářům MySQL a PHP
  • vývojářům a překladatelé phpMyAdmina (minulí i současní)
  • firmám, které podpořily projekt: SourceForge.net za hostování, Pack Publishing za příspěvky z knihy „Mastering phpMyAdmin“
  • a samozřejmě uživatelům

Jsme rádi, že tu s vámi jsme už tak dlouho.

New SSL certificates

New Firefox is complaining about untrusted certificates in even more painful way and the time when CAcert certificates will be widely accepted seems to be far away, so I had to do something with bug tracker certificate. Otherwise I would receive too much of mails about broken certificate (which has been always valid, just signed by CAcert, which is usually not between trusted certificate authorities).

As a cheapest way to deal with this issue I found seems to be StartSSL. The problem is that their root certificate is not everywhere, but at least Firefox contains it. Anyway it is just an attempt to make things work better, if you have any problems with new certificate, just drop me an email.

More fun with phpMyAdmin package in Debian

When finishing series of articles about Debian packaging and writing about dbconfig-common, I just had to ask myself, why it is not used in phpMyAdmin package. I did not find any reason and as Thijs did not have any objections, I hacked it together this evening.

So what you will get? All fancy features where phpMyAdmin requires it's database to manage some additional features. For example you can create PDF pages with structure of your database, add additional comments to databases, notice relations between MyISAM tables, etc. Simply see wiki for more details.

Besides this, phpMyAdmin is now automatically configured to use database you choose using dbconfig-common, so you can also connect to remote MySQL server without manually configuring anything.

The only thing which scares me a bit is that we now increased a lot number of debconf questions user has to reply by this...

Jak nedělat autentizační token

Do phpMyAdmina chtějí protlačit podporu pro jeden autentizační token. Jak tato věc funguje na hardwarové úrovni nevím (má tam být nějaký autentizační kalkulátor, který na výzvu vygeneruje nějakou unikátní odpověď), ale docela mě pobavil přístup k bezpečnosti softwarového řešení okolo. Celá popisovaná věc se jmenuje Swekey a stojí za ním firma Musbe, založená jen kvůli tomuto zařízení ( to develop and market an innovative authentication technology ).

Token se strká do USB (v dnešní době to asi ani jinak nejde) a celou věc obsluhuje v Linuxu jakási binárka komunikující s tokenem přes libusb. No aspoň, že to bude hnít v userspace a ne v kernelu. Bohužel pokud to chcete použít na něčem jiném než i386, máte smůlu. Protože nám se jedná o autentizaci webové aplikace, máme ještě k dispozici další binárku a to plugin do prohlížeče Firefox (pro Windows případně ještě ActiveX pro MSIE).

Když už se uživateli poštěstí toto rozběhat (a nebude řešit takové nepodstatné otázky, jako třeba: proč binárka obsluhující ten token musí používat curl?), může vyzkoušet úžasné možnosti, které nám tato autentizace skýtá. A hlavně se podívat na kód, který se o autentizaci stará, protože ten již k dispozici máme. Kromě phpMyAdmina, kde je jakási meziverze už v SVN, ještě existuje plugin pro SquirrelMail a prý i patch pro RoundCube, modul pro PAM atd.

Jak vlastně celá věc funguje?

  1. Načte se ID z USB tokenu
  2. Ze serveru se stáhne náhodný token (platný dvě minuty)
  3. Náhodný token se nacpe do USB tokenu a ten vygeneruje OTP (jednorázové heslo)
  4. ID tokenu, náhodný token a OTP se pošle na server a ten je ověří

No vypadá to celkem jednoduše, tož pojďme se podívat jak to soudruzi naimplementovali. Podotýkám, že v patchi pro phpMyAdmin, už pomaly níže popsané problémy mizí, ale za cenu víceméně kompletního přepsání kódu, jak se (ne)budou vyvíjet patche/pluginy pro ostatní programy netuším, nicméně autoři pořád někde preferují původní řešení.

Komunikace

První věc, která kohokoliv musela praštit do očí bylo použití nešifrovaného HTTP spojení při komunikaci se serverem. Což ve spojení s jednoduchým až triviální protokolem, znamená, že kdokoliv, kdo je schopný na jakýkoliv HTTP požadavek odeslat odpověď "HTTP/1.0 200 OK\n\nOK" se může stát autentizačním serverem, který autentizuje cokoliv komukoliv. Soudruzi sice v patchi pro phpMyAdmina přešli na HTTPS s ověřováním certifikátu, ale z výkonnostních důvodů jinde zůstane nadále HTTP. Vskutku inovativní řešení.

Umístění souborů

Mapování tokenů na uživatele mělo být umístěno v kořenovém adresáři phpMyAdmina a tedy přístupné přes web. Což ve spojení s předhozí zranitelností znamená, že jediná informace, kterou by případný útočník potřeboval - ID klíče, který mu dovolí přístu, může bez problémů získat napsáním správného URL.

Dočasné soubory

Protože náhodný token je platný dvě minuty, rozhodli se autoři ušetřit námahu jejich serveru s generováním a tento token cachovat. Bohužel ukládat pevně pojmenovaný soubor do adresáře /tmp není zrovna nejlepší nápad a už vůbec není dobrý nápad tento soubor vytvářet s právy 777 . Co by se asi stalo, kdyby náhodný uživatel na serveru do tohoto souboru uložil třeba nějaký film a ten se následně začal odesílat na jejich server jako náhodný token při autentizaci?

No nechtějte to

Většina zde zmíněných problémů existuje ve všech implementacích tohoto tokenu, do kterých jsem se koukal. Kromě toho každá implementace přidává spoustu unikátních programátorských chyb. Zájemcům o pobavení se doporučuji modul pro PAM, který je vlastně jen spouštěč skriptu v bashi, který volá curl a komunikuje se serverem.

Update

Při psaní tohoto článečku mě napadl ještě jeden problém, kterým to asi bude trpět, ale nechtěl jsem to psát dokud to neověřím, což se právě stalo. Přístup k tokenu z prohlížeče není pluginem nijak omezován, takže jakákoliv stránka může zjistit ID vašeho tokenu a vygenerovat si OTP heslo. No lepší podmínky pro krádež identity si už lze představit jen těžko :-).