[webmin-devel] Improvement to apache module's "edit config files"
"Fry, Joseph" <[email protected]>
| Newsgroups | gmane.comp.web.webmin.devel |
|---|---|
| Message-ID | <[email protected]> |
I have developers who need access to view the apache log files, and edit php.ini on our server. Unfortunately, I cannot give those developers access to the logs module or the file manager module. So, to meet their need I modified apache/allmanual_save.cgi and apache/allmanual_form.cgi as follows. I am not an experienced developer, so I am unfamiliar with submitting patches, but I felt that this would be a valuable feature to include in future releases, if anyone is willing to review and improve my code for submittion, I would appreciate it!
Essentially, these modifications cause a file in the module's directory (should be in /etc/ but I didn't take the time to do this) called "editfiles.ini" to be parsed, and appends any line that is not started with a # or whitespace to be added to the dropdown list of files to edit. If any line begins with "ro ", that file is read-only.
If a file is read-only, the submit button is removed, and the file name is italicised in the dropdown box. Users will not be able to save a read-only file.
The files I started with were from webmin Version 1.300. I am sorry I do not have a diff file.
Thank you all for a great product!
Joe Fry
-----------------------------------------------------------
#!/usr/bin/perl
# allmanual_save.cgi
# Save an entire config file
require './apache-lib.pl';
&ReadParseMime();
$access{'types'} eq '*' && $access{'virts'} eq '*' ||
&error($text{'manual_ecannot'});
$conf = &get_config();
@files = &unique(map { $_->{'file'} } @$conf);
$editfiles = &read_file_lines("editfiles.ini");
foreach $editfile (@$editfiles) {
if ($editfile !~ /^#/ and $editfile !~ /^$|^\s+/)
{
if ($editfile !~ /^ro\s/)
{
push(@files, $editfile);
}
}
}
&indexof($in{'file'}, @files) >= 0 || &error($text{'manual_efile'});
$temp = &transname();
&execute_command("cp ".quotemeta($in{'file'})." $temp");
$in{'data'} =~ s/\r//g;
&lock_file($in{'file'});
&open_tempfile(FILE, ">$in{'file'}");
&print_tempfile(FILE, $in{'data'});
&close_tempfile(FILE);
&unlock_file($in{'file'});
if ($config{'test_manual'}) {
$err = &test_config();
if ($err) {
&execute_command("mv $temp '$in{'file'}'");
&error(&text('manual_etest', "<pre>$err</pre>"));
}
}
unlink($temp);
&webmin_log("manual", undef, undef, { 'file' => $in{'file'} });
&redirect("");
-------------------------------------------------------------------
#!/usr/bin/perl
# allmanual_form.cgi
# Display a text box for manually editing directives from one of the files
require './apache-lib.pl';
&ReadParse();
$access{'types'} eq '*' && $access{'virts'} eq '*' ||
&error($text{'manual_ecannot'});
&ui_print_header(undef, $text{'manual_configs'}, "");
$conf = &get_config();
@files = grep { -f $_ } &unique(map { $_->{'file'} } @$conf);
# ADD FILES TO EDIT OR DISPLAY IN editfiles.ini
$editfiles = &read_file_lines("editfiles.ini");
foreach $editfile (@$editfiles) {
if ($editfile !~ /^#/ and $editfile !~ /^$|^\s+/)
{
push(@files, $editfile);
}
}
$in{'file'} = $files[0] if (!$in{'file'});
print "<form action=allmanual_form.cgi>\n";
print "<input type=submit value='$text{'manual_file'}'>\n";
print "<select name=file>\n";
foreach $f (@files) {
if ($f =~ /^ro\s/) {
$format = "style='font-style: italic'";
} else {
$format = "";
}
printf "<option %s %s>%s\n",
$format, $f eq $in{'file'} ? 'selected' : '', $f;
$found++ if ($f eq $in{'file'});
}
print "</select>Files in italics are Read Only</form>\n";
$found || &error($text{'manual_efile'});
if ($in{'file'} =~ /^ro\s/)
{
print "<form action=allmanual_form.cgi method=post ",
"enctype=multipart/form-data>\n";
$buttontype = "hidden";
$filename = $in{'file'};
$filename =~ s/^ro\s//;
} else {
print "<form action=allmanual_save.cgi method=post ",
"enctype=multipart/form-data>\n";
$buttontype = "submit";
$filename = $in{'file'};
}
print "<input type=hidden name=file value='$in{'file'}'>\n";
print "<textarea name=data rows=20 cols=80 style='width:100%'>";
open(FILE, $filename);
while(<FILE>) { print &html_escape($_); }
close(FILE);
print "</textarea><br>\n";
print "<input type=$buttontype value='$text{'save'}'>\n";
print "</form>\n";
&ui_print_footer("", $text{'index_return'});
--
No virus found in this outgoing message.
Checked by AVG Free Edition.
Version: 7.5.430 / Virus Database: 268.13.25/515 - Release Date: 11/3/2006 5:15 AM
-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
-
Forwarded by the Webmin development list at [email protected]
To remove yourself from this list, go to
http://lists.sourceforge.net/lists/listinfo/webadmin-devel