Kde-Screensaver Problem gelöst :-))))

From: Christian <s0233343(at)fhtw-berlin.de>
Date: Wed, 24 Nov 1999 04:55:49 +0100

JUHU!!!!!

Endlich....ich habe es geschafft meinen Desktop ( und damit auch meinen
soooo wertvollen Text) wieder zum Leben zu
erwecken, nachdem die Matrix (kmatris.kss) ihn 3 Tage und 11 Stunden
unter Veschluss gehalten hat! ( up 3+11:34:18 04:47:32 )!

Oje, war das ein Act, den ich aber ohne euch alle nie geschafft hätte!!
Also einen rechtherzliches Dank an die MailingListe von DE-FreeBSD!

Und natuerlich ein riesesgrosses DANKESCHOEN an Joerg, der mir mit zwei
verdammt wertwollen Emails die Theorie erklaert hat, wie ich das zu
meistern habe.

Allerdings koennte ich noch nicht herausbekommen, warum das so ist!
Ich werde es mir aber noch mal genauer anschauen nach meinem Vortrag.

Problem: Kde-Screensaver akzeptiert Passwort nicht, und verhindert so
den Zugang zu X.

Lösung:

(falls jemad schon die E-Mail gelöscht hat)
Email von Joerg: (leicht abgeändert)

Ansatz: Versuch den Screenlocker zu tracen (wirst Du als root tun
muessen).
Baue Dir zu
diesem ein zweites identisches Exemplar, das mit gleicher Optimierung
aber mit -g überrsetzt ist; mit size(1) überprüst Du, dass beide
wirklich identisch rauskommen. Es wichtig, dass beide Files
den gleichen Code besitzen.

Nach meinen Erfahrungen funktioniert das beim
gcc auf einer ix86 Architektur prima, dass Du das "-g" nachträglich
draufsetzt, er erzeugt trotzdem denselben Code, solange die
Optimierungsstufe dieselbe war.

Dann startest Du den Debugger mit dem
Image-File, das mit -g compiliert ist (so dass Du die entsprechenden
Sourcecodezeilen ordentlich verfolgen kannst), und attachst Dich auf
den laufenden Prozess.

Das "attach" bewirkt, dass der Prozess an der laufenden Stelle
unterbrochen wird, und zwar in einer Form, als wäre er gleich von
Anfang an unter Steuerung eines Debuggers gelaufen und hätte jetzt
einen Breakpoint erreicht. Du kannst daher also weitere Breakpoints
setzen, Dir den Stack ansehen, lokale oder globale Variablen
begutachten usw. (der Debugger arbeitet dafür glaub' ich mit
/proc/<pid>/mem oder sowas) und natürlich irgendwann auch den
Programmlauf fortsetzen. Ein ^C im Debugger müsste den Prozeß auch an
der aktuellen Stelle wieder anhalten.

Jetzt suchst
Du Dir im Sourcecode die Stelle, an der das crypt() aufgerufen wird
oder was in der Gegend, jedenfalls nachdem das Teil Dein Passwort
gelesen hat. Dort setzt Du einen Breakpoint und "continue", schaltest
auf X11 um, und tippst Dein Passwort ein. Dann gehst Du im single-step
über all das drüber, wo das Passwort verglichen wird. Irgendwo wird
der Vergleich wohl negativ ausfallen, an dieser Stelle änderst Du das
Ergebnis dergestalt, dass es den Erwartungen des Programmes entspricht.
Nachdem Du Dich in weiteren Einzelschritten davon überzeugt hast, dass
das jetzt ordentlich weitergeht, kannst Du "continue" drücken.

 // end of mail joerg

In der Praxis sieht das fast genauso so aus, um den laestigen
screensaver
wieder wegzubekommen.

(quick and dirty)

1. starten des gdb mit dem identitischen mit -g kompilierten
screensaver.
   gdb

2. Attachen an den laufenden prozess. ( attach <pid> )

3. mit l den code durchstoebern.
   irgendwann trifft man auf folgende abfrage ( bei den meisten ist das
bei
   Zeile 126)

[...]

    if ( !canGetPasswd || (!lock && !lockOnce) )
         qApp->exit_loop();

    else
    {
       passDlg = new KPasswordDlg( saverWidget, stars );
       connect(passDlg, SIGNAL(passOk()), SLOT(slotPassOk()));
       connect(passDlg, SIGNAL(passCancel()), SLOT(slotPassCancel()));
       passDlg->move( (desktopWidth - passDlg->width())/2,
       (desktopHeight - passDlg->height())/2 );
       passDlg->show();
    }
    return TRUE;

[...]

Meistens steht canGetPasswd bei den screensavern auf true,
aendert man dies mit
"p canGetPasswd=false" und drueckt c fuer continue, so ist der
screensaver weg, da qApp->exit_loop() ausgefuehrt wird. Das wars.

Eigentlich ganz einfach...

Ich hoffe ich habe hier jetzt nicht zu viel bloedsinn geschrieben, aber
vor vier Tagen kannte ich C und C++ noch nicht. Mann moege mir also ver-

zeihen.
Auf alle Faelle gehts so bein Screensavern von KDE.

Ich sag nur noch eins zum Schluss

 OPEN SOURCE MACHT`S MÖGLICH

bye

Christian

To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Wed 24 Nov 1999 - 04:52:02 CET

search this site