Python auf IIS6

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
hardez
User
Beiträge: 24
Registriert: Montag 19. Oktober 2009, 16:39

Hallo Leute,
mir ist leider kein sinnvollerer Threadname eingefallen.

Also zu meinem Problem.
Ich habe eine Webapp geschrieben, mit der man Verwatlungsaufgaben auf meinem Server online (intranet) ausführen kann.
Dazu habe ich Python als Erweiterung auf dem IIS installiert.
Das geht auch alles soweit, wenn ich als Domänen-Benutzer diese Seite öffne. Melde ich mich als Benutzer auf der Seite an, gehen manche Sachen nicht.

Erläuterung:

Eine Aufgabe der WebApp ist zum Beispiel das sperren von Ordnern mittels subprocess und cacls für bestimmte Benutzergruppen.

Wie gesagt führe rufe ich die Seite als Domänen-Admin auf gehts, als Nutzer nicht.
So ist ja scheinbar ein Rechteproblem dachte ich mir, also hab ich das Script mal lokal auf einem Rechner aber mit Benutzerrechten ausgeführt und siehe da, es geht.

Schein also nicht an den Rechten selbst zu liegen.

Hier mal ein Codesnippet:

Code: Alles auswählen

def sperre_ordner(klasse,sperre):
        path=datapath+'%s\\!AUSTAUSCH' % (klasse)
        if os.path.exists(path):
                if klasse == 'LEHRER' or klasse == 'ANGESTELLTER':
                        print 'Sperren dieser Klasse ist nicht zugelassen!'
                else:
                        if sperre == 'sperre':
                                ausgabe='gesperrt'
                                execute='cacls %s /E /P %s:N' % (path,klasse)
                        else:
                                ausgabe='entsperrt'
                                execute='cacls %s /E /P %s:C' % (path,klasse)
                                
                        p=Popen(execute,stdout=PIPE,stderr=PIPE)
                        print p.stdout.read()+'<br>wurde '+ausgabe
                        
        else:
                print '<br><br>Die Klasse existiert nicht!<br>'
Jetzt mal abgesehen von der Qualität des Codes ;), hat einer ne Idee was man machen kann?

Also ich hab nachgeschaut:
- User hat Rechte auf den Ordner
-- Ja haben sie

- User hat Rechte um das Script auszuführen
-- auch das haben sie

und wie gesagt lokal gehts!

EDIT:
Damit keine Missverständnisse aufkommen, ich habe bei Verzeichnissicherheit aktiviert, dass die sich mit ihrem Active Directory Namen authentifizieren müssen!
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Schau doch mal nach, mit welchem User die WebApp läuft, z.B. mit getpass.getuser() Dieser User muß die Rechte für die Aktionen haben.

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
hardez
User
Beiträge: 24
Registriert: Montag 19. Oktober 2009, 16:39

Das hab ich schon probiert, da sagt er User=None
Hab ich auch nicht verstanden!

EDIT:
Also er sagt sowohl bei den Admins als auch bei den Usern "None"

EDIT2:
Hab mich vertan aaalso
Ich hab probiert getpass.getuser() da kommt lokal der richtige Name, in der App lässt sich die seite nicht laden, da bricht sie mit nem CGI fehler ab.

Mit win32api.GetUserName() kommt der richtige Name lokal UND in der App
und mit os.environment.habichvergessen(Username) kommt None
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

hardez hat geschrieben:Wie gesagt führe rufe ich die Seite als Domänen-Admin auf gehts, als Nutzer nicht.
Wie meinst du das genau? Der IIS läuft kontinuierlich, wird also nicht neu gestartet. Dann rufst du die Seite per Browser mit dem einen und dem anderen User auf und bei einem geht's und beim anderen nicht???

Was siehst du denn, wenn ein Fehler komme???
Pack doch mal die Ausführung des Befehls in einen try Block und gib auch stderr, beim Fehler aus. Hast du cgitb aktiviert?

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
hardez
User
Beiträge: 24
Registriert: Montag 19. Oktober 2009, 16:39

Der Befehl war vor der oberen Version in einem try-Block, da hat er einfach immer das except ausgeführt und als Fehler "-1" ausgegeben mehr nicht.

Und ja deine Vermutung war richtig, der IIS läuft dauerhaft und einmal melde ichmich mit Nutzerrechten an, dann schließe ich den Browser und dann melde ich mich mit Admin rechten an und bei einem gehts und bei dem anderen nicht!

Also es wird mit Sicherheit ein Rechteproblem sein, ich weiß nur nicht an welcher Stelle!

Wie gesagt führe ich das Skript lokal aus geht es auch mit Nutzerrechten!
Nur über die App nicht!
BlackJack

Wie sieht's mit `cgitb` aus? Und welche Ausnahme kam denn da genau?
hardez
User
Beiträge: 24
Registriert: Montag 19. Oktober 2009, 16:39

cgitb is an, meldet aber nichts.
Aber ich muss auch zugeben das ich jetzt nich so viel Ahnung von Python habe.
Also cgitb ist importiert und mit cgitb.enable() auch angeschaltet und ich hatte auch schon mal cgi Fehlermeldungen, also gehen tut es wohl.

Welche Ausnahme da kommt?
Keine Ahnung wie finde ich das raus?
Wie gesagt ich krieg wenn ich das Skript als Website aufrufe, die Fehlermeldung -1 und wenn ich es lokal ausführe kommt keine Fehlermeldung denn da geht es!
BlackJack

