#!/usr/local/bin/perl # Create, update or delete a BSD RC script require './init-lib.pl'; &ReadParse(); $access{'bootup'} || &error($text{'edit_ecannot'}); &foreign_require("proc", "proc-lib.pl"); @rcs = &list_rc_scripts(); if (!$in{'new'}) { ($rc) = grep { $_->{'name'} eq $in{'name'} } @rcs; $rc || &error($text{'edit_egone'}); } if ($in{'delete'}) { # Delete the action script &delete_rc_script($in{'name'}); &webmin_log("delete", "action", $in{'name'}); &redirect(""); } elsif ($in{'start'} || $in{'stop'} || $in{'status'}) { # Run now $mode = $in{'start'} ? "start" : $in{'stop'} ? "stop" : "status"; &ui_print_header(undef, $text{'ss_'.$mode}, ""); print &text('ss_doing'.$mode, "$in{'name'}"),"
\n"; $cmd = "$rc->{'file'} $mode"; print "
";
	&foreign_call("proc", "safe_process_exec_logged", $cmd, 0, 0, STDOUT, undef, 1);
	print "
\n"; &webmin_log($mode, 'action', $in{'name'}); &ui_print_footer("edit_rc.cgi?name=".&urlize($in{'name'}), $text{'edit_return'}); } else { # Validate inputs if ($in{'new'}) { $in{'name'} =~ /^[A-z0-9\_\-\.]+$/ || &error($text{'save_ename'}); ($clash) = grep { $_->{'name'} eq $in{'name'} } @rcs; $clash && &error($text{'save_eclash'}); $in{'start_cmd'} =~ /\S/ || &error($text{'save_estartcmd'}); @dirs = split(/\s+/, $config{'rc_dir'}); $file = $dirs[$#dir]."/".$in{'name'}; $data = "#!/bin/sh\n"; $data .= "#\n"; $data .= "# PROVIDE: $in{'name'}\n"; $data .= "# REQUIRE: LOGIN\n"; $data .= "\n"; $data .= ". /etc/rc.subr\n"; $data .= "\n"; $data .= "name=$in{'name'}\n"; $data .= "rcvar=`set_rcvar`\n"; $data .= "start_cmd=\"$in{'start_cmd'}\"\n"; if ($in{'stop_cmd'}) { $data .= "stop_cmd=\"$in{'stop_cmd'}\"\n"; } if ($in{'status_cmd'}) { $data .= "status_cmd=\"$in{'status_cmd'}\"\n"; } $data .= "\n"; $data .= "load_rc_config \${name}\n"; $data .= "run_rc_command \"\$1\"\n"; } else { $data = $in{'script'}; $data =~ s/\r//g; $data =~ /\S/ || &error($text{'save_escript'}); $file = $rc->{'file'}; } # Write out the file &open_lock_tempfile(SCRIPT, ">$file"); &print_tempfile(SCRIPT, $data); &close_tempfile(SCRIPT); &set_ownership_permissions(undef, undef, 0755, $file); if ($rc->{'enabled'} != 2) { # Enable or disable &lock_rc_files(); if ($in{'enabled'}) { &enable_rc_script($in{'name'}); } else { &disable_rc_script($in{'name'}); } &unlock_rc_files(); } &webmin_log($in{'new'} ? "create" : "modify", "action", $in{'name'}); &redirect(""); }