Autor Thema: String "vergisst" Zeichen in LotusScript  (Gelesen 15419 mal)

Offline eknori

  • @Notes Preisträger
  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.730
  • Geschlecht: Männlich
String "vergisst" Zeichen in LotusScript
« am: 20.05.14 - 14:55:16 »
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 :)

« Letzte Änderung: 27.05.14 - 10:13:14 von eknori »
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: String "vergisst" Zeichen in LotusScript
« Antwort #1 am: 20.05.14 - 17:14:44 »
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?
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline eknori

  • @Notes Preisträger
  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.730
  • Geschlecht: Männlich
Re: String "vergisst" Zeichen in LotusScript
« Antwort #2 am: 20.05.14 - 17:19:24 »
nein, kein NUL charakter im String. Alles tausendfach getestet. DLL ist auch nicht beteiligt. Das spielt sich Alles im LS ab.
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
Re: String "vergisst" Zeichen in LotusScript
« Antwort #3 am: 20.05.14 - 18:55:04 »
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

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
Roland Praml

IBM Certified Application Developer - Lotus Notes and Domino 8
Ich verwende das Foconis Object Framework

Offline eknori

  • @Notes Preisträger
  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.730
  • Geschlecht: Männlich
Re: String "vergisst" Zeichen in LotusScript
« Antwort #4 am: 20.05.14 - 19:12:44 »
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.
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
Re: String "vergisst" Zeichen in LotusScript
« Antwort #5 am: 20.05.14 - 21:10:08 »
Sind in der notes.ini irgendwelche debug Parameter gesetzt (debug_ls_dump.... etc.)

Evtl. ist aber auch nur die Installation defekt.

Gruß Roland
Roland Praml

IBM Certified Application Developer - Lotus Notes and Domino 8
Ich verwende das Foconis Object Framework

Offline eknori

  • @Notes Preisträger
  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.730
  • Geschlecht: Männlich
Re: String "vergisst" Zeichen in LotusScript
« Antwort #6 am: 20.05.14 - 21:13:30 »
Nein, kein Debug. Bankenumfeld. Die machen keine Fehler bei der Installation / Konfiguration ...
Ich hätte dir Büchse auch am liebsten platt gemacht, Languagepack runter und Domino in einer anständigen englischen Version drübergebügelt ...
« Letzte Änderung: 20.05.14 - 21:15:15 von eknori »
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
Re: String "vergisst" Zeichen in LotusScript
« Antwort #7 am: 20.05.14 - 23:09:03 »
Zitat
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
Code
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

Roland Praml

IBM Certified Application Developer - Lotus Notes and Domino 8
Ich verwende das Foconis Object Framework

Offline eknori

  • @Notes Preisträger
  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.730
  • Geschlecht: Männlich
Re: String "vergisst" Zeichen in LotusScript
« Antwort #8 am: 21.05.14 - 05:26:48 »
Wor reden hoer von "legacy" LotusScript. Kein XPages, nix von diesem modernen Zeugs.

Die Klasse enthält einen ganzen Haufen public members. Es werden keine Getter und Setter verwendet.

Eine Funktion in einer anderen ScriptLib ermittelt das Passwort und schreibt es in UserInfo.Password. Passwort ist als public Password as String definiert.

Dann wird diese Struktur im weiteren Verlauf verwendet. Muss heute noch gucken, ob andere Routinen im UserRegistrationProc noch in diese Struktur schreiben, bevor die Struktur schlussendlich ausgelesen wird.
Das Ganze ist eine sehr komplexe Angelegenheit, daher ist das mit dem Beispielcode etwas schwierig.

UserInfo.Password wird dann in einer weiteren Gunktion als Argument im Funktionskopf verwendet (funktion (szPwd as String) )

innerhalb dieser Funktion erfolgt noch einmal eine Übergabe an eine andere Funktion mach dem gleichen Schemaß Aöso Rückgabewert der ersten Funktion wird als Argument der zweiten Funktion verwendet .
An einer dieser Übergabepunkte erfolgt das Vergessen.

Bei dem Kunden ist IMMER das erste Zeichen NUL. Alle anderen Zeichen sind noch vorhanden. Der String kann aber nicht mehr angezeigt werden, weil das erste Zeichen ein Null Terminator ist.

Was bei dem Kunden auf dem Derver anders ist, erschliesst sich mir nicht. Ich persönlich sehe auch keinen fehler in der Programmierung. Die Routinen laufen seit Jahren so. Da ist nichts dran geändert worden.

Anpassen der Struktur werde ich mal testen. Momentan köammere ich mich an jeden Strohhalm.

 doe anderen von dir vorgeschlagenen Dinge habe ich schon durch, bzw. kann ich nicht ändern.
