From 6700d2b302ca483326f2a7bbfc872d4c2564ab99 Mon Sep 17 00:00:00 2001 From: Jamie Cameron Date: Sat, 12 Jun 2021 10:43:38 -0700 Subject: [PATCH] Add page for configuring webserver options for Usermin --- usermin/change_advanced.cgi | 3 -- usermin/change_web.cgi | 67 +++++++++++++++++++++++++++++++++ usermin/defaultacl | 1 + usermin/edit_advanced.cgi | 4 -- usermin/edit_web.cgi | 72 ++++++++++++++++++++++++++++++++++++ usermin/images/web.gif | Bin 0 -> 524 bytes usermin/index.cgi | 1 + usermin/lang/en | 2 + 8 files changed, 143 insertions(+), 7 deletions(-) create mode 100755 usermin/change_web.cgi create mode 100755 usermin/edit_web.cgi create mode 100644 usermin/images/web.gif diff --git a/usermin/change_advanced.cgi b/usermin/change_advanced.cgi index 3d910556d..c8e88efd8 100755 --- a/usermin/change_advanced.cgi +++ b/usermin/change_advanced.cgi @@ -26,9 +26,6 @@ for($i=0; defined($tmod = $in{'tmod_'.$i}); $i++) { } &webmin::save_tempdirs(\%uconfig, \@tdirs); -# Save stack trace option -$uconfig{'error_stack'} = $in{'stack'}; - # Save umask if ($in{'umask_def'}) { delete($uconfig{'umask'}); diff --git a/usermin/change_web.cgi b/usermin/change_web.cgi new file mode 100755 index 000000000..7a5f665bc --- /dev/null +++ b/usermin/change_web.cgi @@ -0,0 +1,67 @@ +#!/usr/local/bin/perl +# Save webserver options + +require './usermin-lib.pl'; +&ReadParse(); +&error_setup($text{'web_err'}); +&get_usermin_miniserv_config(\%miniserv); +&get_usermin_config(\%uconfig); + +# Save expires +if ($in{'expires_def'}) { + delete($miniserv{'expires'}); + } +else { + $in{'expires'} =~ /^\d+$/ || + &error($text{'web_eexpires'}); + $miniserv{'expires'} = $in{'expires'}; + } + +# Save per-path expires +for(my $i=0; defined($p = $in{"expirespath_$i"}); $i++) { + $t = $in{"expirestime_$i"}; + next if ($p !~ /\S/); + $t =~ /^\d+$/ || &error(&text('web_eexpires2', $i+1)); + push(@expires_paths, [ $p, $t ]); + } +$miniserv{'expires_paths'} = join("\t", map { $_->[0]."=".$_->[1] } + @expires_paths); + +# Save stack trace option +$uconfig{'error_stack'} = $in{'stack'}; + +# Save showing of stderr +$miniserv{'noshowstderr'} = !$in{'showstderr'}; + +if (!$miniserv{'session'}) { + # Save password pass option + $miniserv{'pass_password'} = $in{'pass'}; + } + +# Save gzip option +if ($in{'gzip'} == 1) { + eval "use Compress::Zlib"; + $@ && &error(&text('advanced_egzip', 'Compress::Zlib')); + } +$miniserv{'gzip'} = $in{'gzip'}; + +# Save redirect type +$uconfig{'relative_redir'} = $in{'redir'}; + +# Save directory list option +$miniserv{'nolistdir'} = !$in{'listdir'}; + +# Save global config +&lock_file($usermin_config); +&write_file($usermin_config, \%uconfig); +&unlock_file($usermin_config); + +# Save miniserv config +&lock_file($usermin_miniserv_config); +&put_usermin_miniserv_config(\%miniserv); +&unlock_file($usermin_miniserv_config); +&restart_usermin_miniserv(); + +&webmin_log("web"); +&redirect(""); + diff --git a/usermin/defaultacl b/usermin/defaultacl index 14f5cfcd1..0ba26bd0f 100644 --- a/usermin/defaultacl +++ b/usermin/defaultacl @@ -28,3 +28,4 @@ blocked=1 advanced=1 mobile=1 twofactor=1 +web=1 diff --git a/usermin/edit_advanced.cgi b/usermin/edit_advanced.cgi index ad4987dc7..8aeb86d70 100755 --- a/usermin/edit_advanced.cgi +++ b/usermin/edit_advanced.cgi @@ -31,10 +31,6 @@ foreach $d (&webmin::get_tempdirs(\%uconfig), [ ]) { $ttable .= &ui_columns_end(); print &ui_table_row($text{'advanced_tempmods'}, $ttable); -# Show call stack on error -print &ui_table_row($text{'advanced_stack'}, - &ui_yesno_radio("stack", int($uconfig{'error_stack'}))); - # Pass passwords to CGI programs print &ui_table_row($text{'advanced_pass'}, &ui_yesno_radio("pass", int($miniserv{'pass_password'}))); diff --git a/usermin/edit_web.cgi b/usermin/edit_web.cgi new file mode 100755 index 000000000..4dd781715 --- /dev/null +++ b/usermin/edit_web.cgi @@ -0,0 +1,72 @@ +#!/usr/local/bin/perl +# Show the web serving options form + +require './usermin-lib.pl'; +&ui_print_header(undef, $text{'web_title'}, ""); +&get_usermin_miniserv_config(\%miniserv); +&get_usermin_config(\%uconfig); + +print &ui_form_start("change_web.cgi", "post"); +print &ui_table_start($text{'web_header'}, undef, 2); + +# Default content expiry time +print &ui_table_row($text{'web_expires'}, + &ui_opt_textbox("expires", $miniserv{'expires'}, 10, + $text{'web_expiresdef'}, $text{'web_expiressecs'}), undef); + +# Additional expiry times based on path +my @expires_paths; +foreach my $pe (split(/\t+/, $miniserv{'expires_paths'})) { + my ($p, $e) = split(/=/, $pe); + if ($p && $e ne '') { + push(@expires_paths, [ $p, $e ]); + } + } +push(@expires_paths, [ undef, $miniserv{'expires'} || 86400 ]); +my $etable = &ui_columns_start([ $text{'web_expirespath'}, + $text{'web_expirestime'} ]); +for(my $i=0; $i<@expires_paths; $i++) { + $etable .= &ui_columns_row([ + &ui_textbox("expirespath_$i", $expires_paths[$i]->[0], 40), + &ui_textbox("expirestime_$i", $expires_paths[$i]->[1], 10), + ]); + } +$etable .= &ui_columns_end(); +print &ui_table_row($text{'web_expirespaths'}, $etable); + +# Show call stack on error +print &ui_table_row($text{'advanced_stack'}, + &ui_yesno_radio("stack", int($uconfig{'error_stack'})), undef); + +# Show CGI errors +print &ui_table_row($text{'advanced_showstderr'}, + &ui_yesno_radio("showstderr", int(!$miniserv{'noshowstderr'})), undef); + +if (!$miniserv{'session'}) { + # Pass passwords to CGI programs + print &ui_table_row($text{'advanced_pass'}, + &ui_yesno_radio("pass", int($miniserv{'pass_password'})), undef); + } + +# Gzip static files? +print &ui_table_row($text{'advanced_gzip'}, + &ui_radio("gzip", $miniserv{'gzip'}, + [ [ '', $text{'advanced_gzipauto'} ], + [ 0, $text{'advanced_gzip0'} ], + [ 1, $text{'advanced_gzip1'} ] ]), undef); + +# Redirect type +print &ui_table_row($text{'advanced_redir'}, + &ui_radio("redir", $uconfig{'relative_redir'} ? 1 : 0, + [ [ 1, $text{'advanced_redir1'} ], + [ 0, $text{'advanced_redir0'} ] ]), undef); + +# Allow directory listing +print &ui_table_row($text{'advanced_listdir'}, + &ui_yesno_radio("listdir", !$miniserv{'nolistdir'})); + +print &ui_table_end(); +print &ui_form_end([ [ "save", $text{'save'} ] ]); + +&ui_print_footer("", $text{'index_return'}); + diff --git a/usermin/images/web.gif b/usermin/images/web.gif new file mode 100644 index 0000000000000000000000000000000000000000..b5d640d72fa1d655105e13dc1e18380e0c4832e7 GIT binary patch literal 524 zcmZ?wbhEHbG+;1bXklRZ|NsBerArkhB=+t-*3!}v6&1w*6l6#~ckWy=P?BMeA;bSU zAcn+$CyD%TxEG&JKpi{IB+0cS%Be?VxXCh1jnhT*$FFz_}XV|F_lo@ zXlrp=cz4yFj@HJ57A9wOjyndXn#&c0E-v)Aa#x^IgP)fti#v(8u}O`uNHCO}t6Hc> zO-O*NEwOW&nm}s_cMfa*JY~jWLC(d=%j|?VDs2>25oVq_i>)JXtMV3x0|z(lKeBJL zn()%%_D;TS`!A>-KX~Z`g8*Cd#L4TgT)p`4(Sz$O)w3tD3W!{PeC7U=BTpE3xj1JJ*zjR_%_Btb%HRYppISFmFtDopZa@_$`M{$-9Y9R&^iL-d@cmV)43+ yMSic_uPzIR1r4prO^h)c5)L%A>h7?apfe literal 0 HcmV?d00001 diff --git a/usermin/index.cgi b/usermin/index.cgi index 19367c91d..055659eaa 100755 --- a/usermin/index.cgi +++ b/usermin/index.cgi @@ -79,6 +79,7 @@ $ver = &get_usermin_version(); $miniserv{'session'} ? ( "list_sessions.cgi", "edit_twofactor.cgi" ) : ( ), "edit_blocked.cgi", "edit_mobile.cgi", + "edit_web.cgi", "edit_advanced.cgi" ); @titles = map { /_(\S+).cgi/; $text{"${1}_title"} } @links; @icons = map { /_(\S+).cgi/; "images/$1.gif" } @links; diff --git a/usermin/lang/en b/usermin/lang/en index f21589087..3d540e4c1 100644 --- a/usermin/lang/en +++ b/usermin/lang/en @@ -502,4 +502,6 @@ copycert_ekeyfile=No private key file is set in Webmin twofactor_desc=Two-factor authentication allows Usermin users to enable use of an additional authentication device when logging in, such as a one-time passcode generator. Users must individually enroll with the selected authentication provider after it is enabled on this page. twofactor_eversion=The version of Usermin installed on your system does not support two-factor authentication. +web_header=Options for Usermin's built-in webserver + __norefs=1