@hardez: `cgitb` gibt Ausnahmen plus Traceback aus, die bis ganz "nach oben" durchschlagen. Wenn Du also irgendwo welche vorsätzlich "verschluckst", dann sieht man die nicht. Welche behandelst Du denn in dem besagten ``except``? Und wie reagierst Du da drauf? Wenn Du die an einen Namen bindest, kannst Du doch ausgeben wie sie als Zeichenkette aussieht und/oder welchen Typ sie hat.

Was heisst "die Fehlermeldung -1"? Wo kommt die her, wie wird die angezeigt?
hardez
User
Beiträge: 24
Registriert: Montag 19. Oktober 2009, 16:39

Also im Exeptblock habe ich dann immer eine print Ausgabe das ein Fehler aufgetreten ist und die -1 kommt von der stderr Ausgabe vom subprocess.

cgitb SOLLTE eigentlich den Trackback ausgeben, tut er aber komischerweise nicht. Wenn ich den Block nicht mit except abfange, dann kommt entweder die Seite:
CGI-Fehler (aber ohne Trackback)
oder er geht einfach auf die Startseite zurück, obwohl ich das nirgendwo (also per htaccess o.ä) eingestellt habe!

Also zur Info, auch wenn ich jetzt gelyncht werde ;)
ich hab das ganze Projekt in PYthon gemacht, also ohne HTML Templates,
jede HTML Ausgabe also auch die Fehlerausgaben werden von Python erzeugt!
BlackJack

Schaust Du Dir eigentlich auch immer der Quelltext der ausgelieferten Seite an? Wenn ein Fehler auftaucht und einen Traceback erzeugt wenn man zum Beispiel gerade mit der Ausgabe "in" einem Tag ist, dann wird das ja vom Browser nicht angezeigt.

Ansonsten müsstest Du halt mal systematisch Ausgaben in den Quelltext einbauen, um genau verfolgen zu können bis wohin das funktioniert. Und im ``except`` nicht nur ausgeben *das* eine Ausnahme aufgetreten ist, sondern auch die Ausnahme selber.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:


GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
hardez
User
Beiträge: 24
Registriert: Montag 19. Oktober 2009, 16:39

juhuu ^^
@jens

der Link hats gebracht.

Ausgabe des Tracebacks war das der ZUgriff verweigert wurde,
da aber ausreichend Berechtigungen auf den Ordner bestanden haben, konnte es nurnoch das Programm selbst sein und so wars auch.

Berechtigungen auf cacls vergeben und es geht!

Vielen Dank!
hardez
User
Beiträge: 24
Registriert: Montag 19. Oktober 2009, 16:39

Toll jetzt sind die Funktionen fertig, da dachte ich mir machste das mal alles ein bisschen schön und dann...
Tja hab die Seite in einem schönen Grau mit diversen Grauabstufungen gemacht.
Sieht in FireFox und Chrome auch genau so aus wie sie soll.
Nur habe ich beim erstellen der App nie mit dem IE getestet.
Kam grad mein Chef auf mich zu was ich mir denn bei den Farben gedacht hätte.

Da stellt der IE (egal welche Version) ALLE Farben falsch dar!

Mein schönes Grau ist im IE ein nich so schönes Blau mit diversen Abstufungen!
Sieht einfach panne aus!

Ich hab aber keine Idee woran es liegt.
Ich dachte mir dann zuerst wenn evtl mag es an der Endung .py liegen.
Also hab ich mal eine Seite Aufgerufen und diese dann als HTML gespeichert und siehe da...
noch schlimmer da ist das Blau plötzlich grün!

So und nun steh ich komplett auf dem Schlauch! :D

EDIT:
Hab den Fehler schon gefunden!
War natürlich selber Schuld ;)
Naja mehr oder weniger!

Durch die Erstellung der HTML Inhalte durch Python kamen manchmal Konstrukte zustande wie folgt:

Code: Alles auswählen

<body color="
#D4D4D4
">
Anstatt

Code: Alles auswählen

<body color="#D4D4D4">
Der FF und der Chrome haben das trotzdem richtig interpretiert!
Nur der IE halt nicht!
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

hardez hat geschrieben:Durch die Erstellung der HTML Inhalte durch Python
Eher dadurch, dass du Python so missbrauchst, wie man PHP benutzt (schauder), statt eine der schoenen Template-Engines zu nutzen.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

cofi hat geschrieben:Eher dadurch, dass du Python so missbrauchst, wie man PHP benutzt (schauder), statt eine der schoenen Template-Engines zu nutzen.
Selbst in PHP hat bereits vor 5 Jahren kein auch nur einigermaßen kompetenter Programmierer ohne Template-Engine gearbeitet.
hardez
User
Beiträge: 24
Registriert: Montag 19. Oktober 2009, 16:39

Hätte ich vorher gewusst das es diese Ausmaße annimmt, hätte ich ne TE genommen.
Aber das heißt ja nicht das es so bleiben muss.
Da die Funktionen ja nun stehen, kanns ja nicht mehr so schwer sein das in ne TE zu portieren!
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

/me hat geschrieben:Selbst in PHP hat bereits vor 5 Jahren kein auch nur einigermaßen kompetenter Programmierer ohne Template-Engine gearbeitet.
Da liegt der Hund begraben: kompetent und PHP in einem Satz :twisted:
Antworten