From 04d2ffae3e25ad79e5cd68bb436d882e16c6cf53 Mon Sep 17 00:00:00 2001 From: Fumitoshi UKAI Date: Wed, 15 Jan 2003 15:51:29 +0000 Subject: [w3m-dev 03639] Re: smb.cgi * Bonus/2ch.cgi: change password handling * Bonus/README: update * Bonus/README.eng: ditto --- Bonus/smb.cgi | 71 ++++++++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 60 insertions(+), 11 deletions(-) (limited to 'Bonus/smb.cgi') diff --git a/Bonus/smb.cgi b/Bonus/smb.cgi index 1473d73..32e6d86 100755 --- a/Bonus/smb.cgi +++ b/Bonus/smb.cgi @@ -9,9 +9,17 @@ # # ----- ~/.w3m/smb ----- # workgroup = -# username = -# password = +# [ username = ] +# [ password = ] +# [ password_file = ] # ---------------------- +# --- --- +# +# ----------------------- +# default: +# = $USER +# = $PASSWD (Don't use!) +# = $PASSWD_FILE $DEBUG = 1; @@ -22,18 +30,35 @@ $AUTH_FILE =~ s@^~/@$ENV{"HOME"}/@; $WORKGROUP = "-"; $USER = $ENV{"USER"}; $PASSWD = $ENV{"PASSWD"}; +$PASSWD_FILE = $ENV{"PASSWD_FILE"}; &load_auth_file($AUTH_FILE); $NMBLOOKUP = "nmblookup"; $SMBCLIENT = "smbclient"; @NMBLOOKUP_OPT = ("-T"); @SMBCLIENT_OPT = ("-N"); -$USE_OPT_A = &check_opt_a(); +$USE_OPT_A = defined($PASSWD) && (-f $AUTH_FILE) && &check_opt_a(); if ($USE_OPT_A) { - undef $USER; - undef $PASSWD; push(@SMBCLIENT_OPT, "-A", $AUTH_FILE); +} elsif (-f $PASSWD_FILE) { + $USE_PASSWD_FILE = 1; +} elsif (defined($PASSWD)) { + $USE_PASSWD_FD = 1; + $PASSWD_FD = 0; } +if (defined($PASSWD)) { + $passwd = "*" x 8; +} +$DEBUG && print <) { - /^\s*$header/ && last; - } + if (/^\s*$header/) { $DEBUG && print "DEBUG: $_"; + last; + } + } while (<$F>) { /^\s*$/ && last; $DEBUG && print "DEBUG: $_"; @@ -277,9 +308,18 @@ sub exec_cmd { local($passwd, @cmd) = @_; $ENV{"LC_ALL"} = "C"; - if (!$USE_OPT_A && $passwd) { - $ENV{"USER"} = $USER if $USER; - $ENV{"PASSWD"} = $PASSWD if $PASSWD; + $ENV{"USER"} = $USER; + if ($passwd && !$USE_OPT_A) { + if ($USE_PASSWD_FILE) { + $ENV{"PASSWD_FILE"} = $PASSWD_FILE; + } elsif ($USE_PASSWD_FD) { + $ENV{"PASSWD_FD"} = $PASSWD_FD; + if (open(W, "|-")) { + print W $PASSWD; + close(W); + exit; + } + } } open(STDERR, ">/dev/null"); exec @cmd; @@ -287,8 +327,15 @@ sub exec_cmd { } sub print_form { + local($_) = @_; + local($q) = &html_quote($_); + $_ = &file_encode($_); + print < +Content-Type: text/html + +

$q

+
Workgroup User Password
@@ -315,6 +362,8 @@ sub load_auth_file { $USER = $_; } elsif (s/^passw(or)?d\s*=\s*//i) { $PASSWD = $_; + } elsif (s/^passw(or)?d_file\s*=\s*//i) { + $PASSWD_FILE = $_; } } close(F); -- cgit v1.2.3