File: dwww.postinst

package info (click to toggle)
dwww 1.16
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 844 kB
  • sloc: perl: 3,171; ansic: 1,819; sh: 161; makefile: 127; xml: 11
file content (121 lines) | stat: -rw-r--r-- 3,459 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#!/usr/bin/perl -w
# vim:ft=perl:cindent:ts=4:sts=4:et:sw
#
# postinst for dwww
#

use Debconf::Client::ConfModule qw(:all);
use Debian::Dwww::ConfigFile qw(ReadConfigFile WriteConfigFile);
use strict;

my $stdcgidir    = '/usr/lib/cgi-bin';
my $cfgfile      = '/etc/dwww/dwww.conf';
my $newcfgfile   = '/etc/dwww/dwww.conf.dpkg-new';
$|=1;
version('2.0');


if ($ARGV[0] eq 'configure' or $ARGV[0] eq 'reconfigure')
{
    my $dwwwcfg = ReadConfigFile($cfgfile);

    # docrootdir
    my $old_docdir = $dwwwcfg->{DWWW_DOCROOTDIR}->{cfgval} ? canondir($dwwwcfg->{DWWW_DOCROOTDIR}->{cfgval}) : '';
    my $old_cgidir = $dwwwcfg->{DWWW_CGIDIR}->{cfgval} ? canondir($dwwwcfg->{DWWW_CGIDIR}->{cfgval}): '';

    $dwwwcfg->{DWWW_DOCROOTDIR}->{cfgval} = canondir(scalar get('dwww/docrootdir'));
    $dwwwcfg->{DWWW_CGIDIR}->{cfgval}     = canondir(scalar get('dwww/cgidir'));
    $dwwwcfg->{DWWW_CGIUSER}->{cfgval}    = get('dwww/cgiuser');
    $dwwwcfg->{DWWW_SERVERPORT}->{cfgval} = get('dwww/serverport');
    $dwwwcfg->{DWWW_SERVERNAME}->{cfgval} = get('dwww/servername');

    my $do_index = (-x '/usr/bin/index++'
                and not -s '/var/cache/dwww/dwww.swish++.index'
            and scalar get('dwww/index_docs') eq 'true') ? 1 : 0;

    &SetupDwwwLinks ($old_docdir, $dwwwcfg->{DWWW_DOCROOTDIR}->{cfgval},
                     $old_cgidir, $dwwwcfg->{DWWW_CGIDIR}->{cfgval});

    WriteConfigFile($newcfgfile, $dwwwcfg);
    my @cmd = ("ucf","--debconf-ok", "--three-way", $newcfgfile, $cfgfile);
    system (@cmd) == 0 or die "system @cmd failed: $!\n";
    @cmd    = ("ucfr", "dwww", $cfgfile);
    system (@cmd) == 0 or die "system @cmd failed: $!\n";
    unlink ($newcfgfile);

    stop(); # stop debconf

    if ( ! -d "/var/cache/dwww" ) {
        mkdir "/var/cache/dwww", 0755 or die "Cannot create directory /var/cache/dwww: $!\n";
        chown 0, 0, "/var/cache/dwww";
    } else {
        system("rm", "-rf", "/var/cache/dwww/db");
    }
    mkdir "/var/cache/dwww/db", 0755 or die "Cannot create directory /var/cache/dwww/db: $!\n";
    my $cgiuser = $dwwwcfg->{DWWW_CGIUSER}->{cfgval};
    my $uid = (getpwnam($cgiuser))[2] ;
    defined $uid or die "User $cgiuser does not exist\n";
    $uid or die "You DON'T want to run the dwww CGI script as root!\n";
    chown $uid, 0, "/var/cache/dwww/db";

    if ( -x "/etc/cron.daily/dwww" )
    {
        print STDERR "\nBuilding dwww pages in the background...\n";
        system("setsid /etc/cron.daily/dwww &");
    }

    if ($do_index and -x "/usr/sbin/dwww-index++")
    {
        print STDERR "\nIndexing documentation files in the background...\n";
        system("dwww-index++ &");
    }

}
else
{
    stop(); # stop debconf
}


my $dh_commands="set -- @ARGV\n" . << 'EOF';
set -e
#DEBHELPER#
EOF
system ($dh_commands) / 256 == 0
    or die "Problem with shell scripts: $!";

exit 0;


# SOUBROUTINES


sub SetupDwwwLinks
{
    my ($olddocdir, $newdocdir, $oldcgidir, $newcgidir) = @_;

    if (($olddocdir ne "") and ($olddocdir ne $newdocdir))
    {
        system("rm", "-rf", "$olddocdir/dwww");
    }

    if (($oldcgidir ne $stdcgidir) and ($oldcgidir ne ""))
    {
        unlink "$oldcgidir/dwww";
    }

    if (($newcgidir ne $stdcgidir) and ( -d $newcgidir ))
    {
        unlink "$newcgidir/dwww";
        system("cp","-p","$stdcgidir/dwww", "$newcgidir/dwww");
    }
}

sub canondir
{
    my $dir = $_[0];

    $dir =~ s|/+|/|g;
    $dir =~ s|/$||;
    return $dir;
}