So. Fertig.
Ich glaub jetzt hab ich den opsi-client-agent gefixed. Bin mal gespannt auf die Prüfung von euch

Die Version die ich gefixt habe ist die Aktuellste: 4.0.1-26
Nach langem testen komme ich drauf, dass es eigentlich alles gar kein großer Act ist, aber eine wichtige Kleinigkeit beachtet werden muss.
Grund dass der opsi-client-agent nicht sauber funktioniert ist der, dass Windows XP 32-bit in der setup.ins genau gleich behandelt wird wie Windows XP mit 64-bit und das funktioniert dann so nicht.
Dh Windows XP 64 bit benötigt zwingend auch die ganzen Registry Einträge im 64-bit Zweig! Danach funktioniert auch der Loginblocker usw. So bin ich ja überhaupt erst auf das Problem gestoßen.
Also zuerst habe ich dafür gesorgt, dass er nicht mehr den 32 bit eintrag liest und schreibt, sondern den 64-bit eintrag!
Code: Alles auswählen
Zeile 1030 im Opsi-Client-Agent 4.0.1-26
Registry_opsigina_opsi_Config /32bit
Registry_set_loginblocker_start /32bit
else
Registry_set_loginblocker_start /32bit
; winXP
zu
Code: Alles auswählen
Registry_opsigina_opsi_Config /Sysnative
Registry_set_loginblocker_start /Sysnative
else
Registry_set_loginblocker_start /Sysnative
; winXP
Damit ist geklärt, dass er in den 64-bit Registry Zweig schreibt.
Jetzt noch die [sub_read_configuration] patchen, dass der hier auch liest.
ab Zeile 442
Alle Einträge die GetRegistryStringValue32 lauten:
Code: Alles auswählen
set $INST_gina_to_chain$ = GetRegistryStringValue32("[HKEY_LOCAL_MACHINE\SOFTWARE\opsi.org\opsi-client-agent] NextGina")
set $INST_gina_to_chain$ = GetRegistryStringValue32("[HKEY_LOCAL_MACHINE\SOFTWARE\opsi.org\preloginloader] NextGina")
set $INST_gina_to_chain$ = GetRegistryStringValue32("[HKEY_LOCAL_MACHINE\SOFTWARE\opsi.org\preloginloader] pathMSGina")
set $INST_old_reg_gina_installed$ = GetRegistryStringValue32("[HKEY_LOCAL_MACHINE\SOFTWARE\pGina\Opsi] Installed")
set $INST_gina_to_chain$ = GetRegistryStringValue32("[HKEY_LOCAL_MACHINE\SOFTWARE\pGina] pathMSGina")
ändern in
Code: Alles auswählen
set $INST_gina_to_chain$ = GetRegistryStringValueSysnative("[HKEY_LOCAL_MACHINE\SOFTWARE\opsi.org\opsi-client-agent] NextGina")
set $INST_gina_to_chain$ = GetRegistryStringValueSysnative("[HKEY_LOCAL_MACHINE\SOFTWARE\opsi.org\preloginloader] NextGina")
set $INST_gina_to_chain$ = GetRegistryStringValueSysnative("[HKEY_LOCAL_MACHINE\SOFTWARE\opsi.org\preloginloader] pathMSGina")
set $INST_old_reg_gina_installed$ = GetRegistryStringValueSysnative("[HKEY_LOCAL_MACHINE\SOFTWARE\pGina\Opsi] Installed")
set $INST_gina_to_chain$ = GetRegistryStringValueSysnative("[HKEY_LOCAL_MACHINE\SOFTWARE\pGina] pathMSGina")
Jetzt die wichtige Kleinigkeit. Es reicht nicht den Fehler auszubessern, dass er also die 64-bit Einträge liest und schreibt, sondern man muss den Fall abfangen, dass ein Windows XP 64-bit mit der "defekten" Opsi-Client-Install Routine installiert WURDE und jetzt sozusagen ein "defekter Client" existieren kann.
Das habe ich jetzt ganz einfach wie folgt gelöst, denke aber es gibt hier schönere Methoden...:
Ich habe die [sub_read_configuration] im setup.ins Script angepasst und zwar so, dass er als extra if-Bedingung abklärt, ob es sich um Windows XP 64-bit handelt. Ob defekt oder nicht ist meiner Ansicht nach egal, er darf die If-Bedingung immer durchlaufen. Hier aber bitte genauer hinschauen

So tief steck ich auch nicht drin im Opsi !
In der setup.ins müssen also folgende Zeilen editiert werden: (ab Zeile 467)
Code: Alles auswählen
if $INST_NTVersion$ < "6.0"
if ($INST_AktGina$ = "")
comment "opsigina seems not be installed and we are on a fresh XP"
set $INST_gina_to_chain$ = "msgina.dll"
else
if ($INST_gina_to_chain$ = "")
comment "opsigina seems not be installed and there is active gina"
;Also hier wird ja die $INST_AktGina$ eingelesen und die $INST_gina_to_chain$ muss gesetzt werden.
;Da er im 64-bit Zweig natürlich keine Einträge findet, weil sie noch nie dort hingeschrieben wurden,
;passiert hier der fehler dass er NextGina = Winlogon Gina setzt und das ist beidesmal opsigina.dll also endlosschleife
set $INST_gina_to_chain$ = $INST_AktGina$
else
comment "opsigina seems be installed and so don't change the gina to chain"
endif
endif
endif ; winxp / win2k
ich habe das wie folgt gepatcht
Code: Alles auswählen
if $INST_NTVersion$ < "6.0"
if ($INST_AktGina$ = "")
comment "opsigina seems not be installed and we are on a fresh XP"
set $INST_gina_to_chain$ = "msgina.dll"
else
if ($INST_gina_to_chain$ = "")
if ($INST_NTVersion$ = "5.2")
comment "opsi-client-agent previously installed into wrong registry tree with 32-bit settings"
set $INST_gina_to_chain$ = "msgina.dll"
else
comment "opsigina seems not be installed and there is active gina"
set $INST_gina_to_chain$ = $INST_AktGina$
endif
else
comment "opsigina seems be installed and so don't change the gina to chain"
endif
endif
endif ; winxp / win2k / winxp64bit
Habe das ganze jetzt auch nochmal etliche Male durchgespielt und es scheint jetzt zu funktionieren!
Bin mal auf eure Rückmeldung dann gespannt.
Grüße
Valentino