[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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.