#!/usr/local/bin/perl # edit_dir.cgi # Display information about a protected directory require './htaccess-lib.pl'; &foreign_require($apachemod, "apache-lib.pl"); &ReadParse(); $can_create || &error($text{'dir_ecannotcreate'}); if ($in{'new'}) { &ui_print_header(undef, $text{'dir_title1'}, ""); } else { &ui_print_header(undef, $text{'dir_title2'}, ""); @dirs = &list_directories(); ($dir) = grep { $_->[0] eq $in{'dir'} } @dirs; &can_access_dir($dir->[0]) || &error($text{'dir_ecannot'}); } print &ui_form_start("save_dir.cgi"); print &ui_hidden("new", $in{'new'}); print &ui_hidden_table_start($text{'dir_header'}, "width=100%", 2, "main", 1, [ "width=30%" ]); # Directory to protect if ($in{'new'}) { print &ui_table_row($text{'dir_dir'}, &ui_textbox("dir", $dir->[0], 50)." ". &file_chooser_button("dir", 1)); } else { print &ui_table_row($text{'dir_dir'}, "".&html_escape($dir->[0]).""); print &ui_hidden("dir", $in{'dir'}); } # File containing users if ($can_htpasswd) { # Allow choice of users file if ($in{'new'}) { $ufile = &ui_radio("auto", 1, [ [ 1, $text{'dir_auto'}."
" ], [ 0, $text{'dir_sel'} ] ]); } $ufile .= &ui_textbox("file", $dir->[1], 50)." ". &file_chooser_button("file", 0); } else { # Always automatic if ($in{'new'}) { $ufile = $text{'dir_auto'}; } else { $ufile = "".&html_escape($dir->[1]).""; } } print &ui_table_row($text{'dir_file'}, $ufile); # File containing groups if ($can_htgroups) { @opts = ( [ 2, "$text{'dir_none'}
" ] ); if ($in{'new'}) { push(@opts, [ 1, "$text{'dir_auto'}
" ]); } push(@opts, [ 0, $text{'dir_sel'}." ". &ui_textbox("gfile", $dir->[4], 50)." ". &file_chooser_button("gfile", 0) ]); print &ui_table_row($text{'dir_gfile'}, &ui_radio("gauto", $dir->[4] ? 0 : 2, \@opts)); } # If MD5 encryption is available, show option for it @crypts = ( 0 ); push(@crypts, 1) if ($config{'md5'}); push(@crypts, 2) if ($config{'sha1'}); push(@crypts, 3) if ($config{'digest'}); if (@crypts > 1) { print &ui_table_row($text{'dir_crypt'}, &ui_radio("crypt", int($dir->[2]), [ map { [ $_, $text{'dir_crypt'.$_} ] } @crypts ])); } else { print &ui_hidden("crypt", $crypts[0]); } # Authentication realm if (!$in{'new'}) { &switch_user(); $conf = &foreign_call($apachemod, "get_htaccess_config", "$dir->[0]/$config{'htaccess'}"); &switch_back(); $realm = &foreign_call($apachemod, "find_directive", "AuthName", $conf, 1); } print &ui_table_row($text{'dir_realm'}, &ui_textbox("realm", $realm, 50)); # Users and groups to allow if (!$in{'new'}) { $require = &foreign_call($apachemod, "find_directive_struct", "require", $conf); ($rmode, @rwho) = @{$require->{'words'}} if ($require); } else { $rmode = "valid-user"; } print &ui_table_row($text{'dir_require'}, &ui_radio("require_mode", $rmode, [ [ "valid-user", $text{'dir_requirev'}."
" ], [ "user", $text{'dir_requireu'}." ". &ui_textbox("require_user", $rmode eq "user" ? join(" ", @rwho) : "", 40)."
" ], [ "group", $text{'dir_requireg'}." ". &ui_textbox("require_group", $rmode eq "group" ? join(" ", @rwho) : "", 40)."
" ] ])); print &ui_hidden_table_end(); # Webmin synchronization mode if ($can_sync) { print &ui_hidden_table_start($text{'dir_header2'}, "width=100%", 2, "sync", 0, [ "width=30%" ]); %sync = map { $_, 1 } split(/,/, $dir->[3]); foreach $s ('create', 'update', 'delete') { print &ui_table_row($text{'dir_sync_'.$s}, &ui_yesno_radio("sync_$s", $sync{$s} ? 1 : 0)); } print &ui_hidden_table_end(); } if ($in{'new'}) { print &ui_form_end([ [ undef, $text{'create'} ] ]); } else { if (&foreign_available("apache")) { %aaccess = &get_module_acl(undef, "apache"); if ($aaccess{'global'}) { @abutton = ( undef, [ 'apache', $text{'dir_apache'} ] ); } } print &ui_form_end([ [ undef, $text{'save'} ], [ 'delete', $text{'dir_delete'} ], [ 'remove', $dir->[4] ? $text{'dir_delete2'} : $text{'dir_delete3'} ], @abutton ]); } &ui_print_footer("", $text{'index_return'});