diff options
Diffstat (limited to 'Bonus')
| -rwxr-xr-x | Bonus/smb.cgi | 28 | 
1 files changed, 22 insertions, 6 deletions
| diff --git a/Bonus/smb.cgi b/Bonus/smb.cgi index 32e6d86..536db89 100755 --- a/Bonus/smb.cgi +++ b/Bonus/smb.cgi @@ -3,9 +3,12 @@  # Workgroup list: file:/$LIB/smb.cgi  # Server list:    file:/$LIB/smb.cgi?workgroup  # Sahre list:     file:/$LIB/smb.cgi?//server +#                 file:/$LIB/smb.cgi/server  # Directory:      file:/$LIB/smb.cgi?//server/share  #                 file:/$LIB/smb.cgi?//server/share/dir... +#                 file:/$LIB/smb.cgi/server/share  # Get file:       file:/$LIB/smb.cgi?//server/share/dir.../file +#                 file:/$LIB/smb.cgi/server/share/dir.../file  #  # ----- ~/.w3m/smb -----  # workgroup = <workgroup> @@ -64,9 +67,22 @@ $FILE = "F000";  $CGI = "file://" . &file_encode($ENV{"SCRIPT_NAME"} || $0);  $QUERY = $ENV{"QUERY_STRING"}; +$PATH_INFO = $ENV{"PATH_INFO"}; -$_ = &file_decode($QUERY); -$DEBUG && print "DEBUG: QUERY_STRING=\"$_\"\n"; +if ($PATH_INFO =~ m@^/@) { +	$_ = $PATH_INFO; +	if (! m@^//@) { +		$_ = "/$_"; +	} +	s@[\r\n\0\\"]@@g; +	$DEBUG && print "DEBUG: PATH_INFO=\"$_\"\n"; +	$Q = ""; +} +else { +	$_ = &file_decode($QUERY); +	$DEBUG && print "DEBUG: QUERY_STRING=\"$_\"\n"; +	$Q = "?"; +}  if (s@^//([^/]+)@@) {  	$server = $1;  #	if (!$USE_OPT_A && !defined($PASSWD)) { @@ -138,7 +154,7 @@ $DEBUG && print "DEBUG: $_";  		$c = $&;  		s/^  //;  		$_ eq "." && next; -		print "<a href=\"$CGI?$service" +		print "<a href=\"$CGI$Q$service"  			. &cleanup("$file/" . &file_encode($_)) . "\">"  			. &html_quote($_) . "</a>"  			. &html_quote($c) . "\n"; @@ -183,7 +199,7 @@ sub share_list {  	for (sort @share) {  		($_, $d, @c) = split(" ");  		if ($d eq 'Disk') { -			print "<tr><td>+ <a href=\"$CGI?//$server/" +			print "<tr><td>+ <a href=\"$CGI$Q//$server/"  				. &file_encode($_) . "\">"  				. &html_quote($_) . "</a>";  		} else { @@ -213,7 +229,7 @@ sub server_list {  	print "<tr><td colspan=3><b>$group</b>\n";  	for (sort @server) {  		($_, @c) = split(" "); -		print "<tr><td>+ <a href=\"$CGI?//" +		print "<tr><td>+ <a href=\"$CGI$Q//"  			. &file_encode($_) . "\">"  			. &html_quote($_) . "</a><td><td>"  			. &html_quote("@c") . "\n"; @@ -335,7 +351,7 @@ sub print_form {  Content-Type: text/html  <h1>$q</h1> -<form action="$CGI?$_" method=POST> +<form action="$CGI$Q$_" method=POST>  <table>  <tr><td>Workgroup	<td>User	<td>Password  <tr><td><input type=text size=8 name=group value="$WORKGROUP"> | 
