Forum: PC-Programmierung getenv () nicht mit Windows 2008 Server


von anfaenger (Gast)


Lesenswert?

Hallo,

ich hebe ein C-Programm, das als cgi-Anwendung im Internet Information 
Server läuft, bei dem am Anfang die Funktion

"strsuch = getenv("AUTH_USER");"

vorkommt, um den Benutzernamen des Anwenders festzustellen.

Auf einem Windwos 2000 Server funktioniert das einwandfrei, aber auf 
einem Windows 2008 Server liefert das Programm keinen Benutzernanmen 
zurück.

Gleiches gilt für die Funktion "strsuch = getenv("REMOTE_USER");"

Woran könnte das liegen ?

von Peter II (Gast)


Lesenswert?

gehen denn die andere variablen?

Wenn nur die AUTH_USER nicht gehen, dann musst du erstmal für diese 
webseite einstellen das nicht nur anonymous drauf darf, sonst macht er 
keine anmeldung und die variablen sind leer.

von anfaenger (Gast)


Lesenswert?

Der anonyme Login ist für die verwendete Standard-Webseite deaktiviert.
Aktiviert ist Standard-Windows Login, und beim Aufruf des Programmes 
wird die Benutezrname- Passwort-Kombination auch automatisch abgefragt.

Danach startet das Programm, aber die Environment-Variablen werden nicht 
erkannt bzw. vom System zurückgeliefert.

von anfaenger (Gast)


Lesenswert?

AUTH_USER, REMOTE_USER etc. sind scheinbar Variablen des IIS, aber warum 
die im Fall des Windows 2008 Servers nicht zurückgegeben werden, konnte 
ich bisher noch nicht herausfinden.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Du könntest mal mit der Win32-API-Funktion GetEnvironmentStrings alle 
Environmentvariablen in einem Rutsch abfragen und irgendwohin ausgeben; 
vielleicht hat MS die von Dir gewünschten ja auch einfach nur umbenannt.

http://msdn.microsoft.com/en-us/library/windows/desktop/ms683187%28v=vs.85%29.aspx

von anfaenger (Gast)


Lesenswert?

Rufus Τ. Firefly schrieb:
> Du könntest mal mit der Win32-API-Funktion GetEnvironmentStrings alle
> Environmentvariablen in einem Rutsch abfragen und irgendwohin ausgeben;

Danke, werde ich versuchen.
Der "set"-Befehl gibt die Systemvariablen "AUTH_USER", "REMOTE_USER" und 
"REMOTE_HOST" auch bei solchen Servern (Windows 2000 Server, XP)  NICHT 
zurück, auf denen sie von der Webanwendung mit der getenv()-Funktion 
gelesen werden können.
Scheint sicb also um spezielle IIS-Variable zu handeln.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

anfaenger schrieb:
> Scheint sicb also um spezielle IIS-Variable zu handeln.

Klar, die trägt der IIS in das Environment der von ihm aufgerufenen 
Prozesse ein. Außerhalb des IIS/cgi-Kontextes hätten diese Variablen 
auch überhaupt keinen Sinn.

von interrupt (Gast)


Lesenswert?

Ich habe das gleiche Problem und auch schon eine Vermutung, woran es 
liegt:

Mein cgi-Programm (z.B. demo.exe) wird normalerweise auf dem Server 
ausgeführt und schreibt dort (auf dem Server) auch korrekt ein Logfile 
(in c:\log\...)
Auf einem Rechner mit Windows2000 Server OS klappt das einwandfrei.

Wenn das cgi-Programm (z.B. demo.exe) aber auf dem Rechner mit Windows 
2008 Server OS gestartet wird, dann öffnet der aufrufende Internet 
Explorer AUF DEM CLIENT ein Fenster, mit dem die Ausführung des 
Programmes "demo.exe" erlaubt werden muss und die logdatei wird LOKAL 
auf dem Server in "c:\log\..." angelegt (also wird wojl auch das 
cgi-Programm "demo.exe" lokal auf dem Client ausgeführt).

Vermutlich weigert sich der Server, dort die cgi-Anwendung "demo.exe" 
auszuführen.

Beim Windows2000 Server gibt es im Internet Information Server ja die 
Möglichkeit, die Option "Skripte ausführen" zu erlauben, aber das finde 
ich beim Internet Information Server des Betriebssystems Windows 2008 
Server nicht ?

Hat jemand einen Tipp ?

von Peter II (Gast)


Lesenswert?

Hat jemand einen Tipp ?

wenn ich das richtig verstehe, dann liefert der Server die exe als 
Download aus. Das darf auf jeden Fall nicht so sein. Eventuell muss man 
die endung (*.exe) erst als Ausführbar kennzeichenn. Das müsste aber im 
IIS zu finden sein.

von interrupt (Gast)


Lesenswert?

Peter II schrieb:
> wenn ich das richtig verstehe, dann liefert der Server die exe als
> Download aus. Das darf auf jeden Fall nicht so sein. Eventuell muss man
> die endung (*.exe) erst als Ausführbar kennzeichenn. Das müsste aber im
> IIS zu finden sein.

Ja, so scheint es zu sein, beim IIS des Windows 2008 Server wird die 
Datei "demo.exe" im cgi-Verzeichnis offenbar nicht ausgeführt, sondern 
als Download für den aufrufenden Internet-Explorer (der die 
Standard-Datei des IIS "index.htm", von der wiederum das exe-File 
"demo.exe" aufgerufen wird) bereitgestellt und dann lokal auf dem 
Clienet ausgeführt.

Wie gesagt kann man im IIS des Windows2000 Server (oder auch von Win XP) 
für das cgi-Verzeichnis das Ausführen von Sktripten per Häcken in dem 
Menü erlauben, das habe ich beim IIS des Windows 2008 Server so nicht 
gefunden.
Anonymos-Logins sind übrigens nicht erlabt, benutzer müssen sich mit der 
Standardathenifzierung (Benutzername / Passwort) anmelden.

von interrupt (Gast)


Lesenswert?

Ganz kompakt gefragt :
Hat jemand einen Tipp. wie man den Internet Information Server des 
Windows2008 Servers dazu bringt, exe-Dateien im cgi-Verzeichnis 
auszuführen ? !
Welche Rechte müssen dazu wo im IIS vergeben werden ?

von Peter II (Gast)


Lesenswert?


von Joachim D. (Firma: JDCC) (scheppertreiber)


Lesenswert?

IIS verwende ich nicht.

Beim Apache muß man ihm im Konfigurationsfile sagen, daß
er eine *.exe als CGI ausführen soll. Vermutlich muß man das
auch bei IIS.

von interrupt (Gast)


Lesenswert?

Der Vollständigkeit halber für alle, die es auch mal brauchen können.

Damit der Internet Information Server des Windows 2008 Servers (IIS 
Version 7.5) *.exe-Dateien im cgi-Verzeichnis ausführt, bin ich so 
vorgegangen :

1.) das "cgi"-Verzeichnis im Verzeichnis ".\inetpub\wwwroot\" anlegen.

2.) Im Root-Verzeichnis des IIS unter "ISAPI- und CGI-Einschränkungen" 
das Programm (z.B. "demo.exe") eintragen.

3.) Auf der Default Web Site des IIS unter "Handlerzuordnungen" 
*.EXE-Dateien unter dem Namen "Cgi-EXE"  aufnehmen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.