aboutsummaryrefslogtreecommitdiffstats
path: root/Bonus
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--Bonus/README11
-rw-r--r--Bonus/README.eng17
-rwxr-xr-xBonus/smb.cgi71
3 files changed, 78 insertions, 21 deletions
diff --git a/Bonus/README b/Bonus/README
index 31615e7..af019ce 100644
--- a/Bonus/README
+++ b/Bonus/README
@@ -15,9 +15,14 @@ smb.cgi
SMB にアクセスする local CGI です。
nmblookup,smbclient を使うので sabma がインストールされている
必要があります。
- パスワードは、smbclient の -A オプションを使えるなら、
- smbclient -A ~/.w3m/smb として、使えない場合は ~/.w3m/smb を
- 読んで環境変数 PASSWD で渡します。
+ パスワードは、
+ 1) ~/.w3m/smb にパスワードが設定されており、
+ smbclient の -A オプションを使えるなら
+ smbclient -A ~/.w3m/smb として渡します。
+ 2) 環境変数 PASSWD_FILE (パスワードのみのファイル)が設定
+ されている場合は、環境変数 PASSWD_FILE を使います。
+ 3) ~/.w3m/smb にパスワードが設定されていれば、
+ 環境変数 PASSWD_FD を使って標準入力経由で渡します。
どちらにせよ、あまり良い事ではないので SMB(CIFS)プロトコルを
喋る版を希望。
diff --git a/Bonus/README.eng b/Bonus/README.eng
index 2d83186..2f7507d 100644
--- a/Bonus/README.eng
+++ b/Bonus/README.eng
@@ -5,19 +5,22 @@
w3m file:/cgi-bin/2ch.cgi?http://pc.2ch.net/test/read.cgi/unix/1035755937/
- it uses wget -c
- dat is recorded under ~/w3m2ch/
- You can post
+ It uses wget -c.
+ `dat' files are recorded under ~/w3m2ch/.
+ You can not post.
smb.cgi
[w3m-dev 03634] smb.cgi
localcgi to access SMB.
Since it uses nmblookup, smbclient, you should install samba.
- Password can be configured in ~/.w3m/smb:
- when -A option available smbclient -A ~/.w3m/smb
- otherwise, environment variable PASSWD
- that is set by contents of ~/.w3m/smb
+ Password can be passed to smbclient:
+ 1) When the password is set by contents of ~/.w3m/smb and
+ -A option available, `smbclient -A ~/.w3m/smb' is used.
+ 2) When the environment variable PASSWD_FILE, it is used.
+ 3) When the password is set by contents of ~/.w3m/smb,
+ the password is passed via standrad I/O using
+ the environment variable PASSWD_FD.
google.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 = <workgroup>
-# username = <username>
-# password = <password>
+# [ username = <username> ]
+# [ password = <password> ]
+# [ password_file = <password_file> ]
# ----------------------
+# --- <password_file> ---
+# <password>
+# -----------------------
+# default:
+# <username> = $USER
+# <password> = $PASSWD (Don't use!)
+# <password_file> = $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 <<EOF;
+DEBUG: NMBLOOKUP=$NMBLOOKUP @NMBLOOKUP_OPT
+DEBUG: SMBCLIENT=$SMBCLIENT @SMBCLIENT_OPT
+DEBUG: WORKGROUP=$WORKGROUP
+DEBUG: USER=$USER
+DEBUG: PASSWD=$passwd
+DEBUG: PASSWD_FILE=$PASSWD_FILE
+DEBUG: PASSWD_FD=$PASSWD_FD
+EOF
+
$PAGER = "cat";
$FILE = "F000";
@@ -44,6 +69,10 @@ $_ = &file_decode($QUERY);
$DEBUG && print "DEBUG: QUERY_STRING=\"$_\"\n";
if (s@^//([^/]+)@@) {
$server = $1;
+# if (!$USE_OPT_A && !defined($PASSWD)) {
+# &print_form("//$server$_");
+# exit;
+# }
if (s@^/([^/]+)@@) {
&file_list("//$server/$1", &cleanup($_));
} else {
@@ -250,9 +279,11 @@ sub get_list {
@cmd = ($SMBCLIENT, @SMBCLIENT_OPT, "-L", $server);
$F = &open_pipe($passwd, @cmd);
while (<$F>) {
- /^\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 <<EOF;
-<form action="$CGI" method=POST>
+Content-Type: text/html
+
+<h1>$q</h1>
+<form action="$CGI?$_" method=POST>
<table>
<tr><td>Workgroup <td>User <td>Password
<tr><td><input type=text size=8 name=group value="$WORKGROUP">
@@ -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);