Hier die kuriosesten Bugs die ich kenne (ein paar sind vielleicht für dich nicht relevant, da sich das bei dir rein am Server abspielt, 3,4,5 halte ich aber für ganz heiße Kandidaten)
1)
Ist ein Feld beteiligt? Wir hatten einmal ein kaputtes Namensfeld, in dem hin und wieder (bei verschiedenen Kunden, aber nicht wirklich reproduzierbar) ein Ascii-"Viereck" ▄ erschien.
Feld gelöscht - wieder angelegt - nicht mehr aufgetreten.
2)
Ist ein Dialog beteiligt? Und ist im QueryClose des Dialogs LotusScript-Code drin? Wenn dies nicht der Fall ist, dann können dynamisch geladene Klassen plötzlich ungültig werden
3) Werden Funktionen, die ein Array zurückgeben als Funktionsparameter verwendet?
http://www-1.ibm.com/support/docview.wss?&uid=swg21169330
Wir konnten ähnliche Probleme bei Split, Replace, Arrayappend, Fulltrim, Arrayunique feststellen.
Anstatt "arr = ArrayUnique(Split(s))" besser 2 Zeilen machen und das Ergebnis immer einer Variable zuweisen
4) ist ein Diretory Link beteiligt?
in diesem Fall wird z.B. session.currentDatabase "nothing" wenn man es als Parameter verwendet: http://atnotes.de/index.php/topic,49963.0.html evtl. ist genau das bei dem Kunden anders und es betrifft nicht nur die session.currentDatabase welche komisches Verhalten äußert.
5) Ist "isDate" beteiligt?
'/**
' * Äquivalent zu Notes-isDate.
' * Die Notes-Funktion ist auch so eine Falle, welche die Speicherverwaltung durcheinander bringt:
' * (<a href='http://www-01.ibm.com/support/docview.wss?uid=swg21381433'>Notes or Domino crash in nnotes.SprintfOutput or nnotes.UNIsprintf</a>)
' * @param theDate
' * @return
' */
Public Function IsDate(theDate) As Integer ' *nocheck:isDate
Me.isDate = IsDate(theDate) ' *nocheck:isDate
On Error Resume Next ' isDate verwendet intern Errorhandling, räumt aber die Zusatzinformationen, die seit Notes 7 bei jedem
Error 1000 ' Error erzeugt werden (x expected, y found) nicht sauber wieder auf. Wir lösen daher absichtlich einen
Exit Function ' Fehler aus und handeln diesen, um die übrig gebliebene Fehlerinfo wegräumen zu lassen.
End Function
6) Wurde eine beteiligte Maske/Teilmaske in der Ansicht umbenannt? Dabei wird das Script nicht richtig neu kompiliert (wenn man die Maske öffnet, sieht man bei "(Globals)" noch den alten Namen. Dies kann wie 2) ebenfalls die Speicherverwaltung durcheinanderbringen
Gruß
Roland
Nein, kein Debug. Bankenumfeld. Die machen keine Fehler bei der Installation / Konfiguration ...
Ja die Systeme sind relativ einheitlich eingerichtet, aber nicht immer fehlerfrei ;) Ich wüsste aber nicht, wie man ein System absichtlich falsch konfigurieren kann um das von dir beschriebene Verhalten zu reproduzieren und andere Kunden haben ja wohl exakt die gleichen Grundvoraussetzungen.
Ganz kann ich deiner Beschreibung aber noch nicht folgen. Ist das jetzt eine reine Servergeschichte (XPage?) oder ist auch ein Client beteiligt?
So wie ich dich verstanden habe, gibt es eine Klasse
Public Class UserStructure
public userName as String
....
Und an einer Stelle im code wird structure.userName="Blabla" gesetzt. Nun rufst du irgendwann (*) später eine Methode auf die "userName" auslesen will und da knallts. Oder wird der String zwischendurch mal in einem Dokument abgelegt und wieder ausgelesen. Kannst du mal etwas Beispielcode posten?
*)Passieren dazwischen vielleicht "böse" Dinge. API-Calls verwendest du ja nicht. LSI_Info hoffentlich auch nicht? Laufen vielleicht zeitgleich andere Agenten?
Wie stabil tritt denn der Fehler bei dem Kunden eigentlich auf? Irgendwas muss ja bei dem Kunden anders sein:
- Lässt er sich auf bestimmte User-IDs einschränken (z.B. mit Umlauten oder Unterstrichen oder einfach zu lang ;) )
- Passiert es auch, wenn die DB mit einer anderen ID signierst
- Virenscanner
- Kannst du testweise mal das Member in der Klasse verschieben (oder einfach davor einen "Private dummy as long" anlegen) damit es eine andere Speicherposition bekommt.
- Die Notes-ini wirst du ja schon "zerpflückt" haben, wurde sie vielleicht mal als UTF-8 abgespreichert und hat eine ByteOrderMark bekommen
Ansonsten hab ich jetzt auch keine Ideen mehr. Würd mich interessieren was es war, wenn du es findest. Bei solchen Fehler kann man nur "viel Glück" wünschen.
Gruß
Roland
szPassword = CreatePassword( ...
UserInfo.Password = szPassword
pwdSave = szPassword
Ich habe seltsamerweise zuerst an sowas gedacht wie
- Option Base 0 bzw. 1
- Call by Reference
Ich weiß - total verrückt, aber es ist ja auch ein verrücktes Problem ;)
OK, fangen wir hier an:
Ich habe den Wert in eine andere glob. Variable ausserhalb der UserInfo geschrieben. Bei der Anlage weiterer User war dann ( erwartungsgemäß ) nicht nur UserInfo.Password fehlerhaft, sondern auch diese neue Variable.
#1
Was ist createPassword(..) denn für eine Funktion? Worauf ich hinauswill: woher bekommt sie die Daten und wie verarbeitet sie diese? Kann in dieser Funktion überhaupt ein String mit NUL am Anfang generiert werden?
#2
Falls ja: Kommt der String mit NUL am Anfang evtl. von createPassword? Sprich:
szPassword = CreatePassword( ...
print "-->" & szPassword & "<--"
UserInfo.Password = szPassword
print "-->" & UserInfo.Password & "<--"
pwdSave = szPassword
print "-->" & pwdSave & "<--"
ergibt was? Das wird oben schon verneint, aber wenn es das nicht ist, dann:
#3
Getter und Setter. Vielleicht wird über den Lebenszyklus von UserInfo ja Password mehrfach gesetzt oder sonst irgendwie verändert? Getter und Setter bauen, aus Password ein Private pPassword machen und im Getter und Setter jeden Zugriff mitloggen. Du sagtest, die Applikation sei SEHR komplex. Da kann eine Menge schiefgehen...
#4
Datenübergabe im weiteren Sinne. Wird UserInfo oder Teile davon in irgendeiner Form abgespeichert, ex. ein NotesDocument (und wenn auch nur in-memory), wird es exportiert, wird Password im/exportiert (egal warum)? Findet dabei ggf. eine Veränderung statt, die man allein durch LotusScript nicht erklären kann? Ich glaube Dein erstes Posting so verstanden zu haben, daß da allerhand passiert...
Ich denke in die Richtung von Character Sets, unterschiedlichen Datenbank-Settings (Oracle, DB2, whatever), etwas, das in der Lotus Notes Umgebung nicht unmittelbar beeinflußbar ist und das nur auf diesem System (warumauchimmer) anders ist.
Für "Konsumenten" des Paßworts wäre es natürlich auch ganz toll zu wissen, was diese meinen, bekommen zu haben.
#5
Der Kunde hat andere 64bit Systeme im Einsatz, wo das funktioniert? Auch migrierte? Bei Euren Versuchen, die Situation nachzubauen, habt Ihr den alten 32bit Zustand zuerst hergestellt, dann migriert und dann geguckt?
Will sagen - evtl. ist alter Ballast oder das Fehlen davon ein Problem. Irgendeine DLL hat eine andere Version, irgendeine Library ist vom anderen Release-Stand... usw.
Gibt es irgendwelche Unterschiede von diesem Server zu anderen? Physischer Server vs. virtueller, andere SW-Releases, weniger/mehr/andere Zusatzsoftware bzw. Dienste etc.
#6
Wenn es nur um den Notes-Server geht - beim Kunden dieses System außer Betrieb nehmen und den gleichen Notes-Server (quasi 1:1) komplett neu aufsetzen. Wenn Ihr das Problem nicht reproduzieren konntet, dann löst eine funktionale 1:1 Kopie dieses Servers auf anderem Blech bzw. einer anderen VM das Problem?
#7
..in der Chiffrierungsroutine kommt aber nur " 7vcHGY5Wc6vzLMj" an...
Was für eine Chiffrierungsroutine? Ist nur diese vom NUL-Problem betroffen? Wie kommt das Paßwort zu dieser Routine? D.h. *eigentlich* ist alles ok, nur in dieser Routine kommt ein falscher Wert an? Ist das auch Lotus Script? Könnte man da eine andere Form der Datenübergabe testen?
Bei Chiffrieren denke ich an eine externe Funktion (nicht nativ LS), bei deren Aufruf etwas schiefgeht.
Viel Erfolg,
Th.