Domino 9 und frühere Versionen > ND8: Entwicklung

String "vergisst" Zeichen in LotusScript

(1/7) > >>

eknori:
Klingt doof, ist aber so. Ein String vergisst das erste Zeichen.

Das Ganze ist bei EINEM Kunden auf EINEM Server reproduzierbar. Server ist OS: Win2008R2/64 und Domino 8.5.3FP6/64 mit LP DE

Ich bin schon seit gut einer Woche mit dem Kunden zugange. Da ich die Situation auf KEINEM anderen Rechner nachstellen kann, ist das für beide Seiten recht mühsam.

Heute bin ich auf die eigentliche Ursache für das Fehlverhalten eines unserer Programme bei dem Kunden gestossen.
Bei der Neuanlage eines Users generieren wir ein Zufallskennwort. Die Parameter können per Konfiguration gewählt werden. Dadurch lassen sich Komplexität und Zusammensetzung flexibel bestimmen.

Das Klartext-Kennwort wird in eine Property einer Klasse geschrieben UserInfo.Password

In der Folge wird diese Klasse ( Struktur der Registrierungswerte ) an unterschiedlichen Stellen verwendet. ID erzeugen, User per API anlegen etc.
Während der Requestbearbeitung wird auch ein sog. Passwortdokument geschrieben, in dem das Passwort verschlüsselt abgelegt wird.

Und jetzt kommt der Klops.

Bei der Übergabe an die Verschlüsselungsfunktion fehlt direkt nach dem Funktionskopf das erste Zeichen; bzw es ist NUL.
Die Länge des übergebenen Strings ist exact so, wie es erwartet wird.

In der Folge sorgt das NUL Zeichen dafür, daß das KlartextPwd über die dafür vorgesehene Routine nicht angezeigt werden kann; es findet keine Ersetzung in Passwortmails statt. Einzig beim Drucken wird das Pwd ausgegeben; allerdings ein zeichen zu kurz.

Frage. Hat jemand schon einmal ein solches Verhalten beobachtet?

Ich bin momentan ein wenig auf Versuch und Irrtum angewiesen, da ich nicht beliebig im System des Kunden rumwurschteln kann :)

m3:
Kann es sein, dass hr beim Erzeugen des Zufallspassworts einen "\0" Character im String erstellt?

Uebergebt ihr den Wert "by value" oder "by reference"?

DLL Code oder so spuckt auch nicht rein?

eknori:
nein, kein NUL charakter im String. Alles tausendfach getestet. DLL ist auch nicht beteiligt. Das spielt sich Alles im LS ab.

pram:
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?

--- Code: --- '/**
' * Ä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

--- Ende Code ---

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

eknori:
Danke für die Aufstellung, Roland. Ja, sind schon ein paar nette Sachen dabei.
Das mit dem Aufsplitten in mehrere Zeilen habe ich schon erfolglos gemacht.

Im code wird UserInfo an eine Funktion übergeben, die ebenfalls eine private Variable Passwort besitzt.
Möglicherweise beisst sich da was.
Was immer noch nicht erklärt, warum der Fehler NUR bei EINEM Kunden auf EINEM Server und nur nach dem Upgrade von 32 auf 64 Bit auftritt.
Bei anderen Kunden gibt es kein Problem.

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln