summaryrefslogtreecommitdiffstats
path: root/boot-env/preboot/http-server/user_settings.pl
blob: 6c13526781f97797ca41f93a8d9907b0fa2f4d33 (plain) (blame)
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
#!/usr/bin/perl -w
# Copyright (c) 2009 - OpenSLX GmbH
#
# This program is free software distributed under the GPL version 2.
# See http://openslx.org/COPYING
#
# If you have any feedback please consult http://openslx.org/feedback and
# send your feedback to feedback@openslx.org
#
# General information about OpenSLX can be found at http://openslx.org
#
# cgi-bin script that accepts user settings and stores them in a special
# folder on the openslx server

use strict;
use warnings;

use CGI;
use CGI::Carp qw(fatalsToBrowser);
use File::Path;

# add openslx stuff to @INC
use FindBin;
use lib "$FindBin::RealBin/../../../../lib";
use lib "$FindBin::RealBin";

# read default config
use OpenSLX::Basics;
openslxInit();

#    die "*** Taint mode must be active! ***" unless ${^TAINT};

my $cgi = CGI->new;

my $system = $cgi->param('system') || '';
my $client = $cgi->param('client') || '';
my $prebootID = $cgi->param('preboot_id') || '';
my $type = $cgi->param('type') || 'directkiosk';
my $errormsg = 'None';

die "must give 'system' ($system), 'client' ($client) and 'preboot_id' ($prebootID)!\n"
    unless $system && $client && $prebootID;

my $webPath = "$openslxConfig{'public-path'}/preboot";
my $src = "$webPath/client-config/$system/$prebootID.tgz";
my $destPath = "$webPath/$prebootID/client-config/$system";

# if fastboot (default) is selected and a ConfTGZ exist just proceed ...
if ($type eq "fastboot" && !-e "$destPath/$client.tgz") { $type = "slxconfig"; }
# directkiosk/cfgkiosk/slxconfig
if ($type ne "fastboot") { 
    mkpath($destPath."/".$client);
    system(qq{tar -xzf $src -C $destPath/$client/});


    # from here on the modifications of client configuration should take place
    # within $destPath/$client directory
    if ($type eq "slxconfig") {
        # configuration of a WAN boot SLX client
        print STDERR "slxconfig sub";
    }
    elsif ($type eq "cfgkiosk") {
        # configuration of a WAN boot SLX kiosk
    }
    elsif (!$type || $type eq "directkiosk") {
        # deactivate the desktop plugin for the kiosk mode
        open (CFGFILE, ">>$destPath/$client/initramfs/plugin-conf/desktop.conf");
        print CFGFILE 'desktop_active="0"';
        close (CFGFILE);
        # activate the kiosk plugin
        if (!-e "$destPath/$client/initramfs/plugin-conf/kiosk.conf") {
            $errormsg = "The kiosk plugin seems not to be installed";
            print STDERR $errormsg;
        } else {
            open (CFGFILE, ">>$destPath/$client/initramfs/plugin-conf/kiosk.conf");
            print CFGFILE 'kiosk_active="1"';
            close (CFGFILE);
        }
    }
    else {
        # unknown type
        $errormsg = "You have passed an unknown boot type $type";
        print STDERR $errormsg;
    }
    system(qq{cd $destPath/$client; tar -czf $destPath/$client.tgz *});
    rmtree($destPath."/".$client);
}

# resulting page is not shown to the user (error reporting that way, or
# completely empty reply?)
print
    $cgi->header(-charset => 'iso8859-1'),
    $cgi->start_html('...');
if ($errormsg) { print $cgi->p("Error: $errormsg"); } 
print
    $cgi->end_html();