Seite 1 von 1

problem mit dem modul os

Verfasst: Dienstag 1. August 2006, 17:52
von murph
hi!
kaum da, is da auch n problem:
self.sid = os.urandom(16)
File "/usr/lib/python2.4/os.py", line 720, in urandom
raise NotImplementedError("/dev/urandom (or equivalent) not found")
NotImplementedError: /dev/urandom (or equivalent) not found
warum? ich weiß gar nicht, was ich posen soll!
eine kleinigkeit am code verändert (das ganze in eine while-schleife gesteckt)
und von einer auf die andere sekunde geht es nicht mehr:

Code: Alles auswählen

        while True:
            self.sid = os.urandom(16)
            try:
                get_uid_from_sid(self.sid)
                break
            except KeyError:
                continue
(falls das was helfen sollte)

Verfasst: Dienstag 1. August 2006, 18:00
von birkenfeld
Ist /dev/urandom vorhanden und für den entsprechenden Benutzer lesbar?

Verfasst: Dienstag 1. August 2006, 18:06
von murph
ja, ich habe es noch eine sekunde vorher erfolgreich gemacht!
ich habe am script rumgeschrieben, regelmäßig probiert,
ging die ganze zeit.
ich habe zwar das system geupdatet, aber danach ging es auch eine weile noch.
die datei liegt dort, an den benutzerrechten ist nichts verändert!

Verfasst: Dienstag 1. August 2006, 19:20
von murph
was mich noch verunsichert, ist, dass die fehler nicht die gleichen sind, wenn ich die prozedur abbreche!
mal alle mir bisher erschienenden fehlermeldungen:
murph@murphs:~/own_project$ ./sqliteserver.py
Traceback (most recent call last):
File "./sqliteserver.py", line 133, in ?
root_sid = conn.login('root',conn.get_root_pw())
File "./sqliteserver.py", line 101, in login
self.sid = os.urandom(16)
File "/usr/lib/python2.4/os.py", line 723, in urandom
bytes += read(_urandomfd, n - len(bytes))
KeyboardInterrupt
murph@murphs:~/own_project$ ./sqliteserver.py
Traceback (most recent call last):
File "./sqliteserver.py", line 133, in ?
root_sid = conn.login('root',conn.get_root_pw())
File "./sqliteserver.py", line 103, in login
get_uid_from_sid(self.sid)
KeyboardInterrupt
murph@murphs:~/own_project$ ./sqliteserver.py
Traceback (most recent call last):
File "./sqliteserver.py", line 133, in ?
root_sid = conn.login('root',conn.get_root_pw())
File "./sqliteserver.py", line 101, in login
self.sid = os.urandom(16)
File "/usr/lib/python2.4/os.py", line 720, in urandom
raise NotImplementedError("/dev/urandom (or equivalent) not found")
NotImplementedError: /dev/urandom (or equivalent) not found

Verfasst: Dienstag 1. August 2006, 19:49
von birkenfeld
Wenn du die Prozedur mit Ctrl+C abbrichst, ist es klar, dass du einen KeyboardInterrupt bekommst, und zwar an genau der Stelle, an der Python gerade mit der Ausführung steckt.

Da in os.urandom (leider) ein ein catch-all-except steht, wird dieser dann in einen NotImplementedError umgewandelt.

Ich habe das gleich mal gefixt, in 2.5 bekommt man jetzt immer einen KeyboardInterrupt.

Verfasst: Dienstag 1. August 2006, 19:53
von murph
aber er sollte an der stelle gar nicht hängen!
soll ich mal kurz die skripts online stellen und du schaust die dir mal an und
probierst die aus?
wäre ganz nett, wenn ich wüsste, ob das zumindest wo anders klappt...

Verfasst: Dienstag 1. August 2006, 19:57
von birkenfeld
Jo, klar.

Verfasst: Dienstag 1. August 2006, 20:10
von murph
du findest das unter http://murph.airmode.de/index.html
einfach die neuste version, test.py und test2.py importieren.
ACHTUNG:
das ist mein erstes größeres Project, mein code nicht der beste^^
auch kann ich mich nur langsam meinem fernziel nähern, habe selbst noch viel vor, was da rein muss :-)

Verfasst: Dienstag 1. August 2006, 21:04
von birkenfeld
Kann es sein, dass get_uid_from_sid nie Erfolg hat, wenn session[sid] erst viel später in login() gesetzt wird?

Übrigens: [wiki]Die global-Anweisung[/wiki] ;-)

Verfasst: Dienstag 1. August 2006, 21:24
von murph
ich weiß nicht, welche stelle du im code meinst, aber an einer stelle
soll es gar keinen erfolg haben!
an einer stelle (bei der while-schleife) soll geprüft werden, ob diese
zufallsbytes doch schon vergeben sind an einen anderen user.
und bei global ist es zugunsten eines dictionarys zurechtgerückt worden :-)

Verfasst: Dienstag 1. August 2006, 21:25
von birkenfeld
Dann solltest du aber break und continue vertauschen.

Verfasst: Dienstag 1. August 2006, 21:39
von murph
thx, is mein erster tag nach dem urlaub (2 1/2 wochen), kann noch nicht klar denken ^^
(aber bei der fehlermeldung...)

Verfasst: Donnerstag 3. August 2006, 23:28
von murph
jetzt habe ich wieder Probleme damit:
http://murph.airmode.de/index.html
mein Problem ist, dass die SessionID manchmal nicht richtig eingetragen wird.
Aber bei der Problemlösung ist das Problem, dass das nur manchmal auftritt.
Der Ausschnitt:

Code: Alles auswählen

    def login(self,user, pw):
        self.sql = "SELECT name, uid, pw FROM users WHERE name = ?"
        self.cur[0].execute(self.sql, (user,))#<-die root-table
        for name, _uid, real_pw_clone in self.cur[0].fetchall():#<infos über den user
            real_pw = real_pw_clone
            self.conn[_uid] = sqlite.connect(pathdic['path']+name+".db")
            self.cur[_uid] = self.conn[_uid].cursor() 
            self.uid = _uid
        try:
            self.a = real_pw[0]#< ist das passwort abgeholt worden?
        except UnboundLocalError:
            return False#<fehlschlag
        if not real_pw == pw:
            return False
        while True:#<generiert die einmalige session-id
            self.sid = os.urandom(16)
            try:
                self.get_uid_from_sid(self.sid)
                continue
            except KeyError:
                break
        self.session[self.sid] = self.uid #<eintrag
        self.cur[0].execute("UPDATE users SET logflag = ? WHERE name = ? ", (True, user))#<loggstatus wird verändert; gedanke: begrenzte userzahl
#pro datenbank, um hacker auszusperren/bemerken. noch nicht realisiert
        self.conn[0].commit()
        return self.sid
Aussprüchlich VIELEN Dank für die Hilfe!

Verfasst: Freitag 4. August 2006, 09:34
von birkenfeld
Jetzt wo du get_uid_from_sid so abgewandelt hast, dass es KeyErrors abfängt, kommen natürlich in login() keine mehr an.

Verfasst: Freitag 4. August 2006, 14:36
von murph
ok, thx.
muss mir mal überlegen, wie man den code übersichtlicher gestallten könnte...