IOError: [Errno 13] Permission denied

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
Gremlin
User
Beiträge: 166
Registriert: Freitag 28. Mai 2010, 23:49

Ich hab vor ein paar Tagen mein Programm veröffentlicht und erhalte nun massenweise Fehlerreports über Dateien auf die nicht zugegriffen werden konnte. Ich überprüfe ob die Dateien existieren bevor ich sie (zum lesen) öffne. Ich weiß aber nicht genau, woran das nun liegt bzw. um es genauer zu sagen, ob "ich" als Entwickler überhaupt irgendetwas dran ändern kann, außer diese Fehler abzufangen.

Hauptsächlich treten die Fehler bei der 64bit Version auf, ich gehe also davon aus, dass es größtenteils auf Windows Vista bzw. 7 zurückzuführen ist. Ich selbst nutze auch Windows 7 und habe allerdings nicht diese Probleme. Bevor ich nun irgendetwas als "Lösung" präsentiere, wüsste ich doch gerne ob das nun wirklich die einzige wäre. Also in dem Fall das abfangen, loggen und letztendliche ignorieren.

Kennt das jemand? Hat jemand einen besseren Vorschlag?
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Da wird vermutlich irgendwas mit der Rechtevergabe nicht stimmen. Würde die Datei nicht existieren, dann gäbe es einen anderen Fehlertext. Im Übrigen ist es kein guter Stil, eine solche Art von Vorprüfung zu machen, wie du es tust. Der Grund ist, dass dies keine atomare Aktion ist, d.h. die Gegebenheiten könnten sich in der Zeit zwischen Test und dem darauf folgenden Dateizugriff schon wieder geändert haben. In bestimmten Szenarien könnte sogar ein Angreifer dieses Vertrauen böswillig ausnutzen. Besser ist es, den Zugriff einfach zu probieren und die möglichen Fehlerszenarien (d.h. Exceptions) sinnvoll abzufangen.
Gremlin
User
Beiträge: 166
Registriert: Freitag 28. Mai 2010, 23:49

Naja, es sind keine Dateien die "mal eben so" verschwinden können. Wenn überhaupt werden sie von wiederum einem anderen Programm geändert.
Aber inwiefern könnte man mein Vorgehen böswillig ausnutzen? Es geht schließlich in dem Fall nur um die reine Existenz, nicht um den Inhalt einer Datei.
deets

Ich verstehe auch nicht genau, auf was snafu da raus will - beim lesen zumindest.

Wie dem auch sei, das einzige, was mir da als nicht-windows-user einfiele waere, dein Programm mal nicht mit deinem Standard-Benutzer laufen zu lassen, der - so nehme ich mal an - eher weitreichende Rechte hat. Programmierer haben die ja gerne mal ;)

UU kommst du dadurch dem Problem auf die Schliche.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Gremlin hat geschrieben:Naja, es sind keine Dateien die "mal eben so" verschwinden können. Wenn überhaupt werden sie von wiederum einem anderen Programm geändert.
Macht es aber nicht besser. Es ist immer noch ein potentieller Bug. Stell dir vor du prüfst, ob ne Datei exisitiert (Ergebnis: ja), der Virenscanner sieht nen Zugriff auf eine Datei, prüft sie und befindet sie für einen Virus und löscht/steckt sie in Quarantäne, ob jetzt gerechtfertigt oder nicht sei mal dahingestellt. Nun kommt dein Programm, versucht sie zu öffnen und crasht. Das ist doch kein gutes Vorgehen, nicht wahr?
Gremlin hat geschrieben:Aber inwiefern könnte man mein Vorgehen böswillig ausnutzen? Es geht schließlich in dem Fall nur um die reine Existenz, nicht um den Inhalt einer Datei.
Naja, es gibt Szenarien wo es sinnvoll ist etwa ein Programm zu crashen, so wie deines, um dadurch Zugang zu irgendwas zu bekommen. Oder es einfach außer Gefecht zu setzen (Stichwort DoS). Und davon abgesehen ist die sichere Lösung eh besser, denn du versuchst Dateien zu lesen, aber prüfst nur ob sie existieren, aber nicht ob du sie auch lesen darfst. Eine Ausnahmebehandlung beim Lesen würde beide Fälle abdecken.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Für mich wäre halt abgesehen vom Sicherheitsaspekt schon das Wissen um die besagte "Lücke" in meiner Logik ein Grund, anders vorzugehen. Natürlich kann es sehr gut sein, dass dieser Crash niemals eintritt, aber an deiner Stelle würde ich gar nicht erst das Potenzial eines Programmabsturzes bzw eine "fragwürdige" Logik im Code haben wollen.
Gremlin
User
Beiträge: 166
Registriert: Freitag 28. Mai 2010, 23:49

Inzwischen fange ich bei allen open()'s und codecs.open()'s diesen IOError ab, zusätzlich. Bei Zugriffen auf Verzeichnisse sieht die Sache allerdings wieder anders aus... Egal, zum Thema wegen den Rechten: Mein Programm fordert über UAC Administratorrechte an, deshalb wundert mich das ja auch dass da so viele Zugriffsfehler bei den Usern kommen. Ist zwar jetzt kein Problem dass jeder User hat ("nur" ~10%) aber gefallen will mir das trotzdem nicht so recht. (Ich hasse es wenn ich als Antwort nur "Das ist bei dir halt so" parat habe..)
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Unter Windows koennen Dateien ja auch beim Zugriff gelockt werden--wie saehe da die Fehlermeldung aus? (Schert Python sich ueberhaupt darum?) Nur so eine Idee...
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Rebecca hat geschrieben:Unter Windows koennen Dateien ja auch beim Zugriff gelockt werden--wie saehe da die Fehlermeldung aus? (Schert Python sich ueberhaupt darum?) Nur so eine Idee...
Das würde wahrscheinlich zu einem WindowsError führen.
Antworten