Seite 1 von 1

os.tempnam nutzt Vorgabeverzeichnis nicht

Verfasst: Mittwoch 29. November 2006, 08:07
von Michael Schneider
Hallo,

mir ist eben aufgefallen, dass bei meinem Python 2.4.1 das Vorgabeverzeichnis bei os.tempnam nicht berücksichtigt wird:

Code: Alles auswählen

import os
sName = "test"
sNeuerName = os.tempnam("c:\\python24", sName+"_")
print sNeuerName
Bei mir wird ein Pfad im Eigene Dokumente-Ordner zurückgegeben. Bei 2.2 unter HP-UX funktioniert das ganz gut. Mache ich etwas falsch oder muss ich da einen Trick anwenden?

Und wo ich schon wieder dabei bin, euch mit Fragen zu überhäufen: gibt es einen Weg, diese Unsicherheitswarnung (oder wenigstens alle Warnungen) zu unterdrücken?

Vielen Dank für eure Hilfe,
Michel

Re: os.tempnam nutzt Vorgabeverzeichnis nicht

Verfasst: Mittwoch 29. November 2006, 08:35
von Leonidas
Michael Schneider hat geschrieben:Und wo ich schon wieder dabei bin, euch mit Fragen zu überhäufen: gibt es einen Weg, diese Unsicherheitswarnung (oder wenigstens alle Warnungen) zu unterdrücken?
Die Warnung ernst nehmen und tmpfile() benutzen, so wie die Dokumentation vorschlägt?

Re: os.tempnam nutzt Vorgabeverzeichnis nicht

Verfasst: Donnerstag 30. November 2006, 08:03
von Michael Schneider
Leonidas hat geschrieben:
Michael Schneider hat geschrieben:Und wo ich schon wieder dabei bin, euch mit Fragen zu überhäufen: gibt es einen Weg, diese Unsicherheitswarnung (oder wenigstens alle Warnungen) zu unterdrücken?
Die Warnung ernst nehmen und tmpfile() benutzen, so wie die Dokumentation vorschlägt?
Hi Leonidas,

das hilft mir leider nicht weiter, denn scheinbar kann ich weder bei tmpnam, noch bei tmpfile das Verzeichnis spezifizieren, in dem die Dateien abgelegt werden sollen. Den Algorithmus benutze ich eigentlich nur, um noch nicht belegte Dateinamen zu finden. Angriffe sind eher unwahrscheinlich und sym-link Attacken kann man durch Prüfung nach Öffnen der Datei ausschließen.

Aber wenn es eine andere Methode zum ermitteln freier Dateinamen für ein bestimmtes Verzeichnis gibt, würde ich darauf auch umsteigen.

Grüße,
Michel

Re: os.tempnam nutzt Vorgabeverzeichnis nicht

Verfasst: Donnerstag 30. November 2006, 09:03
von gerold
Michael Schneider hat geschrieben:Angriffe sind eher unwahrscheinlich und sym-link Attacken kann man durch Prüfung nach Öffnen der Datei ausschließen.
Hi Michael!

Wenn das Problem anders gelöst werden kann, dann sollte man es anders lösen. Wenn nicht, dann muss man sich Bewusst sein, dass ein Sicherheitsrisiko besteht. Die Warnung soll hauptsächlich zum Nachdenken über die Sicherheit anregen. Wenn die Programmsicherheit garantiert kein Problem darstellt, dann ist es auch kein Problem, die Warnung herauszufiltern.

Das geht über das Modul ``warnings``.
Ich glaube, mit ``warnings.filterwarnings()``, kannst du die ausgeworfene Warnung explizit herausfiltern.

Und hier noch der Wink mit dem Betonpfeiler: ;-)
Verwende für temporäre Dateien das Modul ``tempfile``!!! ... und lies dir die Modulbeschreibung komplett durch. --> http://docs.python.org/lib/module-tempfile.html

mfg
Gerold
:-)

Verfasst: Donnerstag 30. November 2006, 15:18
von Michael Schneider
Hi Gerold,

bei os.tmpfile() konnte man kein Verzeichnis angeben, aber das Modul tempname sieht schon besser aus. Mal sehen, was ich davon in Python 2.2 schon nutzen kann.

Nachdenken über Sicherheit ist sicherlich nur selten fehl am Platz (sonst wüsste ich jetzt nicht, was sym-link Attacken sind), aber wenn User das Programm ausführen, ist definitiv der schlechteste Zeitpunkt. ;-)

Grüße,
Michael