Das Gesamtürodukt hat eine enorme Komplexität. Sowohl in den Funktionalitäten, als auch im dahinterliegenden Code. Daher windert es mich umso mehr, dass der Fehler nur ein einer, sehr stark eingrenzbaren Stelle auftritt.
« Letzte Änderung: 21.05.14 - 05:29:40 von eknori »
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline diali

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.023
  • Geschlecht: Männlich
Re: String "vergisst" Zeichen in LotusScript
« Antwort #9 am: 21.05.14 - 06:58:39 »
ist keine Lösung zur Bekämpfung der Ursache, aber ich würde an den Kennwort-String erst mal ein Leerzeichen voranstellen und schauen (natürlich bei der Registration wieder entfernen), ob dann zumindest die PWDs wieder vollständig lesbar sind.
Damit kann dann vorläufig gearbeitet werden und die Sache wird nicht zum Showstopper.

Die genaue Stelle im Script kennst du, an der der String kaputt geht?
Ansonsten würde ich pram Punkt 3 in Antwort #3 entschärfen und temp. Zwischenvariablen einführen.
Wurden die Scripte vollständig neu kompiliert?
Das Script läuft im Backend auf dem Domino?
Wurde an der Client/Domino-Version was geändert?
Schau auch mal die $Revisions an, ob irgendjemand den Code gespeichert hat, kurz bevor der Fehler auftrat (eventuell mit einer alten oder beta-Version).

Ansonsten würde ich den Code über die Zwischenablage in neue Agenten/Bibs kopieren und die alten Agenten/Bibs wegwerfen.

Gruß
Dirk
« Letzte Änderung: 21.05.14 - 07:00:55 von diali »
Gruß
Dirk

Glombi

  • Gast
Re: String "vergisst" Zeichen in LotusScript
« Antwort #10 am: 21.05.14 - 08:49:06 »
Kann es sein, dass irgendwo ein "falscher" Character set dazwischen funkt? Lotusscript handelt Strings in Unicode oder einem internen Format, das evtl. abhängig ist vom Default Character Set auf dem Rechner.

An den Scripten in Eurem Tool kann es ja eigentlich nicht hängen, wenn es nur auf einem einzigen Rechner falsch läuft.

Andreas

Offline eknori

  • @Notes Preisträger
  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.730
  • Geschlecht: Männlich
Re: String "vergisst" Zeichen in LotusScript
« Antwort #11 am: 21.05.14 - 09:06:39 »
Es kann alles Mögliche sein.

bei der Generierung des PWD verwenden wir nur [aA0-zZ9] und eine Handvoll allgemeingültiger Sonderzeichen

Im letzet Test gestern wurde das "c7vcHGY5Wc6vzLMj" erzeugt, in der Chiffrierungsroutine kommt aber nur " 7vcHGY5Wc6vzLMj" an
Das erste Zeichen ist dann auch kein LEERZEICHEN; ansonsten müsste es mit Ascii 32 durch die Chiffrierung laufen. Es ist definitiv NUL (Ascii 0)

Alle anderen Zeichen kommen ja an.


Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline diali

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.023
  • Geschlecht: Männlich
Re: String "vergisst" Zeichen in LotusScript
« Antwort #12 am: 21.05.14 - 09:21:13 »
Was bezeichnest Du als Kunde (einzener User oder komplette Firma)?

Mit dem Leerzeichen meinte ich eigentlich, dass der PWD-String erweitert wird. Also aus "c7vcHGY5Wc6vzLMj" wird " c7vcHGY5Wc6vzLMj" Anstelle von dem Leerzeichen kannst du auch jedes andere verwenden.

Nach den Routinen müsste dann das eigentlich erste Zeichen "c" noch im sString sein, da das Lerrzeichen durch ein anderes Steuerzeichen ersetzt wurde.

Gruß
Dirk
Gruß
Dirk

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: String "vergisst" Zeichen in LotusScript
« Antwort #13 am: 21.05.14 - 10:08:03 »
Ist Userinfo.Password anschließend auch außerhalb der aufgerufenen Routine verändert, oder nur innerhalb dieser?

Was passiert mit dem "Original", wenn Du es an die Routine mit ByVal übergibst? Wenn es dann innerhalb der Routine kaputt ist aber nicht außerhalb, passiert wohl etwas bei der Übergabe, ansonsten sieht es ja so aus, als wenn irgendetwas anderes den gleichen Speicherplatz verwendet.

Du könntest auch testweise eine andere Property als Password übergeben, passiert damit das gleiche? Oder wird dabei trotzdem Password verändert, was wiederum für das Überschreiben des Speichers sprechen würde.

