-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
git-gui: Add a simple implementation of SSH_ASKPASS.
OpenSSH allows specifying an external program to use for direct user interaction. While most Linux systems already have such programs, some environments, for instance, msysgit, lack it. This patch adds a simple fallback Tcl implementation of the tool. In msysgit it is also necessary to set a fake value of the DISPLAY variable, because otherwise ssh won't even try to use SSH_ASKPASS handlers. Signed-off-by: Alexander Gavrilov <angavrilov@gmail.com> Acked-by: Johannes Sixt <johannes.sixt@telecom.at> Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
- Loading branch information
Alexander Gavrilov
authored and
Shawn O. Pearce
committed
Nov 1, 2008
1 parent
98a6846
commit 8c76212
Showing
3 changed files
with
73 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,59 @@ | ||
#!/bin/sh | ||
# Tcl ignores the next line -*- tcl -*- \ | ||
exec wish "$0" -- "$@" | ||
|
||
# This is a trivial implementation of an SSH_ASKPASS handler. | ||
# Git-gui uses this script if none are already configured. | ||
|
||
set answer {} | ||
set yesno 0 | ||
set rc 255 | ||
|
||
if {$argc < 1} { | ||
set prompt "Enter your OpenSSH passphrase:" | ||
} else { | ||
set prompt [join $argv " "] | ||
if {[regexp -nocase {\(yes\/no\)\?\s*$} $prompt]} { | ||
set yesno 1 | ||
} | ||
} | ||
|
||
message .m -text $prompt -justify center -aspect 4000 | ||
pack .m -side top -fill x -padx 20 -pady 20 -expand 1 | ||
|
||
entry .e -textvariable answer -width 50 | ||
pack .e -side top -fill x -padx 10 -pady 10 | ||
|
||
if {!$yesno} { | ||
.e configure -show "*" | ||
} | ||
|
||
frame .b | ||
button .b.ok -text OK -command finish | ||
button .b.cancel -text Cancel -command {destroy .} | ||
|
||
pack .b.ok -side left -expand 1 | ||
pack .b.cancel -side right -expand 1 | ||
pack .b -side bottom -fill x -padx 10 -pady 10 | ||
|
||
bind . <Visibility> {focus -force .e} | ||
bind . <Key-Return> finish | ||
bind . <Key-Escape> {destroy .} | ||
bind . <Destroy> {exit $rc} | ||
|
||
proc finish {} { | ||
if {$::yesno} { | ||
if {$::answer ne "yes" && $::answer ne "no"} { | ||
tk_messageBox -icon error -title "Error" -type ok \ | ||
-message "Only 'yes' or 'no' input allowed." | ||
return | ||
} | ||
} | ||
|
||
set ::rc 0 | ||
puts $::answer | ||
destroy . | ||
} | ||
|
||
wm title . "OpenSSH" | ||
tk::PlaceWindow . |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters