problem mit dem modul os

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
murph
User
Beiträge: 622
Registriert: Freitag 14. April 2006, 19:23
Kontaktdaten:

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)
http://www.cs.unm.edu/~dlchao/flake/doom/
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Ist /dev/urandom vorhanden und für den entsprechenden Benutzer lesbar?
murph
User
Beiträge: 622
Registriert: Freitag 14. April 2006, 19:23
Kontaktdaten:

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!
http://www.cs.unm.edu/~dlchao/flake/doom/
murph
User
Beiträge: 622
Registriert: Freitag 14. April 2006, 19:23
Kontaktdaten:

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
http://www.cs.unm.edu/~dlchao/flake/doom/
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

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.
murph
User
Beiträge: 622
Registriert: Freitag 14. April 2006, 19:23
Kontaktdaten:

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...
http://www.cs.unm.edu/~dlchao/flake/doom/
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Jo, klar.
murph
User
Beiträge: 622
Registriert: Freitag 14. April 2006, 19:23
Kontaktdaten:

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 :-)
http://www.cs.unm.edu/~dlchao/flake/doom/
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

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] ;-)
murph
User
Beiträge: 622
Registriert: Freitag 14. April 2006, 19:23
Kontaktdaten:

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 :-)
http://www.cs.unm.edu/~dlchao/flake/doom/
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Dann solltest du aber break und continue vertauschen.
murph
User
Beiträge: 622
Registriert: Freitag 14. April 2006, 19:23
Kontaktdaten:

thx, is mein erster tag nach dem urlaub (2 1/2 wochen), kann noch nicht klar denken ^^
(aber bei der fehlermeldung...)
http://www.cs.unm.edu/~dlchao/flake/doom/
murph
User
Beiträge: 622
Registriert: Freitag 14. April 2006, 19:23
Kontaktdaten:

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!
http://www.cs.unm.edu/~dlchao/flake/doom/
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Jetzt wo du get_uid_from_sid so abgewandelt hast, dass es KeyErrors abfängt, kommen natürlich in login() keine mehr an.
murph
User
Beiträge: 622
Registriert: Freitag 14. April 2006, 19:23
Kontaktdaten:

ok, thx.
muss mir mal überlegen, wie man den code übersichtlicher gestallten könnte...
http://www.cs.unm.edu/~dlchao/flake/doom/
Antworten