Vielleicht ist bei der Umstellung von 32 auf 64 Bit irgendetwas anderes schief gelaufen, so dass die Speicheradressierung spinnt (habe da nicht wirklich das Hintergrundwissen, äußere nur mein Bauchgefühl, in der Hoffnung, dass irgendetwas davon hilft). Vielleicht hat es überhaupt nichts mit Notes zu tun, da es nur diese eine Maschine betrifft.

Auf jeden Fall ein äußerst unbefriedigender Zustand, denn wenn heute das erste Zeichen falsch ist, garantiert Dir niemand, dass morgen nicht vielleicht das letzte oder mehrere Zeichen manipuliert werden. Eigentlich kannst Du Dich da auf nichts mehr verlassen.

Offline eknori

  • @Notes Preisträger
  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.730
  • Geschlecht: Männlich
Re: String "vergisst" Zeichen in LotusScript
« Antwort #14 am: 21.05.14 - 11:20:35 »
Zitat
Ist Userinfo.Password anschließend auch außerhalb der aufgerufenen Routine verändert, oder nur innerhalb dieser?

Was passiert mit dem "Original", wenn Du es an die Routine mit ByVal übergibst? Wenn es dann innerhalb der Routine kaputt ist aber nicht außerhalb, passiert wohl etwas bei der Übergabe, ansonsten sieht es ja so aus, als wenn irgendetwas anderes den gleichen Speicherplatz verwendet.

Ja, das geht jetzt in die richtige Richtung. habe dem Kunden gerade einen Fix geschickt und bin gespannt.
Allerdings ist nicht erklärbar, warum das nur bei diesem Kunden auftritt ( NUR auf DEM Server. ( ja,ja, wir haben die Kundenumgebung haarklein nachgebaut und können es nicht reproduzieren ) )
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline eknori

  • @Notes Preisträger
  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.730
  • Geschlecht: Männlich
Re: String "vergisst" Zeichen in LotusScript
« Antwort #15 am: 21.05.14 - 13:39:29 »
Es ist zum Mäusemelken. Ein Fix hat zunächst funktioniert. 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.
Ich kann das absolut nicht mehr nachvollziehen.

Nochmal. das Problem taucht nur bei einem Kunden ( = Installation ) auf und kann auf KEINEM anderen vergleichbaren System auch nur ansatzweise nachvollzogen werden.
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: String "vergisst" Zeichen in LotusScript
« Antwort #16 am: 21.05.14 - 13:53:47 »
D.h. Userinfo.Password war korrekt, dann wurde das in eine weitere Variable geschrieben, dort kam der Inhalt korrekt an. Während der weiteren Verarbeitung wurden beide Variablen, also Userinfo.Password UND die globale Variable verändert?

Bist Du sicher, dass die globale Variable nicht nur ein Zeiger auf die Userinfo.Password war?

Offline eknori

  • @Notes Preisträger
  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.730
  • Geschlecht: Männlich
Re: String "vergisst" Zeichen in LotusScript
« Antwort #17 am: 21.05.14 - 13:59:21 »
Code
szPassword = CreatePassword( ...

UserInfo.Password = szPassword
pwdSave = szPassword

Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline thkn777

  • Aktives Mitglied
  • ***
  • Beiträge: 176
Re: String "vergisst" Zeichen in LotusScript
« Antwort #18 am: 21.05.14 - 14:47:11 »
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:

Code
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.
« Letzte Änderung: 21.05.14 - 15:03:05 von thkn777 »

Offline Werner Götz

  • Aktives Mitglied
  • ***
  • Beiträge: 249
  • Geschlecht: Männlich
Re: String "vergisst" Zeichen in LotusScript
« Antwort #19 am: 22.05.14 - 07:30:24 »
Hallo Ulrich,
wenn ich mir so überlege, was da im Speicher passiert, müsste der Fehler an einer anderen Stelle zu suchen sein. Und zwar im Zusammenhang mit der Variable, die im Hauptspeicher VOR dem Passwort steht.
Wird diese Variable über eine DLL gesetzt, die ans Ende der Variable ein NUL setzt? Könnte es vielleicht passieren, dass das in diesem Fall Speicher der nächsten Variable überschreibt?

Als Test hierzu würde ich also mal vorschlagen, vor und hinter Deinen Member eine weitere Variable aufzunehmen und mit einigen Leerzeichen vorzubesetzen.

Ist die Vermutung richtig und obiger work around behebt den Fehler sollte man natürlich trotzdem noch nach der schuldigen Routine suchen! Hier könnte ich mir den Fehler so vorstellen, dass bei einem 32 Bit System Variablen richtig initialisiert wurden, beim 64 Bit System die größere Wortlänge aber "einen Strich durch die Rechnung macht".

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz