" im Passwort

  • Hi ihr,

    ich hab heute mein neues VPN Tool ausgerollt.
    Eine Userin konnte sich damit dann nicht einwählen.

    Nach einem längeren Telefonat hab ich dann rausbekommen dass ihr Passwort mit einem (") anfängt.
    Mein Tool baut die Verbindung über Rasdial auf.
    Das (") hat natürlich meinen String zerschossen:

    Hier ist ein Codeschnipsel:

    Spoiler anzeigen
    [autoit]

    Func _StartVPNConnect()

    [/autoit] [autoit][/autoit] [autoit]

    ;Variablendeklaration
    Local $PingVar, $RoundTrip, $InitTime, $PID
    $passwort = GUICtrlRead($lbl_passwort)
    $ConnectionName =('"VPN Verbindung"')
    $Testserver = "dc.domain.local"
    $rasdial = ("rasdial " &$ConnectionName& " " & $User & " " & $passwort & " " &" /DOMAIN:domain")

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    GUICtrlSetData($lbl_info, @CRLF &@CRLF & "Ein Moment bitte," & @CRLF & @CRLF & "VPN Verbindung mit domainwird hergestellt.");& @CRLF & "und mit Server erbunden")

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;rasdial ausführen
    $Connect= RunWait(@ComSpec & " /c " & '"' & $rasdial & '"',"",@SW_HIDE)
    _WriteLogData("Rasdial ausgeführt.")

    [/autoit]


    Ich war auch schon in unserer Entwicklerecke aber die können mir auch nicht wirklich weiter helfen.
    Hat jemand ne Idee wie ich die DOS- Befehl- kritischen Sonderzeichen abfange oder escapen kann?

    Boris

  • Du könntest mit

    [autoit]

    StringInStr()

    [/autoit]

    überprüfen ob " im Passwort vorkommt, wenn ja dann soll eine Fehlermeldung kommen ODER man könnte dann aus dem " was anderes machen, z.B. |:0879 oder so, mit

    [autoit]

    StringReplace()

    [/autoit]


    Dann müsstest du aber jedesmal in der Überprüfung aus dem " ein |:0879 machen, damit es überprüft werden kann.

    mfg BB

    "IF YOU'RE GOING TO KILL IT
    OPEN SOURCE IT!"

    by Phillip Torrone

    Zitat von Shoutbox

    [Heute, 11:16] Andy: ....böseböseböseböse....da erinnere ich mich daran, dass man den Puschelschwanz eines KaRnickels auch "Blume" nennt....ob da eins zum anderen passt? :rofl: :rofl: :rofl: :rofl:

    https://autoit.de/index.php?page…leIt#post251138

    Neon Snake

  • vorher war es so, dass das tool eine Verknüpfung zur VPN Verbindung geöfnet hat.
    Dann kam dieses Windows VPN Einwahl Fenster.

    Dan haben die User da ihr Kennwortt gespeichert (was sie nicht sollen) und und und...
    das wollte ich eben nicht mehr haben und hab es deswegen über rasdial gemacht.

    Wahrscheinlich war es auch für die nächsten 10 Jahre der einzige User mit einem " :rofl:

    Ich dachte es gäb noch nen Trick mit dem man auch " oder was auch immer DOS ärgert da einbauen kann.

  • Servus,

    versuch über das Zeichen ' den String einzuschließen.

    Würde dann so aussehen:

    Spoiler anzeigen
    [autoit]

    $Connect= RunWait(@ComSpec & " /c " & "'" & $rasdial & "'","",@SW_HIDE)

    [/autoit]

    Gruß

    Prajoss

    Edit sagt: Du hast noch nen Rechtschreibfehler drin:

    Spoiler anzeigen

    VPN Verbindung mit domainwird hergestellt

    "Never touch a running System!"

  • Die Kommandozeile braucht immer doppelte Anführungszeichen als Stringbegrenzer. Normalerweise sollte das Escapen durch verdoppeln funktionieren ;)

    [autoit]

    RunWait('"' & @AutoItExe & '" /AutoIt3ExecuteLine "MsgBox(0, '''', ''Dieses Zeichen wurde dopplet eingegeben: ""'')"')

    [/autoit]

    Übrigens solltest du @Comspec /c einfach weglassen. rasdial ist ein Programm, das du direkt ausführen kannst, wenn ich mich nicht irre. RunWait("rasdial ...")

    Edit: Also insgesamt sollte das etwa so aussehen:

    [autoit]

    $sCommand = StringFormat('"%s\rasdial.exe" "%s" "%s" "%s" /DOMAIN:domain', @SystemDir, _esc("Verbindung"), _esc("user"), _esc("pass"))
    RunWait($sCommand, @WorkingDir, @SW_HIDE)

    [/autoit][autoit][/autoit][autoit]

    Func _esc($s)
    Return StringReplace($s, '"', '""', 0, 1)
    EndFunc

    [/autoit]

    Einmal editiert, zuletzt von progandy (5. Mai 2011 um 17:59)

  • Es ist schlimmer geworden... :cursing:

    Es sind mehrere User die so ein kritischen Zeichen im Passwort haben.

    @progandy:

    Wenn ich das nehme

    [autoit]

    $sCommand = StringFormat('"%s\rasdial.exe" "%s" "%s" "%s" /DOMAIN:domain', @SystemDir, _esc("Verbindung"), _esc("user"), _esc("pass")) RunWait($sCommand, @WorkingDir, @SW_HIDE)

    [/autoit]


    Dann schneidet es mir beim rasdial das r ab.
    Ich bekomm es aber auch nicht so ganz hin es richtig umzustellen :wacko:


    Hat noch jemand ne idee?

  • Ok...das geht schonmal.

    Aber weiter komm ich dann noch nicht.

    Ich hab mir das $SCommand mal mit ner MsgBox ausgeben lassen.

    Da steht dann:

    "C:\Windows\system32\rasdial.exe" "Verbinung" "Benutzer" "Passwort" /DOMAIN:domain

    das meisste ist richtig.

    Bei meinem Testuser hab ich "Passwort" als Passwort gesetzt (also inkl. Anführungszeichen).

    Es müsste ja dann eher ""Passwort"" heissen oder?


    Ich könnte mich echt in den A..... beissen. 2 Wochen Tests und dann übersieht man sowas.... in meinem eigenen Kennwort habe ich ein % und das stört nicht. Deswegen hab ich da auch keinen Gedanken mehr dran verschwendet :cursing:

  • Das funktioniert doch nicht oO

    du kannst in der Kommandozeile kein " mit " escapen...

    Du musst dann ' benutzen. Wäre mein Wissensstand, aber Batchscripting ist bei mir auch schon 3 Jahre her :/

    Gruß

    Prajoss

    "Never touch a running System!"

  • du kannst in der Kommandozeile kein " mit " escapen...


    hmm, das kommt immer auf das Zielprogramm an. Zumindest AutoIt akzeptiert das so ;)
    Ich hab es schon mal erlebt, dass einzelquotes nicht erlaubt waren, aber verdopplete doppelquotes funktierten. Ich weiß nur nicht mehr, wann und womit das war.
    Edit: Außerdem ist das double-quoting auch bei MS-Produkten zu finden, dotnetfx.exe verwendet es z.B.: http://blogs.msdn.com/b/astebner/arc…/13/503471.aspx Daher könnte das auch für rasdial funktionieren.
    Edit: Es wäre auch möglich, dass rasdial folgendes Format erwartet: http://msdn.microsoft.com/en-us/library/a1y7w461.aspx
    Edit: Übrigens wird "wert mit ""quotes"" hier" von der MS-C runtime nativ verarbeitet zu dem Parameter ==>wert mit "quotes" hier<== http://www.hardtoc.com/archives/162

    Wenn gar nichts funktionieren will musst du die API direkt verwenden: http://msdn.microsoft.com/en-us/library/…28VS.85%29.aspx

    6 Mal editiert, zuletzt von progandy (6. Mai 2011 um 15:32)

  • Kann ich die direkt aus Auoit verwenden?
    Hast du einen kleinen Denkanstoss für mich?


    Ja, per DLLCall und DLLStructCreate. Das wird aber nicht einfach sein, da die API doch recht komplex ist. (Jedenfalls reicht es nicht, Verbindung Name und Passwort anzugeben :( )

  • ProblemUser: rasdial ist kein AutoIt-Skript, daher kann man da nichts machen.

    Camulus: Kannst du nicht rasphone verwenden und den User das Passwort in die Windowsdialoge eingeben lassen?

  • doch könnte ich...
    aber das ist nicht gewollt... in der Vorgängerversion war es so, aber da gab es auch problemchen.
    Wir haben user die nicht wirklich eine Affinität zur IT haben, deswegen wollte ich Ihnen das erlkeichtern und so wenig tipperei und verschiedene Fenster wie möglich.
    Eingentlich muss ich es ja nur dazu bringen genau das gleiche zu machen wie bei der rasphone... nur ohne Fenster :S

    da fällt mir ein hier ist das komplette script:
    [ gelöst ] Button in zweiter GUI funktioniert nicht