1#!/usr/local/bin/perl
2#
3# $Id: admin-save.pl,v 1.3 2004/10/23 16:59:41 mrsam Exp $
4#
5# Copyright 2001 Double Precision, Inc.  See COPYING for
6# distribution information.
7
8my $fh=new FileHandle;
9
10my $pid;
11
12die $cgi->header("text/plain") . "Cannot start process: $!\n"
13    unless (defined $fh) && (defined ($pid=open($fh, "-|")));
14
15if (! $pid)
16{
17    my $errflag=0;
18
19    open(STDERR, ">&STDOUT");
20
21    foreach (ReadDirList("added"))
22    {
23
24	my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
25	    $atime,$mtime,$ctime,$blksize,$blocks)
26	    = stat("$sysconfdir/webadmin/added/$_");
27
28	next unless $mode;
29
30	print "Creating $_...\n";
31	mkdir("$sysconfdir/$_", $mode);
32    }
33    unlink("$sysconfdir/webadmin/subdirs-added");
34
35    foreach (ReadConfigFiles())
36    {
37	if ( -f "$sysconfdir/webadmin/added/$_" )
38	{
39	    print "Installing $_...\n";
40
41	    my $newfilename="$sysconfdir/$_";
42
43	    $newfilename=$authdaemonrc if $newfilename eq "$sysconfdir/authdaemonrc";
44	    $newfilename=$authldaprc if $newfilename eq "$sysconfdir/authldaprc";
45	    $newfilename=$authmysqlrc if $newfilename eq "$sysconfdir/authmysqlrc";
46	    $newfilename=$authpgsqlrc if $newfilename eq "$sysconfdir/authpgsqlrc";
47
48	    my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
49		$atime,$mtime,$ctime,$blksize,$blocks)
50		= stat($newfilename);
51
52	    if ($mode)
53	    {
54		chmod ($mode, "$sysconfdir/webadmin/added/$_");
55		chown ($uid, $gid, "$sysconfdir/webadmin/added/$_");
56	    }
57	    ($errflag=1, print "ERROR: $!\n")
58		if ! rename ("$sysconfdir/webadmin/added/$_", $newfilename);
59	}
60
61	if ( -f "$sysconfdir/webadmin/removed/$_" )
62	{
63	    print "Deleting $_...\n";
64	    ($errflag=1, print "ERROR: $!\n")
65		if ! unlink ("$sysconfdir/webadmin/removed/$_",
66			     "$sysconfdir/$_");
67	}
68    }
69
70    foreach (ReadDirList("removed"))
71    {
72	print "Removing $_...\n";
73	rmdir("$sysconfdir/$_");
74    }
75    unlink("$sysconfdir/webadmin/subdirs-removed");
76
77    $fh=new FileHandle "$sysconfdir/webadmin/changed";
78
79    if (defined $fh)
80    {
81	my $line;
82
83	while (defined($line=<$fh>))
84	{
85	    next if $errflag;
86
87	    chomp $line;
88	    next unless $line =~ /(.+)/;
89
90	    $line=$1;
91
92	    print "Executing $line...\n";
93	    $errflag=1 if system($line) != 0;
94	}
95	close($fh);
96    }
97
98    my @leftovers=ReadConfigFiles();
99
100    unlink ("$sysconfdir/webadmin/changed")
101	if $#leftovers < 0 && $errflag == 0;
102
103    exit 0;
104}
105
106my $output=htmlescape(join("", <$fh>));
107close($fh);
108
109display_form("admin-save.html",
110	     {
111		 "OUTPUT" => $output
112		 }
113	     );
114exit 0
115