summaryrefslogtreecommitdiffstats
path: root/perl-install/standalone
diff options
context:
space:
mode:
authorMystery Man <unknown@mandriva.org>2003-02-24 21:38:29 +0000
committerMystery Man <unknown@mandriva.org>2003-02-24 21:38:29 +0000
commit34fc23f1f8648b24ea847b226d3d9fd6d28b5b94 (patch)
tree554d371bc001e11e8b607cf4e159fd0e3c10dc1e /perl-install/standalone
parent125381a2f6f932524a77eb7a30e4f8089077cc6e (diff)
downloaddrakx-9_1_6mdk.tar
drakx-9_1_6mdk.tar.gz
drakx-9_1_6mdk.tar.bz2
drakx-9_1_6mdk.tar.xz
drakx-9_1_6mdk.zip
This commit was manufactured by cvs2svn to create tag 'V9_1_6mdk'.V9_1_6mdk
Diffstat (limited to 'perl-install/standalone')
-rw-r--r--perl-install/standalone/.perl_checker1
-rwxr-xr-xperl-install/standalone/XFdrake141
-rwxr-xr-xperl-install/standalone/adduserdrake33
-rwxr-xr-xperl-install/standalone/diskdrake104
-rwxr-xr-xperl-install/standalone/drakTermServ1581
-rwxr-xr-xperl-install/standalone/drakautoinst354
-rwxr-xr-xperl-install/standalone/drakbackup4817
-rwxr-xr-xperl-install/standalone/drakboot52
-rwxr-xr-xperl-install/standalone/drakbug190
-rwxr-xr-xperl-install/standalone/drakbug_report14
-rwxr-xr-xperl-install/standalone/drakconnect655
-rw-r--r--perl-install/standalone/drakedm58
-rwxr-xr-xperl-install/standalone/drakfirewall30
-rwxr-xr-xperl-install/standalone/drakfloppy376
-rwxr-xr-xperl-install/standalone/drakfont928
-rwxr-xr-xperl-install/standalone/drakgw564
-rw-r--r--perl-install/standalone/drakhelp37
-rwxr-xr-xperl-install/standalone/drakperm369
-rwxr-xr-xperl-install/standalone/drakproxy33
-rwxr-xr-xperl-install/standalone/drakpxe516
-rwxr-xr-xperl-install/standalone/draksec252
-rwxr-xr-xperl-install/standalone/draksound58
-rwxr-xr-xperl-install/standalone/draksplash558
-rwxr-xr-xperl-install/standalone/drakupdate_fstab163
-rwxr-xr-xperl-install/standalone/drakxservices17
-rwxr-xr-xperl-install/standalone/drakxtv163
-rwxr-xr-xperl-install/standalone/fileshareset389
-rwxr-xr-xperl-install/standalone/harddrake2314
-rw-r--r--perl-install/standalone/icons/categ.pngbin5173 -> 0 bytes
-rw-r--r--perl-install/standalone/icons/drakTS.620x57.pngbin410 -> 0 bytes
-rw-r--r--perl-install/standalone/icons/drakbackup.540x57.pngbin6311 -> 0 bytes
-rw-r--r--perl-install/standalone/icons/drakconnect_step.pngbin10749 -> 0 bytes
-rw-r--r--perl-install/standalone/icons/drakfont.620x57.pngbin4804 -> 0 bytes
-rw-r--r--perl-install/standalone/icons/eth_card_mini2.pngbin1538 -> 0 bytes
-rw-r--r--perl-install/standalone/icons/fileopen.xpm34
-rw-r--r--perl-install/standalone/icons/find.xpm34
-rw-r--r--perl-install/standalone/icons/findf.xpm31
-rw-r--r--perl-install/standalone/icons/ftin.xpm30
-rw-r--r--perl-install/standalone/icons/ftout.xpm30
-rw-r--r--perl-install/standalone/icons/gmon.pngbin17411 -> 0 bytes
-rw-r--r--perl-install/standalone/icons/harddrake2/cd.pngbin1059 -> 0 bytes
-rw-r--r--perl-install/standalone/icons/harddrake2/cpu.pngbin566 -> 0 bytes
-rw-r--r--perl-install/standalone/icons/harddrake2/floppy.pngbin506 -> 0 bytes
-rw-r--r--perl-install/standalone/icons/harddrake2/harddisk.pngbin754 -> 0 bytes
-rw-r--r--perl-install/standalone/icons/harddrake2/harddrake.pngbin970 -> 0 bytes
-rw-r--r--perl-install/standalone/icons/harddrake2/hw_mouse.pngbin872 -> 0 bytes
-rw-r--r--perl-install/standalone/icons/harddrake2/hw_network.pngbin632 -> 0 bytes
-rw-r--r--perl-install/standalone/icons/harddrake2/hw_printer.pngbin888 -> 0 bytes
-rw-r--r--perl-install/standalone/icons/harddrake2/ide_hd.pngbin842 -> 0 bytes
-rw-r--r--perl-install/standalone/icons/harddrake2/isdn.pngbin884 -> 0 bytes
-rw-r--r--perl-install/standalone/icons/harddrake2/joystick.pngbin881 -> 0 bytes
-rw-r--r--perl-install/standalone/icons/harddrake2/keyboard.pngbin891 -> 0 bytes
-rw-r--r--perl-install/standalone/icons/harddrake2/memory.pngbin358 -> 0 bytes
-rw-r--r--perl-install/standalone/icons/harddrake2/menu/harddrake-menu16.pngbin970 -> 0 bytes
-rw-r--r--perl-install/standalone/icons/harddrake2/menu/harddrake-menu32.pngbin2447 -> 0 bytes
-rw-r--r--perl-install/standalone/icons/harddrake2/menu/harddrake-menu48.pngbin4214 -> 0 bytes
-rw-r--r--perl-install/standalone/icons/harddrake2/modem.pngbin608 -> 0 bytes
-rw-r--r--perl-install/standalone/icons/harddrake2/multimedia.pngbin939 -> 0 bytes
-rw-r--r--perl-install/standalone/icons/harddrake2/scanner.pngbin827 -> 0 bytes
-rw-r--r--perl-install/standalone/icons/harddrake2/scsi.pngbin275 -> 0 bytes
-rw-r--r--perl-install/standalone/icons/harddrake2/scsi_hd.pngbin275 -> 0 bytes
-rw-r--r--perl-install/standalone/icons/harddrake2/sound.pngbin514 -> 0 bytes
-rw-r--r--perl-install/standalone/icons/harddrake2/tape.pngbin643 -> 0 bytes
-rw-r--r--perl-install/standalone/icons/harddrake2/tv.pngbin940 -> 0 bytes
-rw-r--r--perl-install/standalone/icons/harddrake2/unknown.pngbin592 -> 0 bytes
-rw-r--r--perl-install/standalone/icons/harddrake2/usb.pngbin316 -> 0 bytes
-rw-r--r--perl-install/standalone/icons/harddrake2/video.pngbin867 -> 0 bytes
-rw-r--r--perl-install/standalone/icons/harddrake2/webcam.pngbin813 -> 0 bytes
-rw-r--r--perl-install/standalone/icons/hori.pngbin7232 -> 0 bytes
-rw-r--r--perl-install/standalone/icons/ic-drakfont-48.pngbin3290 -> 0 bytes
-rw-r--r--perl-install/standalone/icons/ic82-CD-40.pngbin3436 -> 0 bytes
-rw-r--r--perl-install/standalone/icons/ic82-back-up-16.pngbin1027 -> 0 bytes
-rw-r--r--perl-install/standalone/icons/ic82-back-up-32.pngbin2977 -> 0 bytes
-rw-r--r--perl-install/standalone/icons/ic82-back-up-48.pngbin4565 -> 0 bytes
-rw-r--r--perl-install/standalone/icons/ic82-discdurwhat-40.pngbin2023 -> 0 bytes
-rw-r--r--perl-install/standalone/icons/ic82-dossier-32.pngbin1858 -> 0 bytes
-rw-r--r--perl-install/standalone/icons/ic82-moreoption-40.pngbin2354 -> 0 bytes
-rw-r--r--perl-install/standalone/icons/ic82-network-40.pngbin2145 -> 0 bytes
-rw-r--r--perl-install/standalone/icons/ic82-others-40.pngbin2023 -> 0 bytes
-rw-r--r--perl-install/standalone/icons/ic82-system-40.pngbin2370 -> 0 bytes
-rw-r--r--perl-install/standalone/icons/ic82-users-40.pngbin1638 -> 0 bytes
-rw-r--r--perl-install/standalone/icons/ic82-when-40.pngbin2933 -> 0 bytes
-rw-r--r--perl-install/standalone/icons/ic82-where-40.pngbin2514 -> 0 bytes
-rw-r--r--perl-install/standalone/icons/mdk_logo.pngbin15639 -> 0 bytes
-rw-r--r--perl-install/standalone/icons/net_c.pngbin3198 -> 0 bytes
-rw-r--r--perl-install/standalone/icons/net_d.pngbin3192 -> 0 bytes
-rw-r--r--perl-install/standalone/icons/net_u.pngbin2866 -> 0 bytes
-rw-r--r--perl-install/standalone/icons/reload.xpm31
-rw-r--r--perl-install/standalone/icons/smbnfs_default.pngbin260 -> 0 bytes
-rw-r--r--perl-install/standalone/icons/smbnfs_has_mntpoint.pngbin287 -> 0 bytes
-rw-r--r--perl-install/standalone/icons/smbnfs_mounted.pngbin282 -> 0 bytes
-rw-r--r--perl-install/standalone/icons/smbnfs_server.pngbin314 -> 0 bytes
-rw-r--r--perl-install/standalone/icons/tradi.pngbin32579 -> 0 bytes
-rw-r--r--perl-install/standalone/icons/verti.pngbin21123 -> 0 bytes
-rw-r--r--perl-install/standalone/icons/wiz_default_left.pngbin2185 -> 0 bytes
-rw-r--r--perl-install/standalone/icons/wiz_default_up.pngbin7815 -> 0 bytes
-rw-r--r--perl-install/standalone/icons/wiz_drakconnect.pngbin11135 -> 0 bytes
-rw-r--r--perl-install/standalone/icons/wiz_drakgw.pngbin9332 -> 0 bytes
-rw-r--r--perl-install/standalone/icons/wiz_firewall.pngbin7815 -> 0 bytes
-rw-r--r--perl-install/standalone/icons/wiz_logdrake.pngbin7150 -> 0 bytes
-rw-r--r--perl-install/standalone/icons/wiz_printerdrake.pngbin8240 -> 0 bytes
-rw-r--r--perl-install/standalone/icons/wiz_scannerdrake.pngbin7815 -> 0 bytes
-rw-r--r--perl-install/standalone/interactive_http/Makefile21
-rw-r--r--perl-install/standalone/interactive_http/authorised_progs12
-rw-r--r--perl-install/standalone/interactive_http/index.html.pl14
-rwxr-xr-xperl-install/standalone/interactive_http/interactive_http.cgi95
-rw-r--r--perl-install/standalone/interactive_http/miniserv.conf13
-rw-r--r--perl-install/standalone/interactive_http/miniserv.init60
-rw-r--r--perl-install/standalone/interactive_http/miniserv.logrotate7
-rw-r--r--perl-install/standalone/interactive_http/miniserv.pam5
-rw-r--r--perl-install/standalone/interactive_http/miniserv.pem18
-rw-r--r--perl-install/standalone/interactive_http/miniserv.pl1817
-rw-r--r--perl-install/standalone/interactive_http/miniserv.users1
-rwxr-xr-xperl-install/standalone/keyboarddrake50
-rwxr-xr-xperl-install/standalone/livedrake40
-rw-r--r--perl-install/standalone/localedrake47
-rwxr-xr-xperl-install/standalone/logdrake487
-rwxr-xr-xperl-install/standalone/lsnetdrake30
-rwxr-xr-xperl-install/standalone/mousedrake64
-rwxr-xr-xperl-install/standalone/net_monitor571
-rwxr-xr-xperl-install/standalone/printerdrake65
-rwxr-xr-xperl-install/standalone/scannerdrake787
-rwxr-xr-xperl-install/standalone/service_harddrake84
-rw-r--r--perl-install/standalone/service_harddrake.sh53
124 files changed, 0 insertions, 17298 deletions
diff --git a/perl-install/standalone/.perl_checker b/perl-install/standalone/.perl_checker
deleted file mode 100644
index 202e0535f..000000000
--- a/perl-install/standalone/.perl_checker
+++ /dev/null
@@ -1 +0,0 @@
-Basedir ..
diff --git a/perl-install/standalone/XFdrake b/perl-install/standalone/XFdrake
deleted file mode 100755
index 5a4b923c2..000000000
--- a/perl-install/standalone/XFdrake
+++ /dev/null
@@ -1,141 +0,0 @@
-#!/usr/bin/perl
-
-# XFdrake
-# Copyright (C) 1999-2002 MandrakeSoft (pixel@mandrakesoft.com)
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-use lib qw(/usr/lib/libDrakX);
-
-use standalone; #- warning, standalone must be loaded very first, for 'explanations'
-
-use Xconfig::main;
-use Xconfig::xfree;
-use Xconfig::default;
-use interactive;
-use modules;
-use common;
-use any;
-use c;
-
-local $_ = join '', @ARGV;
-
-my ($configure_this) = grep { !/^-/ } @ARGV;
-$configure_this ||= 'everything';
-
-{
- my $in = 'interactive'->vnew('su', 'X');
-
- modules::mergein_conf('/etc/modules.conf') if -r '/etc/modules.conf';
-
- my $rc = do {
- my $options = { allowNVIDIA_rpms => allowNVIDIA_rpms(), allowFB => listlength(cat_("/proc/fb")) };
-
- if ($configure_this eq 'everything') {
- check_XFree($in);
- Xconfig::main::configure_everything_or_configure_chooser($in, $options, $::auto);
- } elsif ($configure_this eq 'auto_install') {
- Xconfig::main::configure_everything_auto_install(Xconfig::default::configure(), $in->do_pkgs, {}, $options);
- } elsif ($configure_this eq 'monitor') {
- Xconfig::main::configure_monitor($in, Xconfig::xfree->read);
- } elsif ($configure_this eq 'resolution') {
- Xconfig::main::configure_resolution($in, Xconfig::xfree->read);
- }
- };
- $rc && $rc eq 'config_changed' and ask_for_X_restart($in);
-
- $in->exit(0);
-}
-
-sub check_XFree {
- my ($in) = @_;
-
- #- set the standard configuration
- foreach ('XF86Config', 'XF86Config-4') {
- my $f = "/etc/X11/$_";
- symlinkf("$_.standard", $f) if -l $f && -e "$f.standard";
- }
-
- my $f = "/usr/X11R6/lib/X11/rgb.txt"; #- this one is on all platform
- -e $f or $in->do_pkgs->install('XFree86', 'XFree86-75dpi-fonts');
- -e $f or die "install XFree86 first!\n";
-
- system("mount /proc 2>/dev/null"); # ensure /proc is mounted for pci probing
-}
-
-sub allowNVIDIA_rpms {
- my $allowNVIDIA_rpms;
- my (%list, %select);
-
- eval {
- local *_;
- require urpm;
- my $urpm = new urpm;
- $urpm->read_config(nocheck_access => 1);
- foreach (grep { !$_->{ignore} } @{$urpm->{media} || []}) {
- $urpm->parse_synthesis($_);
- }
- foreach (@{$urpm->{depslist} || []}) {
- $_->name =~ /NVIDIA/ and $list{$_->name} = 1;
- }
- };
- if ($list{NVIDIA_GLX}) {
- eval {
- my ($version, $release, $ext) = c::kernel_version() =~ /([^-]*)-([^-]*mdk)(\S*)/;
- $ext and $ext = "-$ext";
- $list{"NVIDIA_kernel-$version-$release$ext"} or die "no NVIDIA kernel for current kernel";
- $select{"NVIDIA_kernel-$version-$release$ext"} = 1;
- foreach (`rpm -qa kernel-2* kernel-smp-2* kernel-enterprise-2* kernel-secure-2* kernel kernel-smp kernel-entreprise kernel22 kernel22-smp kernel22-secure`) {
- ($ext, $version, $release) = /kernel[^-]*(-\D[^-]*)-([^-]*)-([^-]*mdk)?/;
- $release or ($version, $release) = $version =~ /(.*?)\.(\d+mdk)/;
- $list{"NVIDIA_kernel-$version-$release$ext"} and $select{"NVIDIA_kernel-$version-$release$ext"} = 1;
- }
- $allowNVIDIA_rpms = [ keys(%select), "NVIDIA_GLX" ];
- }
- }
- if (!$allowNVIDIA_rpms) {
- $allowNVIDIA_rpms = system("modprobe NVdriver 2>/dev/null") == 0 && []; #- empty list but true.
- }
- $allowNVIDIA_rpms;
-}
-
-sub ask_for_X_restart {
- my ($in) = @_;
-
- $::isStandalone && $in->isa('interactive::gtk') or return;
-
- my ($wm, $pid) = any::running_window_manager();
-
- if (!$wm) {
- $in->ask_warn('', N("Please log out and then use Ctrl-Alt-BackSpace"));
- return;
- }
-
- $in->ask_okcancel('', N("Please relog into %s to activate the changes", ucfirst(lc $wm)), 1) or return;
-
- fork() and return;
- any::ask_window_manager_to_logout($wm);
-
- open STDIN, "</dev/zero";
- open STDOUT, ">/dev/null";
- open STDERR, ">&STDERR";
- c::setsid();
- exec qw(perl -e), q(
- my ($wm, $pid) = @ARGV;
- my $nb;
- for ($nb = 30; $nb && -e "/proc/$pid"; $nb--) { sleep 1 }
- system("killall X") if $nb;
- ), $wm, $pid;
-}
diff --git a/perl-install/standalone/adduserdrake b/perl-install/standalone/adduserdrake
deleted file mode 100755
index d1ebe4eef..000000000
--- a/perl-install/standalone/adduserdrake
+++ /dev/null
@@ -1,33 +0,0 @@
-#!/usr/bin/perl
-
-use lib qw(/usr/lib/libDrakX);
-
-use standalone; #- warning, standalone must be loaded very first, for 'explanations'
-
-use common;
-use interactive;
-use any;
-
-my @etc_pass_fields = qw(name pw uid gid realname home shell);
-my @shells = grep { -x $_ } map { "/bin/$_" } qw(bash tcsh zsh ash ksh);
-my $isMD5 = cat_("/etc/pam.d/system-auth") =~ /md5/;
-my $isShadow = cat_("/etc/pam.d/system-auth") =~ /shadow/;
-
-
-my $users = [];
-my $in;
-
-if (my @l = grep { ! /^-/ } @ARGV) {
- $users = [ map { { name => $_, realname => $_ } } @l ];
-} else {
- $in = 'interactive'->vnew('su', 'user');
- any::ask_users('', $in, $users, $ENV{SECURE_LEVEL});
-}
-
-system("adduser", $_->{name}) foreach @$users;
-any::write_passwd_user('', $_, $isMD5) foreach @$users;
-system("pwconv") if $isShadow;
-
-any::addUsers('', $users);
-
-$in->exit(0) if $in;
diff --git a/perl-install/standalone/diskdrake b/perl-install/standalone/diskdrake
deleted file mode 100755
index 24f20061f..000000000
--- a/perl-install/standalone/diskdrake
+++ /dev/null
@@ -1,104 +0,0 @@
-#!/usr/bin/perl
-
-# DiskDrake
-# Copyright (C) 1999-2002 MandrakeSoft (pixel@mandrakesoft.com)
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-# DiskDrake uses resize_fat which is a perl rewrite of the work of Andrew
-# Clausen (libresize).
-# DiskDrake is also based upon the libfdisk and the install from Red Hat Software
-
-
-use lib qw(/usr/lib/libDrakX);
-
-use standalone; #- warning, standalone must be loaded very first, for 'explanations'
-
-use common;
-use interactive;
-use detect_devices;
-use fsedit;
-use fs;
-use log;
-use c;
-
-my %options;
-my @l = @ARGV;
-while (my $e = shift @l) {
- my ($option) = $e =~ /--?(.*)/ or next;
- if ($option =~ /(.*?)=(.*)/) {
- $options{$1} = $2;
- } else {
- $options{$option} = '';
- }
-}
-
-my @types = qw(hd nfs smb dav removable fileshare);
-my ($type, $para) = ('hd', '');
-foreach (@types) {
- if (exists $options{$_}) {
- $para = delete $options{$_};
- $type = $_;
- last;
- }
-}
-%options and die "usage: diskdrake [--expert] [--testing] [--{" . join(",", @types) . "}]\n";
-
-if ($>) {
- $ENV{PATH} = "/sbin:/usr/sbin:$ENV{PATH}";
-}
-
-
-my $in = 'interactive'->vnew('su');
-
-if ($type eq 'fileshare') {
- require any;
- any::fileshare_config($in);
- $in->exit(0);
-}
-
-my $all_hds = fsedit::get_hds({}, $in);
-
-$SIG{__DIE__} = sub { my $m = chomp_($_[0]); log::l("ERROR: $m") };
-
-fs::get_raw_hds('', $all_hds);
-
-fs::merge_info_from_fstab([ fsedit::get_really_all_fstab($all_hds) ], '');
-fs::merge_info_from_mtab([ fsedit::get_really_all_fstab($all_hds) ], '');
-
-$all_hds->{current_fstab} = fs::fstab_to_string($all_hds, '');
-
-if ($type eq 'hd') {
- require diskdrake::interactive;
- diskdrake::interactive::main($in, $all_hds);
-} elsif ($type eq 'removable') {
- require diskdrake::removable;
- $para =~ s|^/dev/||;
- my ($raw_hd) = $para ?
- first(grep { $para eq $_->{device} } @{$all_hds->{raw_hds}}) || die "unknown removable $para\n" :
- $in->ask_from_listf('', '', \&diskdrake::interactive::format_raw_hd_info, $all_hds->{raw_hds}) or $in->exit(0);
- diskdrake::removable::main($in, $all_hds, $raw_hd);
-} elsif ($type eq 'dav') {
- ($::isEmbedded, my $isEmbedded) = (0, $::isEmbedded);
- require diskdrake::dav;
- diskdrake::dav::main($in, $all_hds);
- $::isEmbedded = $isEmbedded;
-} else {
- $in->ask_warn('', "Sorry only a gtk frontend is available") if !$in->isa('interactive::gtk');
- require diskdrake::smbnfs_gtk;
- diskdrake::smbnfs_gtk::main($in, $all_hds, $type);
-}
-
-$in->exit(0);
diff --git a/perl-install/standalone/drakTermServ b/perl-install/standalone/drakTermServ
deleted file mode 100755
index fb98bf47a..000000000
--- a/perl-install/standalone/drakTermServ
+++ /dev/null
@@ -1,1581 +0,0 @@
-#!/usr/bin/perl
-#
-# Copyright (C) 2002 by MandrakeSoft (sbenedict@mandrakesoft.com)
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# first pass at an interactive tool to help setup/maintain the Mandrake
-# Terminal Server implementation
-#
-# Requires: etherboot (on x86), mkinitrd-net, terminal-server, dhcp-server
-# clusternfs, tftp-server
-#
-# Tasks:
-# 1) creation/management of boot images (kernel+initrd, etherboot enabled)
-# mkinitrd-net is the command line interface for this
-# 2) create/modify /etc/dhcpd.conf for diskless clients
-# 3) create/modify /etc/exports for clusternfs export of "/"
-# 4) add/remove entries in /etc/shadow$$CLIENTS$$ to allow user access
-# 5) per client XF86Config-4, using /etc/XF86Config-4$$IP-ADDRESS$$
-# 6) other per client customizations (modules.conf, keyboard, mouse)
-# 7) enable/modify /etc/xinetd.d/tftp for etherboot
-# 8) create etherboot floppies for client machines
-#
-# Thanks to the fine work of the folks involved in ltsp.org, and
-# Michael Brown <mbrown@fensystems.co.uk>
-#
-
-use lib qw(/usr/lib/libDrakX);
-
-use standalone; #- warning, standalone must be loaded very first, for 'explanations'
-use strict;
-
-use interactive;
-use ugtk2 qw(:helpers :wrappers :create);
-use common;
-use run_program;
-
-use Config;
-use POSIX;
-
-my $in = 'interactive'->vnew('su');
-
-my @buff; #- used to display status info
-
-my $central_widget;
-my $window1;
-my $windows;
-my $status_box;
-my $main_box;
-
-my $nfs_subnet;
-my $nfs_mask;
-my $thin_clients = 0;
-my $cfg_dir = "/etc/drakxtools/draktermserv/";
-my $cfg_file = $cfg_dir . "draktermserv.conf";
-my $server_ip = get_ip_from_sys();
-
-#- make sure terminal server and friends are installed
-my $ts = system("rpm -qa | grep terminal-server > /dev/null");
-if ($ts == 256) {
- if ($ENV{DISPLAY}) {
- system("urpmi --X terminal-server > /dev/null");
- } else {
- system("urpmi terminal-server > /dev/null");
- }
- $ts = system("rpm -qa | grep terminal-server > /dev/null");
- if ($ts eq 256) {
- warn("Useless without Terminal Server");
- exit(1);
- }
-}
-
-if ("@ARGV" =~ /--enable/) {
- my $cmd_line = 1;
- enable_ts($cmd_line);
- exit(0);
-}
-
-if ("@ARGV" =~ /--disable/) {
- my $cmd_line = 1;
- disable_ts($cmd_line);
- exit(0);
-}
-
-if ("@ARGV" =~ /--start/) {
- my $cmd_line = 1;
- start_ts($cmd_line);
- exit(0);
-}
-
-if ("@ARGV" =~ /--stop/) {
- my $cmd_line = 1;
- stop_ts($cmd_line);
- exit(0);
-}
-
-if ("@ARGV" =~ /--adduser/) {
- die "$0 $ARGV[0] requires a username...\n" if $#ARGV < 1;
- my $cmd_line = 1;
- adduser($cmd_line, $ARGV[1]);
- exit(0);
-}
-
-if ("@ARGV" =~ /--deluser/) {
- die "$0 $ARGV[0] requires a username...\n" if $#ARGV < 1;
- my $cmd_line = 1;
- deluser($cmd_line, $ARGV[1]);
- exit(0);
-}
-
-if ("@ARGV" =~ /--addclient/) {
- die "$0 $ARGV[0] requires hostname, MAC address, IP, nbi-image...\n" if $#ARGV < 4;
- my $cmd_line = 1;
- addclient($cmd_line, $ARGV[1], $ARGV[2], $ARGV[3], $ARGV[4]);
- exit(0);
-}
-
-if ("@ARGV" =~ /--delclient/) {
- die "$0 $ARGV[0] requires hostname...\n" if $#ARGV < 1;
- my $cmd_line = 1;
- delclient($cmd_line, $ARGV[1], $ARGV[2], $ARGV[3]);
- exit(0);
-}
-
-read_conf_file();
-interactive_mode() if $#ARGV < 1;
-
-sub read_conf_file {
- local *CONF_FILE;
- if (-e $cfg_file) {
- open(CONF_FILE, "<" . $cfg_file) || print "You must be root to read configuration file. \n";
- local $_;
- while (<CONF_FILE>) {
- next unless /\S/;
- next if /^#/;
- chomp;
- if (/^ALLOW_THIN/) { $thin_clients = 1 }
- }
- }
- close CONF_FILE;
-}
-
-sub write_conf_file {
- my @cfg_list;
- if ($thin_clients eq 1) {
- @cfg_list = "ALLOW_THIN\n";
- }
- output_p($cfg_file, @cfg_list);
- chmod(0600, $cfg_file);
-}
-
-sub write_thin_inittab {
- my ($client_ip) = @_;
-
- my $inittab = "
-# /etc/inittab\$\$IP=$client_ip\$\$
-# created by drakTermServ
-
-id:5:initdefault:
-
-# System initialization.
-si::sysinit:/etc/rc.d/rc.sysinit
-
-l0:0:wait:/etc/rc.d/rc 0
-l1:1:wait:/etc/rc.d/rc 1
-l2:2:wait:/etc/rc.d/rc 2
-l3:3:wait:/etc/rc.d/rc 3
-l4:4:wait:/etc/rc.d/rc 4
-l5:5:wait:/etc/rc.d/rc 5
-l6:6:wait:/etc/rc.d/rc 6
-
-# Things to run in every runlevel.
-ud::once:/sbin/update
-
-# Trap CTRL-ALT-DELETE
-ca::ctrlaltdel:/sbin/reboot -f
-
-# Run gettys in standard runlevels
-1:2345:respawn:/sbin/mingetty tty1
-
-# Connect to X server
-x:5:respawn:/usr/X11R6/bin/X -ac -query $server_ip\n";
-
- my $inittab_file = "/etc/inittab\$\$IP=$client_ip\$\$";
- local *INITTAB;
- open(INITTAB, "> $inittab_file") || warn("Can't open $inittab_file!");
- print INITTAB $inittab;
- close INITTAB
-}
-
-sub cursor_wait {
- # turn the cursor to a watch
- $window1->{rwindow}->window->set_cursor(new Gtk2::Gdk::Cursor("GDK_WATCH"));
- gtkflush();
-}
-
-sub cursor_norm {
- # restore normal cursor
- $window1->{rwindow}->window->set_cursor(new Gtk2::Gdk::Cursor("GDK_LEFT_PTR"));
- gtkflush();
-}
-
-sub display_error {
- my ($message) = @_;
- my $error_box;
- ${$central_widget}->destroy();
- gtkpack($status_box,
- $error_box = gtkpack_(new Gtk2::VBox(0,0),
- 1, new Gtk2::Label($message),
- 0, gtkadd(gtkset_layout(new Gtk2::HButtonBox, 'spread'),
- gtksignal_connect(new Gtk2::Button(N("OK")), clicked => sub {
- ${$central_widget}->destroy();
- }),
- ),
- )
- );
- $central_widget = \$error_box;
-}
-
-sub interactive_mode {
- $window1 = ugtk2->new('drakTermServ');
- $window1->{rwindow}->signal_connect(delete_event => sub { ugtk2->exit(0) });
- unless ($::isEmbedded) {
- $window1->{rwindow}->set_position('center');
- $window1->{rwindow}->set_title(N("Mandrake Terminal Server Configuration"));
- }
- $window1->{rwindow}->set_border_width(5);
-
- gtkadd($window1->{window},
- gtkpack_(new Gtk2::VBox(0,2),
- if_(!$::isEmbedded, 0, gtkcreate_img("drakTS.620x57")),
- 1, gtkpack_(new Gtk2::HBox(0,2),
- 1, gtkpack_(new Gtk2::VBox(0,2),
- 1, gtkpack($status_box = new Gtk2::VBox(0,5),
- $main_box = new Gtk2::VBox(0,10),
- ),
- 1, gtkpack_(new Gtk2::HBox(0,2),
- 0, gtkadd(gtkset_layout(Gtk2::VButtonBox->new(), 'end'),
- gtksignal_connect(new Gtk2::Button(N("Enable Server")), clicked => sub {
- ${$central_widget}->destroy();
- $windows = 1;
- cursor_wait();
- enable_ts();
- cursor_norm();
- }),
- gtksignal_connect(new Gtk2::Button(N("Disable Server")), clicked => sub {
- ${$central_widget}->destroy();
- cursor_wait();
- disable_ts();
- cursor_norm();
- }),
- ),
- 0, gtkadd(gtkset_layout(Gtk2::VButtonBox->new(), 'end'),
- gtksignal_connect(new Gtk2::Button(N("Start Server")), clicked => sub {
- ${$central_widget}->destroy();
- $windows = 0;
- cursor_wait();
- start_ts();
- cursor_norm();
- }),
- gtksignal_connect(new Gtk2::Button(N("Stop Server")), clicked => sub {
- ${$central_widget}->destroy();
- cursor_wait();
- stop_ts();
- cursor_norm();
- }),
- ),
- 0, gtkadd(gtkset_layout(Gtk2::VButtonBox->new(), 'end'),
- gtksignal_connect(new Gtk2::Button(N("Etherboot Floppy/ISO")), clicked => sub {
- ${$central_widget}->destroy();
- $windows = 1;
- make_boot();
- }),
- gtksignal_connect(new Gtk2::Button(N("Net Boot Images")), clicked => sub {
- ${$central_widget}->destroy();
- make_nbi();
- }),
- ),
- 0, gtkadd(gtkset_layout(Gtk2::VButtonBox->new(), 'end'),
- gtksignal_connect(new Gtk2::Button(N("Add/Del Users")), clicked => sub {
- ${$central_widget}->destroy();
- $windows = 0;
- maintain_users();
- }),
- gtksignal_connect(new Gtk2::Button(N("Add/Del Clients")), clicked => sub { ${$central_widget}->destroy(); maintain_clients() }),
- ),
- 1, new Gtk2::HBox(0,2),
- 0, gtkadd(gtkset_layout(Gtk2::VButtonBox->new(), 'end'),
- gtksignal_connect(new Gtk2::Button(N("Help")),clicked => sub {
- ${$central_widget}->destroy();
- help();
- }),
- gtksignal_connect(new Gtk2::Button(N("Close")), clicked => sub {
- write_conf_file();
- Gtk2->main_quit();
- }),
- ),
- ),
- ),
- ),
- ),
- );
- $central_widget = \$main_box;
- $window1->{rwindow}->show_all;
- $window1->{rwindow}->realize;
- $window1->{rwindow}->show_all();
-
- $window1->main;
- ugtk2->exit(0);
-}
-
-sub about {
- text_view(N("
- Copyright (C) 2002 by MandrakeSoft
- Stew Benedict sbenedict\@mandrakesoft.com
-
-") . $::license . N("
-
- Thanks:
- - LTSP Project http://www.ltsp.org
- - Michael Brown <mbrown\@fensystems.co.uk>
-
-"));
-}
-
-sub text_view {
- my ($text) = @_;
- my $box;
- gtkpack($status_box,
- $box = gtkpack_(new Gtk2::VBox(0,10),
- 1, gtkpack_(new Gtk2::HBox(0,0),
- 1, create_scrolled_window(gtktext_insert(
-# gtkset_editable(
- new Gtk2::TextView,
-# 1)
- [ [ $text ] ])
- ),
- ),
- 0, gtkadd(gtkset_layout(new Gtk2::HButtonBox, 'spread'),
- gtksignal_connect(new Gtk2::Button(N("OK")), clicked =>
- sub { ${$central_widget}->destroy() }),
- ),
- )
- );
- $central_widget = \$box;
- $status_box->show_all();
-}
-
-sub help {
- text_view(N("drakTermServ Overview
-
- - Create Etherboot Enabled Boot Images:
- To boot a kernel via etherboot, a special kernel/initrdrd image must be created.
- mkinitrd-net does much of this work and drakTermServ is just a graphical interface
- to help manage/customize these images.
-
- - Maintain /etc/dhcpd.conf:
- To net boot clients, each client needs a dhcpd.conf entry, assigning an IP address
- and net boot images to the machine. drakTermServ helps create/remove these entries.
-
- (PCI cards may omit the image - etherboot will request the correct image. You should
- also consider that when etherboot looks for the images, it expects names like
- boot-3c59x.nbi, rather than boot-3c59x.2.4.19-16mdk.nbi).
-
- A typical dhcpd.conf stanza to support a diskless client looks like:
-
- host curly {
- hardware ethernet 00:20:af:2f:f7:9d;
- fixed-address 192.168.192.3;
- #type fat;
- filename \"i386/boot/boot-3c509.2.4.18-6mdk.nbi\";
- }
-
- While you can use a pool of IP addresses, rather than setup a specific entry for
- a client machine, using a fixed address scheme facilitates using the functionality
- of client-specific configuration files that ClusterNFS provides.
-
- Note: The \"#type\" entry is only used by drakTermServ. Clients can either be \"thin\"
- or 'fat'. Thin clients run most software on the server via xdmcp, while fat clients run most
- software on the client machine. A special inittab, /etc/inittab\$\$IP=client_ip\$\$ is
- written for thin clients. System config files xdm-config, kdmrc, and gdm.conf are modified
- if thin clients are used, to enable xdmcp. Since there are security issues in using xdmcp,
- hosts.deny and hosts.allow are modified to limit access to the local subnet.
-
- Note: You must stop/start the server after adding or changing clients.
-
- - Maintain /etc/exports:
- Clusternfs allows export of the root filesystem to diskless clients. drakTermServ
- sets up the correct entry to allow anonymous access to the root filesystem from
- diskless clients.
-
- A typical exports entry for clusternfs is:
-
- / (ro,all_squash)
- /home SUBNET/MASK(rw,root_squash)
-
- With SUBNET/MASK being defined for your network.
-
- - Maintain /etc/shadow\$\$CLIENT\$\$:
- For users to be able to log into the system from a diskless client, their entry in
- /etc/shadow needs to be duplicated in /etc/shadow\$\$CLIENTS\$\$. drakTermServ helps
- in this respect by adding or removing system users from this file.
-
- - Per client /etc/X11XF86Config-4\$\$IP-ADDRESS\$\$:
- Through clusternfs, each diskless client can have it's own unique configuration files
- on the root filesystem of the server. In the future drakTermServ will help create these
- files.
-
- - Per client system configuration files:
- Through clusternfs, each diskless client can have it's own unique configuration files
- on the root filesystem of the server. In the future, drakTermServ can help create files
- such as /etc/modules.conf, /etc/sysconfig/mouse, /etc/sysconfig/keyboard on a per-client
- basis.
-
- - /etc/xinetd.d/tftp:
- drakTermServ will configure this file to work in conjunction with the images created by
- mkinitrd-net, and the entries in /etc/dhcpd.conf, to serve up the boot image to each
- diskless client.
-
- A typical tftp configuration file looks like:
-
- service tftp
- (
- disable = no
- socket_type = dgram
- protocol = udp
- wait = yes
- user = root
- server = /usr/sbin/in.tftpd
- server_args = -s /var/lib/tftpboot
- }
-
- The changes here from the default installation are changing the disable flag to
- 'no' and changing the directory path to /var/lib/tftpboot, where mkinitrd-net
- puts it's images.
-
- - Create etherboot floppies/CDs:
- The diskless client machines need either ROM images on the NIC, or a boot floppy
- or CD to initate the boot sequence. drakTermServ will help generate these images,
- based on the NIC in the client machine.
-
- A basic example of creating a boot floppy for a 3Com 3c509 manually:
-
- cat /usr/lib/etherboot/boot1a.bin \\
- /usr/lib/etherboot/lzrom/3c509.lzrom > /dev/fd0
-
-
-"));
-}
-
-sub make_boot {
- #- make a boot image on floppy or iso from etherboot images
- my $boot_box;
- my $rom_path = "/usr/lib/etherboot";
- my @nics = all("/usr/lib/etherboot/lzrom");
- my $list_nics = new Gtk2::List();
- my $nic;
-
- foreach (@nics) {
- my $t = $_;
- $list_nics->add(gtkshow(gtksignal_connect(new Gtk2::ListItem($t),
- select => sub { $nic = $t })));
- }
- $list_nics->set_selection_mode('single');
-
- gtkpack($status_box,
- $boot_box = gtkpack_(new Gtk2::VBox(0,10),
- 0, gtkadd(new Gtk2::HBox(0,10),
- new Gtk2::HBox(0,5),
- create_scrolled_window($list_nics),
- gtkadd(new Gtk2::VBox(1,10),
- new Gtk2::HBox(0,20),
- gtksignal_connect(new Gtk2::Button(N("Boot Floppy")), clicked =>
- sub { write_eb_image($nic, $rom_path, "floppy") }),
- gtksignal_connect(new Gtk2::Button(N("Boot ISO")), clicked =>
- sub { write_eb_image($nic, $rom_path, "iso") }),
- new Gtk2::HBox(0,20),
- ),
- new Gtk2::HBox(0,5),
- ),
- ),
- );
-
- $central_widget = \$boot_box;
- $boot_box->show_all();
-}
-
-sub make_nbi {
- my $nbi_box;
- my @kernels = grep { /vmlinuz/ } all("/boot");
- my $kernel;
- my $nic;
-
- #- just a static list for the moment
- #- method in mknbi-net is much better
- my @nics = ("3c509", "3c59x", "3c90x", "8139cp", "8139too", "acenic", "airo",
- "aironet4500_card", "bcm5700", "dgrs", "dl2k", "dmfe", "e100",
- "e1000", "eepro100", "epic100", "fealnx", "hamachi", "hp100",
- "hysdn", "natsemi", "natsemi_old", "ne", "ne2k-pci", "ns83820",
- "pcnet32", "prism2_pci", "prism2_plx", "rcpci", "sis900",
- "starfire", "sundance", "sungem", "sunhme", "tlan", "tulip-old",
- "via-rhine", "winbond-840", "xircom_cb", "xircom_tulip_cb", "yellowfin");
-
- #- kernel/module info in tree view
- my $model = Gtk2::TreeStore->new(Gtk2::GType->STRING);
- my $tree_kernels = Gtk2::TreeView->new_with_model($model);
- $tree_kernels->append_column(Gtk2::TreeViewColumn->new_with_attributes(undef, Gtk2::CellRendererText->new, 'text' => 0));
- $tree_kernels->set_headers_visible(0);
- $tree_kernels->get_selection->set_mode('single');
-
- foreach (@kernels) {
- my $t_kernel = Gtk2::TreeIter->new;
- $model->append($t_kernel, undef);
- $model->set($t_kernel, [ 0 => $_ ]);
- my $k_detail = Gtk2::TreeIter->new;
- foreach (@nics) {
- $model->append($k_detail, $t_kernel);
- $model->set($k_detail, [ 0 => $_ ]);
- }
- $k_detail->free;
- }
-
- $tree_kernels->get_selection->signal_connect(changed => sub {
- $kernel = '';
- $nic = '';
- my ($model, $iter) = $_[0]->get_selected;
- $model && $iter or return;
- my $value = $model->get($iter, 0);
- my $path = $model->get_path_str($iter);
- if ($path !~ /:/) {
- $kernel = $value;
- } else {
- my @elements = split(/:/, $path);
- $nic = $value;
- $kernel = $kernels[$elements[0]];
- }
- });
-
- # existing nbi images in list
- my $list_model = Gtk2::ListStore->new(Gtk2::GType->STRING);
- my $list_nbis = Gtk2::TreeView->new_with_model($list_model);
- $list_nbis->append_column(Gtk2::TreeViewColumn->new_with_attributes(undef, Gtk2::CellRendererText->new, 'text' => 0));
- $list_nbis->set_headers_visible(0);
- my @nbis = grep { /\.nbi/ } all("/var/lib/tftpboot");
- my $nbi;
- my $iter = Gtk2::TreeIter->new;
- my $nbi_iter;
-
- foreach (@nbis) {
- $list_model->append($iter);
- $list_model->set($iter, [ 0 => $_ ]);
- }
-
- $list_nbis->get_selection->signal_connect(changed => sub {
- my ($model, $iter) = $_[0]->get_selected;
- $model && $iter or return;
- $nbi = $model->get($iter, 0);
- $nbi_iter = $iter;
- });
-
- gtkpack($status_box,
- $nbi_box = gtkpack_(new Gtk2::VBox(1,10),
- 0, gtkadd(new Gtk2::HBox(0,10),
- create_scrolled_window($tree_kernels),
- gtkadd(new Gtk2::VBox(1,10),
- gtksignal_connect(new Gtk2::Button(N("Build Whole Kernel -->")), clicked =>
- sub { if ($kernel) {
- $in->ask_warn('', N("This will take a few minutes."));
- cursor_wait();
- system("/usr/bin/mknbi-set -k /boot/$kernel");
- $list_model->clear;
- @nbis = grep { /\.nbi/ } all("/var/lib/tftpboot");
- foreach (@nbis) {
- $list_model->append($iter);
- $list_model->set($iter, [ 0 => $_ ]);
- }
- cursor_norm();
- } else {
- $in->ask_warn('', N("No kernel selected!")) if !($kernel);
- }
- }),
- gtksignal_connect(new Gtk2::Button(N("Build Single NIC -->")), clicked =>
- sub { if ($nic) {
- system("/usr/bin/mknbi-set -k /boot/$kernel -r $nic");
- $list_model->clear;
- @nbis = grep { /\.nbi/ } all("/var/lib/tftpboot");
- foreach (@nbis) {
- $list_model->append($iter);
- $list_model->set($iter, [ 0 => $_ ]);
- }
- } else {
- $in->ask_warn('', N("No NIC selected!"));
- }
- }),
- gtksignal_connect(new Gtk2::Button(N("Build All Kernels -->")), clicked => sub {
- $in->ask_warn('', N("This will take a few minutes."));
- cursor_wait();
- system("/usr/bin/mknbi-set");
- $list_model->clear;
- @nbis = grep { /\.nbi/ } all("/var/lib/tftpboot");
- foreach (@nbis) {
- $list_model->append($iter);
- $list_model->set($iter, [ 0 => $_ ]);
- }
- cursor_norm();
- }),
- new Gtk2::HBox(1,1),
- gtksignal_connect(new Gtk2::Button(N("<-- Delete")), clicked =>
- sub { my $nbi = "/var/lib/tftpboot/" . $nbi;
- my $result = unlink($nbi) || warn("Can't delete $nbi...");
- if ($result eq 1) {
- $list_model->remove($nbi_iter);
- }
- }),
- gtksignal_connect(new Gtk2::Button(N("Delete All NBIs")), clicked =>
- sub { cursor_wait();
- foreach (grep { /\.nbi/ } all("/var/lib/tftpboot")) {
- my $nbi = "/var/lib/tftpboot/" . $_;
- unlink($nbi) || warn("Can't delete $nbi...");
- }
- $list_model->clear;
- cursor_norm();
- }),
- new Gtk2::HBox(1,1),
- ),
- create_scrolled_window($list_nbis),
- ),),
- );
-
- $central_widget = \$nbi_box;
- $nbi_box->show_all();
-}
-
-sub maintain_users {
- #- copy users from /etc/shadow to /etc/shadow$$CLIENT$$ to allow ts login
- my $user_box;
- my @sys_users = cat_("/etc/shadow");
- my @ts_users = cat_("/etc/shadow\$\$CLIENT\$\$");
-
- #- use /homes to filter system daemons
- my @homes = all("/home");
-
- my $list_model = Gtk2::ListStore->new(Gtk2::GType->STRING);
- my $list_sys_users = Gtk2::TreeView->new_with_model($list_model);
- $list_sys_users->append_column(Gtk2::TreeViewColumn->new_with_attributes(undef, Gtk2::CellRendererText->new, 'text' => 0));
- $list_sys_users->set_headers_visible(0);
-
- my $iter = Gtk2::TreeIter->new;
- my $sys_user;
-
- foreach (@sys_users) {
- my ($s_label) = split(/:/, $_, 2);
- if (grep(/$s_label/, @homes)) {
- $list_model->append($iter);
- $list_model->set($iter, [ 0 => $s_label ]);
- }
- }
- $iter->free;
-
- $list_sys_users->get_selection->signal_connect(changed => sub {
- my ($model, $iter) = $_[0]->get_selected;
- $model && $iter or return;
- $sys_user = $model->get($iter, 0);
- });
-
- $list_model = Gtk2::ListStore->new(Gtk2::GType->STRING);
- my $list_ts_users = Gtk2::TreeView->new_with_model($list_model);
- $list_ts_users->append_column(Gtk2::TreeViewColumn->new_with_attributes(undef, Gtk2::CellRendererText->new, 'text' => 0));
- $list_ts_users->set_headers_visible(0);
-
- $iter = Gtk2::TreeIter->new;
- my $ts_user;
-
- foreach (@ts_users) {
- my ($t_label) = split(/:/, $_, 2);
- my @system_entry = grep(/$t_label/, @sys_users);
- $t_label = $t_label . " !!!" if $_ ne $system_entry[0];
- $list_model->append($iter);
- $list_model->set($iter, [ 0 => $t_label ]);
- }
-
- $list_ts_users->get_selection->signal_connect(changed => sub {
- my ($model, $iter) = $_[0]->get_selected;
- $model && $iter or return;
- $ts_user = $model->get($iter, 0);
- });
-
- gtkpack($status_box,
- $user_box = gtkpack_(new Gtk2::VBox(0,10),
- 0, gtkadd(new Gtk2::Label(N("!!! Indicates the password in the system database is different than\n the one in the Terminal Server database.\nDelete/re-add the user to the Terminal Server to enable login."))),
- 0, gtkadd(new Gtk2::HBox(0,20),
- create_scrolled_window($list_sys_users),
- gtkadd(new Gtk2::VBox(1,10),
- new Gtk2::HBox(0,10),
- gtksignal_connect(new Gtk2::Button(N("Add User -->")), clicked =>
- sub { my $result = adduser(0, $sys_user);
- if ($result eq 0) {
- $list_model->append($iter);
- $list_model->set($iter, [ 0 => $sys_user ]);
- }
- }),
- gtksignal_connect(new Gtk2::Button(N("<-- Del User")), clicked =>
- sub { deluser(0, $ts_user);
- $list_model->remove($iter);
- }),
- new Gtk2::HBox(0,10),
- ),
- create_scrolled_window($list_ts_users),
- ),),
- );
-
- $central_widget = \$user_box;
- $user_box->show_all();
-}
-
-sub maintain_clients {
- #- add client machines to Terminal Server config
- my $client_box;
- my %clients = read_dhcpd_conf();
- my $client;
- my $citer;
-
- #- client info in tree view
- my $model = Gtk2::TreeStore->new(Gtk2::GType->STRING);
- my $tree_clients = Gtk2::TreeView->new_with_model($model);
- $tree_clients->append_column(Gtk2::TreeViewColumn->new_with_attributes(undef, Gtk2::CellRendererText->new, 'text' => 0));
- $tree_clients->set_headers_visible(0);
- $tree_clients->get_selection->set_mode('browse');
-
- foreach my $key (keys(%clients)) {
- my $t_client = Gtk2::TreeIter->new;
- $model->append($t_client, undef);
- $model->set($t_client, [ 0 => $key ]);
-
- my $c_detail = Gtk2::TreeIter->new;
-
- $model->append($c_detail, $t_client);
- $model->set($c_detail, [ 0 => $clients{$key}{hardware} ]);
-
- $model->append($c_detail, $t_client);
- $model->set($c_detail, [ 0 => $clients{$key}{address} ]);
-
- $model->append($c_detail, $t_client);
- $model->set($c_detail, [ 0 => N("type: %s", $clients{$key}{type}) ]);
-
- if ($clients{$key}{filename}) {
- $model->append($c_detail, $t_client);
- $model->set($c_detail, [ 0 => $clients{$key}{filename} ]);
- }
- }
-
- $tree_clients->get_selection->signal_connect(changed => sub {
- my ($model, $iter) = $_[0]->get_selected;
- $model && $iter or return;
- my $value = $model->get($iter, 0);
- my $path = $model->get_path_str($iter);
- if ($path !~ /:/) {
- $client = $value;
- $citer = $iter;
- } else {
- $client = '';
- }
- });
-
- #- entry boxes for client data entry
- my $label_host = new Gtk2::Label("Client Name:");
- $label_host->set_justify('left');
- my $entry_host = new Gtk2::Entry();
- my $label_mac = new Gtk2::Label("MAC Address:");
- $label_mac->set_justify('left');
- my $entry_mac = new Gtk2::Entry();
- my $label_ip = new Gtk2::Label("IP Address:");
- $label_ip->set_justify('left');
- my $entry_ip = new Gtk2::Entry();
- my $label_nbi = new Gtk2::Label("Kernel Netboot Image:");
- $label_nbi->set_justify('left');
- my $entry_nbi = new Gtk2::Combo();
-
- my @images = grep { /\.nbi/ } all("/var/lib/tftpboot/");
- my $have_nbis = @images;
- if ($have_nbis) {
- unshift(@images, "");
- $entry_nbi->set_popdown_strings(@images);
- } else {
- $in->ask_warn('', N("No net boot images created!"));
- make_nbi();
- return 1;
- }
-
- my $check_thin;
- my $check_allow_thin;
- my $is_thin = 0;
-
- gtkpack($status_box,
- $client_box = gtkpack_(new Gtk2::VBox(1,10),
- 0, gtkadd(new Gtk2::HBox(0,5),
- gtkadd(new Gtk2::VBox(0,5),
- gtkadd($label_host), gtkadd($entry_host),
- gtkadd($label_mac), gtkadd($entry_mac),
- gtkadd($label_ip), gtkadd($entry_ip),
- gtkadd($label_nbi), gtkadd($entry_nbi),
- ),
- gtkadd(new Gtk2::VBox(1,10),
- gtkadd(new Gtk2::HBox(0,1),
- gtksignal_connect($check_thin = new Gtk2::CheckButton(N("Thin Client")), clicked =>
- sub { invbool \$is_thin }),
- $check_allow_thin = new Gtk2::CheckButton(N("Allow Thin Clients")),
- ),
-# new Gtk2::HBox(1,1),
- gtksignal_connect(new Gtk2::Button(N("Add Client -->")), clicked =>
- sub { my $hostname = $entry_host->get_text();
- my $mac = $entry_mac->get_text();
- my $ip = $entry_ip->get_text();
- my $nbi = $entry_nbi->entry->get_text();
- if ($hostname && $mac && $ip) {
-
- my $result = addclient(0, $hostname, $mac, $ip, $nbi, $is_thin);
-
- if ($result eq 0) {
- my $t_client = Gtk2::TreeIter->new;
-
- $model->append($t_client, undef);
- $model->set($t_client, [ 0 => $hostname ]);
-
- my $c_det_hw = Gtk2::TreeIter->new;
- $model->append($c_det_hw, $t_client);
- $model->set($c_det_hw, [ 0 => $mac ]);
-
- my $c_det_ip = Gtk2::TreeIter->new;
- $model->append($c_det_ip, $t_client);
- $model->set($c_det_ip, [ 0 => $ip ]);
-
- my $client_type = "type: fat";
- $client_type = "type: thin" if $is_thin eq 1;
- my $c_det_type = Gtk2::TreeIter->new;
- $model->append($c_det_type, $t_client);
- $model->set($c_det_type, [ 0 => $client_type ]);
-
- if ($nbi) {
- my $c_det_nbi = Gtk2::TreeIter->new;
- $model->append($c_det_nbi, $t_client);
- $model->set($c_det_nbi, [ 0 => $nbi ]);
- }
- $check_thin->set_active(0);
- $is_thin = 0;
- }
- }
- }),
- gtksignal_connect(new Gtk2::Button(N("<-- Edit Client")), clicked =>
- sub { $entry_host->set_text($client);
- $entry_mac->set_text($clients{$client}{hardware});
- $entry_ip->set_text($clients{$client}{address});
- my $type = $clients{$client}{type};
- if ($type eq "thin") {
- $check_thin->set_active(1);
- } else {
- $check_thin->set_active(0);
- }
- $entry_nbi->entry->set_text($clients{$client}{filename});
- my $result = delclient(0, $client);
- if ($result eq 0) {
- $model->remove($citer);
- }
- }),
- gtksignal_connect(new Gtk2::Button(N("Delete Client")), clicked =>
- sub { my $result = delclient(0, $client);
- if ($result eq 0) {
- $model->remove($citer);
- }
- }),
- gtksignal_connect(new Gtk2::Button(N("dhcpd Config...")), clicked =>
- sub { ${$central_widget}->destroy(); dhcpd_config() }),
-# new Gtk2::HBox(1,1),
- ),
- create_scrolled_window($tree_clients),
- ),),
- );
-
- $check_allow_thin->set_active($thin_clients);
- $check_thin->set_sensitive($thin_clients);
- gtksignal_connect($check_allow_thin, clicked =>
- sub { invbool \$thin_clients;
- $check_thin->set_sensitive($thin_clients);
- # we need to change some system files to allow the thin clients
- # to access the server - enabling xdmcp and modify hosts.deny/hosts.allow for some security
- # we also need to set runlevel to 5 and restart the display manager
- if ($thin_clients eq 1) {
- `perl -pi -e 's/id:3:initdefault:/id:5:initdefault:/' /etc/inittab`;
- `perl -pi -e 's/\! DisplayManager.requestPort:/DisplayManager.requestPort:/' /etc/X11/xdm/xdm-config`;
- `perl -pi -e 's/Enable=false/Enable=true/' /usr/share/config/kdm/kdmrc`;
- # This file had 2 "Enable=" entries, one for xdmcp and one for debug
- change_gdm_xdmcp("true");
- log::explanations("Modified files /etc/inittab, /etc/X11/xdm/xdm-config, /usr/share/config/kdm/kdmrc, /etc/X11/gdm/gdm.conf");
- # just xdmcp in hosts.allow is enough for xdm & kdm, but gdm doesn't work - x11 doesn't help either
- update_hosts_allow("enable");
- } else {
- `perl -pi -e 's/id:5:initdefault:/id:3:initdefault:/' /etc/inittab`;
- `perl -pi -e 's/DisplayManager.requestPort:/\! DisplayManager.requestPort:/' /etc/X11/xdm/xdm-config`;
- `perl -pi -e 's/Enable=true/Enable=false/' /usr/share/config/kdm/kdmrc`;
- change_gdm_xdmcp("false");
- log::explanations("Modified files /etc/inittab, /etc/X11/xdm/xdm-config, /usr/share/config/kdm/kdmrc, /etc/X11/gdm/gdm.conf");
- update_hosts_allow("disable");
- }
- $in->ask_warn('', N("Need to restart the Display Manager for full changes to take effect. \n(service dm restart - at the console)"));
- }
- );
- $central_widget = \$client_box;
- $client_box->show_all();
-}
-
-sub dhcpd_config {
- #- do main dhcp server config
- my $dhcpd_box;
- my @ifvalues;
- my @resolve;
- my %netconfig;
- my @nservers;
-
- #- entry boxes for data entry
- my $box_subnet = new Gtk2::HBox(0,0);
- my $label_subnet = new Gtk2::Label(N("Subnet:"));
- $label_subnet->set_justify('right');
- my $entry_subnet = new Gtk2::Entry(20);
- $box_subnet->pack_end($entry_subnet, 0, 0, 10);
- $box_subnet->pack_end($label_subnet, 0, 0, 10);
-
- my $box_netmask = new Gtk2::HBox(0,0);
- my $label_netmask = new Gtk2::Label(N("Netmask:"));
- $label_netmask->set_justify('left');
- my $entry_netmask = new Gtk2::Entry(20);
- $box_netmask->pack_end($entry_netmask, 0, 0, 10);
- $box_netmask->pack_end($label_netmask, 0, 0, 10);
-
- my $box_routers = new Gtk2::HBox(0,0);
- my $label_routers = new Gtk2::Label(N("Routers:"));
- $label_routers->set_justify('left');
- my $entry_routers = new Gtk2::Entry(20);
- $box_routers->pack_end($entry_routers, 0, 0, 10);
- $box_routers->pack_end($label_routers, 0, 0, 10);
-
- my $box_subnet_mask = new Gtk2::HBox(0,0);
- my $label_subnet_mask = new Gtk2::Label(N("Subnet Mask:"));
- $label_subnet_mask->set_justify('left');
- my $entry_subnet_mask = new Gtk2::Entry();
- $box_subnet_mask->pack_end($entry_subnet_mask, 0, 0, 10);
- $box_subnet_mask->pack_end($label_subnet_mask, 0, 0, 10);
-
- my $box_broadcast = new Gtk2::HBox(0,0);
- my $label_broadcast = new Gtk2::Label(N("Broadcast Address:"));
- $label_broadcast->set_justify('left');
- my $entry_broadcast = new Gtk2::Entry(20);
- $box_broadcast->pack_end($entry_broadcast, 0, 0, 10);
- $box_broadcast->pack_end($label_broadcast, 0, 0, 10);
-
- my $box_domain = new Gtk2::HBox(0,0);
- my $label_domain = new Gtk2::Label(N("Domain Name:"));
- $label_domain->set_justify('left');
- my $entry_domain = new Gtk2::Entry(20);
- $box_domain->pack_end($entry_domain, 0, 0, 10);
- $box_domain->pack_end($label_domain, 0, 0, 10);
-
- my $box_name_servers = new Gtk2::HBox(0,0);
- my $box_name_servers_entry = new Gtk2::VBox(0,0);
- my $label_name_servers = new Gtk2::Label(N("Name Servers:"));
- $label_name_servers->set_justify('left');
- my $entry_name_server1 = new Gtk2::Entry();
- my $entry_name_server2 = new Gtk2::Entry();
- my $entry_name_server3 = new Gtk2::Entry();
- $box_name_servers_entry->pack_start($entry_name_server1, 0, 0, 0);
- $box_name_servers_entry->pack_start($entry_name_server2, 0, 0, 0);
- $box_name_servers_entry->pack_start($entry_name_server3, 0, 0, 0);
- $box_name_servers->pack_end($box_name_servers_entry, 0, 0, 10);
- $box_name_servers->pack_end($label_name_servers, 0, 0, 10);
-
- my $label_ip_range_start = new Gtk2::Label(N("IP Range Start:"));
- my $label_ip_range_end = new Gtk2::Label(N("IP Range End:"));
- my $entry_ip_range_start = new Gtk2::Entry(15);
- my $entry_ip_range_end = new Gtk2::Entry(15);
-
- #- grab some default entries from the running system
-
- if (-e "/etc/sysconfig/network") {
- %netconfig = getVarsFromSh("/etc/sysconfig/network");
- $entry_domain->set_text($netconfig{DOMAINNAME});
- }
-
- my $sys_netmask = get_mask_from_sys();
- $entry_netmask->set_text($sys_netmask);
- $entry_subnet_mask->set_text($sys_netmask);
-
- my $sys_broadcast = get_broadcast_from_sys();
- $entry_broadcast->set_text($sys_broadcast);
- my $sys_subnet = get_subnet_from_sys($sys_broadcast, $sys_netmask);
-
- $entry_subnet->set_text($sys_subnet);
-
- my @route = grep { /^0.0.0.0/ } `/sbin/route -n`;
- @ifvalues = split(/[ \t]+/, $route[0]);
- $entry_routers->set_text($ifvalues[1]);
-
- @resolve = cat_("/etc/resolv.conf");
- my $i = 1;
- chop(@resolve);
-
- foreach (@resolve) {
- @ifvalues = split / /;
- if ($ifvalues[0] =~ /nameserver/ && $i lt 4) {
- $nservers[$i++] = $ifvalues[1];
- }
- }
-
- $entry_name_server1->set_text($nservers[1]);
- $entry_name_server2->set_text($nservers[2]);
- $entry_name_server3->set_text($nservers[3]);
-
- gtkpack($status_box,
- $dhcpd_box = gtkpack_(new Gtk2::HBox(1,10),
- 0, gtkadd((new Gtk2::VBox),
- gtkadd($box_subnet),
- gtkadd($box_netmask),
- gtkadd($box_routers),
- gtkadd($box_subnet_mask),
- gtkadd($box_broadcast),
- gtkadd($box_domain),
- gtkadd($box_name_servers),
- ),
- 0, gtkadd(new Gtk2::VBox(0,0),
- new Gtk2::Label(N("dhcpd Server Configuration") . "\n\n" .
- N("Most of these values were extracted\nfrom your running system.\nYou can modify as needed.")),
- new Gtk2::HSeparator,
- gtkadd((new Gtk2::HBox),
- new Gtk2::Label(N("Dynamic IP Address Pool:")),
- ),
- gtkadd((new Gtk2::HBox(0,0)),
- gtkadd((new Gtk2::VBox),
- gtkadd($label_ip_range_start),
- gtkadd($entry_ip_range_start),
- ),
- gtkadd((new Gtk2::VBox),
- gtkadd($label_ip_range_end),
- gtkadd($entry_ip_range_end),
- ),
- ),
- gtkadd(new Gtk2::HBox),
- gtksignal_connect(new Gtk2::Button(N("Write Config")), clicked =>
- sub { write_dhcpd_config(
- $entry_subnet->get_text(),
- $entry_netmask->get_text(),
- $entry_routers->get_text(),
- $entry_subnet_mask->get_text(),
- $entry_broadcast->get_text(),
- $entry_domain->get_text(),
- $entry_name_server1->get_text(),
- $entry_name_server2->get_text(),
- $entry_name_server3->get_text(),
- $entry_ip_range_start->get_text(),
- $entry_ip_range_end->get_text(),
- ) }),
- new Gtk2::HBox(0,10),
- ),
- ),
- );
-
- $central_widget = \$dhcpd_box;
- $dhcpd_box->show_all();
-}
-
-sub get_mask_from_sys {
- my %netconfig;
- if (-e "/etc/sysconfig/network-scripts/ifcfg-eth0") {
- %netconfig = getVarsFromSh("/etc/sysconfig/network-scripts/ifcfg-eth0");
- $netconfig{NETMASK};
- }
-}
-
-sub get_subnet_from_sys {
- my ($sys_broadcast, $sys_netmask) = @_;
- my @subnet;
-
- my @netmask = split(/\./, $sys_netmask);
- my @broadcast = split(/\./, $sys_broadcast);
-
- foreach (0..3) {
- #- wasn't evaluating the & as expected
- my $val1 = $broadcast[$_] + 0;
- my $val2 = $netmask[$_] + 0;
- $subnet[$_] = $val1 & $val2;
- }
-
- join(".", @subnet);
-}
-
-sub get_broadcast_from_sys {
- my @ifconfig = grep { /inet/ } `/sbin/ifconfig eth0`;
- my @ifvalues = split(/[: \t]+/, $ifconfig[0]);
-
- $ifvalues[5];
-}
-
-sub get_ip_from_sys {
- my @ifconfig = grep { /inet/ } `/sbin/ifconfig eth0`;
- my @ifvalues = split(/[: \t]+/, $ifconfig[0]);
-
- $ifvalues[3];
-}
-
-sub write_dhcpd_config {
- my ($subnet, $netmask, $routers, $subnet_mask, $broadcast, $domain, $ns1, $ns2, $ns3, $pool_start, $pool_end) = @_;
-
- $nfs_subnet = $subnet;
- $nfs_mask = $subnet_mask;
-
- local *FHANDLE;
- open(FHANDLE, "> /etc/dhcpd.conf");
- print FHANDLE "#dhcpd.conf - generated by drakTermServ\n\n";
- print FHANDLE "ddns-update-style none;\n\n";
- print FHANDLE "# Long leases (48 hours)\ndefault-lease-time 172800;\nmax-lease-time 172800;\n\n";
- print FHANDLE "# Include Etherboot definitions and defaults\ninclude \"/etc/dhcpd.conf.etherboot.include\";\n\n";
- print FHANDLE "# Network-specific section\n\n";
-
- print FHANDLE "subnet $subnet netmask $netmask {\n";
- print FHANDLE "\toption routers $routers;\n" if $routers;
- print FHANDLE "\toption subnet-mask $subnet_mask;\n" if $subnet_mask;
- print FHANDLE "\toption broadcast-address $broadcast;\n" if $broadcast;
- print FHANDLE "\toption domain-name \"$domain\";\n" if $domain;
-
- my $pool_string = "\trange dynamic-bootp " . $pool_start . " " . $pool_end . ";\n" if $pool_start && $pool_end;
- print FHANDLE $pool_string if $pool_string;
-
- my $ns_string = "\toption domain-name-servers " . $ns1 if $ns1;
- $ns_string = $ns_string . ", " . $ns2 if $ns2;
- $ns_string = $ns_string . ", " . $ns3 if $ns3;
- $ns_string = $ns_string . ";\n" if $ns_string;
- print FHANDLE $ns_string if $ns_string;
-
- print FHANDLE "}\n\n";
-
- print FHANDLE "# Include client machine configurations\ninclude \"/etc/dhcpd.conf.etherboot.clients\";\n";
- close FHANDLE
-}
-
-sub write_eb_image {
- #- write a bootable etherboot CD image or floppy
- my ($nic, $rom_path, $type) = @_;
- if ($type eq 'floppy') {
- my $in = interactive->vnew;
- if (-e "/dev/fd0") {
- my $result = $in->ask_okcancel(N("Please insert floppy disk:"));
- return if !($result);
- $result = system("cat $rom_path/boot1a.bin $rom_path/lzrom/$nic > /dev/fd0") if $result;
- if ($result) {
- $in->ask_warn('', N("Couldn't access the floppy!"))
- } else {
- $in->ask_warn('', N("Floppy can be removed now"))
- }
- } else {
- $in->ask_warn('', N("No floppy drive available!"));
- }
- } else {
- mkdir_p("/tmp/eb");
- system("cat $rom_path/boot1a.bin $rom_path/lzrom/$nic > /tmp/eb/eb.img");
- system("dd if=/dev/zero of=/tmp/eb/eb.img bs=512 seek=72 count=2808");
- system("mkisofs -b eb.img -o /tmp/$nic.iso /tmp/eb");
- rm_rf("/tmp/eb");
- if (-e "/tmp/$nic.iso") {
- $in->ask_warn('', N("Etherboot ISO image is %s", "/tmp/$nic.iso"))
- } else {
- $in->ask_warn('', N("Something went wrong! - Is mkisofs installed?"))
- }
- }
-}
-
-sub enable_ts {
- #- setup default config files for terminal server
-
- my $cmd_line = @_;
-
- @buff = ();
- $buff[0] = "Enabling Terminal Server...\n\n";
- $buff[1] = "\tChecking default /etc/dhcpd.conf...\n";
- my @my_conf = cat_("/etc/dhcpd.conf");
- if ($my_conf[0] !~ /drakTermServ/) {
- if ($cmd_line eq 1) {
- print("No /etc/dhcpd.conf built yet - use GUI to create!!\n");
- return;
- } else {
- $in->ask_warn('', N("Need to create /etc/dhcpd.conf first!"));
- #$central_widget->destroy;
- dhcpd_config();
- return;
- }
- }
- my $buff_index = toggle_chkconfig("on", "dhcpd", 2);
- $buff[$buff_index] = "\tSetting up default /etc/exports...\n";
- cp_af("/etc/exports", "/etc/exports.mdkTS") if -e "/etc/exports";
- local *FHANDLE;
- open(FHANDLE, "> /etc/exports");
- print FHANDLE "#/etc/exports - generated by drakTermServ\n\n";
- print FHANDLE "/\t(ro,all_squash)\n";
- if ($nfs_subnet eq '') {
- $nfs_subnet = get_subnet_from_sys();
- $nfs_mask = get_mask_from_sys();
- my $sys_broadcast = get_broadcast_from_sys();
- $nfs_subnet = get_subnet_from_sys($sys_broadcast, $nfs_mask);
-
- }
- print FHANDLE "/home\t$nfs_subnet/$nfs_mask(rw,root_squash)\n";
- close FHANDLE;
- $buff_index = toggle_chkconfig("on", "clusternfs", $buff_index+1);
- $buff_index = toggle_chkconfig("on", "tftp", $buff_index);
- $buff_index = service_change("xinetd", "restart", $buff_index);
- $buff[$buff_index] = "\n\tDone!";
-
- if ($cmd_line == 1) {
- print "@buff\n";
- return;
- }
-
- show_status(@buff);
-}
-
-sub disable_ts {
- #- restore pre-terminal server configs
- my $cmd_line = @_;
-
- @buff = ();
- $buff[0] = "Disabling Terminal Server...\n\n";
- $buff[1] = "\tRestoring original /etc/dhcpd.conf...\n";
- cp_af("/etc/dhcpd.conf.mdkTS", "/etc/dhcpd.conf") if -e "/etc/dhcpd.conf.mdkTS";
- my $buff_index = toggle_chkconfig("off", "dhcpd", 2);
- $buff[$buff_index] = "\tRestoring default /etc/exports...\n";
- cp_af("/etc/exports.mdkTS", "/etc/exports") if -e "/etc/exports.mdkTS";
- $buff_index = toggle_chkconfig("off", "clusternfs", $buff_index+1);
- $buff_index = toggle_chkconfig("off", "tftp", $buff_index);
- $buff_index = service_change("xinetd", "restart", $buff_index);
- $buff[$buff_index] = "\n\tDone!";
-
- if ($cmd_line == 1) {
- print "@buff\n";
- return;
- }
-
- show_status(@buff);
-}
-
-sub toggle_chkconfig {
- #- change service config
- my ($state, $service, $buff_index) = @_;
- system("/sbin/chkconfig $service $state");
- $buff[$buff_index] = "\tTurning $service $state...\n";
- $buff_index++;
- $buff_index;
-}
-
-sub service_change {
- my ($service, $command, $buff_index) = @_;
- system("BOOTUP=serial /sbin/service $service $command > /tmp/drakTSservice.status 2>&1");
- local *STATUS;
- open(STATUS, "/tmp/drakTSservice.status");
- local $_;
- while (<STATUS>) {
- $buff[$buff_index] = "\t$_";
- $buff_index++;
- }
- close STATUS;
- unlink "/tmp/drakTSservice.status" or warn("Can't delete /tmp/drakTSservice.status\n");
- $buff_index;
-}
-
-sub start_ts {
- #- start the terminal server
- my $cmd_line = @_;
-
- @buff = ();
- $buff[0] = "Starting Terminal Server...\n\n";
- my $buff_index = service_change("dhcpd", "start", 2);
- $buff_index = service_change("clusternfs", "start", $buff_index);
- $buff[$buff_index] = "\n\tDone!";
-
- if ($cmd_line == 1) {
- print "@buff\n";
- return;
- }
-
- show_status(@buff);
-}
-
-sub stop_ts {
- #- stop the terminal server
- my $cmd_line = @_;
-
- @buff = ();
- $buff[0] = "Stopping Terminal Server...\n\n";
- my $buff_index = service_change("dhcpd", "stop", 2);
- $buff_index = service_change("clusternfs", "stop", $buff_index);
- $buff[$buff_index] = "\n\tDone!";
-
- if ($cmd_line == 1) {
- print "@buff\n";
- return;
- }
-
- show_status(@buff);
-
-}
-
-sub show_status {
- text_view("@buff");
-}
-
-sub adduser {
- my ($cmd_line, $username) = @_;
- my @active_users = cat_("/etc/shadow");
- my @ts_users = cat_("/etc/shadow\$\$CLIENT\$\$");
- my $is_user = grep { /$username/ } @active_users;
- my $add_fail = 0;
- my $in_already;
-
- if ($is_user) {
- my @shadow_entry = grep { /$username/ } @active_users;
- my $is_ts_user = grep { /$username/ } @ts_users;
- if ($is_ts_user) {
- my @ts_shadow = grep { /$username/ } @ts_users;
- if ($shadow_entry[0] eq $ts_shadow[0]) {
- $in_already = 1;
- } else {
- #in but password changed
- print "$username passwd bad in Terminal Server - rewriting...\n";
- deluser($cmd_line, $username);
- adduser($cmd_line, $username);
- }
- } else {
- # new ts user
- local *FHANDLE;
- open(FHANDLE, ">> /etc/shadow\$\$CLIENT\$\$");
- print FHANDLE $shadow_entry[0] or $add_fail = 1;
- close FHANDLE;
- $in_already = 0;
- }
- }
-
- if ($cmd_line == 1) {
- print "$username is not a user..\n" if !($is_user);
- print "$username is already a Terminal Server user\n" if $in_already;
- if ($add_fail == 1 || $in_already || !$is_user) {
- print "Addition of $username to Terminal Server failed!\n";
- } else {
- print "$username added to Terminal Server\n";
- }
- return;
- } else {
- $in_already;
- }
-}
-
-sub deluser {
- # del a user from the shadow$$CLIENT$$ file
- my ($cmd_line, $username) = @_;
- my $i;
- my $user_deleted;
-
- my @ts_users = cat_("/etc/shadow\$\$CLIENT\$\$");
- my $is_ts_user = grep { /$username/ } @ts_users;
-
- if ($is_ts_user) {
- $i = 0;
- foreach my $user (@ts_users) {
- if ($user =~ /$username/) {
- splice(@ts_users, $i, 1);
- $user_deleted = 1;
- last;
- }
- $i++;
- }
- local *FHANDLE;
- open(FHANDLE, "> /etc/shadow\$\$CLIENT\$\$");
- foreach my $user (@ts_users) {
- print FHANDLE $user;
- }
- close FHANDLE;
- }
-
- if ($cmd_line == 1) {
- if ($user_deleted) {
- print "Deleted $username...\n";
- } else {
- print "$username not found...\n";
- }
- return;
- }
-}
-
-sub addclient {
- #- add a new client entry after checking for dups
- my ($cmd_line, $hostname, $mac, $ip, $nbi, $is_thin) = @_;
-
- my $host_in_use = 0;
- my $mac_in_use = 0;
- my $ip_in_use = 0;
-
- my %ts_clients = read_dhcpd_conf();
-
- foreach my $client (keys(%ts_clients)) {
- $host_in_use = 1 if $hostname eq $client;
- $mac_in_use = 1 if $mac eq $ts_clients{$client}{hardware};
- $ip_in_use = 1 if $ip eq $ts_clients{$client}{address};
- }
-
- if ($cmd_line == 1) {
- print "$hostname already in use\n" if $host_in_use;
- print "$mac already in use\n" if $mac_in_use;
- print "$ip already in use\n" if $ip_in_use;
- if ($host_in_use || $mac_in_use || $ip_in_use) {
- return;
- }
- }
-
- if (!$host_in_use && !$mac_in_use && !$ip_in_use) {
- $ts_clients{$hostname}{hardware} = $mac;
- $ts_clients{$hostname}{address} = $ip;
- if ($is_thin eq 1) {
- $ts_clients{$hostname}{type} = "thin";
- } else {
- $ts_clients{$hostname}{type} = "fat";
- }
- $ts_clients{$hostname}{filename} = $nbi;
-
- my $clients = "/etc/dhcpd.conf.etherboot.clients";
- local *CLIENT;
- open(CLIENT, ">> $clients") || warn("Can't open $clients!");
- my $client_entry = format_client_entry($hostname, %ts_clients);
- print CLIENT $client_entry;
- close CLIENT;
- 0;
- }
-}
-
-sub delclient {
- #- find a client and delete the entry in dhcpd.conf
- my ($cmd_line, $hostname) = @_;
- my $host_found;
-
- my %ts_clients = read_dhcpd_conf();
-
- foreach my $client (keys(%ts_clients)) {
- if ($hostname eq $client) {
- $host_found = 1;
- delete $ts_clients{$client};
- write_dhcpd_conf(%ts_clients);
- return 0;
- }
- }
-
- if ($cmd_line == 1) {
- print "$hostname not found...\n" unless $host_found;
- return;
- }
-}
-
-sub change_gdm_xdmcp {
- my ($enable) = @_;
- my @conf_data = cat_("/etc/X11/gdm/gdm.conf");
- for (my $i = 0; $i < @conf_data; $i++) {
- $conf_data[$i] =~ s/^Enable\=false/Enable\=true/ if $enable eq "true";
- $conf_data[$i] =~ s/^Enable\=true/Enable\=false/ if $enable eq "false";
- # bail here so we don't alter the debug setting
- if ($conf_data[$i] eq "[debug]\n") {
- output("/etc/X11/gdm/gdm.conf", @conf_data);
- last;
- }
- }
-}
-
-sub update_hosts_allow {
- my ($mode) = @_;
- my $ip = get_ip_from_sys();
- my @values = split(/\./, $ip);
- my $subnet = $values[0] . "." . $values[1] . "." . $values[2] . ".";
- my $i;
- if ($mode eq "enable") {
- my $has_all = `grep ALL /etc/hosts.allow`;
- if ($has_all) {
- $in->ask_warn('', N("/etc/hosts.allow and /etc/hosts.deny already configured - not changed"));
- return;
- }
- if (!$has_all) {
- log::explanations("Modified file /etc/hosts.allow");
- append_to_file("/etc/hosts.allow", "ALL:\t$subnet\n");
- }
- $has_all = `grep ALL /etc/hosts.deny`;
- if (!$has_all) {
- log::explanations("Modified file /etc/hosts.deny");
- append_to_file("/etc/hosts.deny", "ALL:\tALL\n");
- }
- }
- if ($mode eq "disable") {
- my @allow = cat_("/etc/hosts.allow");
- for ($i = 0; $i < @allow; $i++) {
- if ($allow[$i] =~ /^ALL:\t$subnet/) {
- splice(@allow, $i, 1);
- log::explanations("Modified file /etc/hosts.allow");
- output("/etc/hosts.allow", @allow);
- last;
- }
- }
- my @deny = cat_("/etc/hosts.deny");
- for ($i = 0; $i < @deny; $i++) {
- if ($deny[$i] =~ /^ALL:\tALL/) {
- splice(@deny, $i, 1);
- log::explanations("Modified file /etc/hosts.deny");
- output("/etc/hosts.deny", @deny);
- last;
- }
- }
- }
-}
-
-sub format_client_entry {
- #- create a client entry, in proper format
- my ($client, %ts_clients) = @_;
-
- my $entry = "host $client {\n";
- $entry .= "\thardware ethernet\t$ts_clients{$client}{hardware};\n";
- $entry .= "\tfixed-address\t\t$ts_clients{$client}{address};\n";
- $entry .= "\t#type\t\t\t$ts_clients{$client}{type};\n" if $ts_clients{$client}{type};
- $entry .= "\tfilename\t\t\"$ts_clients{$client}{filename}\";\n" if $ts_clients{$client}{filename};
- $entry .= "}\n";
- write_thin_inittab($ts_clients{$client}{address}) if $ts_clients{$client}{type} eq "thin";
- $entry
-}
-
-sub write_dhcpd_conf {
- my %ts_clients = @_;
- my $clients = "/etc/dhcpd.conf.etherboot.clients";
-
- local *CLIENT;
- open(CLIENT, "> $clients") || warn("Can't open $clients!");
- foreach my $key (keys(%ts_clients)) {
- my $client_entry = format_client_entry($key, %ts_clients);
- print CLIENT $client_entry;
- }
- close CLIENT
-}
-
-sub read_dhcpd_conf {
- my $clients = "/etc/dhcpd.conf.etherboot.clients";
- my %ts_clients;
- my $hostname;
-
- #- read and parse current client entries
- local *CLIENTS;
- open(CLIENTS, $clients) || warn("Can't open $clients\n");
- while (<CLIENTS>) {
- my ($name, $val, $val2) = split ' ';
- $val = $val2 if $name =~ /hardware/;
- $val =~ s/[;"]//g;
- if ($name !~ /}/) {
- if ($name =~ /host/) {
- $hostname = $val;
- } else {
- $name = "address" if $name =~ /fixed-address/;
- $name = "type" if $name =~ /#type/;
- $ts_clients{$hostname}{$name} = $val;
- }
- }
- }
- close CLIENTS;
- %ts_clients;
-}
diff --git a/perl-install/standalone/drakautoinst b/perl-install/standalone/drakautoinst
deleted file mode 100755
index 789f57d3c..000000000
--- a/perl-install/standalone/drakautoinst
+++ /dev/null
@@ -1,354 +0,0 @@
-#!/usr/bin/perl
-
-#
-# Guillaume Cottenceau (gc@mandrakesoft.com)
-#
-# Copyright 2001-2002 MandrakeSoft
-#
-# This software may be freely redistributed under the terms of the GNU
-# public license.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-#
-
-use lib qw(/usr/lib/libDrakX);
-
-use standalone; #- warning, standalone must be loaded very first, for 'explanations'
-
-use common;
-use interactive;
-use devices;
-use detect_devices;
-use steps;
-use commands;
-use fs;
-use Data::Dumper;
-
-
-local $_ = join '', @ARGV;
-
-$::direct = /-direct/;
-
-my $in = 'interactive'->vnew('su', 'default');
-
-my $imagefile = "/root/drakx/replay_install.img";
--f $imagefile or $in->ask_warn(N("Error!"),
- N("I can't find needed image file `%s'.", $imagefile), 1), quit_global($in, 0);
-
-$::direct or $in->ask_okcancel(N("Auto Install Configurator"),
-N("You are about to configure an Auto Install floppy. This feature is somewhat dangerous and must be used circumspectly.
-
-With that feature, you will be able to replay the installation you've performed on this computer, being interactively prompted for some steps, in order to change their values.
-
-For maximum safety, the partitioning and formatting will never be performed automatically, whatever you chose during the install of this computer.
-
-Do you want to continue?"), 1) or quit_global($in, 0);
-
-
-my @manual_steps = qw(doPartitionDisks formatPartitions);
-my @all_steps;
-my @choices;
-
-my $st = \%steps::installSteps;
-
-for (my $f = $st->{first}; $f; $f = $st->{$f}{next}) {
- next if member($f, @manual_steps);
- my $def_choice = 'replay';
- push @choices, { label => translate($st->{$f}{text}), val => \$def_choice, list => [ N("replay"), N("manual") ] };
- push @all_steps, [ $f, \$def_choice ];
-}
-
-$in->ask_from(N("Automatic Steps Configuration"),
- N("Please choose for each step whether it will replay like your install, or it will be manual"),
- \@choices
- ) or quit_global($in, 0);
-
-${$_->[1]} eq N("manual") and push @manual_steps, $_->[0] foreach @all_steps;
-
-my $mountdir = "/root/tmp/drakautoinst-mountdir"; -d $mountdir or mkdir $mountdir, 0755;
-my $floppy = detect_devices::floppy();
-my $dev = devices::make($floppy);
-$in->ask_okcancel('', N("Insert a blank floppy in drive %s", $floppy), 1) or quit_global($in, 0);
-{
- log::explanations(N("Creating auto install floppy"));
- my $w = $in->wait_message('', N("Creating auto install floppy"));
- commands::dd("if=$imagefile", "of=$dev", "bs=1440", "count=1024");
- common::sync();
-}
-fs::mount($dev, $mountdir, 'vfat', 0);
-my $cfgfile = "$mountdir/auto_inst.cfg";
-eval(cat_($cfgfile));
-my $o_old = $o;
-my %struct_gui;
-
-if (!$::isEmbedded && $in->isa('interactive::gtk')) {
- require ugtk2;
- ugtk2->import(qw(:helpers :wrappers));
-
- my %tree;
- $struct_gui{$_} = 'General' foreach qw(lang isUpgrade autoExitInstall timezone default_packages mkbootdisk);
- $struct_gui{$_} = 'Security' foreach qw(crypto security);
- $struct_gui{$_} = 'Harddrive' foreach qw(partitions manualFstab useSupermount partitioning);
- $struct_gui{$_} = 'Network' foreach qw(intf netc netcnx);
- $struct_gui{$_} = 'Users' foreach qw(superuser users authentication);
- $struct_gui{$_} = 'Hardware' foreach qw(keyboard mouse X printer wacom nomouseprobe);
-
- %pixmap = ( lang => 'language',
- isUpgrade => '',
- security => 'security',
- autoExitInstall => '',
- timezone => '',
- default_packages => '',
- partitions => 'harddrive',
- manualFstab => 'partition',
- useSupermount => '',
- partitioning => 'partition',
- intf => 'network',
- netc => 'network',
- netcnx => 'network',
- superuser => 'user',
- users => 'user',
- authentication => '',
- keyboard => 'keyboard',
- mouse => 'mouse',
- X => 'X',
- printer => 'printer',
- wacom => '',
- );
-
- member($_, keys %struct_gui) and push @{$tree{$struct_gui{$_}}}, [ $_ , $pixmap{$_}, h2widget($o->{$_}, "\$o->\{$_\}") ] foreach keys %$o;
-
- my $W = ugtk2->new('$o edition');
- my @box_to_hide;
- my $nb_pages=0;
- my $notebook = new Gtk2::Notebook;
- $notebook->set_show_border(0);
- $notebook->set_show_tabs(0);
- $notebook->append_page(gtkpack_(gtkset_border_width(new Gtk2::VBox(0,0), 10),
- 1, new Gtk2::VBox(0,0),
- 0, gtkpack_(new Gtk2::HBox(0,0),
- 1, new Gtk2::VBox(0,0),
- 0, gtkadd(gtkset_shadow_type(new Gtk2::Frame, 'etched-in'),
- gtkcreate_img('mdk_logo')),
- 1, new Gtk2::VBox(0,0),
- ),
- 0, N("\nWelcome.\n\nThe parameters of the auto-install are available in the sections on the left"),
- 1, new Gtk2::VBox(0,0),
- ), undef);
- $notebook->show_all;
- $notebook->set_page(0);
-
- gtkadd($W->{window},
- gtkpack_(new Gtk2::VBox(0,5),
- 1, gtkpack_(new Gtk2::HBox(0,0),
- 0, gtkadd(gtkset_size_request(gtkset_shadow_type(new Gtk2::Frame, 'in'), 130, 470),
- gtkpack_(new Gtk2::VBox(0,0),
- map {
- my $box = new Gtk2::VBox(0,0);
- push @box_to_hide, $box;
- $box->{vis} = 0;
- my @button_to_hide;
- 0, gtksignal_connect(new Gtk2::Button($_), clicked => sub {
- if ($box->{vis}) { $box->hide(); $box->{vis} = 0; $notebook->set_page(0) }
- else {
- $_->hide, $_->{vis}=0 foreach @box_to_hide;
- $box->show; $box->{vis} = 1;
- $box->{active_function} and $box->{active_function}->();
- }
- }), 1, gtkpack__($box,
- map {
- my $button = gtkset_relief(new Gtk2::ToggleButton(), 'none');
- push @button_to_hide, $button;
- my $gru = $_->[0];
- $notebook->append_page(gtkshow($_->[2]), undef);
- $nb_pages++;
- my $local_page = $nb_pages;
- my $function = sub { $notebook->set_page($local_page) };
- gtksignal_connect($button, toggled => sub {
- $button->get_active() and $function->()
- });
- my $b;
- if ($_->[1] ne "") { $b = gtkcreate_img($_->[1]) } else { $b = () };
- gtksignal_connect(gtkadd($button,
- gtkpack__(new Gtk2::VBox(0,3),
- $b,
- translate($_->[0]),
- )
- ), released => sub {
- $button->get_active() or $button->set_active(1),return;
- $_->set_active(0) foreach @button_to_hide;
- $button->set_active(1);
- $box->{active_function} = $function;
- $function->();
- })
- } @{$tree{$_}}
- )
- } keys(%tree)
- )
- ),
- 1, $notebook,
- ),
- 0, new Gtk2::HSeparator,
- 0, gtkadd(gtkset_border_width(gtkset_layout(new Gtk2::HButtonBox, 'end'), 5),
- gtksignal_connect(new Gtk2::Button(N("Accept")), clicked => sub { Gtk2->main_quit }),
- gtksignal_connect(new Gtk2::Button(N("Cancel")), clicked => sub { $o = $o_old; Gtk2->main_quit; quit_global($in, 0) }),
- )
- )
- );
- $_->hide foreach @box_to_hide;
-# $W->{window}->show_all;
-# gtkadd($W->{window},
-# gtkpack_($W->create_box_with_title(N("Edit variables")),
-# 1, my $notebook = create_notebook( map { $_, h2widget($o->{$_}, "\$o->\{$_\}") } keys %$o ),
-# 0, gtkpack(gtkset_border_width(new Gtk2::HBox(0,0),5), $W->create_okcancel),
-# ),
-# );
-# $notebook->set_tab_pos('left');
-# $::isEmbedded and gtkflush();
- $W->main;
-# $W->destroy();
-}
-
-$o->{interactiveSteps} = \@manual_steps;
-
-my $str = join('',
-"#!/usr/bin/perl -cw
-#
-# Special file generated by ``drakautoinst''.
-#
-# You should check the syntax of this file before using it in an auto-install.
-# You can do this with 'perl -cw auto_inst.cfg.pl' or by executing this file
-# (note the '#!/usr/bin/perl -cw' on the first line).
-",
- Data::Dumper->Dump([$o], ['$o']), "\0");
-$str =~ s/ {8}/\t/g; #- replace all 8 space char by only one tabulation, this reduces file size so much :-)
-output($cfgfile, $str);
-
-fs::umount($mountdir);
-
-$in->ask_okcancel(N("Congratulations!"),
-N("The floppy has been successfully generated.
-You may now replay your installation."));
-
-quit_global($in, 0);
-
-
-sub quit_global {
- my ($in, $exitcode) = @_;
- $in->exit($exitcode);
-}
-
-
-
-sub h2widget {
- my ($k, $label) = @_;
- my $w;
- if (ref($k) =~ /HASH/) {
- my $vb;
- my @widget_list;
- my $i = -1;
- my @list_keys = keys(%{$k});
- if (ref(${$k}{$list_keys[0]}) =~ /HASH/) {
- $i++;
- my ($button_add, $button_remove);
- $w = gtkpack_(new Gtk2::VBox(0,0),
- 1, create_scrolled_window(gtkpack__($vb = new Gtk2::VBox(0,10),
- $widget_list[$i] = create_packtable({ col_spacings => 10, row_spacings => 3 },
- map {
- my $e;
- $e = h2widget(${$k}{$_}, "$label\{$_\}");
- [ "$_ : ", $e ] } @list_keys
- ),
- )
- ),
- control_buttons(${$k}{$list_keys[0]},
- sub { my ($vb, $widget_list2, $ref_local_k, $i) = @_;
- my @widget_list = @{$widget_list2};
- my $field = $in->ask_from_entry(N("Auto Install"), ("Enter the name of the new field you want to add")) or return undef;
- $field eq '' and return undef;
- gtkpack__($vb,
- $widget_list[$i] = create_packtable({ col_spacings => 10, row_spacings => 3 },
- [ "$field : ", h2widget($ref_local_k, "$label\{$field\}") ])
- );
- @{$widget_list2} = @widget_list;
- },
- $vb, \$i, \@widget_list)
- );
- } else {
- $w = create_packtable({ col_spacings => 10, row_spacings => 3 },
- map { create_entry_element(${$k}{$_}, "$label\{$_\}", $_) } @list_keys
- )
- }
- } elsif (ref($k) =~ /ARRAY/) {
- my $vb;
- my @widget_list;
- my $i = -1;
- $w = gtkpack_(new Gtk2::VBox(0,0),
- 1, create_scrolled_window(
- gtkpack__($vb = new Gtk2::VBox(0,5),
- map { $i++; $widget_list[$i] = h2widget($_, "$label\[$i\]") } @{$k},
- )
- ),
- control_buttons(@{$k}[0],
- sub { my ($vb, $widget_list2, $ref_local_k, $i) = @_;
- my @widget_list = @{$widget_list2};
- gtkpack__($vb, $widget_list[$i] = h2widget($ref_local_k, "$label\[$i\]"));
- @{$widget_list2} = @widget_list;
- },
- $vb, \$i, \@widget_list)
- );
- } else {
- $label =~ /\$o->\{(.+)\}/;
- $w = create_packtable({ col_spacings => 10, row_spacings => 3 },
- create_entry_element($k, $label, $1))
- }
- return $w;
-}
-
-
-sub create_entry_element {
- my ($text, $value, $label) = @_;
- my $e;
- if (ref $text =~ /HASH/) {
- return ([ "$label : ", h2widget($text, $label) ]);
- } elsif (ref $text =~ /ARRAY/) {
- return ([ "$label : ", h2widget($text, $label) ]);
- } else {
- $e = new Gtk2::Entry;
- $e->{value} = $value;
- my $tag = Gtk2->timeout_add(1000, sub { $e->set_text($text); 0 });
- gtksignal_connect($e, changed => sub {
- my $exe = $e->{value} . "='" . $e->get_text() . "'";
- print "EXEC : $exe\n ";
- eval $exe;
- });
- }
- [ $label ? "$label : " : "" , $e ]
-}
-
-sub control_buttons {
- my ($ref_local_k, $local_gui, $vb, $j, $widget_list2) = @_;
- my @widget_list = @{$widget_list2};
- my $i = ${$j};
- ref($ref_local_k) =~ /HASH/ or return();
- my (%local_k) = %{$ref_local_k};
- my ($button_add, $button_remove);
- 0, gtkadd(gtkset_border_width(gtkset_layout(new Gtk2::HButtonBox, 'spread'), 5),
- gtksignal_connect($button_add = new Gtk2::Button(N("Add an item")), clicked => sub {
- $local_k{$_} = undef foreach keys %local_k;
- $i++;
- $local_gui->($vb, \@widget_list, \%local_k, $i) or $i--, return;
- $i >= 0 and $button_remove->set_sensitive(1);
- }
- ),
- gtksignal_connect($button_remove = new Gtk2::Button(N("Remove the last item")), clicked => sub {
- $i >= 0 or return;
- $widget_list[$i]->destroy();
- $i--;
- $i >= 0 or $button_remove->set_sensitive(0);
- }
- )
- )
-}
diff --git a/perl-install/standalone/drakbackup b/perl-install/standalone/drakbackup
deleted file mode 100755
index 24a3eba35..000000000
--- a/perl-install/standalone/drakbackup
+++ /dev/null
@@ -1,4817 +0,0 @@
-#!/usr/bin/perl
-#
-# Copyright (C) 2001-2002 MandrakeSoft by Sebastien DUPONT <dupont_s@epita.fr>
-# Updated 2002 by Stew Benedict <sbenedict@mandrakesoft.com>
-# Redistribution of this file is permitted under the terms of the GNU
-# Public License (GPL)
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-#________________________________________________________________
-#
-# Description:
-#
-# Drakbackup is used to backup your system.
-# During the configuration you can select
-# - System files,
-# - Users files,
-# - Other files.
-# or All your system ... and Other (like windows Partitions)
-#
-# Drakbackup allows you to backup your system on:
-# - Harddrive.
-# - NFS.
-# - CDROM (CDRW), DVDROM (with autoboot, rescue and autoinstall.).
-# - FTP.
-# - Rsync.
-# - Webdav.
-# - Tape.
-#
-# Drakbackup allows you to Restore your system on
-# choosen directory.
-#
-# Per default all backup will be stored on your
-# /var/lib/drakbackup directory
-#
-# Configuration file:
-# /etc/drakconf/drakbackup/drakbackup.conf
-#
-#________________________________________________________________
-#
-# Backup files formats:
-#
-# no incremental backup:
-# backup_sys_date_hour.tar.*
-# backup_user_toto_date_hour.tar.*
-# backup_other_date_hour.tar.*
-#
-# first incremental backup: (if backup_base* does not exist)
-#
-# backup_base_sys_date_hour.tar.*
-# backup_base_user_toto_date_hour.tar.*
-# backup_base_other_date_hour.tar.*
-#
-# other incremental backup: (if backup_base* already exist)
-#
-# backup_incr_sys_date_hour.tar.*
-# backup_incr_user_toto_date_hour.tar.*
-# backup_incr_other_date_hour.tar.*
-#
-# all backup runs will generate:
-#
-# drakbackup_date_hour.txt
-#
-# this will contain media & hostname
-#________________________________________________________________
-#
-# REQUIRE: cron if daemon
-# cdrecord & mkisofs
-# perl Net::FTP
-# ssh-askpass
-# sitecopy - for webdav
-# rsync
-# perl Expect
-
-# BUGS:
-#DONE restore->other_media->next->previous => crash ...
-#DONE selection des sources a inclure dans le backup cd.
-#DONE help -> ok after install_rpm
-# sort of fixed - doesn't always land where you would expect
-# but at least it doesn't die
-#
-# TODO:
-# 1 - print ftp problem for user.
-# 2 - calcul disk space.
-# use quota.
-#WHY? - Apple can read Joliet - would you really be restoring on MacOS?
-#Or for bootable - PPC is being depracated anyway ;(
-# 4 - write on cd --> ! change Joliet to HFS for Apple
-# 6 - total backup.( all partitions wanted, windows partitions for example!)
-# dump use for total backup.
-# 7 - custom deamon
-# 10- backend: --resore_all, --restore_sys, --restore_users
-#WHAT IS THIS?
-# --build_cd_autoinst
-# 12- cpio use !!
-# 13- boot floppy disk (with dialog)
-# 14- build autoboot with backup and install cd
-# 15- use .backupignore like on CVS
-# 16- afficher les modif dans un fichier texte du meme nom
-# pour afficher durant le restore.
-# 17- futur: could be possible to restore a specific file
-# or directory at specific date.
-# 18- possible all files each time from directory.
-#
-# DONE TODAY:
-#________________________________________________________________
-
-use strict;
-use lib qw(/usr/lib/libDrakX);
-use standalone; #- warning, standalone must be loaded very first, for 'explanations'
-
-use interactive;
-use common;
-
-use Time::localtime;
-use detect_devices;
-
-# Backend Options.
-# make this global for status screen
-my ($window1, $my_win);
-my $central_widget;
-my $previous_widget;
-my $current_widget;
-my $interactive;
-my $up_box;
-my $advanced_box;
-my $box2;
-my $cfg_file_exist = 0;
-my @all_user_list;
-my $list_other;
-my $DEBUG = 0;
-my $restore_sys = 1;
-my $restore_user = 1;
-my $restore_other = 1;
-my $restore_step_sys_date = "";
-my @user_backuped;
-my @sys_backuped;
-my $sys_backuped = 0;
-my $other_backuped = 0;
-my @user_list_to_restore;
-my @sys_list_to_restore;
-my $cd_device_entry;
-my $custom_help;
-my $button_box;
-my $button_box_tmp;
-my $next_widget;
-my $sav_next_widget;
-my $system_state;
-my $restore_state;
-my $save_path_entry;
-my $restore_find_path_entry;
-my $new_path_entry;
-my $pbar;
-my $pbar1;
-my $pbar2;
-my $pbar3;
-my $stext;
-my $the_time;
-my @user_list_to_restore2;
-my @data_backuped;
-my $label_tail;
-my @list_to_build_on_cd;
-my $restore_path = "/";
-my $restore_other_path = 0;
-my $restore_other_src;
-my $path_to_find_restore;
-my $other_media_hd;
-my $backup_bef_restore = 0;
-my $table;
-my @user_list_backuped;
-my @files_corrupted;
-#- ack - not a great default - changed 20020814 (SB)
-my $remove_user_before_restore = 0;
-my @file_list_to_send_by_ftp;
-my $results;
-my @net_methods = ("ftp", "rsync", "ssh", "webdav");
-my @media_types = ("cd", "hd", "tape");
-my %cd_devices;
-my $std_device;
-my @tape_devices;
-my $tar_ext = "tar.gz";
-
-# config. FILES -> Default PATH & Global variables.
-my %config;
-my @sys_files = ("/etc");
-my @user_list;
-my @list_other;
-my $cfg_dir = "/etc/drakxtools/drakbackup/";
-my $save_path = "/var/lib/drakbackup";
-my $log_buff;
-my $comp_mode = 0;
-my $backup_sys = 1;
-my $backup_user = 1;
-my $backup_daemon = 1;
-my $backup_sys_versions = 0;
-my $backup_user_versions = 0;
-my $backup_other_versions = 0;
-my $what_no_browser = 1;
-my $cdrw = 0;
-my $dvdr = 0;
-my $dvdram = 0;
-my $net_proto = '';
-my $host_path = '';
-my $login_user = '';
-my $daemon = 0;
-my $backend_only = 0;
-my $daemon_media = '';
-my $hd_quota = 0;
-
-#- 7/4/2002 SB - consolidate net methods
-my $where_use_net = 0;
-
-my $where_net = 0;
-my $where_hd = 1;
-my $del_hd_files = 0;
-my $where_cd = 0;
-my $where_tape = 0;
-my $cd_time = 650;
-my $when_space;
-my $cd_with_install_boot = 0;
-my $cd_device = '';
-my $host_name = '';
-my $backupignore = 0;
-my $remember_pass = 0;
-my $passwd_user = '';
-my $tape_device;
-my $media_erase = 0;
-my $media_eject = 0;
-my $multi_session = 0;
-my $session_offset = '';
-my $tape_norewind = 0;
-my $no_critical_sys = 1;
-my $send_mail = 0;
-my $user_mail;
-my $scp_port = 22;
-my $use_expect = 0;
-my $xfer_keys = 0;
-my $user_keys = 1;
-my $user_home = $ENV{"HOME"};
-my $backup_key = $user_home . "/.ssh/identity-drakbackup";
-my $nonroot_user = 0;
-my $not_warned = 0;
-my $media_problem = 0;
-my $vol_name = 'Drakbackup';
-my $good_restore_path = 1;
-
-# allow not-root user with own config
-if ($ENV{HOME} ne '/root') {
- standalone::explanations("Running as $ENV{USER}...");
- $cfg_dir = "$user_home/.drakbackup/";
- $save_path = $cfg_dir . "backups";
- -d $save_path or mkdir_p $save_path;
- $nonroot_user = 1;
- $not_warned = 1;
- $backup_sys = 0;
- $backup_daemon = 0;
- $daemon = 0;
- @user_list = ("$ENV{USER}");
-}
-my $cfg_file = $cfg_dir . "drakbackup.conf";
-
-foreach (@ARGV) {
-
- /--default/ and backend_mode();
- /--daemon/ and daemon_mode();
- /--show-conf/ and show_conf();
- /--config-info/ and explain_conf();
- /--cd-info/ and get_cd_info(), exit(0);
- /--debug/ and $DEBUG = 1, next;
-}
-
-sub show_conf {
- print "DrakBackup configuration:\n\n";
- read_conf_file();
- system_state();
- print "$system_state\n";
- exit(0);
-}
-
-sub explain_conf {
- print "\nConfiguration File Options: \n\n";
- print "Configuration file is located in:\n";
- print " Root Mode: /etc/drakxtools/drakbackup/drakbackup.conf.\n";
- print " User Mode: ~/.drakbackup/drakbackup.conf.\n\n";
- print "SYS_FILES= Space seperated list of system directories to backup.\n";
- print "HOME_FILES= Space seperated list of user home directories to backup.\n";
- print "OTHER_FILES= Space seperated list of other files to backup.\n";
- print "PATH_TO_SAVE= Default Hard Drive path to create backup files in.\n";
- print " Root Mode: default is /var/lib/drakbackup.\n";
- print " User Mode: default is ~/.drakbackup/backups.\n";
- print "NO_SYS_FILES Don't backup system files.\n";
- print "NO_USER_FILES Don't backup user files.\n";
- print "OPTION_COMP Compression option - TAR.GZ or TAR.BZ2 (tar.gz is default).\n";
- print "BROWSER_CACHE Backup web browser cache also.\n";
- print "CDRW Backup media is re-writable CD.\n";
- print "DVDR Backup media is recordable DVD (not fully supported yet).\n";
- print "DVDRAM Backup media is DVDRAM (not fully supported yet).\n";
- print "NET_PROTO= Network protocol to use for remote backups: \n";
- print " ftp, rsync, ssh, or webdav.\n";
- print "HOST_NAME= Remote backup host.\n";
- print "HOST_PATH= Backup storage path or module on remote host.\n";
- print "REMEMBER_PASS Remember password on remote host in config file.\n";
- print "USER_KEYS Ssh keys are already setup for communicating with remote host.\n";
- print "DRAK_KEYS Use special drakbackup generated host keys.\n";
- print " (requires perl-Expect).\n";
- print "USE_EXPECT Use expect to do the whole scp transfer, without keys.\n";
- print " (requires perl-Expect).\n";
- print "LOGIN= Remote host login name.\n";
- print "PASSWD= Password on remote host (if REMEMBER_PASS is enabled).\n";
- print "DAEMON_MEDIA= Daemon mode backup via given media.\n";
- print " (hd, cd, tape, ftp, rsync, ssh, or webdav).\n";
- print "HD_QUOTA Use quota to limit hard drive space used for backups.\n";
- print " (not supported yet).\n";
- print "USE_HD Use Hard Drive for backups (currently all modes use HD also).\n";
- print "USE_CD Use CD for backups.\n";
- print "USE_NET Use network for backups (driven by NET_PROTO).\n";
- print "USE_TAPE Use tape for backup.\n";
- print "DEL_HD_FILES Delete local hard drive tar files after backup to other media.\n";
- print "TAPE_NOREWIND Use non-rewinding tape device.\n";
- print "CD_TIME= Length of CD media (not currently utilized).\n";
- print "DAEMON_TIME_SPACE= Interval between daemon backup runs (hourly, daily, weekly)..\n";
- print "CD_WITH_INSTALL_BOOT Build a bootable restore CD (currently not utilized).\n";
- print "CD_DEVICE= Cdrecord style CD device name (ie: 1,3,0).\n";
- print "USER_MAIL= User to send backup results to via email.\n";
- print "SEND_MAIL Do send backup results via email.\n";
- print "TAPE_DEVICE Device to use for tape backup (ie: /dev/st0).\n";
- print "MEDIA_ERASE Erase media before new backup (applies to tape, CD).\n";
- print "MEDIA_EJECT Eject media after backup completes.\n";
- print "MULTI_SESSION Allow muliple sessions to be written to CD media.\n";
- print "SYS_INCREMENTAL_BACKUPS Do incremental backups of system files.\n";
- print "USER_INCREMENTAL_BACKUPS Do imcremental backups of user files.\n";
- print "OTHER_INCREMENTAL_BACKUPS Do incremental backups if other files.\n";
- print "NO_CRITICAL_SYS Do not backup critical system files:\n";
- print " passwd, fstab, group, mtab\n";
- print "CRITICAL_SYS Do backup above system files.\n";
- exit(0);
-}
-
-sub backend_mode {
- $backend_only = 1;
- build_backup_files();
- exit(0);
-}
-
-sub daemon_mode {
- $daemon = 1;
- build_backup_files();
- exit(0);
-}
-
-interactive_mode();
-
-sub all_user_list {
- my ($username) = @_;
- my $passwdfile = "/etc/passwd";
- my $user;
- my $uid;
- @all_user_list = ();
-
- open (PASSWD, $passwdfile) or exit 1;
- while (defined(my $line = <PASSWD>)) {
- chomp($line);
- ($user, $uid) = (split(/:/, $line))[0, 2];
- if ($uid >= 500 || $uid == 0) {
- push @all_user_list, $user;
- }
- }
- close(PASSWD);
- if ($DEBUG) {
- print "/-- User list --/ \n";
- print " -> $_\n" foreach @all_user_list;
- print "\n";
- }
-}
-
-sub the_time {
- $the_time = "_";
- $the_time .= localtime->year() + 1900;
- if (localtime->mon() < 9) { $the_time .= "0" }
- $the_time .= localtime->mon() + 1;
- if (localtime->mday() < 10) { $the_time .= "0" }
- $the_time .= localtime->mday();
- $the_time .= "_";
- if (localtime->hour() < 10) { $the_time .= "0" }
- $the_time .= localtime->hour();
- if (localtime->min() < 10) { $the_time .= "0" }
- $the_time .= localtime->min();
- if (localtime->sec() < 10) { $the_time .= "0" }
- $the_time .= localtime->sec();
-}
-
-sub get_tape_info {
- my @line_data;
- my $info = "/tmp/dmesg";
- @tape_devices = ();
- system("dmesg | grep 'st[0-9] at' > $info");
-
- local *INFO;
- open(INFO, $info) || warn("Can't open $info\n");
- local $_;
- while (<INFO>) {
- @line_data = split(/[ \t,]+/, $_);
- push @tape_devices, "/dev/" . $line_data[3];
- }
- close(INFO);
- unlink($info);
-}
-
-sub get_cd_info {
- my @cd_info = cat_("/proc/sys/dev/cdrom/info");
- my @line_data;
- my @drive_names;
- my $i;
- my $info;
-
- my %data => (
- "drive speed" => 'speed',
- "Can change speed" => 'chg_speed',
- "Can read multisession" => 'multisession',
- "Can write CD-R" => 'cdr',
- "Can write CD-RW" => 'cdrw',
- "Can write DVD-R" => 'dvdr',
- "Can write DVD-RAM" => 'dvdram',
- );
-
-
- #- kind of ugly - I'm sure Pixel could improve this, but it works
- #- parse /proc/sys/dev/cdrom/info and get all the cd device capabilities
- my $cd_drives;
- foreach (@cd_info) {
- @line_data = split(/[:\t]+/, $_);
- if ($line_data[0] =~ /drive name/) {
- $cd_drives = @line_data-1;
- chop($line_data[$cd_drives]);
- @drive_names = @line_data;
- print "drives: $cd_drives\n" unless $interactive;
- }
- chop($line_data[$cd_drives]) if $cd_drives;
- foreach my $key (keys %data) {
- if ($line_data[0] =~ $key) {
- for ($i = 1; $i <= $cd_drives; $i++) {
- $cd_devices{$drive_names[$i]}{$data{$key}} = $line_data[$i];
- }
- }
- }
-
- }
-
- #- now we know all the capabilities, we need the cdrecord device id
- #- this is scsi-channel, id, lun from /dev/scsi/host*
- #- oops - can't count on devfs - use dmesg
-
- $info = "/tmp/dmesg";
- system("dmesg | grep sr[0-9] > $info");
- local *INFO;
- open(INFO, $info) || warn("Can't open $info\n");
- local $_;
- while (<INFO>) {
- if (/sr[0-9] at/) {
- @line_data = split(/[ \t,]+/, $_);
- chop($line_data[11]);
- $line_data[5] =~ s/scsi//;
- $cd_devices{$line_data[3]}{rec_dev} = $line_data[5] . "," . $line_data[9] . "," . $line_data[11];
- }
- }
- close(INFO);
- unlink($info);
-
- #- should we also try to get the human readable name for display purposes?
-
- #- now just report the data if we called --cd-info from the command line
- if (!$interactive) {
- foreach my $key (keys %cd_devices) {
- print "\n{$key}->{rec_dev} = $cd_devices{$key}->{rec_dev}\n";
- print "{$key}->{speed} = $cd_devices{$key}->{speed}\n";
- print "{$key}->{chg_speed} = $cd_devices{$key}->{chg_speed}\n";
- print "{$key}->{multisession} = $cd_devices{$key}->{multisession}\n";
- print "{$key}->{cdr} = $cd_devices{$key}->{cdr}\n";
- print "{$key}->{cdrw} = $cd_devices{$key}->{cdrw}\n";
- print "{$key}->{dvdr} = $cd_devices{$key}->{dvdr}\n";
- print "{$key}->{dvdram} = $cd_devices{$key}->{dvdram}\n";
- }
- } else {
- #- in non-interactive mode we just let all the devices through
- #- as a general purpose probe - in reality we want only burners
- foreach my $key (keys %cd_devices) {
- delete $cd_devices{$key} if $cd_devices{$key}{rec_dev} eq ''
- }
- }
-}
-
-sub save_conf_file {
- write_sitecopyrc() if $net_proto eq 'webdav';
- write_password_file() if $net_proto eq 'rsync' && $passwd_user;
-
- my @cfg_list = ("SYS_FILES=@sys_files\n",
- "HOME_FILES=@user_list\n",
- "OTHER_FILES=@list_other\n",
- "PATH_TO_SAVE=$save_path\n",
- "HOST_PATH=$host_path\n",
- "NET_PROTO=$net_proto\n",
- "CD_TIME=$cd_time\n",
- "USER_MAIL=$user_mail\n",
- "DAEMON_TIME_SPACE=$when_space\n",
- "CD_DEVICE=$cd_device\n",
- "LOGIN=$login_user\n",
- "TAPE_DEVICE=$tape_device\n",
- "HOST_NAME=$host_name\n"
- );
- $no_critical_sys and push @cfg_list, "NO_CRITICAL_SYS\n";
- $no_critical_sys or push @cfg_list, "CRITICAL_SYS\n";
- $send_mail and push @cfg_list, "SEND_MAIL\n";
- $backup_sys_versions and push @cfg_list, "SYS_INCREMENTAL_BACKUPS\n";
- $backup_user_versions and push @cfg_list, "USER_INCREMENTAL_BACKUPS\n";
- $backup_other_versions and push @cfg_list, "OTHER_INCREMENTAL_BACKUPS\n";
- $media_erase and push @cfg_list, "MEDIA_ERASE\n";
- $media_eject and push @cfg_list, "MEDIA_EJECT\n";
- $multi_session and push @cfg_list, "MULTI_SESSION\n";
- $remember_pass and push @cfg_list, "LOGIN=$login_user\n";
- $remember_pass and push @cfg_list, "PASSWD=$passwd_user\n";
- $remember_pass and push @cfg_list, "REMEMBER_PASS\n";
- $user_keys and push @cfg_list, "USER_KEYS\n";
- $xfer_keys and push @cfg_list, "DRAK_KEYS\n";
- $use_expect and push @cfg_list, "USE_EXPECT\n";
- $cd_with_install_boot and push @cfg_list, "CD_WITH_INSTALL_BOOT\n";
- $daemon_media eq 'ssh' and $backup_daemon and push @cfg_list, "DAEMON_MEDIA=ssh\n";
- $daemon_media eq 'ftp' and $backup_daemon and push @cfg_list, "DAEMON_MEDIA=ftp\n";
- $daemon_media eq 'hd' and $backup_daemon and push @cfg_list, "DAEMON_MEDIA=hd\n";
- $daemon_media eq 'cd' and $backup_daemon and push @cfg_list, "DAEMON_MEDIA=cd\n";
- $daemon_media eq 'tape' and $backup_daemon and push @cfg_list, "DAEMON_MEDIA=tape\n";
- $daemon_media eq 'webdav' and $backup_daemon and push @cfg_list, "DAEMON_MEDIA=webdav\n";
- $daemon_media eq 'rsync' and $backup_daemon and push @cfg_list, "DAEMON_MEDIA=rsync\n";
- $hd_quota and push @cfg_list, "HD_QUOTA\n";
- $where_hd and push @cfg_list, "USE_HD\n";
- $where_cd and push @cfg_list, "USE_CD\n";
- $where_tape and push @cfg_list, "USE_TAPE\n";
- $tape_norewind and push @cfg_list, "TAPE_NOREWIND\n";
- $where_net and push @cfg_list, "USE_NET\n";
- $cdrw and push @cfg_list, "CDRW\n";
- $dvdr and push @cfg_list, "DVDR\n";
- $dvdram and push @cfg_list, "DVDRAM\n";
- $what_no_browser or push @cfg_list, "BROWSER_CACHE\n";
- $backup_sys or push @cfg_list, "NO_SYS_FILES\n";
- if ($comp_mode) {
- push @cfg_list, "OPTION_COMP=TAR.BZ2\n";
- } else {
- push @cfg_list, "OPTION_COMP=TAR.GZ\n";
- }
- $del_hd_files and push @cfg_list, "DEL_HD_FILES\n";
- output_p($cfg_file, @cfg_list);
- chmod(0600, $cfg_file);
- save_cron_files() if $backup_daemon;
-}
-
-sub read_cron_files {
- my $daemon_found = 0;
- foreach (qw(hourly daily weekly monthly)) {
- if (-f "/etc/cron.$_/drakbackup") {
- $when_space = $_;
- $daemon_found = 1;
- last;
- }
- }
- !$daemon_found and $backup_daemon = 0;
-}
-
-sub save_cron_files {
- if ($nonroot_user) {
- show_warning("w", N_("Cron not available yet as non-root")) if $not_warned;
- $not_warned = 0;
- $backup_daemon = 0;
- return(1);
- }
- my @cron_file = ("#!/bin/sh\n", "export USER=root\n", "/usr/sbin/drakbackup --daemon > /dev/null 2>&1\n");
-
- if ($backup_daemon) {
- foreach (qw(hourly daily weekly monthly)) {
- -f "/etc/cron.$_/drakbackup" and rm_rf("/etc/cron.$_/drakbackup");
- }
- output_p("/etc/cron.$when_space/drakbackup", @cron_file);
- system("chmod +x /etc/cron.$when_space/drakbackup");
- } else {
- foreach (qw(hourly daily weekly monthly)) {
- -f "/etc/cron.$_/drakbackup" and rm_rf("/etc/cron.$_/drakbackup");
- }
- }
-}
-
-sub read_conf_file {
- if (-e $cfg_file) {
-# %config = getVarsFromSh($cfg_file) || print "You must be root to read configuration file. \n";
- open(CONF_FILE, "<" . $cfg_file) || print "You must be root to read configuration file. \n";
- local $_;
- while (<CONF_FILE>) {
- next unless /\S/;
- next if /^#/;
- chomp;
- if (/^SYS_FILES/) { s/^SYS_FILES=//gi; @sys_files = split(' ', $_) }
- if (/^HOME_FILES/) { s/^HOME_FILES=//gi; @user_list = split(' ', $_) }
- if (/^OTHER_FILES/) { s/^OTHER_FILES=//gi; @list_other = split(' ', $_) }
- if (/^PATH_TO_SAVE/) { s/^PATH_TO_SAVE=//gi; $save_path = $_ }
- if (/^NO_SYS_FILES/) { $backup_sys = 0 }
- if (/^NO_USER_FILES/) { $backup_user = 0 }
- if (/^OPTION_COMP/) { s/^OPTION_COMP=//gi; /TAR.GZ/ and $comp_mode = 0; /TAR.BZ2/ and $comp_mode = 1 }
- if (/^BROWSER_CACHE/) { $what_no_browser = 0 }
- if (/^CDRW/) { $cdrw = 1 }
- if (/^DVDR/) { $dvdr = 1 }
- if (/^DVDRAM/) { $dvdram = 1 }
- if (/^NET_PROTO/) { s/^NET_PROTO=//gi; $net_proto = $_ }
- if (/^HOST_PATH/) { s/^HOST_PATH=//gi; $host_path = $_ }
- if (/^DAEMON_MEDIA/) { s/^DAEMON_MEDIA=//gi; $daemon_media = $_ }
- if (/^HD_QUOTA/) { $hd_quota = 1 }
- if (/^USE_HD/) { $where_hd = 1 }
- if (/^USE_CD/) { $where_cd = 1 }
- if (/^USE_NET/) { $where_net = 1 }
- if (/^USE_TAPE/) { $where_tape = 1 }
- if (/^TAPE_NOREWIND/) { $tape_norewind = 1 }
- if (/^CD_TIME/) { s/^CD_TIME=//gi; $cd_time = $_ }
- if (/^DAEMON_TIME_SPACE/) { s/^DAEMON_TIME_SPACE=//gi; $when_space = $_ }
- if (/^CD_WITH_INSTALL_BOOT/) { $cd_with_install_boot = 1 }
- if (/^CD_DEVICE/) { s/^CD_DEVICE=//gi; $cd_device = $_ }
- if (/^HOST_NAME/) { s/^HOST_NAME=//gi; $host_name = $_ }
- if (/^REMEMBER_PASS/) { $remember_pass = 1 }
- if (/^USER_KEYS/) { $user_keys = 1 }
- if (/^DRAK_KEYS/) { $xfer_keys = 1; $user_keys = 0 }
- if (/^USE_EXPECT/) { $use_expect = 1; $user_keys = 0 }
- if (/^LOGIN/) { s/^LOGIN=//gi; $login_user = $_ }
- if (/^PASSWD/) { s/^PASSWD=//gi; $passwd_user = $_; $remember_pass = 1 }
- if (/^USER_MAIL/) { s/^USER_MAIL=//gi; $user_mail = $_ }
- if (/^SEND_MAIL/) { $send_mail = 1 }
- if (/^TAPE_DEVICE/) { s/TAPE_DEVICE=//gi; $tape_device = $_ }
- if (/^MEDIA_ERASE/) { $media_erase = 1 }
- if (/^MEDIA_EJECT/) { $media_eject = 1 }
- if (/^MULTI_SESSION/) { $multi_session = 1 }
- if (/^SYS_INCREMENTAL_BACKUPS/) { $backup_sys_versions = 1 }
- if (/^USER_INCREMENTAL_BACKUPS/) { $backup_user_versions = 1 }
- if (/^OTHER_INCREMENTAL_BACKUPS/) { $backup_other_versions = 1 }
- if (/^NO_CRITICAL_SYS/) { $no_critical_sys = 1 }
- if (/^CRITICAL_SYS/) { $no_critical_sys = 0 }
- if (/^DEL_HD_FILES/) { $del_hd_files = 1 }
- }
- read_cron_files();
- $cfg_file_exist = 1;
- } else {
- $cfg_file_exist = 0;
- #- these were 1 by default, but that made it so the user could never save the
- #- inverse behavior. this allows incremental as the default if not configured
- $backup_sys_versions = 1;
- $backup_user_versions = 1;
- }
- close CONF_FILE;
-}
-
-sub write_sitecopyrc {
- #- FIXME - how to deal with existing sitecopyrc
- my @cfg_list = ("site drakbackup\n",
- "\tserver $host_name\n",
- "\tremote /$host_path\n",
- "\tlocal $save_path\n",
- "\tusername $login_user\n",
- "\tpassword $passwd_user\n",
- "\tprotocol webdav\n"
- );
- output_p("$user_home/.sitecopyrc", @cfg_list);
- chmod(0600, "$user_home/.sitecopyrc");
- -d "$user_home/.sitecopy" or mkdir_p("$user_home/.sitecopy");
- chmod(0700, "$user_home/.sitecopy");
-}
-
-sub write_password_file {
- output_p("$cfg_dir/rsync.user", "$passwd_user\n");
- chmod(0600, "$cfg_dir/rsync.user");
-}
-
-my $in;
-
-sub show_warning {
- my ($mode, $warning) = @_;
- $mode = N_("WARNING") if $mode eq "w";
- $mode = N_("FATAL") if $mode eq "f";
- $mode = N_("INFO") if $mode eq "i";
- if ($interactive) {
- $in->ask_warn('', translate($mode).": ".translate($warning));
- } else {
- warn "$mode: $warning\n";
- }
- $log_buff .= "\n$mode: $warning\n";
-}
-
-sub complete_results {
- system_state();
- $results .= "***********************************************************************\n\n";
- $daemon or $results .= N("\n DrakBackup Report \n\n");
- $daemon and $results .= N("\n DrakBackup Daemon Report\n\n\n");
- $results .= "***********************************************************************\n\n";
- $results .= $system_state;
- $results .= "\n\n***********************************************************************\n\n";
- $results .= N("\n DrakBackup Report Details\n\n\n");
- $results .= "***********************************************************************\n\n";
-}
-
-sub ftp_client {
- use Net::FTP;
- my $ftp;
-
- $DEBUG and print "file list to send: $_\n " foreach @file_list_to_send_by_ftp;
- if ($DEBUG && $interactive) { $ftp = Net::FTP->new($host_name, Debug => 1) or return(1) }
- elsif ($interactive) { $ftp = Net::FTP->new($host_name, Debug => 0) or return(1) }
- else { $ftp = Net::FTP->new($host_name, Debug => 0) or return(1) }
- $ftp->login($login_user, $passwd_user);
- $ftp->cwd($host_path);
- foreach (@file_list_to_send_by_ftp) {
- $interactive and $pbar->set_fraction(0);
- $interactive and progress($pbar, 0.5, $_);
- $interactive and $pbar->set_show_text($_);
- $ftp->put($_);
- $interactive and progress($pbar, 0.5, $_);
- $interactive and $pbar->set_show_text($_);
- $interactive and progress($pbar3, 1/@file_list_to_send_by_ftp, N("Total progess"));
- }
- $ftp->quit;
- return(0);
-}
-
-sub do_expect {
-
- #- Sort of a general purpose expect routine, we use it to backup files to
- #- a remote server, as well as transfer a key and restore.
- #- Using the key after it is setup is preferred.
-
- my ($mode, $filename) = @_;
-
- eval { require Expect };
-
- if ($@) {
- if ($mode eq 'sendkey') {
- ${$central_widget}->destroy();
- check_pkg_needs();
- } else {
- $log_buff .= "perl-Expect not installed!",
- }
- return(1);
- }
-
- #- for debugging set to 1
- $Expect::Exp_Internal = 0;
- #- for debugging set to 1
- $Expect::Debug = 0;
- $Expect::Log_Stdout = 0;
-
- my $spawn_ok;
- my $no_perm;
- my $bad_passwd;
- my $bad_dir;
- my $timeout = 20;
-
- my $exp_command;
- my @send_files = ("$backup_key.pub");
-
- #- just bypass progress for sendkey for now
- $interactive = 0 if $mode eq "sendkey";
-
- @send_files = @file_list_to_send_by_ftp if $mode eq "backup";
-
- $interactive and $pbar->set_fraction(0);
- $interactive and $pbar3->set_fraction(0);
- $interactive and progress($pbar, 0.5, "File Transfer...");
-
- foreach (@send_files) {
- $exp_command = "scp -P $scp_port $_ $login_user\@$host_name:$host_path" if $mode eq "backup";
- $exp_command = "ssh-copy-id -i $_ $login_user\@$host_name" if $mode eq "sendkey";
-
- if ((-e $backup_key) && $mode eq "sendkey") {
- if ($in->ask_yesorno('', N("%s exists, delete?\n\nWarning: If you've already done this process you'll probably\n need to purge the entry from authorized_keys on the server.", $backup_key))) {
- unlink($backup_key);
- unlink($backup_key . '.pub');
- } else {
- return(0);
- }
- }
-
- if (!(-e $backup_key) && $mode eq "sendkey") {
- $in->ask_warn('', N("This may take a moment to generate the keys."));
- cursor_wait();
- #- not using a passphrase for the moment
- system("ssh-keygen -P '' -t dsa -f $backup_key");
- cursor_norm();
- }
-
- my $exp = Expect->spawn($exp_command) or $in->ask_warn('', N("ERROR: Cannot spawn %s.", $exp_command));
-
- $interactive and progress($pbar3, 1/@send_files, N("Total progess"));
- $interactive and $stext->set_text($_);
-
- #- run scp, look for some common errors and try to track successful progress for GUI
- $exp->expect($timeout,
- [ qr'password: $', sub {
- $spawn_ok = 1;
- my $fh = shift;
- $fh->send("$passwd_user\n");
- Expect::exp_continue() } ],
- [ '-re', 'please try again', sub { $bad_passwd = 1; Expect::exp_continue() } ],
- [ '-re', 'Permission denied', sub { $no_perm = 1; Expect::exp_continue() } ],
- [ '-re', 'No such file or directory', sub { $bad_dir = 1; Expect::exp_continue() } ],
-# [ '-re', '%', sub { update_scp_progress(); Expect::exp_continue(); } ],
- [ eof => sub {
- if (!$spawn_ok) { show_warning("f", N("No password prompt on %s at port %s", $host_name, $scp_port)) }
- if ($bad_passwd) { show_warning("f", N("Bad password on %s", $host_name)) }
- if ($no_perm) { show_warning("f", N("Permission denied transferring %s to %s", $_, $host_name)) }
- if ($bad_dir) { show_warning("f", N("Can't find %s on %s", $host_path, $host_name)) }
- }
- ],
- [ timeout => sub { show_warning("f", N("%s not responding", $host_name)) } ],
- );
-
- my $exit_stat = $exp->exitstatus;
- $in->ask_warn('', N("Transfer successful\nYou may want to verify you can login to the server with:\n\nssh -i %s %s\@%s\n\nwithout being prompted for a password.", $backup_key, $login_user, $host_name)) if $exit_stat eq 0 && $mode eq "sendkey";
- $log_buff .= "$_\n" if $exit_stat eq 0 && $mode eq "backup";
- $exp->hard_close();
- }
- $interactive and progress($pbar, 0.5, "Done...");
- $interactive = 1 if $mode eq "sendkey";
-}
-
-sub ssh_client {
- $DEBUG and print "file list to send: $_\n " foreach @file_list_to_send_by_ftp;
- my $command;
- my $value;
-
- foreach (@file_list_to_send_by_ftp) {
- if ($user_keys) {
- $command = "scp -P $scp_port $_ $login_user\@$host_name:$host_path";
- } else {
- $command = "scp -P $scp_port -i $backup_key $_ $login_user\@$host_name:$host_path";
- }
- $interactive and $pbar->set_fraction(0);
- $interactive and progress($pbar, 0.5, "File Transfer...");
- $interactive and $stext->set_text($_);
- $log_buff .= $command . "\n\n";
- local *TMP;
- open TMP, "$command 2>&1 |";
- while ($value = <TMP>) {
- $log_buff .= $value;
- }
- close TMP;
- $log_buff .= "\n";
- $interactive and progress($pbar, 0.5, "Done...");
- $interactive and progress($pbar3, 1/@file_list_to_send_by_ftp, N("Total progess"));
- }
- return(0);
-}
-
-sub webdav_client {
- $DEBUG and print "file list to send: $_\n " foreach @file_list_to_send_by_ftp;
- if (!(-e "$user_home/.sitecopy/drakbackup")) {
- my $command = "sitecopy -f $host_path";
- spawn_progress($command, "Initializing sitecopy");
- }
- my $command = "sitecopy -u drakbackup";
- spawn_progress($command, "Running sitecopy...");
- if ($log_buff =~ /Nothing to do - no changes found/) {
- show_warning("w", N_("WebDAV remote site already in sync!"));
- return(1);
- }
- if ($log_buff !~ /Update completed successfully/) {
- show_warning("f", N_("WebDAV transfer failed!"));
- return(1);
- }
- return(0);
-}
-
-sub rsync_client {
- $DEBUG and print "file list to send: $_\n " foreach @file_list_to_send_by_ftp;
- my $rsync_cmd = "rsync -tv $save_path/* ";
- $rsync_cmd = $rsync_cmd . "--password-file=$cfg_dir/rsync.user " if $passwd_user;
- $rsync_cmd = $rsync_cmd . "$login_user\@" if $login_user;
- $rsync_cmd = $rsync_cmd . "$host_name\:\:$host_path";
- spawn_progress($rsync_cmd, "Running rsync");
- return(0);
-}
-
-sub check_for_cd {
- #- check for a cd
- my $command = "cdrecord dev=$cd_device -atip";
- spawn_progress($command, "Check for media in drive");
- if ($log_buff =~ /No disk/) {
- show_warning("f", N_("No CDR/DVDR in drive!"));
- return(1);
- }
- if ($log_buff !~ /ATIP info from disk/) {
- show_warning("f", N_("Does not appear to be recordable media!"));
- return(1);
- }
- if ($log_buff =~ /Is not erasable/ && $media_erase) {
- show_warning("f", N_("Not erasable media!"));
- return(1);
- }
-
- if ($multi_session) {
- $command = "cdrecord dev=$cd_device -msinfo";
- spawn_progress($command, "Check for previous session status");
- #- if we don't find a previous session, start fresh
- if ($log_buff =~ /Cannot read session offset/) {
- $media_erase = 1;
- return(0);
- } else {
- #- extract the session info from $log_buff
- my $code_loc = rindex($log_buff, "msinfo") + 8;
- if ($code_loc != -1) {
- my $bufflen = length($log_buff);
- $session_offset = substr($log_buff, $code_loc, $bufflen-$code_loc-1);
- return(0);
- }
- return(1);
- }
- }
-}
-
-sub write_on_cd {
- my $command = "cdrecord -v dev=$cd_device -data ";
- #- only blank if it's the first session
- $command .= "blank=fast " if $media_erase && $session_offset eq '';
- #- multi-session mode
- $command .= "-multi -pad " if $multi_session;
- $command .= "$save_path/drakbackup.iso";
-
- spawn_progress($command, "Running cdrecord");
- unlink("$save_path/drakbackup.iso");
-}
-
-sub erase_cdrw {
- #- we can only hit this via interactive
- $interactive = 0;
- $in->ask_warn('', N("This may take a moment to erase the media."));
- cursor_wait();
- my $command = "cdrecord dev=$cd_device -blank=fast";
- spawn_progress($command, "Erasing CDRW...");
- cursor_norm();
- $interactive = 1;
-}
-
-sub spawn_progress {
- my ($command, $descr) = @_;
- my $value;
- my $timer;
-
- $interactive and progress($pbar3, 0, translate($descr));
- $interactive and $pbar3->set_activity_mode(1);
- $interactive and $pbar3->set_fraction(0);
- $interactive and $timer = Gtk2->timeout_add(2, \&progress_timeout);
-
- $log_buff .= "\n" . $descr . ":\n";
- $log_buff .= $command . "\n\n";
-
- local *TMP;
- open TMP, "$command 2>&1 |";
- while ($value = <TMP>) {
- $log_buff .= $value;
- if ($interactive) {
- $stext->set_text($value);
- gtkflush();
- }
- }
- close TMP;
- $interactive and $pbar3->set_activity_mode(0);
- $interactive and Gtk2->timeout_remove($timer);
-}
-
-sub progress_timeout {
- my $new_val;
- my $adj;
- $new_val = $pbar3->get_value() + 1;
- $adj = $pbar3->adjustment;
- $new_val = $adj->lower if $new_val > $adj->upper;
- $pbar3->set_fraction($new_val);
- return(1);
-}
-
-sub get_cd_device {
- my $check_device = "/dev/cdrom";
- get_cd_info();
- foreach (keys %cd_devices) {
- if ($cd_devices{$_}{rec_dev} eq $cd_device) {
- s/sr/scd/;
- $check_device = "/dev/" . $_;
- }
- }
- $check_device;
-}
-
-sub get_cd_volname {
- #- we want the volname for the catalog
- my $check_device = get_cd_device();
- local *TMP;
- open TMP, "volname $check_device 2>&1 |";
- local $_;
- while (<TMP>) {
- $vol_name = $_;
- }
- close TMP;
- $vol_name =~ s/[ \t]+\n$//;
- $vol_name;
-}
-
-sub build_iso {
- if ($multi_session && $session_offset) {
- $vol_name = get_cd_volname();
- } else {
- $vol_name = "Drakbackup" . $the_time;
- }
- #this is safe to change the volname on rewrites, as is seems to get ignored anyway
- my $command = "mkisofs -r -J -T -v -V '$vol_name' ";
- $command .= "-C $session_offset -M $cd_device " if $multi_session && $session_offset;
- $command .= "-o $save_path/drakbackup.iso @file_list_to_send_by_ftp";
- spawn_progress($command, "Running mkisofs...");
-}
-
-sub build_cd {
- if (!check_for_cd()) {
- build_iso();
- if ($log_buff =~ /Permission denied/) {
- show_warning("f", N_("Permission problem accessing CD."));
- $media_problem = 1;
- return(1);
- } else {
- write_on_cd();
- }
- }
-}
-
-sub get_tape_label {
- my ($device) = @_;
- cursor_wait();
- system("mt -f $device rewind");
- system("tar -C $cfg_dir -xf $device");
- my @volname = cat_("$cfg_dir/drakbackup.label");
- unlink("$cfg_dir/drakbackup.label");
- $vol_name = $volname[0];
- cursor_norm();
- $vol_name;
-}
-
-sub build_tape {
- my $command;
- #- do we have a tape?
- $command = "mt -f $tape_device status";
- spawn_progress($command, "Checking for tape");
- if ($log_buff =~ /DR_OPEN/) {
- show_warning("f", N("No tape in %s!", $tape_device));
- return(1);
- }
-
- #- try to roll to the end of the data if we're not erasing
- if (!$media_erase) {
- $command = "mt -f $tape_device rewind";
- spawn_progress($command, "Rewind to find tape label");
- $command = "tar -tf $tape_device";
- spawn_progress($command, "Check for label");
- if ($log_buff =~ /drakbackup.label/) {
- if ($tape_norewind) {
- $command = "mt -f $tape_device rewind";
- spawn_progress($command, "Rewind to get tape label");
- }
- $command = "tar -C $cfg_dir -xf $tape_device";
- spawn_progress($command, "Reading tape label");
- my @volname = cat_("$cfg_dir/drakbackup.label");
- unlink("$cfg_dir/drakbackup.label");
- $vol_name = $volname[0];
- }
- $command = "mt -f $tape_device eod";
- spawn_progress($command, "Running mt to find eod");
- } else {
- $command = "mt -f $tape_device rewind";
- spawn_progress($command, "Running mt to rewind");
- # make a tape label for the catalog
- # if we're using the rewinding device, change modes briefly
- if (!$tape_norewind) {
- $tape_device =~ s/\/st/\/nst/;
- }
- $vol_name = "Drakbackup" . $the_time;
- my $f = "$cfg_dir/drakbackup.label";
- output($f, $vol_name);
- $command = "tar -C $cfg_dir -cf $tape_device drakbackup.label;";
- spawn_progress($command, "Creating tape label");
- unlink $f;
- if (!$tape_norewind) {
- $tape_device =~ s/\/nst/\/st/;
- }
- }
-
- #- do the backup
- $command = "tar -cvf $tape_device @file_list_to_send_by_ftp";
- spawn_progress($command, "Running tar to tape");
-
- #- eject the tape?
- if ($media_eject) {
- $command = "mt -f $tape_device rewoff";
- spawn_progress($command, "Running mt to eject tape");
- }
-}
-
-# share this with logdrake
-sub send_mail {
- my ($result) = @_;
- my $datem = `date`;
-
- local *F;
- open F, "|/usr/sbin/sendmail -f$user_mail $user_mail" or return(1);
- print F "From: drakbackup\n";
- print F "To: $user_mail \n";
- print F "Subject: DrakBackup report on $datem \n";
- print F "\n";
- print F "$result\n";
- close F or return(1);
- return(0);
-}
-
-sub build_backup_files {
- my $path_name;
- my $tar_cmd;
- my $more_recent;
- my $tar_cmd_sys;
- my $tar_cmd_user;
- my $tar_cmd_other;
- my $vartemp;
- my $base_sys_exist = 0;
- my $base_user_exist = 0;
- my $base_other_exist = 0;
- my @list_temp;
- my @list_other_;
- my @dir_content;
- my $file_date;
- $results = "";
- $log_buff = "";
- #- flush this so if the user does 2 runs in a row we don't try to send the same files
- @file_list_to_send_by_ftp = ();
-
- $interactive and cursor_wait();
- read_conf_file();
- the_time();
- $send_mail and complete_results();
- -d $save_path or mkdir_p($save_path);
- if ($comp_mode) {
- $DEBUG and $tar_cmd = "tar cv --use-compress-program /usr/bin/bzip2 ";
- $DEBUG or $tar_cmd = "tar c --use-compress-program /usr/bin/bzip2 ";
- $tar_ext = "tar.bz2";
- } else {
- $DEBUG and $tar_cmd = "tar cvpz ";
- $DEBUG or $tar_cmd = "tar cpz ";
- $tar_ext = "tar.gz"
- }
- $tar_cmd_sys = $tar_cmd;
- $tar_cmd_user = $tar_cmd;
- $tar_cmd_other = $tar_cmd;
- $no_critical_sys and $tar_cmd_sys .= "--exclude passwd --exclude fstab --exclude group --exclude mtab";
- $what_no_browser and $tar_cmd_user .= "--exclude NewCache --exclude Cache --exclude cache";
- $nonroot_user and $tar_cmd_user .= " --exclude .drakbackup";
-
- -d $save_path and @dir_content = all($save_path);
- grep (/^backup\_base\_sys/, @dir_content) and $base_sys_exist = 1;
-
- if ($where_hd && !$daemon || $daemon) {
- $interactive and progress($pbar, 0.5, N("Backup system files..."));
- if ($backup_sys) {
- if ($backup_sys_versions) {
- #- 8/19/2002 - changed these greps to look at the list, rather than the tar file
- #- we retain the list for other media backups, but the tar file goes away, potentially
- if (grep /^list\_incr\_sys/, @dir_content) {
- my @more_recent = grep /^list\_incr\_sys/, sort @dir_content;
- $more_recent = pop @more_recent;
- $DEBUG and print "more recent file: $more_recent\n";
- system("find @sys_files -cnewer $save_path/$more_recent \! -type d -print > $save_path/list_incr_sys$the_time.txt");
- if (!cat_("$save_path/list_incr_sys$the_time.txt")) {
- system("rm $save_path/list_incr_sys$the_time.txt");
- } else {
- system("$tar_cmd_sys -f $save_path/backup_incr_sys$the_time.$tar_ext -T $save_path/list_incr_sys$the_time.txt");
- push @file_list_to_send_by_ftp, "$save_path/backup_incr_sys$the_time.$tar_ext";
- push @file_list_to_send_by_ftp, "$save_path/list_incr_sys$the_time.txt";
- $results .= "\nfile: $save_path/backup_incr_sys$the_time.$tar_ext\n";
- $results .= cat_("$save_path/list_incr_sys$the_time.txt");
- }
- } elsif (grep /^list_base\_sys/, @dir_content) {
- my @more_recent = grep /^list\_base\_sys/, sort @dir_content;
- $more_recent = pop @more_recent;
- $DEBUG and print "more recent file: $more_recent\n";
- system("find @sys_files -cnewer $save_path/$more_recent \! -type d -print > $save_path/list_incr_sys$the_time.txt");
- if (!cat_("$save_path/list_incr_sys$the_time.txt")) {
- system("rm $save_path/list_incr_sys$the_time.txt");
- } else {
- system("$tar_cmd_sys -f $save_path/backup_incr_sys$the_time.$tar_ext -T $save_path/list_incr_sys$the_time.txt");
- push @file_list_to_send_by_ftp, "$save_path/backup_incr_sys$the_time.$tar_ext";
- push @file_list_to_send_by_ftp, "$save_path/list_incr_sys$the_time.txt";
- $results .= "\nfile: $save_path/backup_incr_sys$the_time.$tar_ext\n";
- $results .= cat_("$save_path/list_incr_sys$the_time.txt");
- }
- } else {
- #- need this for the first pass too, if we're offloading the backups to other media (sb)
- system("find $path_name \! -type d -print > $save_path/list_base_sys$the_time.txt");
- system("$tar_cmd_sys -f $save_path/backup_base_sys$the_time.$tar_ext @sys_files");
- push @file_list_to_send_by_ftp, "$save_path/backup_base_sys$the_time.$tar_ext";
- push @file_list_to_send_by_ftp, "$save_path/list_base_sys$the_time.txt";
- $results .= "\nfile: $save_path/backup_base_sys$the_time.$tar_ext\n";
- }
- } else {
- system("cd $save_path && rm -f backup_sys* backup_base_sys* backup_incr_sys*");
- system("$tar_cmd_sys -f $save_path/backup_sys$the_time.$tar_ext @sys_files");
- push @file_list_to_send_by_ftp, "$save_path/backup_sys$the_time.$tar_ext";
- $results .= "\nfile: $save_path/backup_sys$the_time.$tar_ext\n";
- }
- }
-
- $interactive and progress($pbar, 0.5, N("Backup system files..."));
- $interactive and progress($pbar3, 0.3, N("Hard Disk Backup files..."));
-
- if (@list_other) {
- system("cd $save_path && rm -f backup_other* ");
- system("$tar_cmd_other -f $save_path/backup_other$the_time.$tar_ext @list_other");
- push @file_list_to_send_by_ftp, "$save_path/backup_other$the_time.$tar_ext";
- $results .= "\nfile: $save_path/backup_other$the_time.$tar_ext\n";
- #old foreach (@list_other) { push @list_other_, $_ . "\n"; }
- @list_other_ = map { "$_\n" } @list_other;
- output_p($save_path . '/list_other', @list_other_);
- }
-
- $interactive and progress($pbar1, 1, N("Backup User files..."));
- $interactive and progress($pbar3, 0.3, N("Hard Disk Backup Progress..."));
-
- if ($backup_user) {
- foreach (@user_list) {
- my $user = $_;
- $path_name = return_path($user);
- if ($backup_user_versions) {
- #- 8/19/2002 - changed these greps to look at the list, rather than the tar file
- #- we retain the list for other media backups, but the tar file goes away, potentially
- if (grep(/^list\_incr\_user\_$user\_/, @dir_content)) {
- my @more_recent = grep /^list\_incr\_user\_$user\_/, sort @dir_content;
- $more_recent = pop @more_recent;
- $DEBUG and print "more recent file: $more_recent\n";
- system("find $path_name -cnewer $save_path/$more_recent \! -type d -print > $save_path/list_incr_user_$user$the_time.txt");
- if (!cat_("$save_path/list_incr_user_$user$the_time.txt")) {
- system("rm $save_path/list_incr_user_$user$the_time.txt");
- } else {
- system("$tar_cmd_user -f $save_path/backup_incr_user_$user$the_time.$tar_ext -T $save_path/list_incr_user_$user$the_time.txt");
- push @file_list_to_send_by_ftp, "$save_path/backup_incr_user_$user$the_time.$tar_ext";
- push @file_list_to_send_by_ftp, "$save_path/list_incr_user_$user$the_time.txt";
- $results .= " \nfile: $save_path/backup_incr_user_$user$the_time.$tar_ext\n";
- $results .= cat_("$save_path/list_incr_user_$user$the_time.txt");
- }
- } elsif (grep /^list\_base\_user\_$user\_/, @dir_content) {
- my @more_recent = grep /^list\_base\_user\_$user\_/, sort @dir_content;
- $more_recent = pop @more_recent;
- $DEBUG and print "more recent file: $more_recent\n";
- system("find $path_name -cnewer $save_path/$more_recent \! -type d -print > $save_path/list_incr_user_$user$the_time.txt");
- if (!cat_("$save_path/list_incr_user_$user$the_time.txt")) {
- system("rm $save_path/list_incr_user_$user$the_time.txt");
- } else {
- system("$tar_cmd_user -f $save_path/backup_incr_user_$user$the_time.$tar_ext -T $save_path/list_incr_user_$user$the_time.txt");
- push @file_list_to_send_by_ftp, "$save_path/backup_incr_user_$user$the_time.$tar_ext";
- push @file_list_to_send_by_ftp, "$save_path/list_incr_user_$user$the_time.txt";
- $results .= "\nfile: $save_path/backup_incr_user_$user$the_time.$tar_ext\n";
- $results .= cat_("$save_path/list_incr_user_$user$the_time.txt");
- }
- } else {
- #- need this for the first pass too, if we're offloading the backups to other media (sb)
- system("find $path_name \! -type d -print > $save_path/list_base_user_$user$the_time.txt");
- system("$tar_cmd_user -f $save_path/backup_base_user_$user$the_time.$tar_ext $path_name");
- push @file_list_to_send_by_ftp, "$save_path/backup_base_user_$user$the_time.$tar_ext";
- push @file_list_to_send_by_ftp, "$save_path/list_base_user_$user$the_time.txt";
- $results .= "\nfile: $save_path/backup_base_user_$user$the_time.$tar_ext\n";
- }
- } else {
- system("cd $save_path && rm -f backup_user_$_* backup_base_user_$_* backup_incr_user_$_*");
- system("$tar_cmd_user -f $save_path/backup_user_$_$the_time.$tar_ext $path_name");
- push @file_list_to_send_by_ftp, "$save_path/backup_user_$_$the_time.$tar_ext";
- $results .= "\nfile: $save_path/backup_user_$user$the_time.$tar_ext\n";
- }
- }
- }
- $interactive and progress($pbar2, 1, N("Backup Other files..."));
- $interactive and progress($pbar3, 0.4, N("Hard Disk Backup files..."));
- }
-
- my $filecount = @file_list_to_send_by_ftp;
- if (!$filecount) {
- show_warning("w", N_("No changes to backup!"));
- $interactive and cursor_norm();
- $interactive and interactive_mode();
- return(1);
- }
-
- #- should hit this block if running daemon mode only
- if ($daemon && $daemon_media) {
-# ftp_client() if $ftp_daemon;
- rsync_client() if $daemon_media eq 'rsync';
- ssh_client() if $daemon_media eq 'ssh' && !$use_expect;
- do_expect("backup", "") if $daemon_media eq 'ssh' && $use_expect;
- webdav_client() if $daemon_media eq 'webdav';
- build_cd() if $daemon_media eq 'cd';
- build_tape() if $daemon_media eq 'tape';
-
- $results .= N("\nDrakbackup activities via %s:\n\n", $daemon_media);
- $results .= $log_buff;
- }
-
- #- leave this one alone for now - works well
- #- integrate with other methods later
- if (($where_net && !$daemon && $net_proto eq 'ftp') || $daemon && $daemon_media eq 'ftp') {
- $results .= N("file list sent by FTP: %s\n ", $_) foreach @file_list_to_send_by_ftp;
- $interactive and build_backup_ftp_status();
- if (ftp_client()) {
- $results .= N("\n FTP connection problem: It was not possible to send your backup files by FTP.\n");
- $interactive and client_ftp_pb();
- }
- }
-
- #- consolidate all the other methods under here - interactive and --default should land here
- if (!$daemon) {
-
- if ($where_net && $net_proto && $net_proto ne 'ftp') {
- rsync_client() if $net_proto eq 'rsync';
- ssh_client() if $net_proto eq 'ssh' && !$use_expect;
- do_expect("backup", "") if $net_proto eq 'ssh' && $use_expect;
- webdav_client() if $net_proto eq 'webdav';
- $results .= N("\nDrakbackup activities via %s:\n\n", $net_proto);
- }
-
- if ($where_cd) {
- build_cd();
- $results .= N("\nDrakbackup activities via CD:\n\n");
- }
-
- if ($where_tape) {
- build_tape();
- $results .= N("\nDrakbackup activities via tape:\n\n");
- }
- $results .= $log_buff;
-
- }
-
- if ($send_mail) {
- if (send_mail($results)) {
- $interactive and send_mail_pb();
- $interactive or print N(" Error while sending mail. \n");
- }
- }
-
- #- write our catalog file
- if (!$media_problem) {
- my $catalog = substr($the_time, 1);
- if (!$where_net && !$where_tape && !$where_cd) {
- $catalog .= ":HD:localhost:$save_path";
- $net_proto = '';
- }
- $catalog .= ":$net_proto:$login_user\@$host_name:$host_path" if $net_proto;
- $catalog .= ":CD:$vol_name:$cd_device" if $where_cd;
- $catalog .= ":Tape:$vol_name:$tape_device" if $where_tape;
- $catalog .= ":System" if $backup_sys;
- $catalog .= ":I" if $backup_sys_versions && $backup_sys;
- $catalog .= ":F" if !$backup_sys_versions && $backup_sys;
- $catalog .= ":Users=(@user_list)" if $backup_user;
- $catalog .= ":I" if $backup_user_versions && $backup_user;
- $catalog .= ":F" if !$backup_user_versions && $backup_user;
- $catalog .= ":Other=(@list_other)" if @list_other;
- $catalog .= ":I" if $backup_other_versions && @list_other;
- $catalog .= ":F" if !$backup_other_versions && @list_other;
- $catalog .= "\n";
-
- local *CATALOG;
- open(CATALOG, ">> $cfg_dir/drakbackup_catalog") || show_warning("w", N_("Can't create catalog!"));
- print(CATALOG $catalog);
- close(CATALOG);
- }
-
- #- clean up HD files if del_hd_files and media isn't hd
- if ($del_hd_files && ($where_cd || $where_tape || $where_net) && $daemon_media ne 'hd') {
- foreach (@file_list_to_send_by_ftp) {
-# unlink($_) if (/$tar_ext$/) && (!/backup_base/);
- unlink($_) if /$tar_ext$/;
- }
- }
-
- #- if we had a media problem then get rid of the text log of the backed up files too
- if ($media_problem) {
- system("rm $save_path/list\*$the_time.txt");
- }
-
- $interactive and cursor_norm();
- $interactive and show_status();
-}
-
-my @list_of_rpm_to_install;
-sub require_rpm {
- my $all_rpms_found = 1;
- my $res;
- my @file_cache = cat_("/var/log/rpmpkgs");
- @list_of_rpm_to_install = ();
-#- reverted to old method - /var/log/rpmpkgs is not always accurate
-# my($pkg) = @_;
- foreach my $pkg (@_) {
-# $res = grep /$pkg/, @file_cache;
- $res = system("rpm -q $pkg > /dev/null");
- if ($res == 256) {
- $all_rpms_found = 0;
- push @list_of_rpm_to_install, $pkg;
- }
- }
- return($all_rpms_found);
-}
-
-sub check_pkg_needs {
- my $extra_pkg = '';
- if ($where_net) {
- $extra_pkg = 'rsync' if $net_proto eq 'rsync';
- $extra_pkg = 'sitecopy wget' if $net_proto eq 'webdav';
- $extra_pkg = 'perl-Expect' if $net_proto eq 'ssh' && ($use_expect || $xfer_keys);
- }
- $extra_pkg = 'mt-st' if $where_tape;
- if ($extra_pkg) {
- if (require_rpm($extra_pkg)) {
- return(0);
- } else {
- #- this isn't entirely good, but it's the only way we get here currently
- #- was getting strange return behavior before
- #- still a problem, we can also get here from the cron screen
- install_rpm(\&advanced_where);
- return(1);
- }
- }
-}
-
-sub cursor_wait {
- # turn the cursor to a watch
- $window1->window->set_cursor(new Gtk2::Gdk::Cursor(150));
- gtkflush();
-}
-
-sub cursor_norm {
- # restore normal cursor
- $window1->window->set_cursor(new Gtk2::Gdk::Cursor(68));
- gtkflush();
-}
-
-sub show_status {
- #- just a generic routine to display an array of text in the GUI screen
-
- my $text = new Gtk2::TextView;
-
- $table->destroy();
-
- gtkpack($advanced_box,
- $table = gtkpack_(new Gtk2::VBox(0,10),
- 1, gtktext_insert(gtkset_editable($text, 0), [ [ $results ] ]),
- ),
- );
- $central_widget = \$table;
- $table->show_all();
-}
-
-sub list_remove {
- my($widget, $list) = @_;
- my @to_remove;
- push @to_remove, $list->child_position($_) foreach $list->selection;
- splice @list_other, $_, 1 foreach reverse sort @to_remove;
- $list->remove_items($list->selection);
-}
-
-sub file_ok_sel {
- my ($widget, $file_selection) = @_;
- my $file_name = $file_selection->get_filename();
- if (!member($file_name, @list_other)) {
- push(@list_other, $file_name);
- $list_other->add(gtkshow(new Gtk2::ListItem($file_name)));
- }
-}
-
-sub filedialog_where_hd {
- my $file_dialog;
-
- $file_dialog = gtksignal_connect(new Gtk2::FileSelection(N("File Selection")), destroy => sub { $file_dialog->destroy() });
- $file_dialog->ok_button->signal_connect(clicked => sub {
- $save_path_entry->set_text($file_dialog->get_filename());
- $file_dialog->destroy() });
- $file_dialog->cancel_button->signal_connect(clicked => sub { $file_dialog->destroy() });
- $file_dialog->show();
-}
-
-sub filedialog_restore_find_path {
- my $file_dialog;
-
- $file_dialog = gtksignal_connect(new Gtk2::FileSelection(N("File Selection")), destroy => sub { $file_dialog->destroy() });
- $file_dialog->ok_button->signal_connect(clicked => sub {
- $restore_find_path_entry->set_text($file_dialog->get_filename());
- $file_dialog->destroy() });
- $file_dialog->cancel_button->signal_connect(clicked => sub { $file_dialog->destroy() });
- $file_dialog->show();
-}
-
-sub filedialog_generic {
- #- a more generic file dialog, expect a flag for fileops visible or not
- #- a title prompt, the widget to get updated and the variable to update
- my ($fileops, $prompt, $widget, $set_var) = @_;
- my $file_dialog;
-
- $file_dialog = gtksignal_connect(new Gtk2::FileSelection(translate($prompt)), destroy => sub { $file_dialog->destroy() });
- $file_dialog->ok_button->signal_connect(clicked => sub {
- ${$set_var} = ($file_dialog->get_filename());
- ${$widget}->set_text(${$set_var});
- $file_dialog->destroy()
- });
- $file_dialog->cancel_button->signal_connect(clicked => sub { $file_dialog->destroy() });
- $file_dialog->hide_fileop_buttons() if !$fileops;
- $file_dialog->show();
-}
-
-sub filedialog {
- my $file_dialog;
-
- $file_dialog = gtksignal_connect(new Gtk2::FileSelection(N("Select the files or directories and click on 'Add'")), destroy => sub { $file_dialog->destroy() });
- $file_dialog->ok_button->signal_connect(clicked => \&file_ok_sel, $file_dialog);
- $file_dialog->ok_button->child->set(N("Add"));
- $file_dialog->cancel_button->signal_connect(clicked => sub { $file_dialog->destroy() });
- $file_dialog->cancel_button->child->set(N("Close"));
-# $file_dialog->set_filename(N("Select the files or directories and click on 'Add'"));
- $file_dialog->show();
-}
-
-################################################ ADVANCED ################################################
-
-sub check_list {
- foreach (@_) {
- my $ref = $_->[1];
- gtksignal_connect(gtkset_active($_->[0], ${$ref}), toggled => sub {
- invbool $ref;
- ${$central_widget}->destroy();
- $current_widget->();
- });
- }
-}
-
-sub fonction_env {
- ($central_widget, $current_widget, $previous_widget, $custom_help, $next_widget) = @_;
-}
-
-# sub redraw_during_check {
-# my ($tmp1, $tmp2) = @_;
-# gtksignal_connect(gtkset_active($tmp1, $tmp2), toggled => sub {
-# # invbool \$tmp2;
-# print "tmp2 bef = $tmp2\n";
-# $tmp2 = $tmp2 ? 0 : 1;
-# ${$central_widget}->destroy();
-# print "tmp2 after = $tmp2\n";
-# $current_widget->();
-# return ($tmp2);
-# });
-# }
-
-sub advanced_what_sys {
- my $box_what_sys;
-
- gtkpack($advanced_box,
- $box_what_sys = gtkpack_(new Gtk2::VBox(0, 15),
- 1, N("\nPlease check all options that you need.\n"),
- 1, N("These options can backup and restore all files in your /etc directory.\n"),
- 0, my $check_what_sys = new Gtk2::CheckButton(N("Backup your System files. (/etc directory)")),
- 0, my $check_what_versions = new Gtk2::CheckButton(N("Use incremental backup (do not replace old backups)")),
- 0, my $check_what_critical = new Gtk2::CheckButton(N("Do not include critical files (passwd, group, fstab)")),
- 0, N("With this option you will be able to restore any version\n of your /etc directory."),
- 1, new Gtk2::VBox(0, 15),
- ),
- );
- check_list([$check_what_sys, \$backup_sys], [$check_what_critical, \$no_critical_sys], [$check_what_versions, \$backup_sys_versions]);
- fonction_env(\$box_what_sys, \&advanced_what_sys, \&advanced_what, "what");
- $up_box->show_all();
-}
-
-sub advanced_what_user {
- my ($previous_function) = @_,
- my $box_what_user;
- my %check_what_user;
-
- all_user_list();
- gtkpack($advanced_box,
- $box_what_user = gtkpack_(new Gtk2::VBox(0, 15),
- 0, N("Please check all users that you want to include in your backup."),
- 0, new Gtk2::HSeparator,
- 1, create_scrolled_window(
- gtkpack__(new Gtk2::VBox(0,0),
- map { my $name = $_;
- my @user_list_tmp;
- my $b = new Gtk2::CheckButton($name);
- if (grep /^$name$/, @user_list) {
- $check_what_user{$_}[1] = 1;
- gtkset_active($b, 1);
- } else {
- $check_what_user{$_}[1] = 0;
- gtkset_active($b, 0);
- }
- $b->signal_connect(toggled => sub {
- if ($check_what_user{$name}[1]) {
- $check_what_user{$name}[1] = 0;
- @user_list_tmp = grep(!/^$name$/, @user_list);
- @user_list = @user_list_tmp;
- } else {
- $check_what_user{$name}[1] = 1;
- if (!member($name, @user_list)) { push @user_list, $name }
- }
- });
- $b } (@all_user_list)
- ),
- ),
- 0, my $check_what_browser = new Gtk2::CheckButton(N("Do not include the browser cache")),
- 0, my $check_what_user_versions = new Gtk2::CheckButton(N("Use Incremental Backups (do not replace old backups)")),
- ),
- );
- check_list([$check_what_browser, \$what_no_browser], [$check_what_user_versions, \$backup_user_versions]);
- if ($previous_function) { fonction_env(\$box_what_user, \&advanced_what_user, \&$previous_function, "what", \&$previous_function) }
- else { fonction_env(\$box_what_user, \&advanced_what_user, \&advanced_what, "what") }
- $up_box->show_all();
-}
-
-sub advanced_what_other {
- my $box_what_other;
- $list_other = new Gtk2::List();
- $list_other->set_selection_mode('extended');
- $list_other->add(gtkshow(new Gtk2::ListItem($_))) foreach @list_other;
-
- gtkpack($advanced_box,
- $box_what_other = gtkpack_(new Gtk2::VBox(0, 15),
- 1, gtkpack_(new Gtk2::HBox(0,4),
- 1, create_scrolled_window($list_other),
- ),
- 0, gtkadd(gtkset_layout(new Gtk2::HButtonBox, 'spread'),
- gtksignal_connect(new Gtk2::Button(N("Add")), clicked => sub { filedialog() }),
- gtksignal_connect(new Gtk2::Button(N("Remove Selected")), clicked => \&list_remove, $list_other),
- ),
- 0, gtkset_sensitive(my $check_what_other_versions = new Gtk2::CheckButton(N("Use Incremental Backups (do not replace old backups)")), 0),
- ),
- );
- check_list([$check_what_other_versions, \$backup_other_versions]);
- fonction_env(\$box_what_other, \&advanced_what_other, \&advanced_what, "what");
- $up_box->show_all();
-}
-
-sub advanced_what_entire_sys {
- my $box_what;
-
- gtkpack($advanced_box,
- $box_what = gtkpack_(new Gtk2::HBox(0, 15),
- 1, new Gtk2::VBox(0, 5),
- 1, gtkpack_(new Gtk2::VBox(0, 15),
- 1, new Gtk2::VBox(0, 5),
- 1, gtksignal_connect(my $button_what_other = new Gtk2::Button(),
- clicked => sub { ${$central_widget}->destroy(); message_underdevel() }),
- 1, gtksignal_connect(my $button_what_all = new Gtk2::Button(),
- clicked => sub { ${$central_widget}->destroy(); message_underdevel() }),
- 1, new Gtk2::VBox(0, 5),
- ),
- 1, new Gtk2::VBox(0, 5),
- ),
- );
- $button_what_other->add(gtkpack(new Gtk2::HBox(0,10),
- gtkcreate_img("bootloader"),
- new Gtk2::Label(N("Linux")),
- new Gtk2::HBox(0, 5)
- ));
- $button_what_all->add(gtkpack(new Gtk2::HBox(0,10),
- gtkcreate_img("user"),
- new Gtk2::Label(N("Windows (FAT32)")),
- new Gtk2::HBox(0, 5)
- ));
- fonction_env(\$box_what, \&advanced_what_entire_sys, \&advanced_what, "");
- $up_box->show_all();
-}
-
-sub advanced_what {
- my $box_what;
-
- gtkpack($advanced_box,
- $box_what = gtkpack_(new Gtk2::HBox(0, 15),
- 1, new Gtk2::VBox(0, 5),
- 1, gtkpack_(new Gtk2::VBox(0, 15),
- 1, new Gtk2::VBox(0, 5),
- 1, gtksignal_connect(my $button_what_sys = new Gtk2::Button(),
- clicked => sub { $box_what->destroy(); advanced_what_sys() }),
- 1, gtksignal_connect(my $button_what_user = new Gtk2::Button(),
- clicked => sub { ${$central_widget}->destroy(); advanced_what_user() }),
- 1, gtksignal_connect(my $button_what_other = new Gtk2::Button(),
- clicked => sub { ${$central_widget}->destroy(); advanced_what_other() }),
-# 1, gtksignal_connect(my $button_what_all = new Gtk2::Button(),
-# clicked => sub { ${$central_widget}->destroy(); advanced_what_entire_sys(); }),
- 1, new Gtk2::VBox(0, 5),
- ),
- 1, new Gtk2::VBox(0, 5),
- ),
- );
- $button_what_sys->add(gtkpack(new Gtk2::HBox(0,10),
- gtkcreate_img("ic82-system-40"),
- new Gtk2::Label(N("System")),
- new Gtk2::HBox(0, 5)
- ));
- $button_what_user->add(gtkpack(new Gtk2::HBox(0,10),
- gtkcreate_img("ic82-users-40"),
- new Gtk2::Label(N("Users")),
- new Gtk2::HBox(0, 5)
- ));
- $button_what_other->add(gtkpack(new Gtk2::HBox(0,10),
- gtkcreate_img("ic82-others-40"),
- new Gtk2::Label(N("Other")),
- new Gtk2::HBox(0, 5)
- ));
-# $button_what_all->add(gtkpack(new Gtk2::HBox(0,10),
-# gtkcreate_img("ic82-systemeplus-40"),
-# new Gtk2::Label(N("An Entire System")),
-# new Gtk2::HBox(0, 5)
-# ));
-
- fonction_env(\$box_what, \&advanced_what, \&advanced_box, "");
- $up_box->show_all();
-}
-
-sub advanced_where_net_types {
- my ($previous_function) = @_,
- my $box_where_net;
-
- gtkpack($advanced_box,
- $box_where_net = gtkpack_(new Gtk2::VBox(0, 10),
- 0, new Gtk2::HSeparator,
- 0, gtkpack_(new Gtk2::HBox(0,10),
- 0, my $check_where_use_net = new Gtk2::CheckButton(N("Use network connection to backup")),
- 1, new Gtk2::HBox(0,10),
- 0, new Gtk2::Label(N("Net Method:")),
- 0, gtkset_sensitive(my $entry_net_type = new Gtk2::Combo(), $where_net),
- ),
- 0, gtkpack_(new Gtk2::HBox(0,5),
- 0, gtkset_sensitive(my $check_use_expect = new Gtk2::CheckButton(N("Use Expect for SSH")), ($where_net && $net_proto eq 'ssh')),
- 0, gtkset_sensitive(my $check_xfer_keys = new Gtk2::CheckButton(N("Create/Transfer\nbackup keys for SSH")), ($where_net && $net_proto eq 'ssh')),
- 0, gtkset_sensitive(my $button_xfer_keys = new Gtk2::Button(N(" Transfer \nNow")), $xfer_keys),
- 0, gtkset_sensitive(my $check_user_keys = new Gtk2::CheckButton(N("Other (not drakbackup)\nkeys in place already")), ($where_net && $net_proto eq 'ssh')),
- ),
- 0, new Gtk2::HSeparator,
- 0, gtkpack_(new Gtk2::HBox(0,10),
- 0, gtkset_sensitive(new Gtk2::Label(N("Please enter the host name or IP.")), $where_net),
- 1, new Gtk2::HBox(0,10),
- 0, gtkset_sensitive(my $host_name_entry = new Gtk2::Entry(), $where_net),
- ),
- 0, gtkpack_(new Gtk2::HBox(0,10),
- 0, gtkset_sensitive(new Gtk2::Label(N("Please enter the directory (or module) to\n put the backup on this host.")), $where_net),
- 1, new Gtk2::HBox(0,10),
- 0, gtkset_sensitive(my $host_path_entry = new Gtk2::Entry(), $where_net),
- ),
- 0, gtkpack_(new Gtk2::HBox(0,10),
- 0, gtkset_sensitive(new Gtk2::Label(N("Please enter your login")), $where_net),
- 1, new Gtk2::HBox(0,10),
- 0, gtkset_sensitive(my $login_user_entry = new Gtk2::Entry(), $where_net),
- ),
- 0, gtkpack_(new Gtk2::HBox(0,10),
- 0, gtkset_sensitive(new Gtk2::Label(N("Please enter your password")), $where_net),
- 1, new Gtk2::HBox(0,10),
- 0, gtkset_sensitive(my $passwd_user_entry = new Gtk2::Entry(), $where_net),
- ),
- 0, gtkpack_(new Gtk2::HBox(0,10),
- 1, new Gtk2::HBox(0,10),
- 0, gtkset_sensitive(my $check_remember_pass = new Gtk2::CheckButton(N("Remember this password")), $where_net),
- ),
- ),
- );
- $entry_net_type->set_popdown_strings(@net_methods);
- $entry_net_type->entry->set_text($net_proto);
- $entry_net_type->entry->editable(0);
- $button_xfer_keys->signal_connect('clicked', sub {
- if ($passwd_user && $login_user && $host_name) {
- do_expect("sendkey", $backup_key);
- } else {
- $in->ask_warn('', N("Need hostname, username and password!"));
- }
- });
- $passwd_user_entry->set_visibility(0);
- $passwd_user_entry->set_text($passwd_user);
- $passwd_user_entry->signal_connect('changed', sub { $passwd_user = $passwd_user_entry->get_text() });
- $host_path_entry->set_text($host_path);
- $host_name_entry->set_text($host_name);
- $login_user_entry->set_text($login_user);
- $host_name_entry->signal_connect('changed', sub { $host_name = $host_name_entry->get_text() });
- $host_path_entry->signal_connect('changed', sub { $host_path = $host_path_entry->get_text() });
- $login_user_entry->signal_connect('changed', sub { $login_user = $login_user_entry->get_text() });
- $entry_net_type->entry->signal_connect('changed', sub {
- $net_proto = $entry_net_type->entry->get_text();
- my $sensitive = 0;
- $sensitive = 1 if $net_proto eq 'ssh';
- $check_use_expect->set_sensitive($sensitive);
- $check_xfer_keys->set_sensitive($sensitive);
- $button_xfer_keys->set_sensitive($sensitive);
- $check_user_keys->set_sensitive($sensitive);
- });
- check_list([$check_remember_pass, \$remember_pass]);
- gtksignal_connect(gtkset_active($check_where_use_net, $where_net), toggled => sub {
- invbool \$where_net;
- #- assure other methods disabled
- if ($where_net eq 1) {
- $where_cd = 0;
- $where_tape = 0;
- }
- $net_proto = '' if $where_net eq 0;
- ${$central_widget}->destroy();
- $current_widget->();
- });
- gtksignal_connect(gtkset_active($check_use_expect, $use_expect), toggled => sub {
- invbool \$use_expect;
- #- assure other methods disabled
- if ($use_expect eq 1) {
- $xfer_keys = 0;
- $user_keys = 0;
- }
- ${$central_widget}->destroy();
- $current_widget->();
- });
- gtksignal_connect(gtkset_active($check_xfer_keys, $xfer_keys), toggled => sub {
- invbool \$xfer_keys;
- #- assure other methods disabled
- if ($xfer_keys eq 1) {
- $use_expect = 0;
- $user_keys = 0;
- }
- ${$central_widget}->destroy();
- $current_widget->();
- });
- gtksignal_connect(gtkset_active($check_user_keys, $user_keys), toggled => sub {
- invbool \$user_keys;
- #- assure other methods disabled
- if ($user_keys eq 1) {
- $xfer_keys = 0;
- $use_expect = 0;
- }
- ${$central_widget}->destroy();
- $current_widget->();
- });
- if ($previous_function) {
- fonction_env (\$box_where_net, \&advanced_where_net_types, \&$previous_function, "net");
- } else {
- fonction_env (\$box_where_net, \&advanced_where_net_types, \&advanced_where, "net");
- }
- $up_box->show_all();
-}
-
-sub advanced_where_cd {
- my ($previous_function) = @_;
- my $box_where_cd;
-
- get_cd_info();
-
- my $combo_where_cd_device = new Gtk2::Combo();
- $combo_where_cd_device->set_popdown_strings(sort keys %cd_devices) if keys %cd_devices;
-
- my $combo_where_cd_time = new Gtk2::Combo();
- $combo_where_cd_time->set_popdown_strings("650 Mb", "700 Mb", "750 Mb", "800 Mb");
-
- my $combo_where_cdrecord_device = new Gtk2::Combo();
- my @dev_codes;
-
- foreach my $key (keys %cd_devices) {
- push(@dev_codes, $cd_devices{$key}{rec_dev});
- }
-
- $combo_where_cdrecord_device->set_popdown_strings(@dev_codes) if keys %cd_devices;
-
- gtkpack($advanced_box,
- $box_where_cd = gtkpack_(new Gtk2::VBox(0, 6),
- 0, my $check_where_cd = new Gtk2::CheckButton(N("Use CD/DVDROM to backup")),
- 0, new Gtk2::HSeparator,
- 0, gtkpack_(new Gtk2::HBox(0,10),
- 0, gtkset_sensitive(new Gtk2::Label(N("Please choose your CD/DVD device\n(Press Enter to propogate settings to other fields.\nThis field isn't necessary, only a tool to fill in the form.)")), $where_cd),
- 1, new Gtk2::VBox(0, 5),
- 0, gtkset_sensitive(gtkset_size_request($combo_where_cd_device, 200, 20), $where_cd),
- ),
- 0, gtkpack_(new Gtk2::HBox(0,10),
- 0, gtkset_sensitive(new Gtk2::Label(N("Please choose your CD/DVD media size (Mb)")), $where_cd),
- 1, new Gtk2::VBox(0, 5),
- 0, gtkset_sensitive(gtkset_size_request($combo_where_cd_time, 200, 20), $where_cd),
- ),
- 0, new Gtk2::VBox(0, 5),
- 0, gtkpack_(new Gtk2::HBox(0,10),
- 0, gtkset_sensitive(new Gtk2::Label(N("Please check for multisession CD")), $where_cd),
- 1, new Gtk2::VBox(0, 5),
- 0, gtkset_sensitive(my $check_multisession = new Gtk2::CheckButton(), $where_cd),
- ),
- 0, new Gtk2::VBox(0, 5),
- 0, gtkpack_(new Gtk2::HBox(0,10),
- 0, gtkset_sensitive(new Gtk2::Label(N("Please check if you are using CDRW media")), $where_cd),
- 1, new Gtk2::VBox(0, 5),
- 0, gtkset_sensitive(my $check_cdrw = new Gtk2::CheckButton(), $where_cd),
- ),
- 0, new Gtk2::VBox(0, 5),
- 0, gtkpack_(new Gtk2::HBox(0,10),
- 0, gtkset_sensitive(new Gtk2::Label(N("Please check if you want to erase your RW media (1st Session)")), $cdrw && $where_cd),
- 0, gtkset_sensitive(my $button_erase_now = new Gtk2::Button(N(" Erase Now ")), $cdrw),
- 1, new Gtk2::VBox(0, 5),
- 0, gtkset_sensitive(my $check_cdrw_erase = new Gtk2::CheckButton(), $cdrw && $where_cd),
- ),
- 0, new Gtk2::VBox(0, 5),
- 0, gtkpack_(new Gtk2::HBox(0,10),
- 0, gtkset_sensitive(new Gtk2::Label(N("Please check if you are using a DVDR device")), $where_cd),
- 1, new Gtk2::VBox(0, 5),
- 0, gtkset_sensitive(my $check_dvdr = new Gtk2::CheckButton(), $where_cd),
- ),
- 0, new Gtk2::VBox(0, 5),
- 0, gtkpack_(new Gtk2::HBox(0,10),
- 0, gtkset_sensitive(new Gtk2::Label(N("Please check if you are using a DVDRAM device")), $where_cd),
- 1, new Gtk2::VBox(0, 5),
- 0, gtkset_sensitive(my $check_dvdram = new Gtk2::CheckButton(), $where_cd),
- ),
-# don't know what this is about - hold off for now (SB)
-# 0, new Gtk2::VBox(0, 5),
-# 0, gtkpack_(new Gtk2::HBox(0,10),
-# 0, gtkset_sensitive(new Gtk2::Label(N("Please check if you want to include\n install boot on your CD.")), $where_cd),
-# 1, new Gtk2::VBox(0, 5),
-# 0, gtkset_sensitive(my $check_cd_with_install_boot = new Gtk2::CheckButton(), $where_cd),
-# ),
- 0, new Gtk2::VBox(0, 5),
- 0, gtkpack_(new Gtk2::HBox(0,10),
- 0, gtkset_sensitive(new Gtk2::Label(N("Please enter your CD Writer device name\n ex: 0,1,0")), $where_cd),
- 1, new Gtk2::VBox(0, 5),
-# 0, gtkset_size_request(gtkset_sensitive($cd_device_entry = new Gtk2::Entry(), $where_cd), 200, 20),
- 0, gtkset_sensitive(gtkset_size_request($combo_where_cdrecord_device, 200, 20), $where_cd),
- ),
- ),
- );
-
-# foreach ([$check_cdrw_erase, \$media_erase], [$check_cd_with_install_boot, \$cd_with_install_boot ]) {
- foreach ([$check_cdrw_erase, \$media_erase], [$check_dvdr, \$dvdr], [$check_dvdram, \$dvdram], [$check_multisession, \$multi_session]) {
- my $ref = $_->[1];
- gtksignal_connect(gtkset_active($_->[0], ${$ref}), toggled => sub { ${$ref} = ${$ref} ? 0 : 1 })
- }
- gtksignal_connect(gtkset_active($check_where_cd, $where_cd), toggled => sub {
- $where_cd = $where_cd ? 0 : 1;
- #- toggle where_net, where_tape off
- if ($where_cd eq 1) {
- $where_net = 0;
- $where_tape = 0;
- }
- ${$central_widget}->destroy();
- $current_widget->();
- });
- gtksignal_connect(gtkset_active($check_cdrw, $cdrw), toggled => sub {
- $cdrw = $cdrw ? 0 : 1;
- $check_cdrw_erase->set_sensitive($cdrw);
- ${$central_widget}->destroy();
- $current_widget->();
- });
- $button_erase_now->signal_connect('clicked', sub {
- if ($cd_device) {
- erase_cdrw();
- } else {
- $in->ask_warn('', N("No CD device defined!"));
- }
- });
- $combo_where_cdrecord_device->entry->set_text($cd_device);
- $combo_where_cdrecord_device->entry->signal_connect('changed', sub { $cd_device = $combo_where_cdrecord_device->entry->get_text() });
-
- $combo_where_cd_time->entry->set_text($cd_time);
- $combo_where_cd_time->entry->signal_connect('changed', sub { $cd_time = $combo_where_cd_time->entry->get_text() });
-
- #- this one drives changes in the other entries
- #- still not getting quite the desired behavior, but combo box signals seem to be limited
- #- tried to trigger from the selection, but it either does nothing or crashes!
-
-#- $combo_where_cd_device->entry->set_text($std_device);
- $combo_where_cd_device->entry->signal_connect('activate', sub {
- $std_device = $combo_where_cd_device->entry->get_text();
- $combo_where_cdrecord_device->entry->set_text($cd_devices{$std_device}{rec_dev});
- $check_dvdr->set_active($cd_devices{$std_device}{dvdr});
- $check_dvdram->set_active($cd_devices{$std_device}{dvdram});
- #- do this one last or the widget destory mucks up the others
- $check_cdrw->set_active($cd_devices{$std_device}{cdrw});
- });
-
- if ($previous_function) {
- fonction_env(\$box_where_cd, \&advanced_where_cd, \&$previous_function, "");
- } else {
- fonction_env(\$box_where_cd, \&advanced_where_cd, \&advanced_where, "");
- }
- $up_box->show_all();
-}
-
-sub advanced_where_tape {
- my ($previous_function) = @_,
-
- #- look for tape devices;
- get_tape_info();
-
- my $combo_where_tape_device = new Gtk2::Combo();
- $combo_where_tape_device->set_popdown_strings(@tape_devices) if @tape_devices;
-
- my $box_where_tape;
- my $button;
- my $adj = new Gtk2::Adjustment(550.0, 1.0, 10000.0, 1.0, 5.0, 0.0);
- #my ($pix_fs_map, $pix_fs_mask) = gtkcreate_img("filedialog");
-
- gtkpack($advanced_box,
- $box_where_tape = gtkpack_(new Gtk2::VBox(0, 6),
- 0, new Gtk2::HSeparator,
- 0, my $check_where_tape = new Gtk2::CheckButton(N("Use tape to backup")),
- 0, new Gtk2::HSeparator,
- 0, gtkpack_(new Gtk2::HBox(0,10),
- 0, gtkset_sensitive(new Gtk2::Label(N("Please enter the device name to use for backup")), $where_tape),
- 1, new Gtk2::VBox(0, 6),
- 0, gtkset_sensitive(gtkset_size_request($combo_where_tape_device, 200, 20), $where_tape),
- ),
- 0, new Gtk2::VBox(0, 5),
- 0, gtkpack_(new Gtk2::HBox(0,10),
- 0, gtkset_sensitive(new Gtk2::Label(N("Please check if you want to use the non-rewinding device.")), $where_tape),
- 1, new Gtk2::VBox(0, 5),
- 0, gtkset_sensitive(my $check_tape_rewind = new Gtk2::CheckButton(), $where_tape),
- ),
- 0, new Gtk2::VBox(0, 5),
- 0, gtkpack_(new Gtk2::HBox(0,10),
- 0, gtkset_sensitive(new Gtk2::Label(N("Please check if you want to erase your tape before the backup.")), $where_tape),
- 1, new Gtk2::VBox(0, 5),
- 0, gtkset_sensitive(my $check_tape_erase = new Gtk2::CheckButton(), $where_tape),
- ),
- 0, new Gtk2::VBox(0, 5),
- 0, gtkpack_(new Gtk2::HBox(0,10),
- 0, gtkset_sensitive(new Gtk2::Label(N("Please check if you want to eject your tape after the backup.")), $where_tape),
- 1, new Gtk2::VBox(0, 5),
- 0, gtkset_sensitive(my $check_tape_eject = new Gtk2::CheckButton(), $where_tape),
- ),
- 0, new Gtk2::VBox(0, 6),
- 0, gtkpack_(new Gtk2::HBox(0,10),
- 0, gtkset_sensitive(new Gtk2::Label(N("Please enter the maximum size\n allowed for Drakbackup")), $where_tape),
- 1, new Gtk2::VBox(0, 6),
- 0, gtkset_size_request(gtkset_sensitive(my $spinner = new Gtk2::SpinButton($adj, 0, 0), $where_tape), 200, 20),
- ),
- 0, gtkpack_(new Gtk2::HBox(0,10),),
- ),
- );
- gtksignal_connect(gtkset_active($check_where_tape, $where_tape), toggled => sub {
- $where_tape = $where_tape ? 0 : 1;
- #- assure other methods are off
- if ($where_tape eq 1) {
- $where_net = 0;
- $where_cd = 0;
- }
- ${$central_widget}->destroy();
- $current_widget->();
- });
- gtksignal_connect(gtkset_active($check_tape_rewind, $tape_norewind), toggled => sub {
- $tape_norewind = $tape_norewind ? 0 : 1;
- $_ = $tape_device;
- if ($tape_norewind) {
- $tape_device =~ s/\/st/\/nst/;
- } else {
- $tape_device =~ s/\/nst/\/st/;
- }
- $combo_where_tape_device->entry->set_text($tape_device);
- ${$central_widget}->destroy();
- $current_widget->();
-
- });
- gtksignal_connect(gtkset_active($check_tape_erase, $media_erase), toggled => sub {
- $media_erase = $media_erase ? 0 : 1;
- ${$central_widget}->destroy();
- $current_widget->();
- });
- gtksignal_connect(gtkset_active($check_tape_eject, $media_eject), toggled => sub {
- $media_eject = $media_eject ? 0 : 1;
- ${$central_widget}->destroy();
- $current_widget->();
- });
- $combo_where_tape_device->entry->set_text($tape_device);
- $combo_where_tape_device->entry->signal_connect('changed', sub {
- $tape_device = $combo_where_tape_device->entry->get_text();
- });
- if ($previous_function) {
- fonction_env(\$box_where_tape, \&advanced_where_tape, \&$previous_function, "");
- } else {
- fonction_env(\$box_where_tape, \&advanced_where_tape, \&advanced_where, "");
- }
- $up_box->show_all();
-}
-
-sub advanced_where_hd {
- my ($previous_function) = @_,
- my $box_where_hd;
- my $button;
- my $adj = new Gtk2::Adjustment(550.0, 1.0, 10000.0, 1.0, 5.0, 0.0);
-
- gtkpack($advanced_box,
- $box_where_hd = gtkpack_(new Gtk2::VBox(0, 6),
- 0, new Gtk2::HSeparator,
-# 0, my $check_where_hd = new Gtk2::CheckButton( N("Use Hard Disk to backup")),
-# 0, new Gtk2::HSeparator,
- 0, gtkpack_(new Gtk2::HBox(0,10),
- 0, gtkset_sensitive(new Gtk2::Label(N("Please enter the directory to save to:")), $where_hd),
- 1, new Gtk2::VBox(0, 6),
- 0, gtkset_size_request(gtkset_sensitive($save_path_entry = new Gtk2::Entry(), $where_hd), 152, 20),
- 0, gtkset_sensitive($button = gtksignal_connect(new Gtk2::Button(), clicked => sub {
- filedialog_where_hd()
- }), $where_hd),
- ),
- 0, new Gtk2::VBox(0, 6),
- 0, gtkpack_(new Gtk2::HBox(0,10),
- 0, gtkset_sensitive(new Gtk2::Label(N("Please enter the maximum size\n allowed for Drakbackup")), $where_hd),
- 1, new Gtk2::VBox(0, 6),
- 0, gtkset_size_request(gtkset_sensitive(my $spinner = new Gtk2::SpinButton($adj, 0, 0), $where_hd), 200, 20),
- ),
- 0, gtkpack_(new Gtk2::HBox(0,10),
- 1, new Gtk2::VBox(0, 6),
- 0, gtkset_sensitive(my $check_where_hd_quota = new Gtk2::CheckButton(N("Use quota for backup files.")), $where_hd),
- 0, new Gtk2::VBox(0, 6),
- ),
- ),
- );
- foreach ([$check_where_hd_quota, \$hd_quota]) {
- my $ref = $_->[1];
- gtksignal_connect(gtkset_active($_->[0], ${$ref}), toggled => sub { ${$ref} = ${$ref} ? 0 : 1 })
- }
-# gtksignal_connect(gtkset_active($check_where_hd, $where_hd), toggled => sub {
-# $where_hd = $where_hd ? 0 : 1;
-# $where_hd = 1;
-# ${$central_widget}->destroy();
-# $current_widget->();
-# });
- $button->add(gtkpack(new Gtk2::HBox(0,10), gtkcreate_img("ic82-dossier-32")));
- $save_path_entry->set_text($save_path);
- $save_path_entry->signal_connect('changed', sub { $save_path = $save_path_entry->get_text() });
- if ($previous_function) {
- fonction_env(\$box_where_hd, \&advanced_where_hd, \&$previous_function, "");
- } else {
- fonction_env(\$box_where_hd, \&advanced_where_hd, \&advanced_where, "");
- }
- $up_box->show_all();
-}
-
-sub advanced_where {
- my $box_where;
-
- gtkpack($advanced_box,
- $box_where = gtkpack_(new Gtk2::HBox(0, 15),
- 1, new Gtk2::VBox(0, 5),
- 1, gtkpack_(new Gtk2::VBox(0, 15),
- 1, new Gtk2::VBox(0, 5),
- 1, gtksignal_connect(my $button_where_net = new Gtk2::Button(), clicked => sub {
- ${$central_widget}->destroy();
- advanced_where_net_types();
- }),
- 1, gtksignal_connect(my $button_where_cd = new Gtk2::Button(), clicked => sub {
- ${$central_widget}->destroy();
- if (require_rpm("mkisofs", "cdrecord")) {
- advanced_where_cd();
- } else {
- ${$central_widget}->destroy();
- install_rpm(\&advanced_where);
- }
- }),
- 1, gtksignal_connect(my $button_where_hd = new Gtk2::Button(), clicked => sub {
- ${$central_widget}->destroy();
- advanced_where_hd();
- }),
- 1, gtksignal_connect(my $button_where_tape = new Gtk2::Button(), clicked => sub {
- ${$central_widget}->destroy();
- # message_underdevel();
- advanced_where_tape() }),
- 1, new Gtk2::VBox(0, 5),
- ),
- 1, new Gtk2::VBox(0, 5),
- ),
- );
- $button_where_net->add(gtkpack(new Gtk2::HBox(0,10),
- gtkcreate_img("ic82-network-40"),
- new Gtk2::Label(N("Network")),
- new Gtk2::HBox(0, 5)
- ));
- $button_where_cd->add(gtkpack(new Gtk2::HBox(0,10),
- gtkcreate_img("ic82-CD-40"),
- new Gtk2::Label(N("CDROM / DVDROM")),
- new Gtk2::HBox(0, 5)
- ));
- $button_where_hd->add(gtkpack(new Gtk2::HBox(0,10),
- gtkcreate_img("ic82-discdurwhat-40"),
- new Gtk2::Label(N("HardDrive / NFS")),
- new Gtk2::HBox(0, 5)
- ));
- $button_where_tape->add(gtkpack(new Gtk2::HBox(0,10),
- gtkcreate_img("ic82-tape-40"),
- new Gtk2::Label(N("Tape")),
- new Gtk2::HBox(0, 5)
- ));
- fonction_env(\$box_where, \&advanced_where, \&advanced_box, "");
- $up_box->show_all();
-}
-
-#- 7/7/2002 - S.Benedict reworked when - drop all the checkboxes and use a list
-#- chances that we want to do backups via multiple medias in cron are slim
-sub advanced_when {
- my $box_when;
-# $daemon_media = '';
- my $combo_when_space = new Gtk2::Combo();
- my %trans = (N("hourly") => 'hourly',
- N("daily") => 'daily',
- N("weekly") => 'weekly',
- N("monthly") => 'monthly');
- my %trans2 = ('hourly' => N("hourly"),
- 'daily' => N("daily"),
- 'weekly' => N("weekly"),
- 'monthly' => N("monthly"));
- $combo_when_space->set_popdown_strings(N("hourly"), N("daily"), N("weekly"), N("monthly"));
-
- #- drop down list of possible medias - default to config value
- my $entry_media_type = new Gtk2::Combo();
- $entry_media_type->set_popdown_strings(@media_types, @net_methods);
-# $entry_media_type->set_value_in_list(1, 0);
- $entry_media_type->entry->set_text($daemon_media);
-
- gtkpack($advanced_box,
- $box_when = gtkpack_(new Gtk2::VBox(0, 15),
- 0, gtkpack_(new Gtk2::HBox(0,10),
- 1, new Gtk2::HBox(0,10),
- 1, gtkcreate_img("ic82-when-40"),
- 0, my $check_when_daemon = new Gtk2::CheckButton(N("Use daemon")),
- 1, new Gtk2::HBox(0,10),
- ),
- 0, new Gtk2::HSeparator,
- 0, gtkpack_(new Gtk2::HBox(0,10),
- 0, gtkset_sensitive(new Gtk2::Label(N("Please choose the time \ninterval between each backup")), $backup_daemon),
- 1, new Gtk2::HBox(0,10),
- 0, gtkset_sensitive($combo_when_space, $backup_daemon),
- ),
- 0, new Gtk2::HBox(0,10),
- 0, gtkpack_(new Gtk2::HBox(0,10),
- 0, gtkset_sensitive(new Gtk2::Label(N("Please choose the\nmedia for backup.")), $backup_daemon),
- 1, new Gtk2::HBox(0,10),
- 0, gtkpack_(new Gtk2::VBox(0,10),
- 0, gtkset_sensitive($entry_media_type, $backup_daemon),
- ),
- ),
- 0, new Gtk2::HSeparator,
- 1, gtkset_sensitive(new Gtk2::Label(N("Please be sure that the cron daemon is included in your services.
-\nNote that currently all 'net' medias also use the hard drive.")), $backup_daemon),
- ),
- );
-
- gtksignal_connect(gtkset_active($check_when_daemon, $backup_daemon), toggled => sub {
- $backup_daemon = $backup_daemon ? 0 : 1;
- ${$central_widget}->destroy();
- advanced_when();
- });
- $combo_when_space->entry->set_text($trans2{$when_space});
- $combo_when_space->entry->signal_connect('changed', sub { $when_space = $trans{$combo_when_space->entry->get_text()} });
- $entry_media_type->entry->signal_connect('changed', sub {
- $daemon_media = $entry_media_type->entry->get_text();
- });
- fonction_env(\$box_when, \&advanced_when, \&advanced_box, "");
- $up_box->show_all();
-}
-
-sub advanced_options {
- my $box_options;
-
- gtkpack($advanced_box,
- $box_options = gtkpack_(new Gtk2::VBox(0, 15),
-# 0, gtkpack_(new Gtk2::HBox(0,10),
-# 1, new Gtk2::VBox(0,10),
-# 1, gtkcreate_img("ic82-moreoption-40"),
-# 1, N("Please choose correct options to backup."),
-# 1, new Gtk2::VBox(0,10),
-# ),
-# 0, new Gtk2::HSeparator,
-# 0, gtkpack_(new Gtk2::VBox(0,10),
-# 0, gtkset_sensitive(my $check_tar_bz2 = new Gtk2::CheckButton( N("Use Tar and bzip2 (very slow) [Please be careful if you\n (un)select this option, as all your old backups will be deleted.]")), 0),
-# 0, gtkset_sensitive(my $check_backupignore = new Gtk2::CheckButton( N("Use .backupignore files")), 0),
- 0, new Gtk2::VBox(0,10),
- 0, gtkpack_(new Gtk2::HBox(0,10),
- 0, my $check_mail = new Gtk2::CheckButton(N("Send mail report after each backup to:")),
- 1, new Gtk2::HBox(0,10),
- 0, my $mail_entry = new Gtk2::Entry(),
- ),
-# ),
- 0, gtkpack_(new Gtk2::HBox(0,10),
- 0, my $check_del_hd_files = new Gtk2::CheckButton(N("Delete Hard Drive tar files after backup to other media.")),
- ),
- ),
- );
- check_list([$check_mail, \$send_mail], [$check_del_hd_files, \$del_hd_files]);
-# check_list([$check_mail, \$send_mail], [$check_tar_bz2, \$comp_mode], [$check_backupignore, \$backupignore]);
- $mail_entry->set_text($user_mail);
- $mail_entry->signal_connect('changed', sub { $user_mail = $mail_entry->get_text() });
- fonction_env(\$box_options, \&advanced_options, \&advanced_box, "options");
- $up_box->show_all();
-}
-
-sub advanced_box {
- my $box_adv;
-
- gtkpack($advanced_box,
- $box_adv = gtkpack_(new Gtk2::HBox(0, 15),
- 1, new Gtk2::VBox(0, 5),
- 1, gtkpack_(new Gtk2::VBox(0, 15),
- 1, new Gtk2::VBox(0, 5),
- 1, gtksignal_connect(my $button_what = new Gtk2::Button(), clicked => sub {
- ${$central_widget}->destroy(); advanced_what() }),
- 1, gtksignal_connect(my $button_where = new Gtk2::Button(), clicked => sub {
- ${$central_widget}->destroy(); advanced_where() }),
- 1, gtksignal_connect(my $button_when = new Gtk2::Button(), clicked => sub {
- ${$central_widget}->destroy(); advanced_when() }),
- 1, gtksignal_connect(my $button_options = new Gtk2::Button(), clicked => sub {
- ${$central_widget}->destroy(); advanced_options() }),
- 1, new Gtk2::VBox(0, 5),
- ),
- 1, new Gtk2::VBox(0, 5),
- ),
- );
- $button_what->add(gtkpack(new Gtk2::HBox(0,10),
- gtkcreate_img("ic82-discdurwhat-40"),
- new Gtk2::Label(N("What")),
- new Gtk2::HBox(0, 5)
- ));
- $button_where->add(gtkpack(new Gtk2::HBox(0,10),
- gtkcreate_img("ic82-where-40"),
- new Gtk2::Label(N("Where")),
- new Gtk2::HBox(0, 5)
- ));
- $button_when->add(gtkpack(new Gtk2::HBox(0,10),
- gtkcreate_img("ic82-when-40"),
- new Gtk2::Label(N("When")),
- new Gtk2::HBox(0, 5)
- ));
- $button_options->add(gtkpack(new Gtk2::HBox(0,10),
- gtkcreate_img("ic82-moreoption-40"),
- new Gtk2::Label(N("More Options")),
- new Gtk2::HBox(0, 5)
- ));
- fonction_env(\$box_adv, \&advanced_box, \&interactive_mode_box, "");
- $up_box->show_all();
-}
-
-################################################ WIZARD ################################################
-
-sub wizard_step3 {
- my $box2;
- my $text = new Gtk2::TextView;
- system_state();
- gtktext_insert($text, [ [ $system_state ] ]);
- button_box_restore_main();
-
- gtkpack($advanced_box,
- $box2 = gtkpack_(new Gtk2::HBox(0, 15),
- 1, gtkpack_(new Gtk2::VBox(0,10),
- 0, N("Drakbackup Configuration"),
- 1, create_scrolled_window($text),
- ),
- ),
- );
- fonction_env(\$box2, \&wizard_step3, \&wizard_step2, "");
- button_box_wizard_end();
- $up_box->show_all();
-}
-
-sub wizard_step2 {
- my $box2;
-
- gtkpack($advanced_box,
- $box2 = gtkpack_(new Gtk2::HBox(0, 15),
- 1, new Gtk2::VBox(0, 5),
- 1, gtkpack_(new Gtk2::VBox(0, 15),
- 1, new Gtk2::VBox(0, 5),
- 0, N("Please choose where you want to backup"),
- 0, gtkpack_(new Gtk2::HBox(0, 15),
- 0, my $check_wizard_hd = new Gtk2::CheckButton(N("on Hard Drive")),
- 1, new Gtk2::VBox(0, 5),
- 0, gtkset_sensitive(gtksignal_connect(new Gtk2::Button(N("Configure")), clicked => sub {
- ${$central_widget}->destroy();
- to_ok();
- advanced_where_hd(\&wizard_step2);
- to_normal();
- }), $where_hd),
- ),
- 0, gtkpack_(new Gtk2::HBox(0, 15),
- 0, my $check_wizard_net = new Gtk2::CheckButton(N("across Network")),
- 1, new Gtk2::VBox(0, 5),
- 0, gtkset_sensitive(gtksignal_connect(new Gtk2::Button(N("Configure")), clicked => sub {
- ${$central_widget}->destroy();
- to_ok();
- advanced_where_net_types(\&wizard_step2);
- to_normal();
- }), $where_net),
- ),
- 0, gtkpack_(new Gtk2::HBox(0, 15),
- 0, my $check_wizard_cd = new Gtk2::CheckButton(N("on CDROM")),
- 1, new Gtk2::VBox(0, 5),
- 0, gtkset_sensitive(gtksignal_connect(new Gtk2::Button(N("Configure")), clicked => sub {
- ${$central_widget}->destroy();
- advanced_where_cd(\&wizard_step2);
- }), $where_cd),
- ),
- 0, gtkpack_(new Gtk2::HBox(0, 15),
- 0, my $check_wizard_tape = new Gtk2::CheckButton(N("on Tape Device")),
- 1, new Gtk2::VBox(0, 5),
- 0, gtkset_sensitive(gtksignal_connect(new Gtk2::Button(N("Configure")), clicked => sub {
- ${$central_widget}->destroy();
- advanced_where_tape(\&wizard_step2);
- }), $where_tape),
- ),
- 1, new Gtk2::VBox(0, 5),
- ),
- 1, new Gtk2::VBox(0, 5),
- ),
- );
- foreach ([$check_wizard_hd, \$where_hd],
- [$check_wizard_cd, \$where_cd],
- [$check_wizard_tape, \$where_tape],
- [$check_wizard_net, \$where_net]) {
- my $ref = $_->[1];
- gtksignal_connect(gtkset_active($_->[0], ${$ref}), toggled => sub {
- ${$ref} = ${$ref} ? 0 : 1;
- $where_hd = 1;
- if (!$where_hd && !$where_cd && !$where_net) {
- $next_widget = \&message_noselect_box
- } else {
- $next_widget = \&wizard_step3
- }
- ${$central_widget}->destroy();
- wizard_step2();
- })
- }
- if (!$where_hd && !$where_cd && !$where_net) { fonction_env(\$box2, \&wizard_step2, \&wizard, "", \&message_noselect_box) }
- else { fonction_env(\$box2, \&wizard_step2, \&wizard, "", \&wizard_step3) }
- button_box_wizard();
- $up_box->show_all();
-}
-
-sub wizard {
- my $box2;
-
- gtkpack($advanced_box,
- $box2 = gtkpack_(new Gtk2::HBox(0, 15),
- 1, new Gtk2::VBox(0, 5),
- 1, gtkpack_(new Gtk2::VBox(0, 15),
- 1, new Gtk2::VBox(0, 5),
- 0, N("Please choose what you want to backup"),
- 0, my $check_wizard_sys = new Gtk2::CheckButton(N("Backup system")),
- 0, my $check_wizard_user = new Gtk2::CheckButton(N("Backup Users")),
- 0, gtkpack_(new Gtk2::HBox(0, 15),
- 1, new Gtk2::VBox(0, 5),
- 0, gtksignal_connect(new Gtk2::Button(N("Select user manually")), clicked => sub {
- ${$central_widget}->destroy();
- advanced_what_user(\&wizard);
- }),
- ),
- 1, new Gtk2::VBox(0, 5),
- ),
- 1, new Gtk2::VBox(0, 5),
- ),
- );
- foreach ([$check_wizard_sys, \$backup_sys], [$check_wizard_user, \$backup_user]) {
- my $ref = $_->[1];
- gtksignal_connect(gtkset_active($_->[0], ${$ref}), toggled => sub {
- ${$ref} = ${$ref} ? 0 : 1;
- if ($backup_sys || $backup_user && @user_list) {
- $next_widget = \&wizard_step2
- } else {
- $next_widget = \&message_noselect_what_box }
- })
- }
- if ($backup_sys || $backup_user && @user_list) { fonction_env(\$box2, \&wizard, \&interactive_mode_box, "", \&wizard_step2) }
- else { fonction_env(\$box2, \&wizard, \&interactive_mode_box, "", \&message_noselect_what_box) }
- button_box_wizard();
- $up_box->show_all();
-}
-
-################################################ RESTORE ################################################
-
-sub find_backup_to_restore {
- my @list_backup;
- my @list_backup_tmp2;
- my $to_put;
- @sys_backuped = ();
- my @list_backup_tmp;
- my @user_backuped_tmp;
-
- @user_backuped = ();
- -d $path_to_find_restore and @list_backup_tmp2 = all($path_to_find_restore);
-
- foreach (@list_backup_tmp2) {
- s/\_base//gi;
- s/\_incr//gi;
- push @list_backup , $_;
- }
- if (grep /^backup_other/, @list_backup) { $other_backuped = 1 }
- if (grep /^backup_sys/, @list_backup) { $sys_backuped = 1 }
- foreach (grep /^backup_sys_/, @list_backup) {
- chomp;
- s/^backup_sys_//gi;
- s/.tar.gz$//gi;
- s/.tar.bz2$//gi;
- my ($date, $heure) = /^(.*)_([^_]*)$/;
- my $year = substr($date, 0, 4);
- my $month = substr($date, 4, 2);
- my $day = substr($date, 6, 2);
- my $hour = substr($heure, 0, 2);
- my $min = substr($heure, 2, 2);
- $to_put = "$day/$month/$year $hour:$min $_";
- push @sys_backuped , $to_put;
- }
- $restore_step_sys_date = $to_put;
- foreach (grep /^backup_user_/, @list_backup) {
- chomp;
- s/^backup_user_//gi;
- s/.tar.gz$//gi;
- s/.tar.bz2$//gi;
- my ($nom, $date, $heure) = /^(.*)_([^_]*)_([^_]*)$/;
- my $year = substr($date, 0, 4);
- my $month = substr($date, 4, 2);
- my $day = substr($date, 6, 2);
- my $hour = substr($heure, 0, 2);
- my $min = substr($heure, 2, 2);
-# my $to_put = " $nom, (date: $date, hour: $heure)";
- $to_put = "$_ user: $nom, date: $day/$month/$year, hour: $hour:$min";
- push @user_backuped , $to_put;
- grep (/^$nom$/, @user_list_backuped) or push @user_list_backuped, $nom;
- }
-}
-
-sub system_state {
- $system_state;
-
- if ($cfg_file_exist) {
- $system_state .= N("\nBackup Sources: \n");
- $backup_sys and $system_state .= N("\n- System Files:\n");
- $backup_sys and $system_state .= "\t\t$_\n" foreach @sys_files;
- $backup_user and $system_state .= N("\n- User Files:\n");
- $backup_user and $system_state .= "\t\t$_\n" foreach @user_list;
- @list_other and $system_state .= N("\n- Other Files:\n");
- @list_other and $system_state .= "\t\t$_\n" foreach @list_other;
- $where_hd and $system_state .= N("\n- Save on Hard drive on path: %s\n", $save_path);
-
- if ($del_hd_files && ($where_cd || $where_tape || $where_net) && $daemon_media ne 'hd') {
- $system_state .= N("\n- Delete hard drive tar files after backup.\n");
- }
-
- #- tape and CDRW share some features
- my $erase_media = 'NO';
- $erase_media = 'YES' if $media_erase && ($where_cd || $where_tape);
- $where_cd and $system_state .= N("\n- Burn to CD");
- $where_cd and $cdrw and $system_state .= N("RW");
- $where_cd and $system_state .= N(" on device: %s", $cd_device);
- $where_cd and $multi_session and $system_state .= N(" (multi-session)");
- $where_tape and $system_state .= N("\n- Save to Tape on device: %s", $tape_device);
- (($where_cd || $where_tape) && $media_erase) and $system_state .= N("\t\tErase=%s", $erase_media);
- $where_cd || $where_tape and $system_state .= "\n";
-
- $where_net and $system_state .= N("\n- Save via %s on host: %s\n", $net_proto, $host_name);
- $where_net and $system_state .= N("\t\t user name: %s\n\t\t on path: %s \n", $login_user, $host_path);
- $system_state .= N("\n- Options:\n");
- $backup_sys or $system_state .= N("\tDo not include System Files\n");
-
- if ($comp_mode) {
- $system_state .= N("\tBackups use tar and bzip2\n");
- } else {
- $system_state .= N("\tBackups use tar and gzip\n");
- }
-
- $daemon_media and $system_state .= N("\n- Daemon (%s) include:\n", $when_space);
- $daemon_media eq 'hd' and $system_state .= N("\t-Hard drive.\n");
- $daemon_media eq 'cd' and $system_state .= N("\t-CDROM.\n");
- $daemon_media eq 'tape' and $system_state .= N("\t-Tape \n");
- $daemon_media eq 'ftp' and $system_state .= N("\t-Network by FTP.\n");
- $daemon_media eq 'ssh' and $system_state .= N("\t-Network by SSH.\n");
- $daemon_media eq 'rsync' and $system_state .= N("\t-Network by rsync.\n");
- $daemon_media eq 'webdav' and $system_state .= N("\t-Network by webdav.\n");
- } else {
- $system_state = N("No configuration, please click Wizard or Advanced.\n");
- }
-}
-
-sub restore_state {
- my @tmp = split(' ', $restore_step_sys_date);
- $restore_state = N("List of data to restore:\n\n");
- if ($restore_sys) { $restore_state .= "- Restore System Files.\n";
- $restore_state .= " - from date: $tmp[0] $tmp[1]\n";
- }
- if ($restore_user) {
- $restore_state .= "- Restore User Files: \n";
- $restore_state .= "\t\t$_\n" foreach @user_list_to_restore2;
- push @user_list_to_restore, (split(',', $_))[0] foreach @user_list_to_restore2;
- }
- if ($restore_other) {
- $restore_state .= "- Restore Other Files: \n";
- -f "$path_to_find_restore/list_other" and $restore_state .= "\t\t$_\n" foreach split("\n", cat_("$path_to_find_restore/list_other"));
- }
- if ($restore_other_path) {
- $restore_state .= "- Path to Restore: $restore_path \n";
- }
-}
-
-sub select_most_recent_selected_of {
- my ($user_name) = @_;
- my @list_tmp2;
- my @tmp = sort @user_list_to_restore2;
- foreach (grep /$user_name\_/, sort @tmp) { push @list_tmp2 , $_ }
- return pop @list_tmp2;
-}
-
-sub select_user_data_to_restore {
- my $var_eq = 1;
- my @list_backup;
- my @list_tmp;
- my @list_tmp2;
- @user_list_to_restore = ();
-
- -d $path_to_find_restore and my @list_backup_tmp2 = grep /^backup/, all($path_to_find_restore);
- @list_tmp2 = @list_backup_tmp2;
- foreach (@list_backup_tmp2) {
- s/\_base//gi;
- s/\_incr//gi;
- push @list_backup , $_;
- }
- foreach my $var_tmp (@user_list_backuped) {
- $var_eq = 1;
- my $more_recent = (split(' ', select_most_recent_selected_of($var_tmp)))[0];
- foreach (grep /^backup\_user\_$var_tmp\_/, sort @list_backup) {
- s/.tar.gz//gi;
- s/.tar.bz2//gi;
- if ($more_recent) {
- if (/$more_recent/) {
- push @list_tmp , $_;
- $var_eq = 0;
- } else {
- #- only if user asked for it - previously this was restoring everything (SB)
- my $tmp_name = $_;
- s/backup\_user\_//gi;
- foreach my $buff (@user_list_to_restore2) {
- if (index($buff, $_) >= 0) {
- $var_eq and push @list_tmp , $tmp_name;
- }
- }
- }
- }
- }
- }
- foreach my $var_to_restore (@list_tmp) {
- $var_to_restore =~ s/backup_//gi;
- foreach my $var_exist (sort @list_tmp2) {
- if ($var_exist =~ /$var_to_restore/) {
- push @user_list_to_restore, $var_exist;
- }
- }
- }
- $DEBUG and print "real user list to restore: $_ \n" foreach @user_list_to_restore;
-}
-
-sub select_sys_data_to_restore {
- my $var_eq = 1;
- my @list_tmp;
-
- -d $path_to_find_restore and @list_tmp = grep /^backup/, all($path_to_find_restore);
- my @more_recent = split(' ', $restore_step_sys_date);
- my $more_recent = pop @more_recent;
- foreach my $var_exist (grep /\_sys\_/, sort @list_tmp) {
- if ($var_exist =~ /$more_recent/) {
- push @sys_list_to_restore, $var_exist;
- $var_eq = 0;
- } else {
- $var_eq and push @sys_list_to_restore, $var_exist;
- }
- }
- $DEBUG and print "sys list to restore: $_\n " foreach @sys_list_to_restore;
-}
-
-sub show_backup_details {
- my ($function, $mode, $name) = @_;
- my $archive_file_detail;
- my $value;
- my $fixed_font = Gtk2::Gdk::Font->load("-misc-fixed-medium-r-*-*-*-100-*-*-*-*-*-*");
- my $command2;
- my $tarfile;
-
- # FIXME - only tar.gz at the moment
- my $extension = ".tar.gz";
-
- if ($mode eq "user") {
- #- we've only got a partial filename in this case
- $tarfile = "$path_to_find_restore/backup_*" . $name . $extension;
- }
- if ($mode eq "sys") {
- #- funky string here we need to use to reconstruct the filename
- my @flist = split(/[ \t,]+/, $name);
- $tarfile = "$path_to_find_restore/backup_*" . $flist[2] . $extension;
- }
- my $command1 = "stat " . $tarfile;
- $command2 = "tar -tzvf " . $tarfile;
-
- local *TMP;
- open TMP, "$command1 2>&1 |";
- while ($value = <TMP>) {
- $archive_file_detail .= $value;
- }
- close TMP;
- $archive_file_detail .= "\n\n";
- open TMP, "$command2 2>&1 |";
- while ($value = <TMP>) {
- #- drop the permissions display for the sake of readability
- $archive_file_detail .= substr($value, 11);
- }
- close TMP;
-
- my $text = new Gtk2::Text;
- my $advanced_box_archive;
- $text->insert($fixed_font, undef, undef, $archive_file_detail);
- gtkpack($advanced_box,
- $advanced_box_archive = gtkpack_(new Gtk2::VBox(0,10),
- 1, gtkpack_(new Gtk2::HBox(0,0),
- 1, $text,
- 0, new Gtk2::VScrollbar($text->vadj),
- ),
- 0, gtkadd(gtkset_layout(new Gtk2::HButtonBox, 'spread'),
- gtksignal_connect(new Gtk2::Button(N("Done")), clicked => sub {
- ${$central_widget}->destroy();
- $function->() }),
- ),
- )
- );
- $central_widget = \$advanced_box_archive;
- $up_box->show_all();
-}
-
-sub valid_backup_test {
- my (@files_list) = @_;
- @files_corrupted = ();
- my $is_corrupted = 0;
- foreach (@files_list) {
- #- let's quiet this down (SB)
- if (system("gzip -l $path_to_find_restore/$_ > /dev/null 2>&1") > 1) {
- push @files_corrupted, $_;
- $is_corrupted = -1;
- }
- }
- return $is_corrupted;
-}
-
-sub restore_aff_backup_problems {
- my $do_restore;
- my $button_restore;
- my $text = new Gtk2::TextView;
- my $restore_pbs_state = N("List of data corrupted:\n\n");
- $restore_pbs_state .= "\t\t$_\n" foreach @files_corrupted;
- $restore_pbs_state .= N("Please uncheck or remove it on next time.");
- gtktext_insert($text, [ [ $restore_pbs_state ] ]);
- button_box_restore_main();
-
- gtkpack($advanced_box,
- $do_restore = gtkpack_(new Gtk2::VBox(0,10),
- 0, new Gtk2::VBox(0,10),
- 1, gtkpack_(new Gtk2::HBox(0, 15),
- 1, new Gtk2::VBox(0, 5),
- 0, gtkcreate_img('warning'),
- 0, N("Backup files are corrupted"),
- 1, new Gtk2::VBox(0, 5),
- ),
- 0, new Gtk2::VBox(0,10),
- 1, create_scrolled_window($text),
- ),
- );
- button_box_restore_pbs_end();
- fonction_env(\$do_restore, \&restore_aff_backup_problems, "", "restore_pbs");
- $up_box->show_all();
-}
-
-sub restore_aff_result {
- my $do_restore;
- my $text = new Gtk2::TextView;
- gtktext_insert($text, [ [ $restore_state ] ]);
- button_box_restore_main();
-
- gtkpack($advanced_box,
- $do_restore = gtkpack_(new Gtk2::VBox(0,10),
- 1, new Gtk2::VBox(0,10),
- 0, N(" All of your selected data have been "),
- 0, N(" Successfuly Restored on %s ", $restore_path),
- 1, new Gtk2::VBox(0,10),
- ),
- );
- button_box_build_backup_end();
- $central_widget = \$do_restore;
- $up_box->show_all();
-
-}
-
-sub return_path {
- my ($username) = @_;
- my $usr;
- my $home_dir;
- my $passwdfile = "/etc/passwd";
- open (PASSWD, $passwdfile) or exit 1;
- while (defined(my $line = <PASSWD>)) {
- chomp($line);
- ($usr, $home_dir) = (split(/:/, $line))[0,5];
- last if $usr eq $username;
- }
- close(PASSWD);
- return $home_dir;
-}
-
-sub restore_backend {
- my $untar_cmd;
- my $exist_problem = 0;
- my $user_dir;
- my $tnom;
- my $username;
- my $theure2;
-
- if (grep /tar.gz$/, all($path_to_find_restore)) {
- $untar_cmd = 0;
- } else {
- $untar_cmd = 1;
- }
-
- if ($restore_user) {
- select_user_data_to_restore();
- if (valid_backup_test(@user_list_to_restore) == -1) {
- $exist_problem = 1;
- restore_aff_backup_problems();
- } else {
- foreach (@user_list_to_restore) {
- if ($backup_user_versions) {
- ($tnom, $username, $theure2) = /^(\w+\_\w+\_user_)(.*)_(\d+\_\d+.*)$/;
- } else {
- ($tnom, $username, $theure2) = /^(\w+\_user_)(.*)_(\d+\_\d+.*)$/;
- }
-
- $user_dir = return_path($username);
- -d $user_dir and rm_rf($user_dir) if $remove_user_before_restore;
-
- $DEBUG and print "user name to restore: $username, user directory: $user_dir\n";
- $untar_cmd or system(" tar xfz $path_to_find_restore/$_ -C $restore_path");
- $untar_cmd and system("/usr/bin/bzip2 -cd $path_to_find_restore/$_ | tar xf -C $restore_path ");
- }
- #- flush this out for another cycle (SB)
- @user_list_to_restore2 = ();
- }
-
- }
-
- if ($restore_sys) {
- if ($backup_sys_versions) {
- select_sys_data_to_restore();
- if (valid_backup_test(@sys_list_to_restore) == -1) {
- $exist_problem = 1;
- restore_aff_backup_problems();
- } else {
- $untar_cmd or system("tar xfz $path_to_find_restore/$_ -C $restore_path ") foreach @sys_list_to_restore;
- $untar_cmd and system("/usr/bin/bzip2 -cd $path_to_find_restore/$_ | tar xf -C $restore_path ") foreach @sys_list_to_restore;
- }
- } else {
- $untar_cmd or system("tar xfz $path_to_find_restore/backup_sys.tar.gz -C $restore_path ");
- $untar_cmd and system("/usr/bin/bzip2 -cd $path_to_find_restore/backup_sys.tar.bz2 | tar xf -C $restore_path ");
- }
- }
- if ($restore_other) {
- $untar_cmd or system("tar xfz $path_to_find_restore/backup_other.tar.gz -C $restore_path ");
- $untar_cmd and system("/usr/bin/bzip2 -cd $path_to_find_restore/backup_other.tar.bz2 | tar xf -C $restore_path ");
- }
- $exist_problem or restore_aff_result();
-}
-
-sub restore_do {
- if ($backup_bef_restore) {
- if ($restore_sys) {
- $backup_sys = 1;
- } else {
- $backup_sys = 0;
- }
- if ($restore_user) {
- $backup_user = 1;
- @user_list = @user_list_to_restore;
- } else {
- $backup_user = 0;
- }
- build_backup_status();
- read_conf_file();
- build_backup_files();
- $table->destroy();
- }
- restore_do2();
-}
-
-sub restore_do2 {
- my $do_restore;
- my $button_restore;
- my $text = new Gtk2::TextView;
- restore_state();
- gtktext_insert($text, [ [ $restore_state ] ]);
- button_box_restore_main();
-
- gtkpack($advanced_box,
- $do_restore = gtkpack_(new Gtk2::VBox(0,10),
- 0, N(" Restore Configuration "),
- 1, create_scrolled_window($text),
- ),
- );
- button_box_restore_end();
- fonction_env(\$do_restore, \&restore_do2, \&restore_box, "restore");
- $up_box->show_all();
-}
-
-sub restore_step_other {
- my $retore_step_other;
- my $text = new Gtk2::TextView;
- my $other_rest = cat_("$path_to_find_restore/list_other");
- gtktext_insert($text, [ [ $other_rest ] ]);
- gtkpack($advanced_box,
- $retore_step_other = gtkpack_(new Gtk2::VBox(0,10),
- 1, new Gtk2::VBox(0,10),
- 1, create_scrolled_window($text),
- 0, my $check_restore_other_sure = new Gtk2::CheckButton(N("OK to restore the other files.")),
- 1, new Gtk2::VBox(0,10),
- ),
- );
- check_list([$check_restore_other_sure, \$restore_other]);
- fonction_env(\$retore_step_other, \&restore_step_other, \&restore_step2, "restore", \&restore_do);
- $up_box->show_all();
-}
-
-my %check_user_to_restore;
-sub restore_step_user {
- my $retore_step_user;
- my @tmp_list = sort @user_backuped;
- @user_backuped = @tmp_list;
- gtkpack($advanced_box,
- $retore_step_user = gtkpack_(new Gtk2::VBox(0,10),
- 0, new Gtk2::VBox(0,10),
- 0, N("User list to restore (only the most recent date per user is important)"),
- 1, create_scrolled_window(gtkpack__(new Gtk2::VBox(0,0),
- map { my $name;
- my $var2;
- my $name_complet = $_;
- $name = (split(' ', $name_complet))[0];
- my @user_list_tmp;
- my $restore_row = new Gtk2::HBox(0,5);
- my $b = new Gtk2::CheckButton($name_complet);
- my $details = new Gtk2::Button(" Details ");
-
- $restore_row->pack_start($b, 1, 1, 0);
- $restore_row->pack_end(new Gtk2::VBox(1,5), 0, 0, 0);
- $restore_row->pack_end($details, 0, 0, 0);
-
-# this doesn't work - I don't understand why - but you end up with
-# everything selected when you hit the screen a second time, after selecting one
-# if (grep $name_complet, @user_list_to_restore2) {
-# gtkset_active($b, 1);
-# $check_user_to_restore{$name_complet}[1] = 1;
-# } else {
-# gtkset_active($b, 0);
-# $check_user_to_restore{$name_complet}[1] = 0;
-# }
-
-# this doesn't work right either - returning to the screen only 1 is selected
-# yet several are scheduled to be restored
- foreach (@user_list_to_restore2) {
- if ($name_complet eq $_) {
- gtkset_active($b, 1);
- $check_user_to_restore{$name_complet}[1] = 1;
- } else {
- gtkset_active($b, 0);
- $check_user_to_restore{$name_complet}[1] = 0;
- }
- }
- $b->signal_connect(toggled => sub {
- if (!$check_user_to_restore{$name_complet}[1]) {
- $check_user_to_restore{$name_complet}[1] = 1;
- if (!grep (/$name/, @user_list_to_restore2)) {
- push @user_list_to_restore2, $name_complet
- }
- } else {
- $check_user_to_restore{$name_complet}[1] = 0;
- foreach (@user_list_to_restore2) {
- $var2 = (split(' ', $_))[0];
- if ($name ne $var2) {
- push @user_list_tmp, $_;
- }
- }
- @user_list_to_restore2 = @user_list_tmp;
- }
- });
- $details->signal_connect('clicked', sub {
- #- we're only passing a portion of the filename to
- #- the subroutine so we need to let it know this
- ${$central_widget}->destroy();
- show_backup_details(\&restore_step_user, "user", $name);
- });
- $restore_row } (@user_backuped)
- ),
- ),
- ),
- );
- if ($restore_other) { fonction_env(\$retore_step_user, \&restore_step_user, "", "restore", \&restore_step_other) }
- elsif ($restore_sys) { fonction_env(\$retore_step_user, \&restore_step_user, \&restore_step_sys, "restore", \&restore_step_other) }
- else { fonction_env(\$retore_step_user, \&restore_step_user, \&restore_step2, "restore", \&restore_do) }
- $up_box->show_all();
-}
-
-sub restore_step_sys {
- my $restore_step_sys;
- my $combo_restore_step_sys = new Gtk2::Combo();
- $combo_restore_step_sys->set_popdown_strings(@sys_backuped);
-
- gtkpack($advanced_box,
- $restore_step_sys = gtkpack_(new Gtk2::VBox(0,10),
- 1, new Gtk2::VBox(0,10),
- 0, my $check_backup_before = new Gtk2::CheckButton(N("Backup the system files before:")),
- 0, gtkpack_(new Gtk2::HBox(0,10),
- 1, N("please choose the date to restore"),
- 0, $combo_restore_step_sys,
- 0, my $details = new Gtk2::Button(" Details "),
- 0, new Gtk2::HBox(0,10),
- ),
- 1, new Gtk2::VBox(0,10),
-
- ),
- );
- $combo_restore_step_sys->entry->signal_connect('changed', sub {
- $restore_step_sys_date = $combo_restore_step_sys->entry->get_text();
- });
- $details->signal_connect('clicked', sub {
- #- we're only passing a portion of the filename to
- #- the subroutine so we need to let it know this
- my $backup_date = $combo_restore_step_sys->entry->get_text();
- ${$central_widget}->destroy();
- show_backup_details(\&restore_step_sys, "sys", $backup_date);
- });
- $combo_restore_step_sys->entry->set_text($restore_step_sys_date);
- fonction_env(\$restore_step_sys, \&restore_step_sys, \&restore_step2, "restore");
- if ($restore_user) { fonction_env(\$restore_step_sys, \&restore_step_sys, \&restore_step2, "restore", \&restore_step_user) }
- elsif ($restore_other) { fonction_env(\$restore_step_sys, \&restore_step_sys, \&restore_step2, "restore", \&restore_step_other) }
- else { fonction_env(\$restore_step_sys, \&restore_step_sys, \&restore_step2, "restore", \&restore_do) }
- $up_box->show_all();
-}
-
-sub restore_other_media_hd {
- my ($previous_function) = @_,
- my $box_where_hd;
- my $button;
- my $adj = new Gtk2::Adjustment(550.0, 1.0, 10000.0, 1.0, 5.0, 0.0);
-
- gtkpack($advanced_box,
- $box_where_hd = gtkpack_(new Gtk2::VBox(0, 6),
- 0, new Gtk2::HSeparator,
- 0, my $check_where_hd = new Gtk2::CheckButton(N("Use Hard Disk to backup")),
- 0, new Gtk2::HSeparator,
- 0, gtkpack_(new Gtk2::HBox(0,10),
- 0, gtkset_sensitive(new Gtk2::Label(N("Please enter the directory to save:")), $where_hd),
- 1, new Gtk2::VBox(0, 6),
- 0, gtkset_size_request(gtkset_sensitive($save_path_entry = new Gtk2::Entry(), $where_hd), 152, 20),
- 0, gtkset_sensitive($button = gtksignal_connect(new Gtk2::Button(), clicked => sub {
- filedialog_where_hd() }), $where_hd),
- ),
- 0, new Gtk2::VBox(0, 6),
- 0, gtkpack_(new Gtk2::HBox(0,10),
- 0, gtkset_sensitive(new Gtk2::Label(N("Please enter the maximum size\n allowed for Drakbackup")), $where_hd),
- 1, new Gtk2::VBox(0, 6),
- 0, gtkset_size_request(gtkset_sensitive(my $spinner = new Gtk2::SpinButton($adj, 0, 0), $where_hd), 200, 20),
- ),
- 0, gtkpack_(new Gtk2::HBox(0,10),
- 1, new Gtk2::VBox(0, 6),
- 0, gtkset_sensitive(my $check_where_hd_quota = new Gtk2::CheckButton(N("Use quota for backup files.")), $where_hd),
- 0, new Gtk2::VBox(0, 6),
- ),
- ),
- );
- check_list([$check_where_hd_quota, \$hd_quota]);
- gtksignal_connect(gtkset_active($check_where_hd, $where_hd), toggled => sub {
- $where_hd = $where_hd ? 0 : 1;
- ${$central_widget}->destroy();
- $current_widget->();
- });
- $button->add(gtkpack(new Gtk2::HBox(0,10), gtkcreate_img("ic82-dossier-32")));
- $save_path_entry->set_text($save_path);
- $save_path_entry->signal_connect('changed', sub { $save_path = $save_path_entry->get_text() });
- if ($previous_function) { fonction_env(\$box_where_hd, \&advanced_where_hd, \&$previous_function, "") }
- else { fonction_env(\$box_where_hd, \&advanced_where_hd, \&advanced_where, "") }
- $up_box->show_all();
-}
-
-sub restore_find_net {
- my ($previous_function) = @_,
- my $box_where_net;
-
- gtkpack($advanced_box,
- $box_where_net = gtkpack_(new Gtk2::HBox(0, 15),
- 1, new Gtk2::VBox(0, 5),
- 1, gtkpack_(new Gtk2::VBox(0, 15),
- 1, new Gtk2::VBox(0, 5),
- 1, new Gtk2::VBox(0,10),
- 1, gtksignal_connect(new Gtk2::Button(N("FTP Connection")), clicked => sub {
- $box_where_net->destroy();
- if ($previous_function) {
- message_underdevel();
- } else {
- }
- }),
- 1, gtksignal_connect(new Gtk2::Button(N("Secure Connection")), clicked => sub {
- $box_where_net->destroy();
- if ($previous_function) {
- } else {
- }
- }),
- 1, new Gtk2::VBox(0, 5),
- 1, new Gtk2::VBox(0,10),
- ),
- 1, new Gtk2::VBox(0, 5),
- ),
- );
- if ($previous_function) { fonction_env(\$box_where_net, \&advanced_where_net, \&$previous_function, "") }
- else { fonction_env(\$box_where_net, \&advanced_where_net, \&advanced_where, "") }
- $up_box->show_all();
-}
-
-sub restore_other_media {
- my $box_find_restore;
- my $button;
-
- gtkpack($advanced_box,
- $box_find_restore = gtkpack_(new Gtk2::VBox(0, 6),
- 0, new Gtk2::HSeparator,
- 0, my $check_other_media_hd = new Gtk2::CheckButton(N("Restore from Hard Disk.")),
- 0, gtkpack_(new Gtk2::HBox(0,10),
- 0, gtkset_sensitive(new Gtk2::Label(N("Please enter the directory where backups are stored")), $other_media_hd),
- 1, new Gtk2::VBox(0, 6),
- 0, gtkset_size_request(gtkset_sensitive($restore_find_path_entry = new Gtk2::Entry(), $other_media_hd), 152, 20),
- 0, gtkset_sensitive($button = gtksignal_connect(new Gtk2::Button(), clicked => sub {
- filedialog_restore_find_path();
- }), $other_media_hd),
- ),
- 1, new Gtk2::VBox(0, 6),
-# 0, new Gtk2::HSeparator,
-# 0, my $check_other_media_net = new Gtk2::CheckButton( N("Restore from Network")),
-# 0, new Gtk2::VBox(0, 6),
-# 1, gtkpack(new Gtk2::HBox(0,10),
-# new Gtk2::VBox(0, 6),
-# gtkset_sensitive(gtksignal_connect(new Gtk2::Button("Network"), clicked => sub {
-# ${$central_widget}->destroy();
-# restore_find_net(\&restore_other_media);}), !$other_media_hd),
-# new Gtk2::VBox(0, 6),
-# ),
-# 1, new Gtk2::VBox(0, 6),
-# 0, new Gtk2::HSeparator,
- 0, new Gtk2::VBox(0, 6),
- ),
- );
- gtksignal_connect(gtkset_active($check_other_media_hd, $other_media_hd), toggled => sub {
- $other_media_hd = $other_media_hd ? 0 : 1;
- ${$central_widget}->destroy();
- $current_widget->();
- });
-# gtksignal_connect(gtkset_active($check_other_media_net, !$other_media_hd), toggled => sub {
-# $other_media_hd = $other_media_hd ? 0 : 1;
-# ${$central_widget}->destroy();
-# $current_widget->();
-# });
- $button->add(gtkpack(new Gtk2::HBox(0,10), gtkcreate_img("ic82-dossier-32")));
- $restore_find_path_entry->set_text($path_to_find_restore);
- $restore_find_path_entry->signal_connect('changed', sub { $path_to_find_restore = $restore_find_path_entry->get_text() });
-#- not sure if this was the original intent - address the crash at "Next"
- fonction_env(\$box_find_restore, \&restore_other_media, \&restore_step2, "other_media", \&restore_do);
- $up_box->show_all();
-}
-
-sub restore_step2 {
- my $retore_step2;
- my $other_exist;
- my $sys_exist;
- my $user_exist;
-
- my $restore_info_path = $save_path;
- $restore_info_path = $path_to_find_restore if $where_hd || $where_cd;
- my $info_prefix = "backup";
- $info_prefix = "list" if $where_net || $where_tape;
-
- if (-f "$restore_info_path/$info_prefix\_other*") { $other_exist = 1 }
- else { my $other_exist = 0; $restore_other = 0 }
- if (grep /\_sys\_/, grep /^$info_prefix/, all("$restore_info_path/")) { $sys_exist = 1 }
- else { my $sys_exist = 0; $restore_sys = 0 }
- if (grep /\_user\_/, grep /^$info_prefix/, all("$restore_info_path/")) { $user_exist = 1 }
- else { my $user_exist = 0; $restore_user = 0 }
-
-# disabling this (sb) - very nicely wipes out your backup media if the user isn't very careful
-# cycling through the GUI turns it back on for you!!!
-# $backup_sys_versions || $backup_user_versions and $backup_bef_restore = 1;
-
- gtkpack($advanced_box,
- $retore_step2 = gtkpack_(new Gtk2::VBox(0,10),
- 1, new Gtk2::VBox(0,10),
- 1, new Gtk2::VBox(0,10),
- 0, gtkpack_(new Gtk2::HBox(0,10),
- 0, my $check_restore_other_src = new Gtk2::CheckButton(N("Select another media to restore from")),
- 1, new Gtk2::HBox(0,10),
- 0, gtkset_sensitive(gtksignal_connect(new Gtk2::Button(N("Other Media")), clicked => sub {
- ${$central_widget}->destroy();
- restore_other_media();
- }), $restore_other_src),
- ),
- 0, gtkset_sensitive(my $check_restore_sys = new Gtk2::CheckButton(N("Restore system")), $sys_exist),
- 0, gtkset_sensitive(my $check_restore_user = new Gtk2::CheckButton(N("Restore Users")), $user_exist),
- 0, gtkset_sensitive(my $check_restore_other = new Gtk2::CheckButton(N("Restore Other")), $other_exist),
- 0, gtkpack_(new Gtk2::HBox(0,10),
- 0, my $check_restore_other_path = new Gtk2::CheckButton(N("select path to restore (instead of /)")),
- 1, new Gtk2::HBox(0,10),
- 0, gtkset_sensitive(my $restore_path_entry = new Gtk2::Entry(), $restore_other_path),
- ),
- 0, gtkset_sensitive(my $check_backup_bef_restore = new Gtk2::CheckButton(N("Do new backup before restore (only for incremental backups.)")),
- $backup_sys_versions || $backup_user_versions),
- 0, gtkset_sensitive(my $check_remove_user_dir = new Gtk2::CheckButton(N("Remove user directories before restore.")), $user_exist),
- 1, new Gtk2::VBox(0,10),
- ),
- );
-
- foreach ([$check_restore_sys, \$restore_sys],
- [$check_backup_bef_restore, \$backup_bef_restore],
- [$check_restore_user, \$restore_user],
- [$check_remove_user_dir, \$remove_user_before_restore ],
- [$check_restore_other, \$restore_other]) {
- my $ref = $_->[1];
- gtksignal_connect(gtkset_active($_->[0], ${$ref}), toggled => sub {
- ${$ref} = ${$ref} ? 0 : 1;
- if (!$restore_sys && !$restore_user && !$restore_other) { $next_widget = \&message_norestore_box }
- elsif ($restore_sys && $backup_sys_versions) { $next_widget = \&restore_step_sys }
- elsif ($restore_user) { $next_widget = \&restore_step_user }
- elsif ($restore_other) { $next_widget = \&restore_step_other }
- else { $next_widget = \&restore_do }
- })
- }
- gtksignal_connect(gtkset_active($check_restore_other_path, $restore_other_path), toggled => sub {
- $restore_other_path = $restore_other_path ? 0 : 1;
- ${$central_widget}->destroy();
- $current_widget->();
- });
- gtksignal_connect(gtkset_active($check_restore_other_src, $restore_other_src), toggled => sub {
- $restore_other_src = $restore_other_src ? 0 : 1;
- ${$central_widget}->destroy();
- $current_widget->();
- });
- fonction_env(\$retore_step2, \&restore_step2, \&restore_box, "restore");
- if (!$restore_sys && !$restore_user && !$restore_other) { $next_widget = \&message_norestore_box }
- elsif ($restore_sys && $backup_sys_versions) { $next_widget = \&restore_step_sys }
- elsif ($restore_user) { $next_widget = \&restore_step_user }
- elsif ($restore_other) { $next_widget = \&restore_step_other }
- else { $next_widget = \&restore_do }
- $restore_path_entry->set_text($restore_path);
- $restore_path_entry->signal_connect('changed', sub { $restore_path = $restore_path_entry->get_text() });
- $up_box->show_all();
-}
-
-sub catalog_restore {
- my $catalog_box;
- my $label;
- my $cat_entry;
- my @restore_files;
- my $restore_path_entry;
-
- #- catalog info in tree view
- my $tree_catalog = new Gtk2::Tree();
-
- # file details in list widget
- my $list_bu_files = new Gtk2::List();
- $list_bu_files->set_selection_mode('extended');
-
- #- read the catalog
- my @catalog = cat_("$cfg_dir/drakbackup_catalog");
-
- foreach (@catalog) {
- chop;
- my $full_cat_entry = $_;
- my @line_data = split(':', $_);
- my $t = $line_data[0];
- my $t_catalog = new_with_label Gtk2::TreeItem($t);
- gtksignal_connect($t_catalog, select => sub {
- $cat_entry = $full_cat_entry;
- @restore_files = ();
- foreach my $filename (my @details = glob("$save_path/list*$t.txt")) {
- my @contents = cat_($filename);
- $list_bu_files->clear_items();
- foreach (@contents) {
- chop;
- my $s = $_;
- my $f_item = $list_bu_files->add(gtkshow(new Gtk2::ListItem($s)));
- gtksignal_connect($f_item, select => sub { push @restore_files, $s });
- gtksignal_connect($f_item, deselect => sub { @restore_files = () });
- }
- }
- });
- $tree_catalog->append($t_catalog);
-
- my $c_detail = new Gtk2::Tree();
- $t_catalog->set_subtree($c_detail);
-
- my $indexer = 0;
- foreach (@line_data) {
- if ($indexer != 0) {
- my $m;
- $m = "Media: " if $indexer == 1;
- $m = "Label or Host: " if $indexer == 2;
- $m = "Device or Path: " if $indexer == 3;
- $m = "Type: Incremental" if $_ eq "I";
- $m = "Type: Full" if $_ eq "F";
- $m .= $_ if $_ ne "I" && $_ ne "F";
- my $c_det_cat = new_with_label Gtk2::TreeItem($m);
-# gtksignal_connect($k_det_nic, select => sub { $nic = $m;
-# $kernel = $t; });
- $c_detail->append($c_det_cat);
- $c_det_cat->show();
- }
- $indexer++;
- }
- }
-
- gtkpack($advanced_box,
- $catalog_box = gtkpack_(new Gtk2::HBox(0,10),
- 0, new Gtk2::VBox(0,10),
- 1, gtkpack_(new Gtk2::VBox(0,5),
- 1, gtkpack_(new Gtk2::VBox(0, 10),
- 1, create_scrolled_window($tree_catalog),
- 1, create_scrolled_window($list_bu_files),
- ),
- 0, gtkpack_(new Gtk2::HBox(1, 10),
- 1, gtksignal_connect(new Gtk2::Button(N("Restore Selected\nCatalog Entry")), clicked => sub {
- if ($cat_entry) {
- my $media_check = restore_catalog_entry($cat_entry, ());
- if ($media_check) {
- ${$central_widget}->destroy();
-# button_box_restore();
- interactive_mode_box();
- }
- }
- }),
- 1, gtksignal_connect(new Gtk2::Button(N("Restore Selected\nFiles")), clicked => sub {
- my $files = @restore_files;
- #- grab the array before the widget clears it
- my @passed_files = @restore_files;
- if ($cat_entry && $files) {
- my $media_check = restore_catalog_entry($cat_entry, @passed_files);
- if ($media_check) {
- ${$central_widget}->destroy();
-# button_box_restore();
- interactive_mode_box();
- }
- }
- }),
- 1, gtkpack_(new Gtk2::VBox(0, 5),
- 0, new Gtk2::Label("Restore To Path"),
- 0, $restore_path_entry = new Gtk2::Entry(),
- ),
- 1, gtksignal_connect(new Gtk2::Button(N("Change\nRestore Path")), clicked => sub {
- filedialog_generic(0, "Path To Restore To", \$restore_path_entry, \$restore_path);
- }),
- ),
- 0, new Gtk2::VBox(0,10),
- ),
- 0, new Gtk2::VBox(0,10),
- ),
- );
-
- $restore_path_entry->set_text($restore_path);
- gtksignal_connect($restore_path_entry, changed => sub { $restore_path = $restore_path_entry->get_text() });
-
- button_box_restore();
- fonction_env(\$catalog_box, \&catalog_restore, \&restore_find_media_box, "restore", \&catalog_restore);
- $central_widget = \$catalog_box;
- $up_box->show_all();
-}
-
-sub restore_catalog_entry {
- #FIXME
- # we're working from a catalog entry, which means we know the
- # the tar file wildcards and some info on where the backup was stored
- # if it's a local device (HD, tape, CD) - prompt for the media
- # for tape, find how many other catalog entries had the same
- # label and calculate the record offset
- # if it's remote storage, display what we know of the connection
- # parameters and get the user's verification, then connect
-
- restore_status();
-
- my ($cat_entry, @restore_files) = @_;
- my $username;
- my $userpass = $passwd_user;
- my $restore_result = 1;
-
- my @line_data = split(':', $cat_entry);
- my $backup_time = $line_data[0];
-
- #- use our own variables here so we don't trash a saved config accidentally
- my $media = $line_data[1];
-
- #- can be a volume name or a host name
- my $vol_host = $line_data[2];
-
- #- see if we have a username embedded in the host
- if (index($vol_host, "@")) {
- my @user_host = split("@", $vol_host);
- $username = $user_host[0];
- $vol_host = $user_host[1];
- } else {
- $username = $login_user;
- }
-
- #- create a restore work directory if we don't have one
- -d "$cfg_dir/restores" or mkdir_p "$cfg_dir/restores";
-
- #- can be a device name or a path
- my $dev_path = $line_data[3];
-
- if ($media eq 'HD') {
- #- shouldn't really happen, should have just browsed
- #- to the $save_path in the previous step - deal with it anyway
- my @restore_tar_files = glob("$dev_path/*$backup_time*$tar_ext");
- my $matches = @restore_tar_files;
- if ($matches eq 0) {
- show_warning("f", N("Backup files not found at %s.", $dev_path));
- return(0);
- } else {
- my $save_path_org = $save_path;
- $save_path = $dev_path;
- $restore_result = restore_hd_or_cd($cat_entry, $dev_path, @restore_files);
- $save_path = $save_path_org;
- }
- }
-
- if ($media eq 'CD') {
- #- we know the cdrecord device, and the label
- #- prompt the user for the right CD
- $in->ask_okcancel(N("Restore From CD"), N("Insert the CD with volume label %s\n in the CD drive under mount point /mnt/cdrom", $vol_host) ,1) ? ($vol_name = get_cd_volname()) : return 0;
- if ($vol_name ne $vol_host) {
- show_warning("f", N("Not the correct CD label. Disk is labelled %s.", $vol_name));
- return(0);
- } else {
- $restore_result = restore_hd_or_cd($cat_entry, '/mnt/cdrom', @restore_files);
- }
- }
-
- if ($media eq 'Tape') {
- #- a little more complicated, we need to check if other backups
- #- were done on this tape, and try to find the offset to this one
- $in->ask_okcancel(N("Restore From Tape"), N("Insert the tape with volume label %s\n in the tape drive device %s", $vol_host, $dev_path) ,1) ? ($vol_name = get_tape_label($dev_path)) : return(0);
- if ($vol_name ne $vol_host) {
- show_warning("f", N("Not the correct tape label. Tape is labelled %s.", $vol_name));
- return(0);
- } else {
- $restore_result = restore_tape($cat_entry, $dev_path, @restore_files);
- }
- }
-
- if ($media eq 'ftp' || $media eq 'webdav' || $media eq 'ssh' || $media eq 'rsync') {
- #- show the user what we know of the connection from the catalog
- #- and the config file, let them override if necessary
-
- #- the various protocols are going to have different requirements
- #- webdav - it should already be in sitecopyrc - compare it?
- #- ssh - the only method we have enabled at the moment is with keys
- #- - no passwd needed
- #- - if we use expect, it is needed
- #- - if we use drackbackup keys, then a different ssh call is needed
- #- rsync - uses a config file with username - rsync.user
- #- ftp needs all parameters entered
-
- $in->ask_from(N("Restore Via Network"), N("Restore Via Network Protocol: %s", $media),
- [ { label => N("Host Name"), val => \$vol_host },
- { label => N("Host Path or Module"), val => \$dev_path },
- { label => N("Username"), val => \$username },
- { label => N("Password"), val => \$userpass, hidden => 1 },
- ]) or goto return(0);
-
- if ($media eq 'ftp' || $media eq 'rsync') {
- if ($userpass eq '') {
- show_warning("f", N_("Password required"));
- return(0);
- }
- }
- if ($media eq 'ftp' || $media eq 'rsync' || $media eq 'ssh') {
- if ($username eq '') {
- show_warning("f", N_("Username required"));
- return(0);
- } elsif ($vol_host eq '') {
- show_warning("f", N_("Hostname required"));
- return(0);
- }
- }
- if ($dev_path eq '') {
- show_warning("f", N_("Path or Module required"));
- return(0);
- }
-
- $restore_result = restore_ftp($cat_entry, $vol_host, $dev_path, $username, $userpass, @restore_files) if $media eq 'ftp';
- $restore_result = restore_rsync_ssh_webdav($cat_entry, $vol_host, $dev_path, $username, $userpass, $media, @restore_files)
- if $media eq 'rsync' || $media eq 'ssh' || $media eq 'webdav';
- }
-
- # cleanup our restore dir - unlink fails here?
- system("rm -f $cfg_dir/restores/*");
-
- if (!$restore_result) {
- show_warning("i", N_("Files Restored..."));
- return(0);
- } else {
- show_warning("f", N_("Restore Failed..."));
- return(1);
- }
-
-}
-
-sub restore_hd_or_cd {
- my ($cat_entry, $tarfile_dir, @restore_files) = @_;
- my $indv_files = @restore_files;
- my $command;
-
- my $wild_card = catalog_to_wildcard($cat_entry);
-
- if ($indv_files eq 0) {
- #- full catalog specified
- foreach (wildcard_to_tarfile($wild_card)) {
- $command = "tar -C $restore_path -xzf $tarfile_dir/$_";
- spawn_progress($command, "Untarring from \n$_ \nto $restore_path.");
- }
- } else {
- #- individual files - pull from appropriate catalog
- foreach (@restore_files) {
- my $tarfile = file_to_tarfile($_, $wild_card);
- $_ = substr($_, 1);
- $command = "tar -C $restore_path -xzf $tarfile_dir/$tarfile $_";
- spawn_progress($command, "Untarring \n$_ from \n$tarfile \nto $restore_path.");
- }
- }
- return(0);
-}
-
-sub restore_tape {
- my ($cat_entry, $dev_path, @restore_files) = @_;
- my $indv_files = @restore_files;
- my $command;
-
- my $wild_card = catalog_to_wildcard($cat_entry);
- $dev_path =~ s/\/st/\/nst/;
-
- if ($indv_files eq 0) {
- #- full catalog specified
- foreach (wildcard_to_tarfile($wild_card)) {
- my $offset = find_tape_offset($cat_entry);
- $command = "mt -f $dev_path rewind";
- spawn_progress($command, "Rewinding tape on $dev_path.");
- $command = "mt -f $dev_path fsf $offset";
- spawn_progress($command, "Moving forward $offset file records.");
- $command = "tar -C cfg_dir/restores -xf $dev_path";
- spawn_progress($command, "Untarring from $dev_path to work directory.");
- if (-e "$cfg_dir/restores/$_") {
- $command = "tar -C $restore_path -xzf $cfg_dir/restores/$_";
- spawn_progress($command, "Untarring \n$_ \nto $restore_path.");
- } else {
- return(1);
- }
- }
- } else {
- #- individual files - pull from appropriate catalog
- foreach (@restore_files) {
- my $tarfile = file_to_tarfile($_, $wild_card);
- $_ = substr($_, 1);
- if (!-e "$cfg_dir/restores/$tarfile") {
- my $offset = find_tape_offset($cat_entry);
- $command = "mt -f $dev_path rewind";
- spawn_progress($command, "Rewinding tape on $dev_path.");
- $command = "mt -f $dev_path fsf $offset";
- spawn_progress($command, "Moving forward $offset file records.");
- $command = "tar -C cfg_dir/restores -xf $dev_path";
- spawn_progress($command, "Untarring from $dev_path to work directory.");
- }
- if (-e "$cfg_dir/restores/$tarfile") {
- $command = "tar -C $restore_path -xzf $cfg_dir/restores/$tarfile $_";
- spawn_progress($command, "Untarring \n$_ from \n$tarfile \nto $restore_path.");
- } else {
- return(1);
- }
- }
- }
- return(0);
-}
-
-sub restore_ftp {
- use Net::FTP;
- my $ftp;
- my ($cat_entry, $hostname, $hostpath, $username, $userpass, @restore_files) = @_;
- my $indv_files = @restore_files;
- my $command;
-
- $DEBUG and print "file list to retrieve: $cat_entry\n ";
- if ($DEBUG && $interactive) { $ftp = Net::FTP->new($hostname, Debug => 1) or return(1) }
- elsif ($interactive) { $ftp = Net::FTP->new($hostname, Debug => 0) or return(1) }
- else { $ftp = Net::FTP->new($hostname, Debug => 0) or return(1) }
- $ftp->login($username, $userpass);
- $ftp->cwd($hostpath);
-
- my $wild_card = catalog_to_wildcard($cat_entry);
-
- if ($indv_files eq 0) {
- #- full catalog specified
- foreach (wildard_to_tarfile($wild_card)) {
- $ftp->get($_, "$cfg_dir/restores/$_");
- $command = "tar -C $restore_path -xzf $cfg_dir/restores/$_";
- spawn_progress($command, "Untarring \n$_ \nto $restore_path.");
- }
- } else {
- #- individual files - pull from appropriate catalog
- foreach (@restore_files) {
- my $tarfile = file_to_tarfile($_, $wild_card);
- $_ = substr($_, 1);
- if (!-e "$cfg_dir/restores/$tarfile") {
- $ftp->get($tarfile, "$cfg_dir/restores/$tarfile");
- }
- $command = "tar -C $restore_path -xzf $cfg_dir/restores/$tarfile $_";
- spawn_progress($command, "Untarring \n$_ from \n$tarfile \nto $restore_path.");
- }
- }
- $ftp->quit;
- return(0);
-}
-
-sub restore_rsync_ssh_webdav {
- my ($cat_entry, $hostname, $hostpath, $username, $userpass, $mode, @restore_files) = @_;
- my $indv_files = @restore_files;
- my $command;
-
- my $wild_card = catalog_to_wildcard($cat_entry);
-
- if ($indv_files eq 0) {
- #- full catalog specified
- foreach (wildcard_to_tarfile($wild_card)) {
- if ($mode eq 'ssh') {
- $command = "scp $username\@$hostname:$hostpath/$_ $cfg_dir/restores/";
- } elsif ($mode eq 'rsync') {
- $command = "rsync --password-file=$cfg_dir/rsync.user $username\@$hostname\:\:$hostpath/$_ $cfg_dir/restores/";
- } else {
- $command = "wget http://$hostname/$hostpath/$_ -P $cfg_dir/restores/";
- }
- spawn_progress($command, "Retrieving backup file \n$_ \nvia $mode.");
- if (-e "$cfg_dir/restores/$_") {
- $command = "tar -C $restore_path -xzf $cfg_dir/restores/$_";
- spawn_progress($command, "Untarring \n$_ \nto $restore_path.");
- } else {
- return(1);
- }
- }
- } else {
- #- individual files - pull from appropriate catalog
- foreach (@restore_files) {
- my $tarfile = file_to_tarfile($_, $wild_card);
- $_ = substr($_, 1);
- if (!-e "$cfg_dir/restores/$tarfile") {
- if ($mode eq 'ssh') {
- $command = "scp $username\@$hostname:$hostpath/$tarfile $cfg_dir/restores/";
- } elsif ($mode eq 'rsync') {
- $command = "rsync --password-file=$cfg_dir/rsync.user $username\@$hostname\:\:$hostpath/$tarfile $cfg_dir/restores/";
- } else {
- $command = "wget http://$hostname/$hostpath/$tarfile -P $cfg_dir/restores/";
- }
- spawn_progress($command, "Retrieving backup file \n$tarfile \nvia $mode.");
- }
- if (-e "$cfg_dir/restores/$tarfile") {
- $command = "tar -C $restore_path -xzf $cfg_dir/restores/$tarfile $_";
- spawn_progress($command, "Untarring \n$_ from \n$tarfile \nto $restore_path.");
- } else {
- return(1);
- }
- }
- }
- return(0);
-}
-
-sub catalog_to_wildcard {
- my ($cat_entry) = @_;
- my @line_data = split(':', $cat_entry);
- my $wildcard = $line_data[0];
- $wildcard;
-}
-
-sub wildcard_to_tarfile {
- my ($wildcard) = @_;
- my $tarfile = basename(glob("$save_path/*$wildcard.txt"));
- $tarfile =~ s/txt/$tar_ext/;
- $tarfile =~ s/list/backup/;
- $tarfile;
-}
-
-sub file_to_tarfile {
- my ($restore_file, $wildcard) = @_;
- my $tarfile = `grep -l $restore_file $save_path/*$wildcard.txt`;
- chop $tarfile;
- $tarfile = basename($tarfile);
- $tarfile =~ s/txt/$tar_ext/;
- $tarfile =~ s/list/backup/;
- $tarfile;
-}
-
-sub find_tape_offset {
- my ($cat_entry) = @_;
- my @line_data = split(':', $cat_entry);
- my $label = $line_data[2];
- my @catalog = cat_("$cfg_dir/drakbackup_catalog");
- # always off by 1 for tape label.
- my $offset = 1;
- foreach (@catalog) {
- if (instr($_, $label)) {
- if (!instr($_, $cat_entry)) {
- # tar seems to need 2 of these to get located
- $offset++;
- $offset++;
- } else {
- return($offset);
- }
- }
- }
-}
-
-sub restore_box {
- my $retore_box;
- my $retore_box3;
- my $check_restore_sys;
- my $check_restore_user;
- my $check_restore_other;
-
- if ($good_restore_path) {
- $path_to_find_restore = $save_path if $where_hd;
- $path_to_find_restore = "/mnt/cdrom" if $where_cd;
- }
-
- find_backup_to_restore();
- button_box_restore_main();
-
- if ($other_backuped || $sys_backuped || @user_backuped) {
- gtkpack($advanced_box,
- $retore_box = gtkpack_(new Gtk2::HBox(0,1),
- 1, new Gtk2::VBox(0,10),
- 1, gtkpack_(new Gtk2::VBox(0,10),
- 1, new Gtk2::VBox(0,10),
- 1, new Gtk2::VBox(0,10),
- 1, gtksignal_connect(new Gtk2::Button(N("Restore all backups")), clicked => sub {
- $retore_box->destroy();
- button_box_restore();
- @user_list_to_restore2 = sort @user_backuped;
- $restore_sys = 1;
- $restore_other = 1;
- $restore_user = 1;
- restore_do()
- }),
- 1, gtksignal_connect(new Gtk2::Button(N("Custom Restore")), clicked => sub {
- $retore_box->destroy();
- button_box_restore();
- restore_step2();
- }),
- 1, new Gtk2::VBox(0,10),
- 1, new Gtk2::VBox(0,10),
- ),
- 1, new Gtk2::HBox(0,10),
- ),
- );
- } else {
- ${$central_widget}->destroy();
- restore_find_media_box(),
- }
- fonction_env(\$retore_box, \&restore_box, \&interactive_mode_box, "restore");
- $central_widget = \$retore_box;
- $up_box->show_all();
-}
-
-sub restore_find_media_box {
- my $entry_new_path;
- my $mount_media = 1;
- $good_restore_path = 0;
- my $message = "Unable to find backups to restore...\n";
- $message .= "Verify that $path_to_find_restore is the correct path" if $where_hd && $where_cd;
- $message .= " and the CD is in the drive" if $where_cd;
- if ($where_tape || $net_proto) {
- $message .= "Backups on unmountable media - Use Catalog to restore";
- $mount_media = 0;
- }
- $message .= ".";
-
- gtkpack($advanced_box,
- $box2 = gtkpack_(new Gtk2::VBox(0, 5),
- 1, gtkpack(new Gtk2::HBox(0, 15),
- new Gtk2::VBox(0, 5),
- gtkcreate_img('warning'),
- translate($message),
- new Gtk2::VBox(0, 5),
- ),
- 1, gtkpack(new Gtk2::HBox(0, 15),
- new Gtk2::VBox(0, 5),
- gtkpack(new Gtk2::VBox(0, 10),
- gtkset_sensitive(gtksignal_connect(new Gtk2::Button(N("CD in place - continue.")), clicked => sub {
- $good_restore_path = 1;
- $box2->destroy();
- interactive_mode_box("restore");
- }), $mount_media),
- $new_path_entry = gtkset_sensitive(new Gtk2::Entry(), $mount_media),
- gtkset_sensitive(gtksignal_connect(new Gtk2::Button(N("Browse to new restore repository.")), clicked => sub {
- filedialog_generic(0, "Directory To Restore From", \$new_path_entry, \$path_to_find_restore);
- }), $mount_media),
- gtksignal_connect(new Gtk2::Button(N("Restore From Catalog")), clicked => sub {
- $box2->destroy();
- catalog_restore();
- }),
- ),
- new Gtk2::VBox(0, 5),
- ),
- 1, new Gtk2::VBox(0, 5),
- ),
- );
- $new_path_entry->set_text($path_to_find_restore);
-
- button_box_find_media($mount_media);
- $up_box->show_all();
-}
-
-sub restore_status {
- ${$central_widget}->destroy();
- $pbar3 = new Gtk2::ProgressBar;
- $stext = new Gtk2::Label("");
- gtkpack($advanced_box,
- $table = gtkpack(new Gtk2::VBox(0, 5),
- new Gtk2::HBox(0,5),
- create_packtable({ col_spacings => 10, row_spacings => 5 },
- [""],
- [""],
- [""],
- [""],
- [N("Restore Progress")],
- [""],
- [""],
- [$pbar3],
- [""],
- [""],
- [$pbar3->{label} = new Gtk2::Label(' ') ],
- [""],
- ),
- $stext,
- ),
- );
- $custom_help = "options";
- $central_widget = \$table;
- $up_box->show_all();
- gtkflush();
-}
-
-################################################ BUTTON_BOX ################################################
-
-# sub generic_button_box {
-# # 1-n - [button name, fonctions associated]
-# $button_box_tmp->destroy();
-# gtkpack($button_box,
-# $button_box_tmp = gtkpack_(new Gtk2::HButtonBox,
-# 0, gtksignal_connect(new Gtk2::Button($_->[0]), clicked => sub {$_->[1]}) foreach (@_),
-# }),);
-# }
-
-sub button_box_adv {
- $button_box_tmp->destroy();
- gtkpack($button_box,
- $button_box_tmp = gtkpack_(new Gtk2::HButtonBox,
- 0, gtksignal_connect(new Gtk2::Button(N("Cancel")), clicked => sub {
- ${$central_widget}->destroy();
- interactive_mode_box();
- }),
- 0, gtksignal_connect(new Gtk2::Button(N("Help")), clicked => sub {
- ${$central_widget}->destroy();
- adv_help(\&$current_widget, $custom_help);
- }),
- 1, new Gtk2::HBox(0, 1),
- 0, gtksignal_connect(new Gtk2::Button(N("Previous")), clicked => sub {
- ${$central_widget}->destroy();
- $previous_widget->();
- }),
- 0, gtksignal_connect(new Gtk2::Button(N("Save")), clicked => sub {
- ${$central_widget}->destroy();
- unless (check_pkg_needs()) {
- save_conf_file();
- $previous_widget->();
- }
- }),
- ),
- );
-}
-
-# sub button_box_adv {
-# generic_button_box(["cancel", ${$central_widget}->destroy() ]);
-# }
-
-sub button_box_restore_main {
- $button_box_tmp->destroy();
-
- gtkpack($button_box,
- $button_box_tmp = gtkpack_(gtkpack_(new Gtk2::HButtonBox,
- 0, gtksignal_connect(new Gtk2::Button(N("Cancel")), clicked => sub {
- ${$central_widget}->destroy();
- interactive_mode_box();
- }),
- 0, gtksignal_connect(new Gtk2::Button(N("Help")), clicked => sub {
- ${$central_widget}->destroy();
- adv_help(\&$current_widget, $custom_help);
- }),
- 1, new Gtk2::HBox(0, 1),
- 0, gtksignal_connect(new Gtk2::Button(N("Previous")), clicked => sub {
- ${$central_widget}->destroy();
- interactive_mode_box()
- }),
- 0, gtksignal_connect(new Gtk2::Button(N("Ok")), clicked => sub {
- ${$central_widget}->destroy();
- interactive_mode_box() }),
- ),
- ),
- );
-}
-
-sub button_box_backup_end {
- $button_box_tmp->destroy();
-
- gtkpack($button_box,
- $button_box_tmp = gtkpack_(new Gtk2::HButtonBox,
- 0, gtksignal_connect(new Gtk2::Button(N("Cancel")), clicked => sub {
- ${$central_widget}->destroy();
- interactive_mode_box()
- }),
- 0, gtksignal_connect(new Gtk2::Button(N("Help")), clicked => sub {
- ${$central_widget}->destroy();
- adv_help(\&$current_widget, $custom_help)
- }),
- 1, new Gtk2::HBox(0, 1),
- 0, gtksignal_connect(new Gtk2::Button(N("Previous")), clicked => sub {
- ${$central_widget}->destroy();
- $previous_widget->()
- }),
- 0, gtksignal_connect(new Gtk2::Button(N("Build Backup")), clicked => sub {
- ${$central_widget}->destroy();
- build_backup_status();
- build_backup_files();
- }),
- ),
- );
-}
-
-sub button_box_wizard_end {
- $button_box_tmp->destroy();
-
- gtkpack($button_box,
- $button_box_tmp = gtkpack_(new Gtk2::HButtonBox,
- 0, gtksignal_connect(new Gtk2::Button(N("Cancel")), clicked => sub {
- ${$central_widget}->destroy();
- interactive_mode_box();
- }),
- 0, gtksignal_connect(new Gtk2::Button(N("Help")), clicked => sub {
- ${$central_widget}->destroy();
- adv_help(\&$current_widget, $custom_help);
- }),
- 1, new Gtk2::HBox(0, 1),
- 0, gtksignal_connect(new Gtk2::Button(N("Previous")), clicked => sub {
- ${$central_widget}->destroy();
- $previous_widget->();
- }),
- 0, gtksignal_connect(new Gtk2::Button(N("Save")), clicked => sub {
- ${$central_widget}->destroy();
- save_conf_file();
- interactive_mode_box();
- }),
- ),
- );
-}
-
-sub button_box_restore_end {
- $button_box_tmp->destroy();
-
- gtkpack($button_box,
- $button_box_tmp = gtkpack_(new Gtk2::HButtonBox,
- 0, gtksignal_connect(new Gtk2::Button(N("Cancel")), clicked => sub {
- ${$central_widget}->destroy();
- interactive_mode_box();
- }),
- 0, gtksignal_connect(new Gtk2::Button(N("Help")), clicked => sub {
- ${$central_widget}->destroy();
- adv_help(\&$current_widget, $custom_help);
- }),
- 1, new Gtk2::HBox(0, 1),
- 0, gtksignal_connect(new Gtk2::Button(N("Previous")), clicked => sub {
- ${$central_widget}->destroy();
- $previous_widget->();
- }),
- 0, gtksignal_connect(new Gtk2::Button(N("Restore")), clicked => sub {
- ${$central_widget}->destroy();
- restore_backend();
- }),
- ),
- );
-}
-
-sub button_box_build_backup_end {
- $button_box_tmp->destroy();
-
- gtkpack($button_box,
- $button_box_tmp = gtkpack_(new Gtk2::HButtonBox,
- 1, new Gtk2::HBox(0, 5),
- 1, new Gtk2::HBox(0, 5),
- 0, gtksignal_connect(new Gtk2::Button(N("Ok")), clicked => sub {
- ${$central_widget}->destroy();
- interactive_mode_box();
- }),
- ),
- );
-}
-
-sub button_box_restore_pbs_end {
- $button_box_tmp->destroy();
-
- gtkpack($button_box,
- $button_box_tmp = gtkpack_(new Gtk2::HButtonBox,
- 1, new Gtk2::HBox(0, 5),
- 1, new Gtk2::HBox(0, 5),
- 1, gtksignal_connect(new Gtk2::Button(N("Help")), clicked => sub {
- ${$central_widget}->destroy();
- adv_help(\&$current_widget, $custom_help);
- }),
- 0, gtksignal_connect(new Gtk2::Button(N("Ok")), clicked => sub {
- ${$central_widget}->destroy();
- interactive_mode_box();
- }),
- ),
- );
-}
-
-sub button_box_build_backup {
- $button_box_tmp->destroy();
-
- gtkpack($button_box,
- $button_box_tmp = gtkpack_(new Gtk2::HButtonBox,
- 1, gtksignal_connect(new Gtk2::Button(N("Cancel")), clicked => sub {
- ${$central_widget}->destroy();
- interactive_mode_box();
- }),
- 1, gtksignal_connect(new Gtk2::Button(N("Help")), clicked => sub {
- ${$central_widget}->destroy();
- adv_help(\&$current_widget, $custom_help);
- }),
- 1, new Gtk2::HBox(0, 0),
- 0, gtksignal_connect(new Gtk2::Button(N("Previous")), clicked => sub {
- ${$central_widget}->destroy();
- $previous_widget->();
- }),
- 1, gtksignal_connect(new Gtk2::Button(N("Next")), clicked => sub {
- ${$central_widget}->destroy();
- $next_widget->();
- }),
- ),
- );
-}
-
-sub button_box_restore {
-
- $button_box_tmp->destroy();
-
- gtkpack($button_box,
- $button_box_tmp = gtkpack_(new Gtk2::HButtonBox,
- 1, gtksignal_connect(new Gtk2::Button(N("Cancel")), clicked => sub {
- ${$central_widget}->destroy();
- interactive_mode_box();
- }),
- 1, gtksignal_connect(new Gtk2::Button(N("Help")), clicked => sub {
- ${$central_widget}->destroy();
- adv_help(\&$current_widget, $custom_help);
- }),
- 1, new Gtk2::HBox(0, 0),
- 0, gtksignal_connect(new Gtk2::Button(N("Previous")), clicked => sub {
- ${$central_widget}->destroy();
- $previous_widget->();
- }),
- 1, gtksignal_connect(new Gtk2::Button(N("Next")), clicked => sub {
- ${$central_widget}->destroy();
- $next_widget->();
- }),
- ),
- );
-}
-
-sub button_box_find_media {
-
- my ($mount_media) = @_;
-
- #- $central_widget is not known yet?
- $button_box_tmp->destroy();
-
- gtkpack($button_box,
- $button_box_tmp = gtkpack_(new Gtk2::HButtonBox,
- 1, gtksignal_connect(new Gtk2::Button(N("Cancel")), clicked => sub {
- $box2->destroy();
- interactive_mode_box();
- }),
- 1, gtksignal_connect(new Gtk2::Button(N("Help")), clicked => sub {
- $box2->destroy();
- adv_help(\&$current_widget, $custom_help);
- }),
- 1, new Gtk2::HBox(0, 0),
- 0, gtksignal_connect(new Gtk2::Button(N("Previous")), clicked => sub {
- $box2->destroy();
- interactive_mode_box();
- }),
- 1, gtkset_sensitive(gtksignal_connect(new Gtk2::Button(N("Next")), clicked => sub {
- $box2->destroy();
- interactive_mode_box("restore");
- }), $mount_media),
- ),
- );
-}
-
-sub button_box_wizard {
- $button_box_tmp->destroy();
-
- gtkpack($button_box,
- $button_box_tmp = gtkpack_(new Gtk2::HButtonBox,
- 1, gtksignal_connect(new Gtk2::Button(N("Cancel")), clicked => sub {
- ${$central_widget}->destroy();
- interactive_mode_box()
- }),
- 1, gtksignal_connect(new Gtk2::Button(N("Help")), clicked => sub {
- ${$central_widget}->destroy();
- adv_help(\&$current_widget, $custom_help)
- }),
- 1, new Gtk2::HBox(0, 0),
- 0, gtksignal_connect(new Gtk2::Button($next_widget ? N("Previous") : N("OK")), clicked => sub {
- ${$central_widget}->destroy();
- $previous_widget ? $previous_widget->() : $next_widget->();
- }),
- if_($next_widget, 1, gtksignal_connect(new Gtk2::Button(N("Next")), clicked => sub {
- ${$central_widget}->destroy();
- $next_widget ? $next_widget->() : $previous_widget->();
- })),
- ),
- );
-}
-
-sub button_box_main {
- $button_box_tmp->destroy();
-
- gtkpack($button_box,
- $button_box_tmp = gtkpack(gtkset_layout(new Gtk2::HButtonBox, 'start'),
- gtksignal_connect(new Gtk2::Button(N("Close")), clicked => sub { ugtk2->exit(0) }),
- gtksignal_connect(new Gtk2::Button(N("Help")), clicked => sub {
- ${$central_widget}->destroy();
- adv_help(\&interactive_mode_box, $custom_help)
- }),
- ),
- );
-}
-
-################################################ MESSAGES ################################################
-
-sub dialog_one {
- $table->destroy();
- my ($label) = @_;
-
- gtkadd($advanced_box,
- $box2 = gtkpack_(new Gtk2::HBox(0, 15),
- 1, new Gtk2::VBox(0, 5),
- 0, gtkpack_(new Gtk2::HBox(0, 15),
- 0, new Gtk2::VBox(0, 5),
- 0, gtkcreate_img('warning'),
- 0, $label),
- 0, new Gtk2::VBox(0, 5),
- 1, new Gtk2::VBox(0, 5),
- ),
- );
- button_box_restore_main();
- $custom_help = "mail_pb";
- $central_widget = \$box2;
- $up_box->show_all();
-}
-
-sub send_mail_pb {
- dialog_one(N("Error during sendmail.
- Your report mail was not sent.
- Please configure sendmail"));
-}
-
-sub client_ftp_pb {
- dialog_one(N("Error during sending file via FTP.
- Please correct your FTP configuration."));
-}
-
-sub install_rpm {
- my ($previous_function) = @_;
- #- catch a crash when calling help
- #- this GUI control technique is kind of funky
- if ($previous_function eq '') {
- $previous_function = \&advanced_where;
- }
- my $box_what_user;
- gtkpack($advanced_box,
- $box_what_user = gtkpack_(new Gtk2::VBox(0, 15),
- 0, N("The following packages need to be installed:\n") . join(' ', @list_of_rpm_to_install),
- 0, new Gtk2::HSeparator,
- 0, gtksignal_connect(new Gtk2::Button(N("Install")), clicked => sub {
- system("/usr/sbin/urpmi --X @list_of_rpm_to_install");
- ${$central_widget}->destroy();
- $previous_widget->();
- }),
- ),
- );
- fonction_env(\$box_what_user, \&install_rpm, \&$previous_function, "what");
- $up_box->show_all();
-}
-
-
-sub message_norestore_box {
- $box2->destroy();
-
- gtkadd($advanced_box,
- $box2 = gtkpack_(new Gtk2::HBox(0, 15),
- 1, new Gtk2::VBox(0, 5),
- 1, gtkpack(new Gtk2::HBox(0, 15),
- new Gtk2::VBox(0, 5),
- gtkcreate_img('warning'),
- N("Please select data to restore..."),
- new Gtk2::VBox(0, 5),
- ),
- 1, new Gtk2::VBox(0, 5),
- ),
- );
- button_box_restore_main();
- $central_widget = \$box2;
- $up_box->show_all();
-}
-
-
-sub message_common_box {
- $box2->destroy();
- my ($label) = @_;
-
- gtkadd($advanced_box,
- $box2 = gtkpack_(new Gtk2::HBox(0, 15),
- 1, new Gtk2::VBox(0, 5),
- 1, gtkpack(new Gtk2::HBox(0, 15),
- new Gtk2::VBox(0, 5),
- gtkcreate_img('warning'),
- $label,
- new Gtk2::VBox(0, 5),
- ),
- 1, new Gtk2::VBox(0, 5),
- ),
- );
- $previous_widget = \&wizard;
- $next_widget = \&wizard;
- $central_widget = \$box2;
- $up_box->show_all();
-}
-
-sub message_noselect_box {
- message_common_box(N("Please select media for backup..."));
- $previous_widget = \&wizard_step2;
- $next_widget = \&wizard_step2;
- $central_widget = \$box2;
- $up_box->show_all();
-}
-
-sub message_noselect_what_box {
- message_common_box(N("Please select data to backup..."));
- $previous_widget = \&wizard;
- $next_widget = \&wizard;
- $central_widget = \$box2;
- $up_box->show_all();
-}
-
-sub message_common_box_2 {
- my ($label, $restore_main) = @_;
-
- $box2->destroy();
-
- gtkadd($advanced_box,
- $box2 = gtkpack_(new Gtk2::HBox(0, 15),
- 1, new Gtk2::VBox(0, 5),
- 1, gtkpack(new Gtk2::HBox(0, 15),
- new Gtk2::VBox(0, 5),
- gtkcreate_img('warning'),
- N("No configuration file found \nplease click Wizard or Advanced."),
- new Gtk2::VBox(0, 5),
- ),
- 1, new Gtk2::VBox(0, 5),
- ),
- );
- button_box_restore_main() if $restore_main;
- $central_widget = \$box2;
- $up_box->show_all();
-}
-sub message_noconf_box {
- message_common_box_2(N("No configuration file found \nplease click Wizard or Advanced."), 1);
-}
-
-sub message_underdevel {
- message_common_box_2(N("Under Devel ... please wait."));
-}
-
-################################################ BUILD_BACKUP ################################################
-
-sub progress {
- my ($progressbar, $incr, $label_text) = @_;
- my($new_val) = $progressbar->get_current_percentage;
- $new_val += $incr;
- if ($new_val > 1) { $new_val = 1 }
- $progressbar->update($new_val);
- $progressbar->{label}->set($label_text);
- gtkflush();
-}
-
-sub find_backup_to_put_on_cd {
- my @list_backup_tmp;
- my @data_backuped_tmp;
- @data_backuped = ();
- -d $save_path and my @list_backup = all($save_path);
- foreach (grep /^backup_other/, @list_backup) {
- $other_backuped = 1;
- chomp;
- my $tail = (split(' ', `du $save_path/$_`))[0];
- s/^backup_other//gi;
- s/.tar.gz$//gi;
- s/.tar.bz2$//gi;
- my @user_date = split /\_20/;
- my @user_date2 = split(/\_/, $user_date[1]);
- my $to_put = " other_data, (tail: $tail ko, date: 20$user_date2[0], hour: $user_date2[1])";
- push @data_backuped , $to_put;
- }
- foreach (grep /_sys_/, @list_backup) {
- $sys_backuped = 1;
- chomp;
- my $tail = (split(' ', `du $save_path/$_`))[0];
- s/^backup_other//gi;
- s/.tar.gz$//gi;
- s/.tar.bz2$//gi;
- my @user_date = split /\_20/;
- my @user_date2 = split(/\_/, $user_date[1]);
- my $to_put = " system, (tail: $tail ko, date: 20$user_date2[0], hour: $user_date2[1])";
- push @data_backuped , $to_put;
- }
- foreach (grep /user_/, @list_backup) {
- chomp;
- my $tail = (split(' ', `du $save_path/$_`))[0];
- s/^backup_user_//gi;
- s/.tar.gz$//gi;
- s/.tar.bz2$//gi;
- my @user_date = split /\_20/;
- my @user_date2 = split(/\_/, $user_date[1]);
- my $to_put = " $user_date[0], (tail: $tail ko, date: 20$user_date2[0], hour: $user_date2[1])";
- push @data_backuped , $to_put;
- }
-}
-
-sub build_backup_status {
- $pbar = new Gtk2::ProgressBar;
- $pbar1 = new Gtk2::ProgressBar;
- $pbar2 = new Gtk2::ProgressBar;
- $pbar3 = new Gtk2::ProgressBar;
- $stext = new Gtk2::Label("");
- button_box_build_backup_end();
- gtkpack($advanced_box,
- $table = gtkpack(new Gtk2::VBox(0, 5),
- create_packtable({ col_spacings => 10, row_spacings => 5 },
- [""],
- [""],
- [""],
- [""],
- [""],
- [""],
- [""],
- [N("Backup system files")],
- [ $pbar, $pbar->{label} = new Gtk2::Label(' ') ],
- [N("Backup user files") ],
- [$pbar1, $pbar1->{label} = new Gtk2::Label(' ') ],
- [N("Backup other files")],
- [ $pbar2, $pbar2->{label} = new Gtk2::Label(' ') ],
- [N("Total Progress")],
- [$pbar3, $pbar3->{label} = new Gtk2::Label(' ') ],
- ),
- $stext,
- ),
- );
- $custom_help = "options";
- $central_widget = \$table;
- $up_box->show_all();
- gtkflush();
-}
-
-
-sub build_backup_ftp_status {
- $pbar = new Gtk2::ProgressBar;
- $pbar3 = new Gtk2::ProgressBar;
- $table->destroy();
- button_box_build_backup_end();
- $pbar->set_fraction(0);
- $pbar3->set_fraction(0);
-
-
- gtkpack($advanced_box,
- $table = gtkpack_(new Gtk2::VBox(0, 15),
- 1, N("files sending by FTP"),
- 1, new Gtk2::VBox(0, 15),
- 1, create_packtable ({ col_spacings => 10, row_spacings => 5 },
-# [ $pbar->set_show_text( $show_text);
- [N("Sending files...")],
- [""],
- [ $pbar->{label} = new Gtk2::Label(' ') ],
- [ $pbar],
- [""],
- [N("Total Progress")],
- [ $pbar3->{label} = new Gtk2::Label(' ') ],
- [$pbar3],
- ),
- 1, new Gtk2::VBox(0, 15),
- ),
- );
- $custom_help = "options";
- $central_widget = \$table;
- $up_box->show_all();
- gtkflush();
-}
-
-sub build_backup_box_see_conf {
- my $box2;
- my $text = new Gtk2::TextView;
- system_state();
- gtktext_insert($text, [ [ $system_state ] ]);
- button_box_restore_main();
-
- gtkpack($advanced_box,
- $box2 = gtkpack_(new Gtk2::HBox(0, 15),
- 1, gtkpack_(new Gtk2::VBox(0,10),
- 0, N("Drakbackup Configuration"),
- 1, create_scrolled_window($text),
- ),
- ),
- );
- button_box_backup_end();
- $custom_help = "";
- $central_widget = \$box2;
- $current_widget = \&build_backup_box_see_conf;
- $previous_widget = \&build_backup_box;
- $up_box->show_all();
-}
-
-sub build_backup_box_progress {
-# build_backup_files();
-}
-
-sub aff_total_tail {
- my @toto;
- my $total = 0;
- push @toto, (split (",", $_))[1] foreach @list_to_build_on_cd;
- foreach (@toto) {
- s/\s+\(tail://gi;
- s/\s+//gi;
- s/ko//gi;
- $total += $_;
- }
- $label_tail->set("total tail: $total ko");
-}
-
-sub build_backup_box {
- $box2->destroy();
-# my ($pix_cd_map, $pix_cd_mask) = gtkcreate_img("ic82-CD-40");
-
- gtkadd($advanced_box,
- $box2 = gtkpack_(new Gtk2::HBox(0, 15),
- 1, new Gtk2::VBox(0, 5),
- 1, gtkpack_(new Gtk2::VBox(0, 15),
- 1, new Gtk2::VBox(0, 5),
- 1, gtksignal_connect(my $button_from_conf_file = new Gtk2::Button(), clicked => sub {
- ${$central_widget}->destroy();
- build_backup_box_see_conf();
- }),
- 0, new Gtk2::VBox(0, 5),
- 1, gtksignal_connect(my $button_see_conf = new Gtk2::Button(), clicked => sub {
- ${$central_widget}->destroy();
- build_backup_box_see_conf();
- }),
- 1, new Gtk2::VBox(0, 5),
- ),
- 1, new Gtk2::VBox(0, 5),
- ),
- );
-
- $button_from_conf_file->add(gtkpack(new Gtk2::HBox(0,10),
- gtkcreate_img("ic82-discdurwhat-40"),
- new Gtk2::Label(N("Backup Now from configuration file")),
- new Gtk2::HBox(0, 5)
- ));
- $button_see_conf->add(gtkpack(new Gtk2::HBox(0,10),
- gtkcreate_img("ic82-moreoption-40"),
- new Gtk2::Label(N("View Backup Configuration.")),
- new Gtk2::HBox(0, 5)
- ));
-
- button_box_restore_main();
- fonction_env(\$box2, \&build_backup_box, \&interactive_mode_box, "options");
- $up_box->show_all();
-}
-
-################################################ INTERACTIVE ################################################
-
-sub interactive_mode_box {
- $box2->destroy();
- my ($mode) = @_;
-
- read_conf_file();
- gtkadd($advanced_box,
- $box2 = gtkpack_(new Gtk2::HBox(0, 15),
- 1, new Gtk2::VBox(0, 5),
- 1, gtkpack_(new Gtk2::VBox(0, 15),
- 1, new Gtk2::VBox(0, 5),
- 1, gtksignal_connect(new Gtk2::Button(N("Wizard Configuration")), clicked => sub {
- ${$central_widget}->destroy();
- read_conf_file();
- wizard();
- }),
- 1, gtksignal_connect(new Gtk2::Button(N("Advanced Configuration")), clicked => sub {
- button_box_adv();
- ${$central_widget}->destroy();
- advanced_box();
- }),
- 1, gtksignal_connect(new Gtk2::Button(N("Backup Now")), clicked => sub {
- ${$central_widget}->destroy();
- if ($cfg_file_exist) {
- build_backup_box();
- } else {
- message_noconf_box();
- }
- }),
- 1, gtksignal_connect(new Gtk2::Button(N("Restore")), clicked => sub {
- ${$central_widget}->destroy();
- restore_box();
- }),
- 1, new Gtk2::VBox(0, 5),
- ),
- 1, new Gtk2::VBox(0, 5),
- ),
- );
- button_box_main();
- $custom_help = "main";
- $central_widget = \$box2;
- $up_box->show_all();
- if ($mode eq "restore") {
- ${$central_widget}->destroy();
- restore_box();
- }
-}
-
-sub interactive_mode {
- $interactive = 1;
- eval { require ugtk2 };
- die "Can't load ugtk2...\n" if $@;
- ugtk2->import(qw(:helpers :wrappers :create));
-
- $in = 'interactive'->vnew('', 'default');
-
- my $box;
- $my_win = ugtk2->new('drakbackup');
- $window1 = $my_win->{window};
- unless ($::isEmbedded) {
- $my_win->{rwindow}->set_position('center');
- $my_win->{rwindow}->set_title(N("Drakbackup"));
- }
- $my_win->{rwindow}->signal_connect(delete_event => sub { ugtk2->exit(0) });
- read_conf_file();
-
- gtkadd($window1,
- gtkpack(new Gtk2::VBox(0,0),
- gtkpack(gtkset_size_request($up_box = new Gtk2::VBox(0, 5), 540, 400),
- $box = gtkpack_(new Gtk2::VBox(0, 3),
- if_(!$::isEmbedded, 0, gtkcreate_img("drakbackup.540x57")),
- 1, gtkpack_(new Gtk2::HBox(0, 3),
- 1, gtkpack_(new Gtk2::HBox(0, 15),
- 0, new Gtk2::HBox(0, 5),
- 1, $advanced_box = gtkpack_(new Gtk2::HBox(0, 15),
- 1, $box2 = gtkpack_(new Gtk2::VBox(0, 15),),
- ),
- 0, new Gtk2::HBox(0, 5),
- ),
- ),
- 0, new Gtk2::HSeparator,
- 0, $button_box = gtkpack(new Gtk2::VBox(0, 15),
- $button_box_tmp = gtkpack(new Gtk2::VBox(0, 0),),
- ),
- ),
- ),
- ),
- );
- interactive_mode_box();
- $custom_help = "main";
- button_box_main();
- $central_widget = \$box2;
- $window1->show_all;
- $window1->realize;
- $window1->show_all();
- $my_win->main;
- $my_win->exit(0);
-}
-
-################################################ HELP & ABOUT ################################################
-
-
-sub adv_help {
- my ($function, $custom_help) = @_,
-
-################################################ help definition ##############################################
-
- my %custom_helps = (
- "options" =>
- N("options description:
-
- In this step Drakbackup allow you to change:
-
- - The compression mode:
-
- If you check bzip2 compression, you will compress
- your data better than gzip (about 2-10 %%).
- This option is not checked by default because
- this compression mode needs more time (about 1000%% more).
-
- - The update mode:
-
- This option will update your backup, but this
- option is not really useful because you need to
- decompress your backup before you can update it.
-
- - the .backupignore mode:
-
- Like with cvs, Drakbackup will ignore all references
- included in .backupignore files in each directories.
- ex:
- #> cat .backupignore
- *.o
- *~
- ...
-
-
-"),
- "mail_pb" =>
- N("
- Some errors during sendmail are caused by
- a bad configuration of postfix. To solve it you have to
- set myhostname or mydomain in /etc/postfix/main.cf
-
-"),
-
- "what" =>
- N("options description:
-
- - Backup system files:
-
- This option allows you to backup your /etc directory,
- which contains all configuration files. Please be
- careful during the restore step to not overwrite:
- /etc/passwd
- /etc/group
- /etc/fstab
-
- - Backup User files:
-
- This option allows you select all users that you want
- to backup.
- To preserve disk space, it is recommended that you
- do not include the web browser's cache.
-
- - Backup Other files:
-
- This option allows you to add more data to save.
- With the other backup it's not possible at the
- moment to select incremental backup.
-
- - Incremental Backups:
-
- The incremental backup is the most powerful
- option for backup. This option allows you
- to backup all your data the first time, and
- only the changed data afterward.
- Then you will be able, during the restore
- step, to restore your data from a specified
- date.
- If you have not selected this option all
- old backups are deleted before each backup.
-
-
-"),
- "restore" =>
- N("restore description:
-
-Only the most recent date will be used, because with incremental
-backups it is necessary to restore one by one each older backup.
-
-So if you don't want to restore a user please unselect all their
-check boxes.
-
-Otherwise, you are able to select only one of these.
-
- - Incremental Backups:
-
- The incremental backup is the most powerful
- option to use. This option allows you to
- backup all of your data the first time, and
- only the changed data after.
- So you will be able, during the restore
- step, to restore your data from a specified
- date.
- If you have not selected this option all
- old backups are deleted before each backup.
-
-
-
-"),
- "main" =>
- N(" Copyright (C) 2001-2002 MandrakeSoft by DUPONT Sebastien <dupont_s\@epita.fr>") .
-"\n" .
-N(" updates 2002 MandrakeSoft by Stew Benedict <sbenedict\@mandrakesoft.com>") .
-"\n\n" . $::license .
-"\n\n _____________________\n" .
-N("Description:
-
- Drakbackup is used to backup your system.
- During the configuration you can select:
- - System files,
- - Users files,
- - Other files.
- or All your system ... and Other (like Windows Partitions)
-
- Drakbackup allows you to backup your system on:
- - Harddrive.
- - NFS.
- - CDROM (CDRW), DVDROM (with autoboot, rescue and autoinstall.).
- - FTP.
- - Rsync.
- - Webdav.
- - Tape.
-
- Drakbackup allows you to restore your system to
- a user selected directory.
-
- Per default all backups will be stored on your
- /var/lib/drakbackup directory
-
- Configuration file:
- /etc/drakconf/drakbackup/drakbackup.conf
-
-Restore Step:
-
- During the restore step, DrakBackup will remove
- your original directory and verify that all
- backup files are not corrupted. It is recommended
- you do a last backup before restoring.
-
-
-"),
- "ftp" =>
- N("options description:
-
-Please be careful when you are using ftp backup, because only
-backups that are already built are sent to the server.
-So at the moment, you need to build the backup on your hard
-drive before sending it to the server.
-
-"),
- "restore_pbs" =>
- N("
-Restore Backup Problems:
-
-During the restore step, Drakbackup will verify all your
-backup files before restoring them.
-Before the restore, Drakbackup will remove
-your original directory, and you will loose all your
-data. It is important to be careful and not modify the
-backup data files by hand.
-")
-);
-
-################################################ help function ##############################################
- my $text = new Gtk2::TextView;
- gtktext_insert($text, $custom_helps{$custom_help} || $custom_helps{main});
- gtkpack($advanced_box,
- my $advanced_box_help = gtkpack_(new Gtk2::VBox(0,10),
- 1, create_scrolled_window($text),
- 0, gtkadd(gtkset_layout(new Gtk2::HButtonBox, 'spread'),
- gtksignal_connect(new Gtk2::Button(N("OK")), clicked => sub {
- $$central_widget->destroy();
- $function->();
- }),
- ),
- )
- );
- $central_widget = \$advanced_box_help;
- $up_box->show_all();
-}
-
-sub to_ok {
- $sav_next_widget = $next_widget;
- $next_widget = undef;
- button_box_wizard();
-}
-
-sub to_normal {
- $next_widget = $sav_next_widget;
-}
diff --git a/perl-install/standalone/drakboot b/perl-install/standalone/drakboot
deleted file mode 100755
index 0e0765b9b..000000000
--- a/perl-install/standalone/drakboot
+++ /dev/null
@@ -1,52 +0,0 @@
-#!/usr/bin/perl
-
-use lib qw(/usr/lib/libDrakX);
-
-use standalone; #- warning, standalone must be loaded very first, for 'explanations'
-
-use common;
-use interactive;
-use any;
-use bootloader;
-use detect_devices;
-use fsedit;
-use fs;
-use c;
-
-my $in = 'interactive'->vnew('su', 'bootloader');
-
-$::lilo_choice = \&lilo_choice;
-
-if ($in->isa('interactive::gtk')) {
- require 'bootlook.pm';
-} else {
- lilo_choice();
-}
-
-$in->exit(0);
-
-sub lilo_choice {
- my $bootloader = bootloader::read();
- local ($_) = `detectloader`;
- $bootloader->{methods} = { lilo => 1, grub => !!/grub/i, if_(arch() =~ /ppc/, yaboot => 1) };
-
- my ($all_hds) = fsedit::get_hds();
- my $fstab = [ fsedit::get_all_fstab($all_hds) ];
- fs::merge_info_from_fstab($fstab);
-
- $::expert=1;
-
- ask:
- local $::isEmbedded = 0;
- any::setupBootloader($in, $bootloader, $all_hds, $fstab, $ENV{SECURE_LEVEL}) or return;
- eval { bootloader::install($bootloader, $fstab, $all_hds->{hds}) };
-
- my $loader = arch() =~ /ppc/ ? "Yaboot" : "LILO";
- if ($@) {
- $in->ask_warn('',
- [ N("Installation of %s failed. The following error occured:", $loader),
- grep { !/^Warning:/ } cat_("/tmp/.error") ]);
- unlink "/tmp/.error";
- goto ask;
- }
-}
diff --git a/perl-install/standalone/drakbug b/perl-install/standalone/drakbug
deleted file mode 100755
index 1828f9d26..000000000
--- a/perl-install/standalone/drakbug
+++ /dev/null
@@ -1,190 +0,0 @@
-#!/usr/bin/perl
-
-# Drak Bug Report
-# Copyright (C) 2002 MandrakeSoft (daouda@mandrakesoft.com)
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-use strict;
-use diagnostics;
-use lib qw(/usr/lib/libDrakX);
-
-use standalone;
-use interactive;
-use common;
-use ugtk2 qw(:all);
-use Config;
-
-
-my $in = 'interactive'->vnew;
-
-my $bugzilla_url = "http://drakbug.mandrakesoft.com";
-my $version = "0.9.0";
-my $prog;
-my $incident = 0;
-
-while (defined($_ = shift @ARGV)) {
- /^--report$/ and do { $prog = shift @ARGV };
- /^--incident$/ and do { $incident = 1; $prog = shift @ARGV };
-}
-
-my $window = ugtk2->new('drakbug', center => 1);
-my $window_g = $window->{window};
-#$window->{rwindow}->set_policy($false,$false,$true);
-$window->{rwindow}->set_border_width(5);
-$window->{rwindow}->set_title(N("Mandrake Bug Report Tool"));
-$window->{window}->signal_connect("delete_event", \&quit_global);
-
-my $mdk_app = {
- N("Mandrake Control Center") => 'drakconf',
- N("First Time Wizard") => 'drakfw',
- N("Synchronization tool") => 'draksync',
- N("Standalone Tools") => ['adduserdrake', 'diskdrake', 'drakautoinst', 'drakbackup', 'drakboot', 'drakbug', 'drakfloppy', 'drakfont', 'drakgw', 'drakconnect', 'drakxservices', 'drakxtv', 'keyboardrake', 'logdrake', 'mousedrake', 'net_monitor', 'printerdrake', 'scannerdrake', 'drakfirewall', 'XFdrake'],
- N("HardDrake") => 'harddrake2',
- N("Mandrake Online") => 'mdkonline',
- N("Menudrake") => 'menudrake',
- N("Msec") => 'msec',
- N("Remote Control") => 'rfbdrake',
- N("Software Manager") => 'rpmdrake',
- N("Urpmi") => 'urpmi',
- N("Windows Migration tool") => 'transfugdrake',
- N("Userdrake") => 'userdrake',
- N("Configuration Wizards") => 'wizdrake',
- };
-
-my @generic_tool = keys %{$mdk_app};
-my @all_drakxtools = @{ $mdk_app->{N("Standalone Tools")} };
-push(@generic_tool,@all_drakxtools);
-
-my $kernel_release = chomp_(`uname -r`) . "";
-
-my $table = new Gtk2::Table(4,2, 'TRUE');
-#$table->set_border_width(5);
-$table->set_row_spacings(10);
-$table->set_col_spacings(5);
-$table->attach(new Gtk2::Label(N("Application:")), 0, 1, 0, 1, 'fill', 'fill',20,0);
-$table->attach(new Gtk2::Label(N("Package: ")), 0, 1, 1, 2, 'fill', 'fill',0,0);
-$table->attach(new Gtk2::Label(N("Kernel:")), 0, 1, 2, 3, 'fill', 'fill',0,0);
-$table->attach(new Gtk2::Label(N("Release: ")), 0, 1, 3, 4, 'fill', 'fill',0,0);
-$table->attach(my $comb_app = new Gtk2::Combo(), 1, 2, 0, 1, 'fill', 'fill',0,0);
-$comb_app->set_size_request(270, undef);
-$comb_app->set_popdown_strings("", sort(@generic_tool));
-$table->attach(my $package = new Gtk2::Entry(), 1, 2, 1, 2, 'fill', 'fill',0,0);
-$package->set_text("...");
-$table->attach(my $kernel_rel = new Gtk2::Entry(), 1, 2, 2, 3, 'fill', 'fill',0,0);
-$kernel_rel->set_text($kernel_release);
-$table->attach(my $mdk_rel = new Gtk2::Entry(), 1, 2, 3, 4, 'fill', 'fill',0,0);
-$mdk_rel->set_text(mandrake_release());
-
-gtkpack2__(
- gtkpack2__(my $vbx = new Gtk2::VBox(0,5),
- gtkadd($table),
- gtkpack(new Gtk2::HBox(0,0),
- gtkpack(gtkset_justify(new Gtk2::Label(N("\n\nTo submit a bug report, click on the button report.\nThis will open a web browser window on https://drakbug.mandrakesoft.com\n where you'll find a form to fill in.The information displayed above will be \ntransferred to that server\n\n")), "left")),
- ),
- gtkpack(new Gtk2::HSeparator),
-
- ),
- );
-
-if (defined $prog) {
- update_app($prog);
- $comb_app->entry->set_text($prog);
-};
-
-$comb_app->entry->signal_connect('changed', sub { update_app($comb_app->entry->get_text()) });
-my $kernel = $kernel_rel->get_chars(0, -1);
-my $hbx = new Gtk2::HBox(0,0);
-my $Close_Button = new Gtk2::Button(N("Close"));
-$Close_Button->signal_connect(clicked => sub { ugtk2->exit(0) });
-$hbx->pack_start($Close_Button,0,0,0);
-
-my $Report_Button = new Gtk2::Button(N("Report"));
-$Report_Button->signal_connect(clicked => sub { my $options = "mdkbugreport=1";
- $options .= "&incident=1" if $incident;
- my $p = $package->get_text(); my $k = $kernel_rel->get_text(); (my $r = parse_release()) =~ s/\s//;
- $options .= "&package=$p" if $p =~ /mdk/;
- $options .= "&kernel=$k";
- $options .= "&version=$r";
- print($bugzilla_url . "?" . $options . "\n");
- connect_bugzilla($bugzilla_url."?".$options) });
-my $help_button = new Gtk2::Button(" ".N("Help")." ");
-$help_button->signal_connect(clicked => sub { system("drakhelp https://qa.mandrakesoft.com &") });
-$hbx->pack_end($Report_Button,0,0,0);
-$hbx->pack_end($help_button,0,0,5);
-$vbx->pack_start($hbx,0,0,0);
-$window->{window}->add($vbx);
-
-$window->{window}->show_all();
-$window->main;
-ugtk2->exit(0);
-
-sub update_app {
- my ($text) = @_;
- my $app_choice;
- $ENV{PATH} = "/sbin:/usr/sbin:$ENV{PATH}";
- if (member($text,@all_drakxtools) || $text eq N("Standalone Tools")) {
- $app_choice = chomp_(`rpm -q drakxtools`);
- } elsif (member($text, keys %{$mdk_app}) && $text ne N("Standalone Tools")) {
- $app_choice = get_package($mdk_app->{$text});
- } else {
- LOOP: while (my ($key,$value) = each %{$mdk_app}) {
- next if $key eq N("Standalone Tools");
- if ($value eq $text) {
- $app_choice = get_package($text);
- $prog = $key;
- last LOOP;
- }
- }
-
- }
- $app_choice ? $package->set_text($app_choice) : $package->set_text(N("Not installed"));
-}
-
-my %packages;
-
-sub get_package {
- my ($executable) = @_;
- my ($rpm_package, $which_app);
- $rpm_package = $packages{$executable};
- if (!defined $rpm_package) {
- $which_app = chomp_(`which '$executable' 2> /dev/null`);
- # deush, rpm can takes some time aka it'll sleeps if something has opened rpm db !
- $rpm_package = $which_app eq "" ? N("Package not installed") : chomp_(`rpm -qf '$which_app' 2>&1`);
- $packages{$executable} = $rpm_package;
- }
- $rpm_package;
-}
-
-sub parse_release {
- my ($rel) = mandrake_release() =~ /release\s(\S+\s\(.*\))/;
- $rel;
-}
-
-sub connect_bugzilla {
- my ($url) = @_;
- my $w = $in->wait_message('', N("connecting to Bugzilla wizard ..."));
- sleep(3);
- exec $ENV{BROWSER},$url if exists $ENV{BROWSER};
- my @browser = qw(mozilla konqueror galeon);
- foreach (@browser) {
- if (-e "/usr/bin/$_") { log::explanations("Contacting $url with $_\n "); exec $_,$url }
- }
- $in->ask_warn('', N("No browser available! Please install one"));
-}
-
-sub quit_global {
- ugtk2->exit(0);
-}
diff --git a/perl-install/standalone/drakbug_report b/perl-install/standalone/drakbug_report
deleted file mode 100755
index ca947d4a3..000000000
--- a/perl-install/standalone/drakbug_report
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/usr/bin/perl
-
-use lib qw(/usr/lib/libDrakX);
-
-use common;
-use any;
-
-my %other = (
- 'rpm -qa' => join('', sort `rpm -qa`),
- 'mandrake version' => mandrake_release(),
- 'df' => join('', `df`),
-);
-
-print any::report_bug('', %other);
diff --git a/perl-install/standalone/drakconnect b/perl-install/standalone/drakconnect
deleted file mode 100755
index 2cc60afa1..000000000
--- a/perl-install/standalone/drakconnect
+++ /dev/null
@@ -1,655 +0,0 @@
-#!/usr/bin/perl
-
-# DrakConnect
-
-# Copyright (C) 1999-2002 MandrakeSoft (damien@mandrakesoft.com)
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-use strict;
-use diagnostics;
-use lib qw(/usr/lib/libDrakX);
-
-use standalone; #- warning, standalone must be loaded very first, for 'explanations'
-
-use interactive;
-use common;
-use network::netconnect;
-use network::ethernet;
-use network::tools;
-use network::modem;
-use network;
-use c;
-use modules;
-use network::isdn;
-use network::adsl;
-use MDK::Common::Globals "network", qw($in $prefix $disconnect_file $connect_prog $connect_file);
-
-my $xpm_path = "/usr/share/libDrakX/pixmaps";
-local $_ = join '', @ARGV;
-$::isWizard = /--wizard/;
-
-my $netcnx = {};
-my $netc = {};
-my $intf = {};
-my @conx_type = ('modem', 'isdn_internal', 'isdn_external', 'adsl', 'cable', 'lan');
-
-#$::wizard_xpm = "/usr/share/pixmaps/internet.xpm";
-
-my $in = 'interactive'->vnew('su', 'network');
-!$::isEmbedded && $in->isa('interactive::gtk') and $::isWizard = 1;
-$::Wizard_pix_up = "wiz_drakconnect.png";
-$::Wizard_title = "Network & Internet Configuration";
-
-MDK::Common::Globals::init(
- in => $in,
- prefix => '',
- connect_file => "/etc/sysconfig/network-scripts/net_cnx_up",
- disconnect_file => "/etc/sysconfig/network-scripts/net_cnx_down",
- connect_prog => "/etc/sysconfig/network-scripts/net_cnx_pg"
- );
-
-$::isEmbedded && ref($in) =~ /gtk/ or goto dd;
-require ugtk2;
-import ugtk2 qw(:helpers :wrappers :create);
-my $expert_mode = 0;
-network::netconnect::read_net_conf('', $netcnx, $netc);
-modules::load_category('net');
-my @all_cards = network::ethernet::conf_network_card_backend($netc, $intf);
-network::netconnect::load_conf($netcnx, $netc, $intf);
-
-my $window1 = ugtk2->new('drakconnect');
-$window1->{rwindow}->signal_connect(delete_event => sub { ugtk2->exit(0) });
-unless ($::isEmbedded) {
- $window1->{rwindow}->set_position('center');
- $window1->{rwindow}->set_title(N("Network configuration (%d adapters)", @all_cards));
- $window1->{rwindow}->set_size_request(500, 400);
-}
-$window1->{rwindow}->set_border_width(10);
-
-my $combo1 = new Gtk2::Combo;
-$combo1->set_popdown_strings(network::netconnect::get_profiles());
-my $old_profile = $netcnx->{PROFILE};
-$combo1->entry->set_text($netcnx->{PROFILE} || "default");
-$combo1->entry->set_editable(0);
-my $button_del = new Gtk2::Button(N("Del profile..."));
-$button_del->signal_connect(clicked => sub {
- my $dialog = new_dialog();
- $dialog->vbox->pack_start(new Gtk2::Label(N("Profile to delete:")),1,1,0);
- my $combo_dialog = new Gtk2::Combo;
- $combo_dialog->set_popdown_strings(grep { ! /default/ } network::netconnect::get_profiles());
- $combo_dialog->entry->set_editable(0);
- $dialog->vbox->pack_start($combo_dialog,1,1,0);
- my $bbox_dialog = new Gtk2::HButtonBox;
- $dialog->action_area->add($bbox_dialog);
- $bbox_dialog->set_layout('end');
- my $button_ok = new Gtk2::Button(N("OK"));
- $button_ok->signal_connect(clicked => sub {
- network::netconnect::del_profile($netcnx, $combo_dialog->entry->get_text());
- $netcnx->{PROFILE} eq $combo_dialog->entry->get_text() and $netcnx->{PROFILE} = "default";
- Gtk2->main_quit();
- });
- $bbox_dialog->add($button_ok);
- my $button_cancel = new Gtk2::Button(N("Cancel"));
- $button_cancel->signal_connect(clicked => sub { Gtk2->main_quit() });
- $bbox_dialog->add($button_cancel);
- $dialog->show_all;
- $dialog->set_modal(1);
- Gtk2->main();
- $dialog->destroy;
- $combo1->entry->set_text(-e "/etc/sysconfig/network-scripts/drakconnect_conf." . $combo1->entry->get_text ? $combo1->entry->get_text : "default");
- $combo1->set_popdown_strings(network::netconnect::get_profiles());
- apply();
- });
-$button_del->set_sensitive(network::netconnect::get_profiles() > 1);
-my $button_new = new Gtk2::Button(N("New profile..."));
-$button_new->signal_connect(clicked => sub {
- my $dialog = new_dialog();
- $dialog->vbox->pack_start(new Gtk2::Label(N("Name of the profile to create (the new profile is created as a copy of the current one) :")),1,1,0);
- my $entry_dialog = new Gtk2::Entry;
- $dialog->vbox->pack_start($entry_dialog,1,1,0);
- my $bbox_dialog = new Gtk2::HButtonBox;
- $dialog->action_area->add($bbox_dialog);
- $bbox_dialog->set_layout('end');
- my $button_ok = new Gtk2::Button(N("OK"));
- $button_ok->signal_connect(clicked => sub {
- network::netconnect::add_profile($netcnx, $entry_dialog->get_text());
- $netcnx->{PROFILE} = $entry_dialog->get_text();
- Gtk2->main_quit();
- });
- $bbox_dialog->add($button_ok);
- my $button_cancel = new Gtk2::Button(N("Cancel"));
- $button_cancel->signal_connect(clicked => sub { Gtk2->main_quit() });
- $bbox_dialog->add($button_cancel);
- $dialog->show_all;
- $dialog->set_modal(1);
- Gtk2->main();
- $dialog->destroy;
- $combo1->entry->set_text(-e "/etc/sysconfig/network-scripts/drakconnect_conf." . $netcnx->{PROFILE} ? $netcnx->{PROFILE} : "default");
- $combo1->set_popdown_strings(network::netconnect::get_profiles());
-});
-my $hostname = chomp_(`hostname`);
-
-#attach(table, child, left_attach, right_attach, top_attach, bottom_attach, xoptions, yoptions, xpadding, ypadding)
-#$table->attach($button[0], 0, 1, 0, 1, {expand=>1,fill=>1}, {expand=>1,fill=>1},0,0);
-my $type_label = new Gtk2::Label($netcnx->{type});
-my $int_label = new Gtk2::Label($netcnx->{type} eq 'lan' ? N("Gateway:") : N("Interface:"));
-my $interface_name = new Gtk2::Label($netcnx->{type} eq 'lan' ? $netc->{GATEWAY} : $netcnx->{NET_INTERFACE});
-my $isconnected = -1;
-#-sub connected_local {
-#- print "in connected local\n";
-#- my $w = $in->wait_message('', N("Testing your connection..."), 1);
-#- gtkflush();
-#- $isconnected = connected();
-#-}
-
-my $warning_label1 = new Gtk2::Label("");
-my $int_connect = new Gtk2::Button(N("Wait please"));
-$int_connect->set_sensitive(0);
-$int_connect->signal_connect(clicked => sub {
- if (!$isconnected) {
- if (cat_($connect_prog) =~ m|/usr/bin/kppp| && -e '/usr/bin/kppp') {
- run_program::rooted($prefix, "/usr/bin/kppp &");
- } else {
- connect_backend();
- }
- } else {
- disconnect_backend();
- }
- update2();
-});
-
-
-my $button_internet = gtksignal_connect(Gtk2::Button->new(N("Configure Internet Access...")),
- clicked => sub { configure_net('', $netcnx, $netc, $intf) });
-
-
-my $tree_model = Gtk2::TreeStore->new(Gtk2::GType->OBJECT, map { Gtk2::GType->STRING } 2..6);
-my $list = Gtk2::TreeView->new_with_model($tree_model);
-$list->append_column(Gtk2::TreeViewColumn->new_with_attributes(undef, Gtk2::CellRendererPixbuf->new, 'pixbuf' => 0));
-each_index { $list->append_column(Gtk2::TreeViewColumn->new_with_attributes($_, Gtk2::CellRendererText->new, 'text' => $::i + 1)) } (N("Interface"), N("IP address"), N("Protocol"), N("Driver"), N("State"));
-
-#TV $list->set_column_auto_resize($_,1) foreach (0..4);
-#TV $list->column_titles_passive();
-#TV $list->set_shadow_type('etched_out');
-#$scrolled1->add_with_viewport($table2);
-
-my $ip_regexp = qr/(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})/;
-
-build_list();
-
-my $button_lan = gtksignal_connect(Gtk2::Button->new(N("Configure Local Area Network...")),
- clicked => sub { configure_lan('', $netcnx, $netc, $intf) });
-
-my ($bbox0, $label_host, $int_state);
-
-$window1->{window}->add(
- gtkpack_(Gtk2::VBox->new(0,10),
- 0, gtkpack_(Gtk2::HBox->new(0,0),
- 0, new Gtk2::Label(N("Profile: ")),
- 0, $combo1,
- 0, $button_del,
- 0, $button_new,
- ),
- 0, gtkpack_(Gtk2::HBox->new(0,0),
- 0, new Gtk2::Label(N("Hostname: ")),
- 0, $label_host = new Gtk2::Label($hostname),
- ),
- 0, gtkadd(Gtk2::Frame->new(N("Internet access")),
- gtkpack_(gtkset_border_width(Gtk2::VBox->new(0,0), 5),
- 1, gtkset_border_width(create_packtable({ col_spacings => 5, row_spacings => 5 },
- [ new Gtk2::Label(N("Type:")), $type_label ],
- [ $int_label, $interface_name ],
- [ Gtk2::Label->new(N("Status:")),
- $int_state = Gtk2::Label->new(N("Testing your connection...")),
- $int_connect, ] # $button_internet ]
- ),
- 5),
- 0, $warning_label1,
- 0, gtkpack_(new Gtk2::HBox(0, 0),
- 0, $button_internet),
- )
- ),
- 1, gtkadd(Gtk2::Frame->new(N("LAN configuration")),
- gtkpack_(gtkset_border_width(Gtk2::VBox->new(0,0), 5),
- 0, $list,
- 0, new Gtk2::HBox(0,0),
- 0, gtkpack_(new Gtk2::HBox(0, 0),
- 0, $button_lan),
- )
- ),
- 0, gtkadd(gtkset_layout(Gtk2::HButtonBox->new, 'end'),
- gtksignal_connect(Gtk2::Button->new(N("Wizard...")),
- clicked => sub {
- $::isWizard = 1;
- system("drakconnect --wizard");
- # netconnect::intro('', $netcnx, $in);
- $combo1->entry->set_text(-e "/etc/sysconfig/network-scripts/drakconnect_conf." . ($combo1->entry->get_text || "default"));
- network::netconnect::load_conf($netcnx, $netc, $intf);
- update();
- }),
- Gtk2::Label->new(N("Click here to launch the wizard ->"))
- ),
- 0, Gtk2::HSeparator->new,
- 0, gtkset_layout($bbox0 = new Gtk2::HButtonBox, 'end')
- ),
- );
-
-
-#$bbox0->set_border_width(5);
-
-my $button_expert = new Gtk2::Button(N("Expert Mode"));
-$button_expert->signal_connect(clicked => sub {
- foreach ($button_internet, $button_lan) { $expert_mode ? $_->hide() : $_->show() }
- $button_expert->child->set($expert_mode ? N("Expert Mode") : N("Normal Mode"));
- $expert_mode = !$expert_mode;
- });
-$bbox0->add($button_expert);
-
-my $button_apply = new Gtk2::Button(N("Apply"));
-$button_apply->signal_connect(clicked => sub {
- apply();
- });
-$button_apply->set_sensitive(0);
-$bbox0->add($button_apply);
-
-my $button_cancel = new Gtk2::Button(N("Cancel"));
-$button_cancel->signal_connect(clicked => sub {
- $combo1->entry->set_text($old_profile);
- update();
- quit_global();
- });
-$bbox0->add($button_cancel);
-my $button_ok = new Gtk2::Button(N("OK"));
-$button_ok->signal_connect(clicked => sub {
- my $dialog = new_dialog();
- my $label = new Gtk2::Label(N("Please Wait... Applying the configuration"));
- $dialog->vbox->pack_start($label,1,1,20);
- $dialog->show_all;
- gtkflush();
- apply();
- $dialog->destroy;
- update();
- quit_global();
- });
-$bbox0->add($button_ok);
-$combo1->entry->signal_connect('changed', sub {
-# connected() and disconnect_backend();
- network::netconnect::set_profile($netcnx, $combo1->entry->get_text());
- network::netconnect::load_conf($netcnx, $netc, $intf);
- $netcnx->{$_} = $netc->{$_} foreach qw(NET_DEVICE NET_INTERFACE);
- network::netconnect::set_net_conf($netcnx, $netc);
- update();
- $button_apply->set_sensitive(1);
- });
-
-$window1->{rwindow}->show_all();
-$_->hide foreach $button_internet, $button_lan;
-gtkflush();
-my $tag = Gtk2->timeout_add(4000, \&update2);
-$window1->main;
-ugtk2->exit(0);
-
-dd:
-network::netconnect::intro('', $netcnx, $in);
-$in->exit(0);
-
-sub build_list {
- foreach my $i (0..$#all_cards) {
- my ($ip, $state);
- if (-e "/sbin/ifconfig") {
- local $_ = `LC_ALL=C LANG=C LANGUAGE=C LC_MESSAGES=C /sbin/ifconfig "eth$i"`;
- /inet addr\:$ip_regexp/;
- $ip = if_($1 && $2 && $3, "$1.$2.$3.$4");
- $_ = `LC_ALL=C LANG=C LANGUAGE=C LC_MESSAGES=C /sbin/ifconfig`;
- $state = /eth$i/ ? "up" : "down";
- } else {
- $ip = $intf->{"eth$_"}{IPADDR};
- $state = "n/a";
- }
- $tree_model->append_set(undef, [ map_index { $::i => $_ } (gtkcreate_pixbuf("eth_card_mini2.png"), "eth$i", $ip , $intf->{"eth$i"}{BOOTPROTO}, $all_cards[$i][1], $state) ])->free;
-#TV $list->set_selectable($i, 0);
- }
-}
-
-sub apply {
- $old_profile = $netcnx->{PROFILE} || "default";
- network::netconnect::save_conf($netcnx, $netc, $intf);
-
- $netcnx->{type} eq 'modem' and network::modem::ppp_configure($in, $netcnx->{$netcnx->{type}}, '');
- $netcnx->{type} eq 'isdn_internal' and network::isdn::isdn_write_config_backend($netcnx->{$netcnx->{type}}, 1, $netc, $netcnx); #$light
- $netcnx->{type} eq 'isdn_external' and network::modem::ppp_configure($in, $netcnx->{$netcnx->{type}}, '');
- my $a = $netcnx->{type};
- $a =~ s/adsl_//;
- $netcnx->{type} =~ /adsl/ and network::adsl::adsl_conf_backend($netcnx->{$netcnx->{type}}, $netc, $a, $netcnx);
-
- $netcnx->{dhcp_client} and $netc->{dhcp_client} = $netcnx->{dhcp_client};
- network::configureNetwork2($in, $prefix, $netc, $intf);
- $netcnx->{type} =~ /adsl/ or system("/sbin/chkconfig --del adsl 2> /dev/null");
- $netcnx->{type} !~ /adsl_p/ and system("$prefix/etc/rc.d/init.d/network restart");
- $button_apply->set_sensitive(0);
-}
-
-sub ethisup { `LC_ALL=C LANG=C LANGUAGE=C LC_MESSAGES=C /sbin/ifconfig` =~ /eth$_[0]/ }
-
-my $to_update;
-sub update {
- my $h = chomp_(`hostname`);
- $label_host->set($h);
- $type_label->set($netcnx->{type});
- $int_label->set($netcnx->{type} eq 'lan' ? N("Gateway:") : N("Interface:"));
- $interface_name->set($netcnx->{type} eq 'lan' ? $netc->{GATEWAY} : $netcnx->{NET_INTERFACE});
-#TV $list->window->freeze();
- $tree_model->clear;
- build_list();
-#TV $list->window->thaw();
- $button_del->set_sensitive(network::netconnect::get_profiles() > 1);
- return 1 if $isconnected == -1;
- $int_state->set($isconnected ? N("Connected") : N("Not connected"));
- $int_connect->child->set($isconnected ? N("Disconnect...") : N("Connect..."));
- $int_connect->set_sensitive(1);
- 1;
-}
-
-sub in_ifconfig {
- my ($intf) = @_;
- -e '/sbin/ifconfig' or return 1;
- $intf eq '' and return 1;
- `/sbin/ifconfig` =~ /$intf/;
-}
-
-sub update2 {
- undef $to_update;
- connected_bg(\$to_update);
- if (defined $to_update) {
- $isconnected = $to_update;
- if ($isconnected != -1) {
- if ($isconnected && !in_ifconfig($netcnx->{NET_INTERFACE})) {
- $warning_label1->set(N("Warning, another Internet connection has been detected, maybe using your network"));
- $isconnected = 0;
- } else { $warning_label1->set("") }
- $int_state->set($isconnected ? N("Connected") : N("Not connected"));
- $int_connect->child->set($isconnected ? N("Disconnect...") : N("Connect..."));
- $int_connect->set_sensitive(1);
- }
- }
- update();
- 1;
-}
-
-sub quit_global {
- ugtk2->exit(0);
-}
-
-sub configure_lan {
- my (undef, $prefix, $netcnx, undef, $intf) = @_;
- my $window = Gtk2::Window->new('toplevel');
-
- my @card_tab;
-
- if (@all_cards < 1) {
- my $dialog = new_dialog();
- $dialog->vbox->pack_start(new Gtk2::Label(N("You don't have any configured interface.
-Configure them first by clicking on 'Configure'")),1,1,0);
- $dialog->action_area->add(gtkadd(gtkset_layou(Gtk2::HButtonBox->new, 'end'),
- gtksignal_connect(new Gtk2::Button(N("OK")),
- clicked => sub { Gtk2->main_quit() })
- )
- );
- $dialog->show_all;
- $dialog->set_modal(1);
- Gtk2->main();
- $dialog->destroy;
- return;
- }
-
- $window->signal_connect(delete_event => sub { Gtk2->main_quit });
- $window->set_position('center');
- $window->set_title(N("LAN configuration"));
- $window->set_border_width(10);
- my $vbox0 = new Gtk2::VBox(0,0);
- $window->add($vbox0);
- $vbox0->pack_start(new Gtk2::Label(N("LAN Configuration")),0,1,0);
- my $notebook = new Gtk2::Notebook;
- $vbox0->pack_start($notebook,0,1,0);
- foreach (0..$#all_cards) {
- my @infos;
- my @conf_data;
- $card_tab[2*$_] = \@infos;
- $card_tab[2*$_+1] = \@conf_data;
- my $vbox_local = new Gtk2::VBox(0,0);
- $vbox_local->set_border_width(10);
- $vbox_local->pack_start(new Gtk2::Label(N("Adapter %s: %s", $_+1 , "eth$_")),1,1,0);
- # Eth${_}Hostname = $netc->{HOSTNAME}
- # Eth${_}HostAlias = " . do { $netc->{HOSTNAME} =~ /([^\.]*)\./; $1 } . "
- # Eth${_}Driver = $all_cards[$_]->[1]
- @conf_data = ([N("IP address"), \$intf->{"eth$_"}{IPADDR}],
- [N("Netmask"), \$intf->{"eth$_"}{NETMASK}],
- [N("Boot Protocol"), \$intf->{"eth$_"}{BOOTPROTO}, ["static", "dhcp", "bootp"]],
- [N("Started on boot"), \$intf->{"eth$_"}{ONBOOT} , ["yes", "no"]],
- [N("DHCP client"), \$netcnx->{dhcp_client}]
- );
- my $i = 0;
- foreach my $j (@conf_data) {
- $infos[2*$i] = new Gtk2::HBox(0,0);
- my $l = new Gtk2::Label($j->[0]);
- $l->set_justify('left');
- $infos[2*$i]->pack_start($l,1,1,0);
- $vbox_local->pack_start($infos[2*$i],0,0,0);
- if (defined $j->[2]) {
- my $c = new Gtk2::Combo();
- $c->set_popdown_strings(@{$j->[2]});
- $infos[2*$i+1] = $c->entry;
- $infos[2*$i+1]->set_editable(0);
- $infos[2*$i]->pack_start($c,0,0,0);
- } else {
- $infos[2*$i+1] = new Gtk2::Entry();
- $infos[2*$i]->pack_start($infos[2*$i+1],0,0,0);
- }
- $infos[2*$i+1]->set_text(${$j->[1]});
- $i++;
- }
- my $c = $_;
- my $widget_temp;
- if (-e "$prefix/etc/sysconfig/network-scripts/ifcfg-eth$c") {
- $widget_temp = gtksignal_connect(new Gtk2::Button(ethisup($c) ? N("deactivate now") : N("activate now")),
- clicked => sub {
- system("/sbin/if" . (ethisup($c) ? "down" : "up") . " eth$c");
- gtkbuttonset($_[0], ethisup($c) ? N("deactivate now") : N("activate now"));
- });
- } else {
- $widget_temp = N("This interface has not been configured yet.\nLaunch the configuration wizard in the main window");
- }
- $vbox_local->pack_start(gtkpack__(new Gtk2::HBox(0,0),
- $widget_temp
- ),0,0,0);
- # $list->append($_+1, "eth$_", $intf->{"eth$_"}{IPADDR}, $intf->{"eth$_"}{BOOTPROTO}, $all_cards[$_]->[1]);
- # $list->set_selectable($_, 0);
- my $hbox_local = new Gtk2::HBox(0,0);
- my $pix = gtkcreate_img("/usr/share/libDrakX/pixmaps/eth_card_mini.png");
- $hbox_local->pack_start($pix,0,0,0);
- $hbox_local->pack_start(new Gtk2::Label("eth$_"),0,0,0);
- $hbox_local->show_all;
- $notebook->append_page($vbox_local, $hbox_local);
- }
- my $bbox8 = new Gtk2::HButtonBox;
- $vbox0->pack_start($bbox8,0,0,10);
- $bbox8->set_layout('end');
- my $button_ok = new Gtk2::Button(N("OK"));
- $button_ok->signal_connect(clicked => sub {
- foreach (0..$#all_cards) {
- my @infos = @{$card_tab[2*$_]};
- each_index {
- ${$_->[1]} = $infos[2*$::i+1]->get_text();
- } @{$card_tab[2*$_+1]};
- }
- update();
- $button_apply->set_sensitive(1);
- $window->destroy(); Gtk2->main_quit;
- });
- $bbox8->add($button_ok);
-
- my $button_cancel = new Gtk2::Button(N("Cancel"));
- $button_cancel->signal_connect(clicked => sub { $window->destroy(); Gtk2->main_quit });
- $bbox8->add($button_cancel);
-
- $window->set_modal(1);
- $window->show_all();
- foreach (0..$#all_cards) {
- my @infos = @{$card_tab[2*$_]};
- $intf->{"eth$_"}{BOOTPROTO} eq "dhcp" or $infos[8]->hide;
- }
- $window->set_position('center_always');
- Gtk2->main;
-}
-
-
-sub configure_net {
- my (undef, $_prefix, $netcnx, $netc, $_intf) = @_;
- if (!$netcnx->{type}) {
- my $dialog = new_dialog();
- $dialog->vbox->pack_start(new Gtk2::Label(N("You don't have an Internet connection.
-Create one first by clicking on 'Configure'")),1,1,0);
- my $bbox_dialog = new Gtk2::HButtonBox;
- $dialog->action_area->add($bbox_dialog);
- $bbox_dialog->set_layout('end');
- my $button_ok = new Gtk2::Button(N("OK"));
- $button_ok->signal_connect(clicked => sub {
- Gtk2->main_quit();
- });
- $bbox_dialog->add($button_ok);
- $dialog->show_all;
- $dialog->set_modal(1);
- Gtk2->main();
- $dialog->destroy;
- return;
- }
- my $cnx = {};
- my @infos;
- $cnx = $netcnx->{$netcnx->{type}};
- my $window = Gtk2::Window->new('toplevel');
- $window->signal_connect(delete_event => sub { Gtk2->main_quit });
- $window->set_position('center');
- $window->set_title(N("Internet connection configuration"));
- $window->set_border_width(10);
- my $vbox1 = new Gtk2::VBox(0,0);
- $window->add($vbox1);
- $vbox1->pack_start(new Gtk2::Label(N("Internet Connection Configuration")),0,1,0);
-
- $vbox1->pack_start(new Gtk2::HSeparator,0,0,5);
- my $table1 = new Gtk2::Table(2, 4, 0);
- $table1->set_row_spacings(5);
- $table1->set_col_spacings(5);
- $vbox1->pack_start($table1,0,0,0);
- $table1->attach(new Gtk2::Label(N("Profile: ")), 0, 1, 0, 1, 'fill', 'fill',0,0);
- $table1->attach(new Gtk2::Label(translate($netcnx->{PROFILE})), 1, 2, 0, 1, 'fill', 'fill',0,0);
- $table1->attach(new Gtk2::Label(N("Connection type: ")), 0, 1, 1, 2, 'fill', 'fill',0,0);
- $table1->attach(new Gtk2::Label(translate($netcnx->{type})), 1, 2, 1, 2, 'fill', 'fill',0,0);
-# my $button_internet = new Gtk2::Button(N("Reconfigure using wizard..."));
-# $table1->attach($button_internet, 2, 4, 0, 2, 'fill', 'fill',0,0);
- $vbox1->pack_start(new Gtk2::HSeparator,0,0,5);
-
- my $vbox2 = new Gtk2::VBox(0,0);
- $vbox1->pack_start(gtkadd(Gtk2::Frame->new(N("Parameters")), $vbox2),
- 1,1,0);
- my $i = 0;
-
- my @conf_data = ([ N("Card IRQ"), \$cnx->{irq} ],
- [ N("Card mem (DMA)"), \$cnx->{mem} ],
- [ N("Card IO"), \$cnx->{io} ],
- [ N("Card IO_0"), \$cnx->{io0} ],
- [ N("Card IO_1"), \$cnx->{io1} ],
- [ N("Your personal phone number"), \$cnx->{phone_in} ],
- [ N("Provider name (ex provider.net)"), \$netc->{DOMAINNAME2} ],
- [ N("Provider phone number"), \$cnx->{phone_out} ],
- [ N("Provider dns 1 (optional)"), \$netc->{dnsServer2} ],
- [ N("Provider dns 2 (optional)"), \$netc->{dnsServer3} ],
- [ N("Account Login (user name)"), \$cnx->{login} ],
- [ N("Account Password"), \$cnx->{passwd} ],
- [ N("Dialing mode"), \$cnx->{dialing_mode}, [ "auto", "manual" ] ],
- [ N("Gateway"), \$netc->{GATEWAY} ],
- [ N("Connection name"), \$cnx->{connection} ],
- [ N("Phone number"), \$cnx->{phone} ],
- [ N("Login ID"), \$cnx->{login} ],
- [ N("Password"), \$cnx->{passwd} ],
- [ N("Authentication"), \$cnx->{auth}, [ N("PAP"), N("Terminal-based"), N("Script-based"), N_("CHAP") ] ],
- [ N("Domain name"), \$cnx->{domain} ],
- [ N("First DNS Server (optional)"), \$cnx->{dns1} ],
- [ N("Second DNS Server (optional)"), \$cnx->{dns2} ],
- [ N("Ethernet Card"), \$netc->{NET_DEVICE}, [ 'eth0', 'eth1', 'eth2', 'eth3', 'eth4', 'eth5', 'eth6', 'eth7', 'eth8', 'eth9' ] ],
- [ N("DHCP Client"), \$netcnx->{dhcp_client}, ["dhcp-client", "dhcpcd", "dhcpxd"] ],
- [ N("Connection speed"), \$cnx->{speed}, ["64 Kb/s", "128 Kb/s"] ],
- [ N("Connection timeout (in sec)"), \$cnx->{huptimeout} ]
-);
- foreach (@conf_data) {
- $infos[2*$i] = new Gtk2::HBox(0,0);
- my $l = new Gtk2::Label($_->[0]);
- $l->set_justify('left');
- $infos[2*$i]->pack_start($l,1,1,0);
- $vbox2->pack_start($infos[2*$i],0,0,0);
- if (defined $_->[2]) {
- my $c = new Gtk2::Combo();
- $c->set_popdown_strings(@{$_->[2]});
- $infos[2*$i+1] = $c->entry;
- $infos[2*$i]->pack_start($c,0,0,0);
- } else {
- $infos[2*$i+1] = new Gtk2::Entry();
- $infos[2*$i]->pack_start($infos[2*$i+1],0,0,0);
- #hide password if Entry Password
- if ($_->[0] eq N("Account Password") || $_->[0] eq N("Password")) { $infos[2*$i+1]->set_visibility(0) };
- }
- $infos[2*$i+1]->set_text(${$_->[1]});
- $i++;
- }
- my @mask;
-@mask = (0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0) if $netcnx->{type} eq 'lan';
-@mask = (0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1) if $netcnx->{type} eq 'isdn_internal' && defined $cnx->{vendor} && defined $cnx->{id};
-@mask = (1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1) if $netcnx->{type} eq 'isdn_internal' && (!defined $cnx->{vendor} || !defined $cnx->{id});
-@mask = (0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0) if $netcnx->{type} eq 'modem' || $netcnx->{type} eq 'isdn_external';
-@mask = (0,0,0,0,0,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0) if $netcnx->{type} =~ /adsl/;
-@mask = (0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0) if $netcnx->{type} eq 'cable';
- $vbox1->pack_start(new Gtk2::HSeparator,0,0,5);
-
-
- my $bbox9 = new Gtk2::HButtonBox;
- $vbox1->pack_start($bbox9,0,0,0);
- $bbox9->set_layout('end');
- my $button_ok = new Gtk2::Button(N("OK"));
- $button_ok->signal_connect(clicked => sub {
- each_index {
- ${$conf_data[$::i][1]} = $infos[2*$::i+1]->get_text() if $_;
- } @mask;
- update();
- $button_apply->set_sensitive(1);
- $window->destroy(); Gtk2->main_quit;
- });
- $bbox9->add($button_ok);
- my $button_cancel = new Gtk2::Button(N("Cancel"));
- $button_cancel->signal_connect(clicked => sub { $window->destroy(); Gtk->main_quit });
- $bbox9->add($button_cancel);
-
- $window->set_modal(1);
- $window->show_all();
- each_index { $_ ? $infos[2*$::i]->show : $infos[2*$::i]->hide } @mask;
- Gtk2->main;
-}
-
-sub new_dialog {
- my $dialog = new Gtk2::Dialog();
- $dialog->set_position('center-on-parent');
- $dialog->vbox->set_border_width(10);
- $dialog->signal_connect(delete_event => sub { Gtk2->main_quit() });
- $dialog;
-}
diff --git a/perl-install/standalone/drakedm b/perl-install/standalone/drakedm
deleted file mode 100644
index 92dadaff5..000000000
--- a/perl-install/standalone/drakedm
+++ /dev/null
@@ -1,58 +0,0 @@
-#!/usr/bin/perl
-# DrakxDM -- Display Manager chooser
-# Copyright (C) 2002 MandrakeSoft (tvignaud@mandrakesoft.com)
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-use strict;
-use lib qw(/usr/lib/libDrakX);
-
-use standalone; #- warning, standalone must be loaded very first, for 'explanations'
-use common;
-use interactive;
-
-my $in = 'interactive'->vnew('su');
-
-my $cfg_file = '/etc/sysconfig/desktop';
-
-my %dm = ('GNOME' => 'GDM (GNOME Display Manager)',
- 'KDM' => 'KDM (KDE Display Manager)',
- 'KDE' => 'MdkKDM (Mandrake Display Manager)',
- 'XDM' => 'XDM (X Display Manager)',
- );
-
-my $dm = 'KDE';
-
-foreach (cat_($cfg_file)) {
- $dm = $1 if /^DISPLAYMANAGER=(.*)$/;
-}
-
-if (my $new_dm = $in->ask_from_list_(N("Choosing a display manager"),
- formatAlaTeX(N("X11 Display Manager allows you to graphically log
-into your system with the X Window System running and supports running
-several different X sessions on your local machine at the same time.")),
- [ sort values %dm ],
- $dm{$dm}
- )
- ) {
- $new_dm = { reverse %dm }->{$new_dm};
- substInFile {
- s/^(DISPLAYMANAGER)=.*(\n|)//;
- $_ .= "\nDISPLAYMANAGER=$new_dm" if eof;
- } $cfg_file;
-}
-
-
-$in->exit(0);
diff --git a/perl-install/standalone/drakfirewall b/perl-install/standalone/drakfirewall
deleted file mode 100755
index 27dfb92a9..000000000
--- a/perl-install/standalone/drakfirewall
+++ /dev/null
@@ -1,30 +0,0 @@
-#!/usr/bin/perl
-
-# Copyright (C) 1999-2002 MandrakeSoft (pixel@mandrakesoft.com)
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-use lib qw(/usr/lib/libDrakX);
-
-use standalone; #- warning, standalone must be loaded very first, for 'explanations'
-
-use interactive;
-use network::drakfirewall;
-
-my $in = 'interactive'->vnew('su', 'default');
-
-network::drakfirewall::main($in);
-
-$in->exit;
diff --git a/perl-install/standalone/drakfloppy b/perl-install/standalone/drakfloppy
deleted file mode 100755
index 568fa25e6..000000000
--- a/perl-install/standalone/drakfloppy
+++ /dev/null
@@ -1,376 +0,0 @@
-#!/usr/bin/perl -w
-
-# Control-center
-# $Id$
-#
-# Copyright (C) 2001-2002 MandrakeSoft
-# Yves Duret <yduret at mandrakesoft.com>
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston,
-# MA 02111-1307, USA.
-
-
-use strict;
-use diagnostics;
-use lib qw(/usr/lib/libDrakX);
-
-use standalone; #- warning, standalone must be loaded very first, for 'explanations'
-
-use common;
-use my_gtk qw(:helpers);
-use ugtk qw(:helpers);
-
-#- languages that can't be displayed with gtk1, so we unset translations
-#- for them until this tool is ported to gtk2
-if ($ENV{LANGUAGE} =~ /\b(ar|he|hi|ta)/) { $ENV{LANGUAGE} = "C" };
-
-require_root_capability();
-
-my $expert_mode = $::expert;
-# we have put here the list in order to do $list->clear() when we have to do
-my $fixed_font = Gtk::Gdk::Font->fontset_load(N("-misc-Fixed-Medium-r-*-*-*-140-*-*-*-*-*-*,*"));
-my $list = new_with_titles Gtk::CList(N("Module name"), N("Size"));
-
-my $window = my_gtk->new('drakfloppy');
-unless ($::isEmbedded) {
- $window->{rwindow}->signal_connect(delete_event => sub { my_gtk->exit(0) });
- $window->{rwindow}->set_title(N("drakfloppy"));
- $window->{rwindow}->set_policy(1, 1, 1);
- $window->{rwindow}->border_width(5);
-}
-
-### menus definition
-# the menus are not shown
-# but they provides shiny shortcut like C-q
-my @menu_items = (
- { path => N("/_File"), type => '<Branch>' },
- { path => N("/File/_Quit"), accelerator => N("<control>Q"), callback => sub { my_gtk->exit(0) } },
- );
-ugtk::create_factory_menu($window->{rwindow}, @menu_items) unless $::isEmbedded;
-
-######### menus end
-
-my $global_vbox = new Gtk::VBox();
-
-$global_vbox->pack_start(new Gtk::Label(N("boot disk creation")), 0, 0, 0) unless $::isEmbedded;
-
-######## up part
-my $up_vbox = new Gtk::VBox(0, 0);
-
-# device part
-my $dev_hbox = new Gtk::HBox(1, 0);
-my $device_combo = new Gtk::Combo();
-my $device_button = new Gtk::Button(N("default"));
-
-$device_combo->set_popdown_strings("/dev/fd0", "/dev/fd1");
-$device_button->signal_connect(clicked => sub { $device_combo->entry->set_text("/dev/fd0") });
-
-$dev_hbox->pack_start(new Gtk::Label(N("device")), 0, 0, 0);
-$dev_hbox->pack_start($device_combo, 0, 0, 0);
-$dev_hbox->pack_start($device_button, 0, 0, 0);
-$up_vbox->pack_start($dev_hbox, 0, 0, 0);
-
-# kernel part
-my $ker_hbox = new Gtk::HBox(1, 0);
-my $kernel_combo = new Gtk::Combo();
-my $kernel_button = new Gtk::Button(N("default"));
-$kernel_combo->disable_activate();
-$kernel_combo->set_popdown_strings(do {
- opendir YREP, "/lib/modules" or die N("DrakFloppy Error: %s", $!);
- my @files_modules = grep !/^\.\.?$/, readdir YREP;
- closedir YREP;
- @files_modules;
-});
-#$kernel_combo->entry->set_text(`uname -r`);
-$kernel_combo->entry->signal_connect(changed => sub { change_tree($kernel_combo->entry->get_text()); $list->clear() });
-my $aaaa = `uname -r`;
-chomp($aaaa);
-$kernel_button->signal_connect(clicked => sub { $kernel_combo->entry->set_text($aaaa); $list->clear() });
-
-$ker_hbox->pack_start(new Gtk::Label(N("kernel version")), 0, 0, 0);
-$ker_hbox->pack_start($kernel_combo, 0, 0, 0);
-$ker_hbox->pack_start($kernel_button, 0, 0, 0);
-$up_vbox->pack_start($ker_hbox, 0, 0, 5);
-
-# vbox part
-my $up_frame = new Gtk::Frame(N("General"));
-$up_frame->add($up_vbox);
-$global_vbox->pack_start($up_frame, 0, 0, 0);
-
-### expert mode
-my $expert_main_frame = new Gtk::Frame(N("Expert Area"));
-my $expert_dedans = new Gtk::VBox(0, 5);
-$expert_dedans->border_width(5);
-my $expert_button_frame = new Gtk::Frame(N("mkinitrd optional arguments"));
-my $expert_mod_frame = new Gtk::Frame(N("Add a module"));
-my $expert_pane = new Gtk::HPaned();
-$expert_pane->set_handle_size(10);
-$expert_pane->set_gutter_size(8);
-
-my $expert_button = new Gtk::Button(N("Expert Mode"));
-$expert_button->signal_connect(clicked => sub {
- if ($expert_mode) {
- $expert_mod_frame->hide();
- $expert_button_frame->hide()
- } else {
- $expert_mod_frame->show();
- $expert_button_frame->show();
- }
- $expert_mode = !$expert_mode;
- });
-
-my $expert_button_vbox = new Gtk::VBox(0, 5);
-my $expert_button_hbox = new Gtk::HBox(0, 5);
-my $expert_button_hbox2 = new Gtk::HBox(0, 5);
-my $force_button = new Gtk::ToggleButton(N("force"));
-my $needed_button = new Gtk::ToggleButton(N("if needed"));
-my $scsi_button = new Gtk::ToggleButton(N("omit scsi modules"));
-my $raid_button = new Gtk::ToggleButton(N("omit raid modules"));
-$expert_button_hbox->pack_start($force_button, 0, 0, 0);
-$expert_button_hbox->pack_start($raid_button, 0, 0, 0);
-
-$expert_button_hbox2->pack_start($needed_button, 0, 0, 0);
-$expert_button_hbox2->pack_start($scsi_button, 0, 0, 0);
-
-$expert_button_vbox->pack_start($expert_button_hbox, 0, 0, 0);
-$expert_button_vbox->pack_start($expert_button_hbox2, 0, 0, 0);
-$expert_button_frame->add($expert_button_vbox);
-$expert_dedans->pack_start($expert_button_frame, 0, 0, 0);
-$expert_mod_frame->add($expert_pane);
-$expert_dedans->pack_start($expert_mod_frame, 1, 1, 0);
-$expert_main_frame->add($expert_dedans);
-$global_vbox->pack_start($expert_main_frame, 1, 1, 0);
-
-### the tree
-
-# Create a ScrolledWindow for the tree
-my $tree_scrolled_win = new Gtk::ScrolledWindow();
-$tree_scrolled_win->set_usize(200, $::isEmbedded ? 0 : 175);
-$expert_pane->add1($tree_scrolled_win);
-$tree_scrolled_win->set_policy('automatic', 'automatic');
-
-# Create root tree
-my $tree = new Gtk::Tree();
-my $leaf;
-my $root_dir;
-$tree_scrolled_win->add_with_viewport($tree);
-$tree->set_selection_mode('single');
-$tree->set_view_mode('item');
-
-fill_tree($kernel_combo->entry->get_text());
-
-# Create a ScrolledWindow for the list
-my $list_scrolled_win = new Gtk::ScrolledWindow(undef, undef);
-my $rmmod_button = new Gtk::Button(N("Remove a module"));
-my $expert_inside_pane2 = new Gtk::VBox(0, 0);
-my $list_selected_row;
-
-$expert_inside_pane2->pack_start($list_scrolled_win, 1, 1, 0);
-$expert_inside_pane2->pack_start($rmmod_button, 0, 0, 0);
-$expert_pane->add2($expert_inside_pane2);
-$list_scrolled_win->set_policy('automatic', 'automatic');
-$rmmod_button->signal_connect(clicked => sub { $list->remove($list_selected_row) });
-
-# Create list box
-########################################################## from here my $list
-$list->signal_connect(select_row => sub { (undef, $list_selected_row) = @_ });
-$list_scrolled_win->add($list);
-$list->set_column_justification(1, 'right');
-$list->set_column_width(0, 200);
-$list->set_column_width(1, 50);
-$list->set_selection_mode('single');
-$list->set_shadow_type('none');
-$list->show();
-
-### output
-my $output_frame = new Gtk::Frame(N("Output"));
-my $output = new Gtk::Text(undef, undef);
-my $vscrollbar = new Gtk::VScrollbar($output->vadj);
-my $output_hbox = new Gtk::HBox(0, 0);
-$output_hbox->border_width(5);
-$output_hbox->set_usize(30, 75);
-$output_hbox->pack_start($output, 1, 1, 0);
-$output_hbox->pack_start($vscrollbar, 0, 0, 0);
-$output_frame->add($output_hbox);
-$global_vbox->pack_start($output_frame, 1, 10, 0);
-
-### final buttons
-my $build_button = new Gtk::Button(N("Build the disk"));
-my $cancel_button = new Gtk::Button(N("Cancel"));
-my $fin_hbox = new Gtk::HBox(0, 0);
-$cancel_button->signal_connect(clicked => sub { my_gtk->exit(0) });
-$build_button->signal_connect(clicked => \&build_it);
-$fin_hbox->pack_end($cancel_button, 0, 0, 0);
-$fin_hbox->pack_end($build_button, 0, 0, 10);
-$fin_hbox->pack_end($expert_button, 0, 0, 10);
-$global_vbox->pack_start($fin_hbox, 0, 0, 0);
-
-### back to window
-$window->{window}->add($global_vbox);
-
-$window->{rwindow}->show_all();
-if (!$expert_mode) {
- $expert_mod_frame->hide();
- $expert_button_frame->hide();
-}
-
-$window->main;
-my_gtk->exit(0);
-
-
-#-------------------------------------------------------------
-# tree functions
-#-------------------------------------------------------------
-### Subroutines
-
-sub fill_tree {
- ($root_dir) = @_;
- $root_dir = "/lib/modules/" . $root_dir;
- # Create root tree item widget
- $leaf = new_with_label Gtk::TreeItem($root_dir);
- $tree->append($leaf);
- $leaf->signal_connect('select', \&select_item, $root_dir);
- $leaf->set_user_data($root_dir);
-
- # Create the subtree
- if (has_sub_trees($root_dir)) {
- my $subtree = new Gtk::Tree();
- $leaf->set_subtree($subtree);
- $leaf->signal_connect('expand', \&expand_tree, $subtree);
- $leaf->signal_connect('collapse', \&collapse_tree);
- $leaf->expand();
- }
-}
-
-sub change_tree {
- $leaf->destroy();
- fill_tree(@_);
- $leaf->show();
-}
-
-# Callback for expanding a tree - find subdirectories, files and add them to tree
-sub expand_tree {
- my ($item, $subtree) = @_;
-
- my $path;
- my $item_new;
- my $new_subtree;
-
- my $dir = $item->get_user_data();
-
- chdir($dir);
-
- foreach my $dir_entry (all(".")) {
- if (-d $dir_entry or $dir_entry =~ /\.o(\.gz)?$/) {
- $path = $dir . "/" . $dir_entry;
- $path =~ s|//|/|g;
- $item_new = new_with_label Gtk::TreeItem($dir_entry);
- $item_new->set_user_data($path);
- $item_new->signal_connect('select', \&select_item, $path);
- $subtree->append($item_new);
- $item_new->show();
-
- if (has_sub_trees($path)) {
- $new_subtree = new Gtk::Tree();
- $item_new->set_subtree($new_subtree);
- $item_new->signal_connect('expand', \&expand_tree, $new_subtree);
- $item_new->signal_connect('collapse', \&collapse_tree);
- }
- }
- }
- chdir("..");
- }
-
-
-# Callback for collapsing a tree -- removes the subtree
-sub collapse_tree {
- my ($item) = @_;
- my $subtree = new Gtk::Tree();
-
- $item->remove_subtree();
- $item->set_subtree($subtree);
- $item->signal_connect('expand', \&expand_tree, $subtree);
- }
-
-# Called whenever an item is clicked on the tree widget.
-sub select_item {
- my ($widget, $file) = @_;
- return if -d $file;
- my $size = (lstat($file))[7];
- my $lr = $list->rows();
- my $i;
- $file =~ s|/lib/modules/.*?/||g;
- for ($i = 0; $i < $lr; $i++) {
- last if $file eq $list->get_text($i, 0);
- }
- print $file, "\n";
-
- $list->append($file, $size) if $i == $lr or $lr == 0;
-}
-
-#-------------------------------------------------------------
-# the function
-#-------------------------------------------------------------
-sub build_it {
- my $y;
- my $co = "/sbin/mkbootdisk --noprompt --verbose --device " . $device_combo->entry->get_text();
- if ($expert_mode) {
- $co .= " --mkinitrdargs -f" if $force_button->get_active;
- $co .= " --mkinitrdargs --ifneeded" if $needed_button->get_active;
- $co .= " --mkinitrdargs --omit-scsi-modules" if $scsi_button->get_active;
- $co .= " --mkinitrdargs --omit-raid-modules" if $raid_button->get_active;
- for (my $i = 0; $i < $list->rows(); $i++) {
- $y = $list->get_text($i, 0);
- $y =~ s|.*?/||g;
- $co .= " --mkinitrdargs --with=" . $y; #. "/usr/lib/" . $kernel_combo->entry->get_text() . "/" . $y;
- }
- }
- $co .= " " . $kernel_combo->entry->get_text();
- $co .= " 2>&1 |";
- create_dialog(N("Be sure a media is present for the device %s", $device_combo->entry->get_text()), 1) or return;
-# we test if the media is present
- test:
- my $a = "dd count=1 if=/dev/null of=" . $device_combo->entry->get_text() . " 2>&1";
- my $b = `$a`;
- if ($b =~ /dd/) { create_dialog(N("There is no medium or it is write-protected for device %s.\nPlease insert one.", $device_combo->entry->get_text()), 1) ? goto test : return 0 }
-
- local *STATUS;
- open STATUS, $co or do { create_dialog(N("Unable to fork: %s", $!), 0); return };
- local $_;
- while (<STATUS>) {
- $output->insert($fixed_font, undef, undef, $_);
- }
- close STATUS or create_dialog(N("Unable to properly close mkbootdisk: \n %s \n %s", $!, $?), 0);
-
- return (0);
-}
-
-####
-# This is put at the end of the file because any translatable string
-# appearing after this will not be found by xgettext, and so wont end in
-# the pot file...
-####
-
-# Test whether a directory has subdirectories
-sub has_sub_trees {
- my ($dir) = @_;
-
- foreach my $file (glob_("$dir/*")) {
- return 1 if -d $file or $file =~ /\.o(\.gz)?$/;
- }
-
- return (0);
-}
-
diff --git a/perl-install/standalone/drakfont b/perl-install/standalone/drakfont
deleted file mode 100755
index 634c68541..000000000
--- a/perl-install/standalone/drakfont
+++ /dev/null
@@ -1,928 +0,0 @@
-#!/usr/bin/perl
-#
-# Copyright (C) 2001-2002 by MandrakeSoft
-# DUPONT Sebastien
-# dchaumette@mandrakesoft.com
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# drakfont Future Overview
-# - Fonts import:
-# pfb ( Adobe Type 1 binary )
-# pfa ( Adobe Type 1 ASCII )
-# ttf ( True-Type )
-# pcf.gz
-# Speedo
-# and Bitmap (PCF, BDF, and SNF)
-# - Features
-# - Install fonts from any directory
-# - Get windows fonts on any vfat partitions
-# - Get fonts on any partitions.
-# - UN-installation of any fonts (even if not installed through drakfont)
-# - Support
-# - Xfs
-# - ghostscript & printer
-# - Staroffice & printer
-# - abiword
-# - netscape
-# - Koffice, Gnumeric, ... studying
-# - all fonts supported by printer
-# - anti-aliases by RENDER in Xfree86 ....
-# supported by KDE.
-# will be supported by gnome 1.2.
-# Visual Interface:
-# Window interface:
-# - Fontselectiondialog widget
-# - Command buttons under Fontselectiondialog (like the actual frontend).
-# Commands buttons:
-# - import from windows partition.
-# import from all fat32 partitions and look for winnt/windows/font
-# and import all (delete doubles) but don't import if they already exist.
-# - import from directory
-# look to see if each font exists and do not delete the original.
-# (replace all, no, none)
-# expert options:
-# specify the directory, and look to see if it exists before
-# if it exists ask: (replace all, no, none)
-# - uninstall with list per font type
-# Expert additional switch
-# - option support: ghostscript, Staroffice, etc...
-# check-button. (by default all check)
-# - Printer Application Fonts Support...
-# check-button. (by default all check)
-#
-# TODO:
-# - abiword, Koffice, Gnumeric, ...
-# - Speedo and Bitmap (PCF, BDF, and SNF)
-# - option strong: strong verification with ttmkfdir -c ?
-#
-# REQUIRE:
-# - font-tools.*.mdk.i586.rpm
-#
-# USING:
-# - pfm2afm: by Ken Borgendale: Convert a Windows .pfm file to a .afm (Adobe Font Metrics)
-# - type1inst: by James Macnicol: type1inst generates files fonts.dir fonts.scale & Fontmap.
-# - ttf2pt1: by Andrew Weeks, Frank Siegert, Thomas Henlich, Sergey Babkin convert ttf font files to afm and pfb fonts
-#
-#
-# directory to install fonts /usr/X11R6/lib/X11/fonts/
-# -->> /usr/X11R6/lib/X11/fonts/drakfont
-
-use strict;
-use diagnostics;
-
-use lib qw(/usr/lib/libDrakX);
-
-use standalone; #- warning, standalone must be loaded very first, for 'explanations'
-
-use interactive;
-use ugtk2 qw(:helpers :wrappers :create);
-use common;
-
-
-my $in = 'interactive'->vnew('su', 'network');
-
-# global variables needed by each functions
-my $xlsfonts = 0;
-my $windows = 0;
-my $strong;
-my $replace;
-my $application;
-my $install;
-my $uninstall;
-my $so = 1;
-my $gs = 1;
-my $abi = 1;
-my $printer = 1;
-my $mode = -1;
-my @application;
-my @install;
-my @uninstall;
-my $interactive;
-my $text;
-my $vscrollbar;
-my $check4;
-my $check1;
-my $check2;
-my $check3;
-my $pbar;
-my $pbar1;
-my $pbar2;
-my $pbar3;
-my $font_box;
-my $central_widget;
-my $label1;
-my $label2;
-my $label3;
-my $label4;
-my $list_path;
-my $path_list;
-my $current_path;
-my $model;
-my $list;
-my $list_all_font_path;
-my $left_list;
-my $right_list;
-my $left_model;
-my $right_model;
-
-foreach (@ARGV) {
- /--list|-l/ and $list_all_font_path = 1, $mode = -1;
- /--xls_fonts/ and $xlsfonts = 1, $mode = -1;
- /--windows_import|-wi/ and $windows = 1, $mode = -1;
- /--strong|-s/ and $strong = 1, $mode = -1;
- /--replace|-r/ and $replace = 1, $mode = -1;
- /--application/ and $mode = 0, next;
- $mode == 0 and push @application, $_;
- /--install/ and $mode = 1, next;
- $mode == 1 and push @install, $_;
- /--uninstall/ and $mode = 2, next;
- $mode == 2 and push @uninstall, $_;
-}
-
-foreach my $i (@application) {
- if ($i =~ /so/i) {
- if ($gs != 2) { $gs = 0 }
- $so = 2;
- }
- if ($i =~ /gs/i) {
- if ($so != 2) { $so = 0 }
- $gs = 2;
- }
-}
-
-# PATH and binary full path
-my $xfs_conffile = '/etc/fonts/fonts.conf';
-my $drakfont_dir = '/usr/X11R6/lib/X11/fonts/drakfont';
-my $ttf2pt1 = '/usr/sbin/ttf2pt1';
-my $pfm2afm = '/usr/sbin/pfm2afm';
-my $type1inst = '/usr/sbin/type1inst';
-my $chkfontpath = '/usr/sbin/chkfontpath';
-# mkttfdir only knows about iso-8859-1, using ttmkfdir instead
-my $mkttfdir = '/usr/X11R6/bin/mkttfdir';
-my $ttmkfdir = '/usr/sbin/ttmkfdir';
-my $fccache = '/usr/bin/fc-cache';
-my $ghostscript;
-
-# Global lists, just to manipulate it easily.
-# my @font_list => list of fonts to install.
-# my @installed_fonts; => list of installed fonts.
-# my @installed_fonts_path; => list of path included in xfs.
-# my @fontsdir_to_install; => list of fonts to uninstall.
-# my @fontsdir_to_uninstall; => path to remove in xfs font file.
-# my @installed_fonts_full_path; => full path list of fonts to uninstall.
-
-my @font_list;
-my @installed_fonts;
-my @installed_fonts_path;
-my @fontsdir_to_install;
-my @fontsdir_to_uninstall;
-my @installed_fonts_full_path;
-
-sub list_fontpath {
- foreach (grep { /\d+:\s/ } `$chkfontpath -l`) {
- chomp;
- s/\d+:\s//gi;
- s/:\w*$//gi;
- push @installed_fonts_path, $_;
- }
-}
-
-sub chk_empty_xfs_path {
- my @temp3;
- foreach my $tmp_path (@installed_fonts_path) {
- @temp3 = ();
- foreach my $temp2 (all($tmp_path)) {
- if (!($temp2 =~ /^fonts/ || $temp2 =~ /^type/)) {
- push @temp3, $temp2;
- }
- }
- if (!(@temp3)) {
- system("chkfontpath -r $tmp_path ")
- or print "PERL::system command failed during chkfontpath\n";
- }
- }
-}
-
-sub search_installed_fonts {
- list_fontpath();
- $interactive and progress($pbar, 0.1, N("Search installed fonts"));
- push @installed_fonts, all($_) foreach @installed_fonts_path;
- $interactive and progress($pbar, 0.1, N("Unselect fonts installed"));
-}
-
-sub search_installed_fonts_full_path {
- list_fontpath();
- foreach my $i (@installed_fonts_path) {
- foreach my $j (all($i)) {
- push @installed_fonts_full_path, "$i/$j";
- }
- }
-}
-
-sub search_windows_font {
- foreach my $fstab_line (grep { /vfat|ntfs/ } cat_('/etc/mtab')) {
- my $win_dir = (split('\s', $fstab_line))[1];
- my @list_fonts_win = all("$win_dir/windows/fonts");
- my @list_fonts_winnt = all("$win_dir/winnt/fonts");
- my $nb_dir = @list_fonts_win + @list_fonts_winnt;
- foreach ([ \@list_fonts_win, "windows" ],
- [ \@list_fonts_winnt, "winnt" ])
- {
- foreach my $i (@{ $_->[0] }) {
- if ($interactive) {
- if ($nb_dir) {
- progress($pbar, 0.25 / $nb_dir, N("parse all fonts"));
- }
- else {
- display_error(N("no fonts found"));
- return 0;
- }
- }
- !$replace && any { /$i/ } @installed_fonts and next;
- grep(/$i$/, @font_list)
- or push @font_list, "$win_dir/$_->[1]/fonts/$i";
- }
- }
- $interactive && $nb_dir and progress($pbar, 1, N("done"));
- }
- if (!@font_list) {
- print "drakfont:: could not find any font in /win*/fonts \n";
- $interactive
- and display_error(
- N("could not find any font in your mounted partitions"));
- return 0;
- }
- 1;
-}
-
-sub is_a_font {
- local $_ = $_[0];
- /\.ttf$/i || /\.pfa$/i || /\.pfb$/i || /\.pcf$/i || /\.pcf\.gz$/i || /\.pfm$/i || /\.gsf$/;
-}
-
-# Optimisation de cette etape indispensable
-sub search_dir_font {
- foreach my $fn (@install) {
- my @font_list_tmp;
- my $dir;
- if (!(-e $fn)) { print "$fn :: no such file or directory \n" }
- else {
- if (-d $fn) {
- $dir = $fn;
- foreach my $i (all($fn)) {
- if (is_a_font($i)) {
- push @font_list_tmp, $i;
- foreach my $i (@font_list_tmp) {
- !$replace && any { /$i/ } @installed_fonts and next;
- grep(/$i/, @font_list) or push @font_list, "$fn/$i";
- }
- }
- }
- }
- elsif (is_a_font($fn)) {
- !$replace && any { /$fn/ } @installed_fonts and next;
- !grep /$fn/, (@installed_fonts) and push @font_list, $fn;
- }
- }
- $interactive and progress($pbar, 0.50 / @install, N("Reselect correct fonts"));
- }
- $interactive and progress($pbar, 1, N("done"));
- !@font_list && $interactive and display_error(N("could not find any font.\n"));
-}
-
-sub search_dir_font_uninstall {
- my @font_list_tmp;
- my $fn = $_;
- if (-d $fn) {
- foreach my $i (all($fn)) {
- push @font_list_tmp, $i if is_a_font($i);
- }
- }
- else {
- push @font_list_tmp, $fn if is_a_font($fn);
- }
- foreach my $i (@installed_fonts_full_path) {
- foreach my $j (@font_list_tmp) {
- push @font_list, $i if $i =~ /$j/;
- }
- }
- print "Fonts to uninstal: " . $_ . "\n" foreach @font_list;
-}
-
-sub search_dir_font_uninstall_gi {
- @font_list = @uninstall;
- $interactive and progress($pbar, 1, N("Search for fonts in installed list"));
-}
-
-sub print_list {
- print "Font(s) to Install:\n\n";
- print "$_\n" foreach @font_list;
-}
-
-sub dir_created {
- -e $drakfont_dir || mkdir_p($drakfont_dir);
- -e $drakfont_dir . "/Type1" || mkdir_p($drakfont_dir . "/Type1");
- -e $drakfont_dir . "/ttf" || mkdir_p($drakfont_dir . "/ttf");
- -e $drakfont_dir . "/tmp" || mkdir_p($drakfont_dir . "/tmp");
- -e $drakfont_dir . "/tmp/ttf" || mkdir_p($drakfont_dir . "/tmp/ttf");
- -e $drakfont_dir . "/tmp/Type1" || mkdir_p($drakfont_dir . "/tmp/Type1");
- -e $drakfont_dir . "/tmp/tmp" || mkdir_p($drakfont_dir . "/tmp/tmp");
-}
-
-sub put_font_dir {
- my @tmpl;
- -e "/usr/share/ghostscript"
- or $gs = 0 && print "ghostscript is not installed on your system...\n";
- if (@font_list) {
- dir_created();
- foreach my $i (@font_list) {
- cp_af($i, $drakfont_dir . "/tmp/tmp");
- $interactive and progress($pbar1, 1 / @font_list, N("Fonts copy"));
- }
- $interactive and progress($pbar1, 0.01, N("done"));
- $interactive and progress($pbar2, 0.10, N("True Type fonts installation"));
- glob("$drakfont_dir/tmp/tmp/*.TTF")
- and system('cd ' . $drakfont_dir . '/tmp/tmp ; for foo in *.TTF; do mv $foo `basename $foo .TTF`.ttf; done');
- system('cd ' . $drakfont_dir . '/tmp/tmp && cp *.ttf ../../ttf');
- $interactive and progress($pbar2, 0.20, N("please wait during ttmkfdir..."));
-
- my $ttfdir = $drakfont_dir . "/ttf";
- # mkttfdir only knows about iso-8859-1, using ttmkfdir -u instead -- pablo
- #`$mkttfdir $ttfdir`;
- system("cd $ttfdir && $fccache && $ttmkfdir -u > fonts.dir");
- $interactive and progress($pbar2, 0.10, N("True Type install done"));
- my $update_chkfontpath = "$chkfontpath -a $drakfont_dir/ttf";
-
- if ($so && $gs) {
- my @glob_drak = glob("$drakfont_dir/tmp/tmp/*.ttf");
- foreach my $fontname (@glob_drak) {
- system("cd $drakfont_dir/tmp/tmp && $ttf2pt1 -b $fontname");
- $interactive and progress($pbar2, 0.50 / @glob_drak, N("Fonts conversion"));
- }
- system("cd $drakfont_dir/tmp/tmp && mv *.gsf *.pfb *.pfm *.afm ../Type1");
- system("cd $drakfont_dir/tmp/Type1 && $type1inst");
- $interactive and progress($pbar2, 0.10, N("type1inst building"));
- -e "$drakfont_dir/tmp/Type1/Fontmap"
- and system("cd $drakfont_dir/tmp/Type1 && cat Fontmap >> `rpm -ql ghostscript | grep Fontmap.GS` ");
- system("cd $drakfont_dir/tmp/Type1 && mv *.pfm *.gsf *.afm *.pfb ../../Type1 ");
- my $type1dir = $drakfont_dir . "/Type1";
- system("cd $type1dir && $fccache && $type1inst");
- $interactive and progress($pbar2, 0.05, N("Ghostscript referencing"));
- $update_chkfontpath .= "; $chkfontpath -a $drakfont_dir/Type1";
- }
-
- if (!$so && $gs) {
- foreach my $fontname (@tmpl = glob("$/drakfont_dir/tmp/tmp/*.ttf")) {
- system("cd $/drakfont_dir/tmp/tmp && $ttf2pt1 -b $fontname");
- $interactive and progress($pbar2, 0.50 / @tmpl, N("Fonts conversion"));
- }
- system("cd $drakfont_dir/tmp/tmp && mv *.gsf *.pfb *.pfm ../Type1");
- system("cd $drakfont_dir/tmp/Type1 && $type1inst");
- $interactive and progress($pbar2, 0.1, N("type1inst building"));
- system("cd $drakfont_dir/tmp/Type1 && cat Fontmap >> `rpm -ql ghostscript | grep Fontmap.GS` ");
- system("cd $drakfont_dir/tmp/Type1 && mv *.pfm *.afm *.gsf *.pfb ../../Type1 ");
- my $type1dir = $drakfont_dir . "/Type1";
- system("cd $type1dir && $fccache && $type1inst");
- $interactive and progress($pbar2, 0.05, N("Ghostscript referencing"));
- $update_chkfontpath .= "; $chkfontpath -a $drakfont_dir/Type1";
- }
-
- if ($so && !$gs) {
- foreach my $fontname (@tmpl = glob("$drakfont_dir/tmp/tmp/*.ttf"))
- {
- system("cd $drakfont_dir/tmp/tmp && $ttf2pt1 $fontname");
- $interactive and progress($pbar2, 0.25 / @tmpl, N("ttf fonts conversion"));
- }
- foreach my $fontname (@tmpl = glob("$drakfont_dir/tmp/tmp/*.pfm"))
- {
- system("cd $drakfont_dir/tmp/tmp && $pfm2afm $fontname");
- $interactive and progress($pbar2, 0.25 / @tmpl, N("pfm fonts conversion"));
- }
- system("cd $drakfont_dir/tmp/tmp && mv *.afm ../Type1");
- system("cd $drakfont_dir/tmp/Type1 && mv *.afm ../../Type1 ");
- my $type1dir = $drakfont_dir . "/Type1";
- system("cd $type1dir && $fccache && $type1inst");
- $interactive and progress($pbar2, 0.14, N("type1inst building"));
- $update_chkfontpath .= "; $chkfontpath -a $drakfont_dir/Type1";
- }
-
- $interactive and progress($pbar2, 1, N("done"));
- $interactive and progress($pbar3, 0.25, N("Suppress Temporary Files"));
- rm_rf("$drakfont_dir/tmp/");
- print "\n\nretarting xfs......\n";
- $interactive and progress($pbar3, 0.5, N("Restart XFS"));
- system($update_chkfontpath);
- system('/etc/rc.d/init.d/xfs restart');
- system('xset fp rehash');
- $interactive and progress($pbar3, 0.30, N("done"));
- }
-}
-
-sub remove_gs_fonts {
- my @Fontmap_new;
-
- if (all("$drakfont_dir/remove")) {
- system(" cd $drakfont_dir/remove && $type1inst");
- my @Fontmap_out = cat_("$drakfont_dir/remove/Fontmap");
- my $FontmapGS = `rpm -ql ghostscript | grep Fontmap.GS`;
- chomp($FontmapGS);
- my @FontmapGS_list = cat_($FontmapGS);
- foreach my $font_gs (@FontmapGS_list) {
- my @tmp_list = split(' ', $font_gs);
- grep(/$tmp_list[0]/, @Fontmap_out) or push @Fontmap_new, $font_gs;
- }
- print $_ foreach @Fontmap_new;
- output($FontmapGS, @Fontmap_new);
- }
-
-}
-
-sub remove_fonts {
- my @list_dir;
- -e $drakfont_dir . "/remove" || mkdir_p($drakfont_dir . "/remove");
- $interactive and progress($pbar, 1, N("done"));
- foreach my $i (@font_list) {
- $_ = $i;
- if (/.pfb$/ || /.gsf$/ || /.pfm$/ || /.pfa$/) {
- system("mv $_ $drakfont_dir/remove ");
- }
- else {
- if (/.ttf$/) {
- rm_rf($_);
- # rebuild of the fonts.dir and fc-cache files
- system("cd `dirname $_` && $fccache && $ttmkfdir -u > fonts.dir");
- }
- else { rm_rf($i) }
- }
- $i =~ s/\/\w*\.\w*//gi;
- grep($i, (@list_dir)) or push @list_dir, $i;
- $interactive and progress($pbar1, 1 / @font_list, N("Suppress Fonts Files"));
- }
- $interactive and progress($pbar1, 0.01, N("done"));
- -e "/usr/share/ghostscript" and remove_gs_fonts();
- foreach my $i (@list_dir) {
- if (listlength all($i) < 3) {
- system("chkfontpath -r $i") or print "PERL::system command failed during chkfontpath\n";
- }
- else {
- system("cd $i && type1inst") or print "PERL::system command failed during cd or type1inst\n";
- }
- $interactive and progress($pbar2, 1 / @list_dir, N("Suppress Fonts Files"));
- }
- $interactive and progress($pbar2, 0.01, N("xfs restart"));
- system("/etc/rc.d/init.d/xfs restart");
- system('xset fp rehash');
- -e "/usr/share/ghostscript" and rm_rf("$drakfont_dir/remove");
- $interactive and progress($pbar2, 0.01, N("done"));
-}
-
-sub license_msg {
- print N("Before installing any fonts, be sure that you have the right to use and install them on your system.\n\n-You can install the fonts the normal way. In rare cases, bogus fonts may hang up your X Server.") . "\n";
-}
-
-$list_all_font_path || $xlsfonts || $windows || @install || @uninstall ? backend_mod() : interactive_mode();
-
-sub backend_mod {
- $xlsfonts && system("xlsfonts");
- $list_all_font_path && system($chkfontpath);
-
- if ($windows) {
- license_msg();
- print "\nWindows fonts Installation........\n";
- search_installed_fonts();
- if (search_windows_font()) {
- print_list();
- put_font_dir();
- }
- print "\nThe End...........................\n";
- }
-
- if (@install) {
- license_msg();
- print "\nInstall Specifics Fonts...........\n";
- search_installed_fonts();
- search_dir_font();
- print "Font to install: " . $_ . "\n" foreach @font_list;
- put_font_dir();
- print "\nThe End...........................\n";
- }
-
- if (@uninstall) {
- print "\nUninstall Specifics Fonts.........\n";
- search_installed_fonts_full_path();
- if ($interactive) { search_dir_font_uninstall_gi() }
- else { search_dir_font_uninstall $_ foreach @uninstall }
- remove_fonts();
- print "\nThe End............................\n";
- }
-}
-
-sub create_fontsel {
- my $font_sel;
- gtkpack($font_box, $font_sel = new Gtk2::FontSelection,);
- $central_widget = \$font_sel;
-}
-
-sub display_error {
- my ($message) = @_;
- my $error_box;
- ${$central_widget}->destroy();
- gtkpack($font_box,
- $error_box = gtkpack_(new Gtk2::VBox(0, 0), 1,
- new Gtk2::Label($message), 0,
- gtkadd(gtkset_layout(new Gtk2::HButtonBox, 'spread'),
- gtksignal_connect(new Gtk2::Button(N("OK")),
- clicked => sub { ${$central_widget}->destroy(); create_fontsel() }
- ),
- ),
- )
- );
- $central_widget = \$error_box;
-}
-
-sub interactive_mode {
- my $font_sel;
- $interactive = 1;
- my $window1 = ugtk2->new('drakfont');
- $window1->{rwindow}->signal_connect(delete_event => sub { ugtk2->exit(0) });
- unless ($::isEmbedded) {
- $window1->{rwindow}->set_position('center');
- $window1->{rwindow}->set_title(N("Import Fonts"));
- }
-
- gtkadd($window1->{window},
- gtkpack_(new Gtk2::VBox(0, 2), if_(!$::isEmbedded, 0, gtkcreate_img("drakfont.620x57")), 1,
- gtkpack_(new Gtk2::HBox(0, 2), 1,
- gtkpack_(new Gtk2::VBox(0, 2), 1,
- gtkpack($font_box = new Gtk2::VBox(0, 5), $font_sel = new Gtk2::FontSelection,), 1,
- gtkpack_(new Gtk2::HBox(0, 2), 0,
- gtkadd(gtkset_layout(new Gtk2::VButtonBox, 'end'),
- gtksignal_connect(new Gtk2::Button(N("Get Windows Fonts")),
- clicked => sub {
- ${$central_widget}->destroy();
- $windows = 1;
- appli_choice();
- }),
- gtksignal_connect(new Gtk2::Button(N("Uninstall Fonts")),
- clicked => sub {
- ${$central_widget}->destroy();
- uninstall();
- }),
- ), 0,
- gtkadd(gtkset_layout(new Gtk2::VButtonBox, 'end'),
- gtksignal_connect(new Gtk2::Button(N("Advanced Options")),
- clicked => sub {
- ${$central_widget}->destroy();
- $windows = 0;
- advanced_install();
- }),
- gtksignal_connect(new Gtk2::Button(N("Font List")),
- clicked => sub {
- ${$central_widget}->destroy();
- create_fontsel();
- }),
- ), 1,
- new Gtk2::HBox(0, 2), 0,
- gtkadd(gtkset_layout(new Gtk2::VButtonBox, 'end'),
- gtksignal_connect(new Gtk2::Button(N("About")), clicked => sub { help() }),
- gtksignal_connect(new Gtk2::Button(N("Close")), clicked => sub { Gtk2->main_quit() }),
- ),
- ),
- ),
- ),
- ),
- );
- $central_widget = \$font_sel;
- $window1->{rwindow}->show_all;
- $window1->{rwindow}->realize;
- $window1->main;
- ugtk2->exit(0);
-}
-
-sub text_view {
- my ($text) = @_;
- my $box;
- gtkpack($font_box,
- $box = gtkpack_(new Gtk2::VBox(0,10), 1,
- gtkpack_(new Gtk2::HBox(0,0), 1,
- create_scrolled_window(gtktext_insert(new Gtk2::TextView, [ [ $text ] ]))
- ), 0,
- gtkadd(gtkset_layout(new Gtk2::HButtonBox, 'spread'),
- gtksignal_connect(new Gtk2::Button(N("OK")),
- clicked => sub { ${$central_widget}->destroy() }),
- ),
- )
- );
- $central_widget = \$box;
- $font_box->show_all();
-}
-
-sub help {
- ugtk2::create_dialog(N("
- Copyright (C) 2001-2002 by MandrakeSoft
- DUPONT Sebastien (original version)
- CHAUMETTE Damien <dchaumette\@mandrakesoft.com>
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
- Thanks:
- - pfm2afm:
- by Ken Borgendale:
- Convert a Windows .pfm file to a .afm (Adobe Font Metrics)
- - type1inst:
- by James Macnicol:
- type1inst generates files fonts.dir fonts.scale & Fontmap.
- - ttf2pt1:
- by Andrew Weeks, Frank Siegert, Thomas Henlich, Sergey Babkin
- Convert ttf font files to afm and pfb fonts
-"));
-}
-
-sub appli_choice {
- my $choice_box;
- my $text = new Gtk2::TextView;
- gtkpack($font_box,
- $choice_box = gtkpack_(new Gtk2::HBox(0, 10), 0,
- new Gtk2::VBox(0, 10), 0,
- new Gtk2::VBox(0, 10), 1,
- gtkpack_(new Gtk2::VBox(0, 10), 1,
- gtkpack_(new Gtk2::VBox(0, 10), 1,
- gtkpack(new Gtk2::HBox(0, 10),
- new Gtk2::HBox(0, 10),
- N("Choose the applications that will support the fonts:"),
- new Gtk2::HBox(0, 10),
- ), 0,
- new Gtk2::HBox(0, 10), 0,
- gtkpack_(new Gtk2::HBox(0, 10), 0,
- N("Ghostscript"), 1,
- new Gtk2::HBox(0, 10), 0,
- my $check11 = new Gtk2::CheckButton(),
- ), 0,
- gtkpack_(new Gtk2::HBox(0, 10), 0,
- N("StarOffice"), 1,
- new Gtk2::HBox(0, 10), 0,
- my $check22 = new Gtk2::CheckButton(),
- ), 0,
- gtkpack_(new Gtk2::HBox(0, 10), 0,
- N("Abiword"), 1,
- new Gtk2::HBox(0, 10), 0,
- my $check33 = new Gtk2::CheckButton(),
- ), 0,
- gtkpack_(new Gtk2::HBox(0, 10), 0,
- N("Generic Printers"), 1,
- new Gtk2::HBox(0, 10), 0,
- my $check44 = new Gtk2::CheckButton(),
- ),
- ), 0,
- gtkpack_(new Gtk2::HBox(0, 10), 1,
- gtktext_insert(gtkset_editable($text, 0),
- [ [ N("Before installing any fonts, be sure that you have the right to use and install them on your system.\n\n-You can install the fonts the normal way. In rare cases, bogus fonts may hang up your X Server.") ] ]
- ), 0,
- new Gtk2::VBox(0, 10),
- ), 0,
- gtkadd(gtkset_layout(new Gtk2::HButtonBox, 'spread'),
- gtksignal_connect(new Gtk2::Button(N("OK")),
- clicked => sub {
- ${$central_widget}->destroy();
- import_status();
- }),
- gtksignal_connect(new Gtk2::Button(N("Cancel")),
- clicked => sub {
- ${$central_widget}->destroy();
- create_fontsel();
- }),
- ),
- ), 0,
- new Gtk2::VBox(0, 10), 0,
- new Gtk2::VBox(0, 10),
- ),
- );
- foreach ([ $check11, \$gs ], [ $check22, \$so ], [ $check33, \$abi ], [ $check44, \$printer ]) {
- my $ref = $_->[1];
- gtksignal_connect(gtkset_active($_->[0], ${$ref}), toggled => sub { ${$ref} = ${$ref} ? 0 : 1 });
- }
- $central_widget = \$choice_box;
- $font_box->show_all();
-}
-
-sub font_choice {
- my $file_dialog;
- $file_dialog = gtksignal_connect(new Gtk2::FileSelection(N("File Selection")), destroy => sub { $file_dialog->destroy() });
- $file_dialog->ok_button->signal_connect(clicked => \&file_ok_sel, $file_dialog);
- $file_dialog->ok_button->set_label(N("Add"));
- $file_dialog->cancel_button->signal_connect(clicked => sub { $file_dialog->destroy() });
- $file_dialog->cancel_button->set_label(N("Close"));
- $file_dialog->set_filename(N("Select the font file or directory and click on 'Add'"));
- $file_dialog->show();
-}
-
-sub file_ok_sel {
- my ($_widget, $file_selection) = @_;
- my $file_name = $file_selection->get_filename();
- print "-- @install\n";
- if (!member($file_name, @install)) {
- push @install, $file_name;
- $model->append_set(undef, [ 0 => $file_name ]);
- }
-}
-
-sub list_remove { #- TODO : multi-selection
- my ($treeStore, $iter) = $list->get_selection->get_selected;
- my $to_remove = $treeStore->_get($iter, 0);
- my ($index) = map_index { if_($_ eq $to_remove, $::i) } @install;
- splice @install, $index, 1;
- $treeStore->remove($iter);
-}
-
-sub advanced_install {
- my $adv_box;
- $model = Gtk2::TreeStore->new(Gtk2::GType->STRING);
- $list = Gtk2::TreeView->new_with_model($model);
- $list->append_column(Gtk2::TreeViewColumn->new_with_attributes(undef, Gtk2::CellRendererText->new, 'text' => 0));
- $list->set_headers_visible(0);
- $list->get_selection->set_mode('browse');
- $list->set_rules_hint(1);
-
- gtkpack($font_box,
- $adv_box = gtkpack_(new Gtk2::VBox(0, 10), 1,
- gtkpack_(new Gtk2::HBox(0, 4), 1, create_scrolled_window($list),), 0,
- gtkadd(gtkset_layout(new Gtk2::HButtonBox, 'spread'),
- gtksignal_connect(new Gtk2::Button(N("Add")), clicked => sub { font_choice() }),
- gtksignal_connect(new Gtk2::Button(N("Remove Selected")), clicked => \&list_remove),
- gtksignal_connect(new Gtk2::Button(N("Install List")),
- clicked => sub {
- ${$central_widget}->destroy();
- appli_choice();
- })
- )
- )
- );
- $central_widget = \$adv_box;
- $adv_box->show_all();
-}
-
-sub list_to_remove {
- #my @files_path = grep(!/fonts/, all($current_path)); garbage ?
- gtkflush();
- my ($tree, @tux) = $left_list->get_selection->get_selected_rows(); #- get tree & paths
- foreach (@tux) { my $iter = $tree->get_iter($_); push @uninstall, $tree->_get($iter, 0) }
- #push @uninstall, $current_path . "/" . $files_path[$_] foreach @number_to_remove; garbage ?
- ${$central_widget}->destroy();
- show_list_to_remove();
-}
-
-sub show_list_to_remove {
- my $show_box;
- my $model = Gtk2::TreeStore->new(Gtk2::GType->STRING);
- my $list = Gtk2::TreeView->new_with_model($model);
- $list->append_column(Gtk2::TreeViewColumn->new_with_attributes(undef, Gtk2::CellRendererText->new, 'text' => 0));
- $list->set_headers_visible(0);
- $list->get_selection->set_mode('browse');
- $list->set_rules_hint(1);
-
- $model->append_set(undef, [ 0 => $_ ]) foreach @uninstall;
-
- gtkpack($font_box,
- $show_box = gtkpack_(new Gtk2::VBox(0, 10), 1,
- gtkpack_(new Gtk2::HBox(0, 4), 1, create_scrolled_window($list)), 0,
- gtkadd(gtkset_layout(new Gtk2::HButtonBox, 'spread'),
- gtksignal_connect(new Gtk2::Button(N("click here if you are sure.")),
- clicked => sub {
- ${$central_widget}->destroy();
- import_status_uninstall();
- }),
- gtksignal_connect(new Gtk2::Button(N("here if no.")),
- clicked =>
- sub { ${$central_widget}->destroy(); create_fontsel() }
- ),
- ),
- )
- );
- $central_widget = \$show_box;
- $show_box->show_all();
-}
-
-sub uninstall { #- TODO : add item to right list with gtksignal_connect
- my $uninst_box;
- @install = ();
- @installed_fonts_path = ();
- list_fontpath();
- chk_empty_xfs_path();
-
- #- left part
- $left_model = Gtk2::TreeStore->new(Gtk2::GType->STRING);
- $left_list = Gtk2::TreeView->new_with_model($left_model);
- $left_list->append_column(Gtk2::TreeViewColumn->new_with_attributes(undef, Gtk2::CellRendererText->new, 'text' => 0));
- $left_list->set_headers_visible(0);
- $left_list->set_rules_hint(1);
- $left_list->get_selection->set_mode('multiple');
-
- $left_model->append_set(undef, [ 0 => $_ ]) foreach @installed_fonts_path;
-
- #- right part
- $right_model = Gtk2::TreeStore->new(Gtk2::GType->STRING);;
- $right_list = Gtk2::TreeView->new_with_model($right_model);
- $right_list->append_column(Gtk2::TreeViewColumn->new_with_attributes(undef, Gtk2::CellRendererText->new, 'text' => 0));
- $right_list->set_headers_visible(0);
- $right_list->get_selection->set_mode('multiple');
- $right_list->set_rules_hint(1);
-
- gtkpack($font_box,
- $uninst_box = gtkpack_(new Gtk2::VBox(0, 10), 1,
- gtkpack_(new Gtk2::HBox(0, 4), 1,
- create_scrolled_window($left_list), #1,
- #create_scrolled_window($right_list)
- ), 0,
- gtkadd(gtkset_layout(new Gtk2::HButtonBox, 'spread'),
- gtksignal_connect(new Gtk2::Button(N("Unselected All")),
- clicked => sub { $left_list->get_selection->unselect_all() }
- ),
- gtksignal_connect(new Gtk2::Button(N("Selected All")),
- clicked => sub { $left_list->get_selection->select_all() }
- ),
- gtksignal_connect(new Gtk2::Button(N("Remove List")), clicked => sub { list_to_remove() }),
- ),
- )
- );
- $central_widget = \$uninst_box;
- $uninst_box->show_all();
-}
-
-sub import_status {
- my $table;
- $pbar = new Gtk2::ProgressBar;
- $pbar1 = new Gtk2::ProgressBar;
- $pbar2 = new Gtk2::ProgressBar;
- $pbar3 = new Gtk2::ProgressBar;
- gtkpack(
- $font_box,
- $table = create_packtable({ col_spacings => 10, row_spacings => 50 },
- [ "", "" ],
- [ N("Initial tests"), $pbar, $pbar->set_text(' ') ],
- [ N("Copy fonts on your system"), $pbar1, $pbar1->set_text(' ') ],
- [ N("Install & convert Fonts"), $pbar2, $pbar2->set_text(' ') ],
- [ N("Post Install"), $pbar3, $pbar3->set_text(' ') ],
- ),
- );
- $central_widget = \$table;
- $font_box->show_all();
- gtkflush();
- backend_mod();
-}
-
-sub import_status_uninstall {
- my $table;
- $pbar = new Gtk2::ProgressBar;
- $pbar1 = new Gtk2::ProgressBar;
- $pbar2 = new Gtk2::ProgressBar;
- gtkpack(
- $font_box,
- $table = create_packtable({ col_spacings => 10, row_spacings => 50 },
- [ "", "" ],
- [ "", "" ],
- [ N("Initial tests"), $pbar, $pbar->set_text(' ') ],
- [ N("Remove fonts on your system"), $pbar1, $pbar1->set_text(' ') ],
- [ N("Post Uninstall"), $pbar2, $pbar2->set_text(' ') ],
- ),
- );
- $central_widget = \$table;
- $font_box->show_all();
- gtkflush();
- backend_mod();
-}
-
-sub progress {
- my ($progressbar, $incr, $label_text) = @_;
- my ($new_val) = $progressbar->fraction;
- $new_val += $incr;
- if ($new_val > 1) { $new_val = 1 }
- $progressbar->fraction($new_val);
- $progressbar->set_text($label_text);
- gtkflush();
-}
-
diff --git a/perl-install/standalone/drakgw b/perl-install/standalone/drakgw
deleted file mode 100755
index 302e3bb4f..000000000
--- a/perl-install/standalone/drakgw
+++ /dev/null
@@ -1,564 +0,0 @@
-#!/usr/bin/perl
-
-#
-# Guillaume Cottenceau (gc@mandrakesoft.com)
-#
-# Copyright 2000-2002 MandrakeSoft
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License version 2, as
-# published by the Free Software Foundation.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-
-use strict;
-use lib qw(/usr/lib/libDrakX);
-
-use standalone; #- warning, standalone must be loaded very first, for 'explanations'
-
-use common;
-use detect_devices;
-use interactive;
-use network;
-use log;
-use c;
-use network::netconnect;
-use network::shorewall;
-
-$::isInstall and die "Not supported during install.\n";
-
-
-local $_ = join '', @ARGV;
-
-$::Wizard_pix_up = "wiz_drakgw.png";
-$::direct = /-direct/;
-
-
-my $sysconf_network = "/etc/sysconfig/network";
-my $sysconf_dhcpd = "/etc/sysconfig/dhcpd";
-my $rc_firewall_generic = "/etc/rc.d/rc.firewall";
-my $rc_firewall_drakgw = "/etc/rc.d/rc.firewall.inet_sharing";
-my $rc_firewall_24 = "/etc/rc.d/rc.firewall.inet_sharing-2.4";
-my $masq_file = "/etc/shorewall/masq";
-my $dhcpd_conf = "/etc/dhcpd.conf";
-my $cups_conf = "/etc/cups/cupsd.conf";
-
-my $shorewall = network::shorewall::read();
-
-my $in = 'interactive'->vnew('su', 'default');
-$::Wizard_title = N("Internet Connection Sharing");
-
-!$::isEmbedded && $in->isa('interactive::gtk') and $::isWizard = 1;
-
-pur_gtk_mode() if $::isEmbedded && $in->isa('interactive::gtk');
-
-sub sys { system(@_) == 0 or log::l("[drakgw] Warning, sys failed for $_[0]") }
-
-sub outpend {
- log::explanations("modified file $_[0]");
- my $f = shift; local *F; open F, ">>$f" or die "outpend in file $f failed: $!\n"; print F foreach @_;
-}
-
-sub start_daemons () {
- my $cups_used = 0;
- log::explanations("Starting daemons");
- if (-f "/etc/rc.d/init.d/cups") {
- if (system("/etc/rc.d/init.d/cups status >/dev/null") == 0) {
- $cups_used = 1;
- sys("/etc/rc.d/init.d/cups stop");
- }
- }
- system("/etc/rc.d/init.d/dhcpd status >/dev/null") == 0 and sys("/etc/rc.d/init.d/dhcpd stop");
- system("/etc/rc.d/init.d/named status >/dev/null 2>/dev/null") == 0 and sys("/etc/rc.d/init.d/named stop");
-
- my $netscripts = '/etc/sysconfig/network-scripts';
- sys("$netscripts/net_cnx_down >/dev/null");
- sys("/etc/rc.d/init.d/network restart >/dev/null");
- sys("$netscripts/net_cnx_up >/dev/null");
-
- sys("/etc/init.d/shorewall restart >/dev/null");
-
- sys("/etc/rc.d/init.d/$_ start >/dev/null"), sys("/sbin/chkconfig --level 345 $_ on") foreach 'named', 'dhcpd', 'shorewall';
- sys("/etc/rc.d/init.d/cups start >/dev/null") if $cups_used;
-}
-
-sub stop_daemons () {
- log::explanations("Stopping daemons");
- foreach (qw(dhcpd named)) {
- system("/etc/rc.d/init.d/$_ status >/dev/null 2>/dev/null") == 0 and sys("/etc/rc.d/init.d/$_ stop");
- }
- system("/etc/rc.d/init.d/shorewall status >/dev/null 2>/dev/null") == 0 and sys("/etc/rc.d/init.d/shorewall clear >/dev/null");
- sys("/sbin/chkconfig --level 345 $_ off") foreach 'named', 'dhcpd';
-}
-
-my $wait_configuring;
-
-sub fatal_quit ($) {
- log::l("[drakgw] FATAL: $_[0]");
- undef $wait_configuring;
- $in->ask_warn('', $_[0]);
- quit_global($in, -1);
-}
-
-my ($kernel_version) = c::kernel_version() =~ /(...)/;
-log::l("[drakgw] kernel_version $kernel_version");
-
-$kernel_version >= 2.4 or fatal_quit(N("Sorry, we support only 2.4 kernels."));
-
-begin:
-
-#- **********************************
-#- * 0th step: verify if we are already set up
-
-if ($shorewall && $shorewall->{masquerade}) {
- $::Wizard_no_previous = 1;
-
- if (!$shorewall->{disabled}) {
- my $r = $in->ask_from_list_(N("Internet Connection Sharing currently enabled"),
-N("The setup of Internet Connection Sharing has already been done.
-It's currently enabled.
-
-What would you like to do?"),
- [ N_("disable"), N_("reconfigure"), N_("dismiss") ]) or quit_global($in, 0);
- if ($r eq "disable") {
- {
- my $wait_disabl = $in->wait_message('', N("Disabling servers..."));
- stop_daemons();
- }
- foreach ($dhcpd_conf, $masq_file) {
- rename($_, "$_.drakgwdisable") or die "Could not rename $_ to $_.drakgwdisable"
- }
- sys("/etc/init.d/shorewall restart >/dev/null");
- log::l("[drakgw] Disabled");
- $::Wizard_finished = 1;
- $in->ask_okcancel('', N("Internet Connection Sharing is now disabled."));
- quit_global($in, 0);
- }
- if ($r eq "dismiss") {
- quit_global($in, 0);
- }
- } else {
- my $r = $in->ask_from_list_(N("Internet Connection Sharing currently disabled"),
-N("The setup of Internet connection sharing has already been done.
-It's currently disabled.
-
-What would you like to do?"),
- [ N_("enable"), N_("reconfigure"), N_("dismiss") ]);
- if ($r eq "enable") {
- foreach ($dhcpd_conf, $masq_file) {
- rename($_, "$_.old") if -f $_;
- rename("$_.drakgwdisable", $_) or die "Could not find configuration. Please reconfigure.";
- }
- {
- my $wait_enabl = $in->wait_message('', N("Enabling servers..."));
- start_daemons();
- }
- log::l("[drakgw] Enabled");
- $::Wizard_finished = 1;
- $in->ask_okcancel('', N("Internet Connection Sharing is now enabled."));
- quit_global($in, 0);
- }
- if ($r eq "dismiss") {
- quit_global($in, 0);
- }
- }
-}
-
-
-#- **********************************
-#- * 1st step: detect/setup
-step_ask_confirm:
-
-$::Wizard_no_previous = 1;
-
-$::direct or $in->ask_okcancel(N("Internet Connection Sharing"),
-N("You are about to configure your computer to share its Internet connection.
-With that feature, other computers on your local network will be able to use this computer's Internet connection.
-
-Make sure you have configured your Network/Internet access using drakconnect before going any further.
-
-Note: you need a dedicated Network Adapter to set up a Local Area Network (LAN)."), 1) or quit_global($in, 0);
-
-undef $::Wizard_no_previous;
-
-
-step_detectsetup:
-
-my @configured_devices = map { /ifcfg-(\S+)/ } glob('/etc/sysconfig/network-scripts/ifcfg*');
-
-my %aliased_devices;
-/^\s*alias\s+(eth[0-9])\s+(\S+)/ and $aliased_devices{$1} = $2 foreach cat_("/etc/modules.conf");
-
-my $card_netconnect = network::netconnect::get_net_device();
-defined $card_netconnect and log::l("[drakgw] Information from netconnect: ignore card $card_netconnect");
-
-my @cards = grep {
- log::l("[drakgw] Have network card: $_");
- $_ ne $card_netconnect
-} detect_devices::getNet();
-log::l("[drakgw] Available network cards: ", join(", ", @cards));
-
-my $format = sub {
- $aliased_devices{$_[0]} ?
- N("Interface %s (using module %s)", $_[0], $aliased_devices{$_[0]}) :
- N("Interface %s", $_[0]);
-};
-
-#- setup the network interface we shall use
-
-my $device;
-if (!@cards)
-{
- $in->ask_warn(N("No network adapter on your system!"),
- N("No ethernet network adapter has been detected on your system. Please run the hardware configuration tool."));
- quit_global($in, 0);
-}
-elsif (@cards == 1)
-{
- $device = $cards[0];
- $in->ask_okcancel(N("Network interface"),
-N("There is only one configured network adapter on your system:
-
-%s
-
-I am about to setup your Local Area Network with that adapter.", $format->($device)), 1) or goto step_ask_confirm;
-} else {
- $device = $in->ask_from_listf(N("Choose the network interface"),
- N("Please choose what network adapter will be connected to your Local Area Network."),
- $format,
- \@cards,
- ) or goto step_ask_confirm;
- defined $device or quit_global($in, 0);
-}
-log::explanations("Choosing network device: $device");
-
-
-my $lan_address = "192.168.1.0";
-my $server_ip = "192.168.1.1";
-my $nameserver_ip = "192.168.1.1";
-my $netmask = "255.255.255.0";
-my $start_range = "16";
-my $end_range = "253";
-my $default_lease = "21600";
-my $max_lease = "43200";
-my $internal_domain_name = "homeland.net";
-
-my $reconf_dhcp_server_intf = 1;
-
-if (grep(/$device/, @configured_devices)) {
- step_warning_already_conf:
- my $auto = N("Yes");
- my $dhcp_details = N("Yes");
- my $conf = network::read_interface_conf("/etc/sysconfig/network-scripts/ifcfg-$device");
- $in->ask_from(N("Network interface already configured"),
- N("Warning, the network adapter (%s) is already configured.
-
-Do you want an automatic re-configuration?
-
-You can do it manually but you need to know what you're doing.", $device),
- [ { label => N("Automatic reconfiguration"), val => \$auto, list => [ N("Yes"), N("No (experts only)") ] },
- { val => N("Show current interface configuration"), clicked =>
- sub { $in->ask_warn(N("Current interface configuration"),
- N("Current configuration of `%s':
-
-Network: %s
-IP address: %s
-IP attribution: %s
-Driver: %s", $device, $conf->{NETWORK}, $conf->{IPADDR}, $conf->{BOOTPROTO}, $aliased_devices{$device} || '(unknown)')) } } ]) or goto step_detectsetup;
-
- if ($auto ne N("Yes")) {
- $reconf_dhcp_server_intf = 0;
- $server_ip = $conf->{IPADDR};
- $nameserver_ip = $conf->{IPADDR};
- $lan_address = $conf->{NETWORK};
- $in->ask_from('',
- N("I can keep your current configuration and assume you already set up a DHCP server; in that case please verify I correctly read the Network that you use for your local network; I will not reconfigure it and I will not touch your DHCP server configuration.
-
-The default DNS entry is the Caching Nameserver configured on the firewall. You can replace that with your ISP DNS IP, for example.
-
-Otherwise, I can reconfigure your interface and (re)configure a DHCP server for you.
-
-", $device),
- [ { label => N("Local Network adress"), val => \$lan_address, type => 'entry' },
- { label => N("Netmask"), val => \$netmask, type => 'entry' } ])
- or goto step_warning_already_conf;
- $in->ask_from('',
- N("DHCP Server Configuration.
-
-Here you can select different options for the DHCP server configuration.
-If you don't know the meaning of an option, simply leave it as it is.
-
-", $device),
- [ { label => N("(This) DHCP Server IP"), val => \$server_ip, type => 'entry' },
- { label => N("The DNS Server IP"), val => \$nameserver_ip, type => 'entry' },
- { label => N("The internal domain name"), val => \$internal_domain_name, type => 'entry' },
- { label => N("The DHCP start range"), val => \$start_range, type => 'entry' },
- { label => N("The DHCP end range"), val => \$end_range, type => 'entry' },
- { label => N("The default lease (in seconds)"), val => \$default_lease, type => 'entry' },
- { label => N("The maximum lease (in seconds)"), val => \$max_lease, type => 'entry' },
- { label => N("Re-configure interface and DHCP server"), val => \$reconf_dhcp_server_intf, type => 'bool' } ])
- or goto step_warning_already_conf;
- }
-}
-
-if (!($lan_address =~ s/\.0$//)) {
- $in->ask_warn('',
- N("The Local Network did not finish with `.0', bailing out."));
- quit_global($in, 0);
-}
-log::explanations("Using LAN address <$lan_address>");
-
-
-#- test for potential conflict with other networks
-
-foreach (grep { $_ ne $device } @configured_devices)
-{
- grep(/$lan_address/, cat_("/etc/sysconfig/network-scripts/ifcfg-$_")) and
- ($in->ask_warn('', N("Potential LAN address conflict found in current config of %s!\n", $_)) or goto step_detectsetup);
-}
-
-
-#- test for potential conflict with previous firewall config
-network::shorewall::check_iptables($in) or goto step_detectsetup;
-
-#- **********************************
-#- * 2nd step: configure
-
-$wait_configuring = $in->wait_message(N("Configuring..."),
- N("Configuring scripts, installing software, starting servers..."));
-
-
-#- setup the /etc/sysconfig/network-script/ script
-
-if ($reconf_dhcp_server_intf) {
- log::explanations("Reconfiguring network parameters of $device");
- my $network_scripts = "/etc/sysconfig/network-scripts";
- my $ifcfg = "$network_scripts/ifcfg-$device";
- renamef($ifcfg, "$network_scripts/old.ifcfg-$device");
- output($ifcfg, qq(DEVICE=$device
-BOOTPROTO=static
-IPADDR=$server_ip
-NETMASK=$netmask
-NETWORK=$lan_address.0
-BROADCAST=$lan_address.255
-ONBOOT=yes
-));
-}
-
-
-#- install and setup the RPM packages
-
-my $rpms_to_install;
-my %rpm2file = ('dhcp-server' => '/usr/sbin/dhcpd',
- bind => '/usr/sbin/named',
- shorewall => '/sbin/shorewall',
- 'caching-nameserver' => '/var/named/named.local');
-
-#- first: try to install all in one step
-my @needed_to_install = grep { !-e $rpm2file{$_} } keys %rpm2file;
-@needed_to_install and $in->do_pkgs->install(@needed_to_install);
-#- second: try one by one if failure detected
-if (grep { !-e $rpm2file{$_} } keys %rpm2file) {
- foreach (keys %rpm2file) {
- -e $rpm2file{$_} or $in->do_pkgs->install($_);
- -e $rpm2file{$_} or fatal_quit(N("Problems installing package %s", $_));
- }
-}
-
-put_in_hash($shorewall ||= {}, {
- disabled => 0,
- net_interface => $card_netconnect,
- if_(@cards > 1, loc_interface => [ grep { $_ ne $device } @cards ]),
- masquerade => { interface => $device, subnet => "$lan_address.0/$netmask" },
-});
-
-network::shorewall::write($shorewall);
-
-#- be sure that FORWARD_IPV4 is enabled in /etc/sysconfig/network
-
-substInFile { s/^FORWARD_IPV4.*\n//; $_ .= "FORWARD_IPV4=true\n" if eof } $sysconf_network;
-
-
-#- setup the DHCP server
-
-if ($reconf_dhcp_server_intf) {
- log::explanations("Configuring a DHCP server on $lan_address.0");
- renamef($dhcpd_conf, "$dhcpd_conf.old");
- output($dhcpd_conf, qq(subnet $lan_address.0 netmask $netmask {
- # default gateway
- option routers $server_ip;
- option subnet-mask $netmask;
-
- option domain-name "$internal_domain_name";
- option domain-name-servers $nameserver_ip;
-
- range dynamic-bootp $lan_address.$start_range $lan_address.$end_range;
- default-lease-time $default_lease;
- max-lease-time $max_lease;
-}
-));
-}
-
-my $update_dhcp = '/usr/sbin/update_dhcp.pl';
--e $update_dhcp and system($update_dhcp);
-
-
-#- put the interface for the dhcp server in the sysconfig-dhcp config, for the /etc/init.d script of dhcpd
-
-substInFile { s/^INTERFACES\n//; $_ .= "INTERFACES=\"$device\"\n" if eof } $sysconf_dhcpd;
-
-
-#- Set up /etc/cups/cupsd.conf to make the broadcasting of the printer info
-#- working correctly:
-#-
-#- 1. ServerName <server's IP address> # because clients do necessarily
-#- # know the server's name
-#-
-#- 2. BrowseAddress <server's Broadcast IP> # broadcast printer info into
-#- # the local network.
-#-
-#- 3. BrowseOrder Deny,Allow
-#- BrowseDeny All
-#- BrowseAllow <IP mask for local net> # Only accept broadcast signals
-#- # coming from local network
-#-
-#- 4. <Location />
-#- Order Deny,Allow
-#- Deny From All
-#- Allow From <IP mask for local net> # Allow only machines of local
-#- </Location> # network to access the server
-#-
-#- These steps are only done when the CUPS package is installed.
-
-#- Modify the root location block in /etc/cups/cupsd.conf
-
-if (-f $cups_conf) {
- log::explanations("Updating CUPS configuration accordingly");
-
- substInFile {
- s/^ServerName[^:].*\n//; $_ .= "ServerName $server_ip\n" if eof;
- s/^BrowseAddress.*\n//; $_ .= "BrowseAddress $lan_address.255\n" if eof;
- s/^BrowseOrder.*\n//; $_ .= "BrowseOrder Deny,Allow\n" if eof;
- s/^BrowseDeny.*\n//; $_ .= "BrowseDeny All\n" if eof;
- s/^BrowseAllow.*\n//; $_ .= "BrowseAllow $lan_address.*\n" if eof;
- } $cups_conf;
-
- my @cups_conf_content = cat_($cups_conf);
- my @root_location; my $root_location_start; my $root_location_end;
-
- # Cut out the root location block so that it can be treated seperately
- # without affecting the rest of the file
- if (grep(m|^\s*<Location\s+/\s*>|, @cups_conf_content)) {
- $root_location_start = -1;
- $root_location_end = -1;
- # Go through all the lines, bail out when start and end line found
- for (my $i = 0; $i < @cups_conf_content && $root_location_end == -1; $i++) {
- if ($cups_conf_content[$i] =~ m|^\s*<\s*Location\s+/\s*>|) {
- $root_location_start = $i;
- } elsif ($cups_conf_content[$i] =~ m|^\s*<\s*/Location\s*>| && $root_location_start != -1) {
- $root_location_end = $i;
- }
- }
- # Rip out the block and store it seperately
- @root_location = splice(@cups_conf_content, $root_location_start, $root_location_end - $root_location_start + 1);
- } else {
- # If there is no root location block, create one
- $root_location_start = @cups_conf_content;
- @root_location = ("<Location />\n", "</Location>\n");
- }
-
- # Delete all former "Order", "Allow", and "Deny" lines from the root location block
- s/^\s*Order.*//, s/^\s*Allow.*//, s/^\s*Deny.*// foreach @root_location;
-
- # Add the new "Order" and "Deny" lines, add an "Allow" line for the local network
- splice(@root_location, -1, 0, $_) foreach "Order Deny,Allow\n", "Deny From All\n", "Allow From 127.0.0.1\n",
- "Allow From $lan_address.*\n";
-
- # Put the changed root location block back into the file
- splice(@cups_conf_content, $root_location_start, 0, @root_location);
-
- output $cups_conf, @cups_conf_content;
-}
-
-
-#- start the daemons
-
-start_daemons();
-
-
-#- bye-bye message
-
-undef $wait_configuring;
-
-$::Wizard_no_previous = 1;
-$::Wizard_finished = 1;
-
-$in->ask_okcancel(N("Congratulations!"),
-N("Everything has been configured.
-You may now share Internet connection with other computers on your Local Area Network, using automatic network configuration (DHCP)."));
-
-
-log::l("[drakgw] Installation complete, exiting");
-quit_global($in, 0);
-
-sub quit_global {
- my ($in, $exitcode) = @_;
- $in->exit($exitcode);
- goto begin
-}
-
-sub pur_gtk_mode {
- require ugtk2;
- import ugtk2 qw(:wrappers :helpers :create);
- my $setup_state = $shorewall && $shorewall->{masquerade} ?
- ($shorewall->{disabled} ?
- N("The setup has already been done, but it's currently disabled.") :
- N("The setup has already been done, and it's currently enabled.")) :
- N("No Internet Connection Sharing has ever been configured.");
-
- my $window1 = ugtk2->new('drakgw');
- $window1->{rwindow}->signal_connect(delete_event => sub { ugtk2->exit(0) });
- unless ($::isEmbedded) {
- $window1->{rwindow}->set_position('center');
- $window1->{rwindow}->set_title(N("Internet Connection Sharing configuration"));
- }
- $window1->{rwindow}->set_border_width(10);
- my $vbox1 = new Gtk2::VBox(0,0);
- $window1->{rwindow}->add($vbox1);
- my $hbox1 = new Gtk2::HBox(0,0);
- $vbox1->pack_start($hbox1,1,1,0);
- my $label1 = new Gtk2::Label(
-N("Welcome to the Internet Connection Sharing utility!
-
-%s
-
-Click on Configure to launch the setup wizard.", $setup_state));
- $hbox1->pack_start($label1,1,1,0);
- my $hbox2 = new Gtk2::HBox(0,0);
- $vbox1->pack_start($hbox2,1,1,0);
-
- my $bbox1 = new Gtk2::HButtonBox;
- $vbox1->pack_start($bbox1,0,0,0);
- $bbox1->set_layout('end');
- my $button_conf = Gtk2::Button->new(N("Configure"));
- $button_conf->signal_connect(clicked => sub {
- system("/usr/sbin/drakgw --wizard");
- ugtk2->exit(0);
- });
- $bbox1->add($button_conf);
- my $button_cancel = Gtk2::Button->new(N("Cancel"));
- $button_cancel->signal_connect(clicked => sub { ugtk2->exit(0) });
- $bbox1->add($button_cancel);
- $window1->{rwindow}->show_all();
- $window1->main;
- ugtk2->exit(0);
-
-}
diff --git a/perl-install/standalone/drakhelp b/perl-install/standalone/drakhelp
deleted file mode 100644
index fbbf16eca..000000000
--- a/perl-install/standalone/drakhelp
+++ /dev/null
@@ -1,37 +0,0 @@
-#!/usr/bin/perl
-
-use strict;
-use diagnostics;
-use lib qw(/usr/lib/libDrakX);
-
-use standalone; #- warning, standalone must be loaded very first, for 'explanations'
-
-use interactive;
-use common;
-use lang;
-use any;
-
-die "Usage: drakhelp <help_path>" if @ARGV != 1;
-
-my $in = interactive->vnew;
-
-my $locale = lang::read('', $>);
-if (!member($locale->{lang}, qw(de en es fr it ru))) { $locale->{lang} = 'en' };
-my $path2help = "/usr/share/doc/mandrake/" . $locale->{lang} . "/";
--d $path2help or $in->do_pkgs->install('mandrake_doc-drakxtools-' . $locale->{lang});
-
-my $path = $ARGV[0] =~ /^http|^www/ ? $ARGV[0] : $path2help . $ARGV[0];
-
-my $wm = any::running_window_manager();
-my %launchhelp = (
- 'kwin' => sub { system("mdklaunchhelp " . $path . "&") },
- 'gnome-session' => sub { system("yelp ghelp://" . $path . "&") },
- 'other' => sub { my $browser = $ENV{BROWSER} || find { -x "/usr/bin/$_" } qw(mozilla konqueror galeon) or $in->ask_warn('drakhelp', N("No browser is installed on your system, Please install one if you want to browse the help system"));
- standalone::explanations("Connection to help system at $path");
- system("$browser " . $path . "&")
- }
- );
-member($wm, 'kwin', 'gnome-session') or $wm = 'other';
-eval { $launchhelp{$wm}->() };
-
-
diff --git a/perl-install/standalone/drakperm b/perl-install/standalone/drakperm
deleted file mode 100755
index 60ce05307..000000000
--- a/perl-install/standalone/drakperm
+++ /dev/null
@@ -1,369 +0,0 @@
-#!/usr/bin/perl
-
-use strict;
-
-use lib qw(/usr/lib/libDrakX);
-use standalone;
-
-use common;
-use ugtk2 qw(:helpers :wrappers :create);
-use interactive;
-
-my $in = 'interactive'->vnew('su', 'default');
-local $_ = join '', @ARGV;
-
-#- vars declaration
-my ($default_perm_level) = "level ".chomp_(`cat /etc/sysconfig/msec | grep SECURE_LEVEL= |cut -d= -f2`);
-my %CURENT;
-my $perm_path = '/usr/share/msec/';
-my $local_path = '/etc/security/msec/';
-my %perm = ( 'level 1' => $perm_path.'perm.1',
- 'level 2' => $perm_path.'perm.2',
- 'level 3' => $perm_path.'perm.3',
- 'level 4' => $perm_path.'perm.4',
- 'level 5' => $perm_path.'perm.5',
- 'editable' => $local_path.'perm.local',
- );
-my $rows_cnt = 0;
-my $editable = 0;
-my $modified = 0;
-my $prec_txt = $default_perm_level;
-
-#- Widget declaration
-my $w = ugtk2->new('drakperm');
-my $W = $w->{window};
-$W->signal_connect(delete_event => sub { ugtk2->exit });
-my $treeModel = Gtk2::TreeStore->new((Gtk2::GType->STRING) x 4);
-my $permList = Gtk2::TreeView->new_with_model($treeModel);
-
-my @column_sizes = (150, 100, 100, 15, -1);
-
-each_index {
- my $col = Gtk2::TreeViewColumn->new_with_attributes($_, Gtk2::CellRendererText->new, 'text' => $::i);
- $col->set_min_width($column_sizes[$::i]);
- $permList->append_column($col);
-} (N("path"), N("user"), N("group"), N("permissions"));
-
-#- widgets settings
-my $combo_perm = new Gtk2::Combo;
-$combo_perm->entry->set_editable(0);
-$combo_perm->set_popdown_strings(sort(keys %perm));
-
-sub add_callback {
- row_setting_dialog($treeModel->append_set(undef, [ 0 => 'new', 1 => '-', 2 => '-', 3 => '-' ]));
- $rows_cnt++;
- $modified++;
-}
-
-sub edit_callback {
- my (undef, $iter) = $permList->get_selection->get_selected;
- return unless $iter;
- %CURENT = ('data' => [
- $treeModel->_get($iter, 0),
- $treeModel->_get($iter, 1),
- $treeModel->_get($iter, 2),
- $treeModel->_get($iter, 3),
- ]
- );
- row_setting_dialog($iter);
-}
-
-sub del_callback {
- my ($tree, $iter) = $permList->get_selection->get_selected();
- $tree->remove($iter);
- $rows_cnt--;
- $modified++;
-}
-
-sub down_callback {
- #- broken
- # my $row = ${$CURENT{clicked}}{row};
- # $permList->row_move($row, $row+1);
- # $permList->unselect_all;
- # $permList->select_row($row+1,0);
- # $CURENT{clicked}{row} = $row+1;
-}
-
-sub up_callback {
- #- broken
- # my $row = ${$CURENT{clicked}}{row};
- # $permList->row_move($row, $row-1);
- # $permList->unselect_all;
- # $permList->select_row($row-1,0);
- # $CURENT{clicked}{row} = $row-1;
-}
-
-my $combo_sig = $combo_perm->entry->signal_connect( changed => sub { display_perm($combo_perm->entry->get_text , @_) });
-$permList->signal_connect(button_press_event => sub {
- my (undef, $event) = @_;
- my (undef, $iter) = $permList->get_selection->get_selected;
- row_setting_dialog($iter) if $event->type eq '2button_press';
- });
-
-
-my $up_down_box = new Gtk2::HBox(0,5);
-my $tips = new Gtk2::Tooltips;
-
-foreach ([ N("Up"), N("Move selected rule up one level"), \&up_callback ],
- [ N("Down"), N("Move selected rule down one level"), \&down_callback ],
- [ N("add a rule"), N("Add a new rule at the end"), \&add_callback ],
- [ N("delete"), N("Delete selected rule"), \&del_callback ],
- [ N("edit"), N("Edit current rule"), \&edit_callback ]) {
- $up_down_box->add(gtkset_tip($tips,
- gtksignal_connect(Gtk2::Button->new($_->[0]),
- clicked => $_->[2]
- ),
- $_->[1]));
-}
-
-
-
-
-$W->add(gtkpack_(Gtk2::VBox->new(0,5),
- 0, Gtk2::Label->new(N("Drakperm is used to see files to use in order to fix permissions, owners, and groups via msec.\nYou can also edit your own rules which will owerwrite the default rules.")),
- 1, gtkadd(Gtk2::Frame->new,
- gtkpack_(Gtk2::VBox->new(0,5),
- 0, gtkadd(Gtk2::HBox->new(0,5),
- Gtk2::Label->new(N("select perm file to see/edit")),
- $combo_perm
- ),
- 1, create_scrolled_window($permList),
- 0, $up_down_box,
- 0, gtkadd(Gtk2::HBox->new(0,5),
- gtksignal_connect(Gtk2::Button->new(N("Save")), clicked => \&save_perm),
- gtksignal_connect(Gtk2::Button->new(N("Quit")), clicked => sub { ugtk2->exit })
- )
- )
- )
- )
- );
-$W->show_all;
-$w->{rwindow}->set_position('center') unless $::isEmbedded;
-
-display_perm($default_perm_level);
-$combo_perm->entry->set_text($default_perm_level);
-
-$w->main;
-ugtk2->exit;
-
-
-sub check_save {
- $modified or return 0;
- my $sav_ = $in->ask_okcancel('Warning', 'your changed will be lost do you wish to continue?');
- $sav_
- and $modified = 0;
- return $sav_;
-}
-
-sub display_perm {
- my $perm_level = shift @_;
- my $file = $perm{$perm_level};
- my $sav_ = &check_save;
- my $i = 0;
- if ($modified && ! $sav_) {
- $combo_perm->entry->signal_handler_block($combo_sig);
- $combo_perm->entry->set_text($prec_txt);
- $combo_perm->entry->signal_handler_unblock($combo_sig);
- return 0;
- }
-
- $editable = $perm_level =~ /^level \d/ ? 0 : 1;
-
- $treeModel->clear();
- local *F;
- open F, $file;
- local $_;
- while (<F>) {
- next unless m/^([^#]\S+)\s+([^.\s]+)(\.(\S+))?\s+(\d+)/;
- $treeModel->append_set(undef, [ 0 => $1, 1 => $2, 2 => $4, 3 => $5 ]);
- }
- close F;
- $up_down_box->set_sensitive($editable);
-
- $rows_cnt = $i;
- $prec_txt = $perm_level;
- undef(%CURENT);
-}
-
-sub save_perm {
- $modified or return 0;
- local *F;
- open F, '>'.$local_path.'perm.local' or die("F CHIER BORDEL");
- foreach my $i (0..$rows_cnt) {
- my $line = $permList->get_text($i, 0) . "\t" . $permList->get_text($i,1) . ($permList->get_text($i,2) ? "." . $permList->get_text($i,2) : "") . "\t" . $permList->get_text($i,3) . "\n";
- print F $line;
- }
- close F;
- $modified = 0;
-}
-
-sub row_setting_dialog {
- my ($iter) = @_;
-
- my %perms;
- my $dlg = new Gtk2::Dialog();
- $dlg->set_transient_for($w->{rwindow}) unless $::isEmbedded;
- $dlg->set_modal(1);
-# $dlg->set_resizable(0);
- my $ok = new Gtk2::Button('ok');
- my $cancel = new Gtk2::Button('cancel');
- my $browse = new Gtk2::Button(N("browse"));
- my $users = new Gtk2::Combo;
- my $groups = new Gtk2::Combo;
- my $file = new Gtk2::Entry;
- my $usr_hbox = new Gtk2::HBox(0,5);
- my $usr_vbox = new Gtk2::VBox(0,5);
- my $usr_check = new Gtk2::CheckButton(N("Current user"));
- my $hb_rights = new Gtk2::HBox(0,15);
- my $vb_rights = new Gtk2::VBox(0,15);
- my $F_rights = new Gtk2::Frame(N("Permissions"));
- my $F_usr = new Gtk2::Frame(N("Property"));
- my $vb_specials = new Gtk2::VBox(0,5);
- my $sticky = new Gtk2::CheckButton(N("sticky-bit"));
- my $suid = new Gtk2::CheckButton(N("Set-UID"));
- my $gid = new Gtk2::CheckButton(N("Set-GID"));
- my $rght = ${$CURENT{data}}[3];
- my $s = length($rght) == 4 ? substr($rght,0,1) : 0;
- my $user = $s ? substr($rght,1,1) : substr($rght,0,1);
- my $group = $s ? substr($rght,2,1) : substr($rght,1,1);
- my $other = $s ? substr($rght,3,1) : substr($rght,2,1);
-
- my %rights = (user => $user, group => $group, other => $other);
- my @check = ('', 'read', 'write', 'execute');
-
- $vb_rights->add(new Gtk2::Label($_)) foreach @check;
- $hb_rights->add($vb_rights);
-
- foreach my $r (keys %rights) {
- $perms{$r} = { get_right($rights{$r}) };
- my $vbox = gtkadd(Gtk2::VBox->new(0,5), Gtk2::Label->new($r));
- foreach my $c (@check) {
- $c eq '' and next;
- my $active = $perms{$r}{$c};
- $perms{$r}{$c} = Gtk2::CheckButton->new;
- $perms{$r}{$c}->set_active($active);
- $vbox->add($perms{$r}{$c});
- }
- $hb_rights->add($vbox);
- }
-
- $vb_specials->add(new Gtk2::Label(' '));
- $vb_specials->add($suid);
- $vb_specials->add($gid);
- $vb_specials->add($sticky);
- $hb_rights->add($vb_specials);
-
- #- dlg widgets settings
- my %s_right = get_right($s);
- $s_right{execute} and $sticky->set_active(1);
- $s_right{write} and $gid->set_active(1);
- $s_right{read} and $suid->set_active(1);
-
- $file->set_text(${$CURENT{data}}[0]);
-
- $users->set_popdown_strings(&get_user_or_group('users'));
- $users->entry->set_text(${$CURENT{data}}[1]);
- $users->entry->set_editable(0);
-
- $groups->set_popdown_strings(&get_user_or_group);
- $groups->entry->set_text(${$CURENT{data}}[2]);
- $groups->entry->set_editable(0);
-
- if (${$CURENT{data}}[1] eq 'current') {
- $usr_check->set_active(1);
- $groups->set_sensitive(0);
- $users->set_sensitive(0);
- }
-
- $tips->set_tip($sticky, N("Used for directory:\n only owner of directory or file in this directory can delete it"));
- $tips->set_tip($suid, N("Use owner id for execution"));
- $tips->set_tip($gid, N("Use group id for execution"));
- $tips->set_tip($usr_check, N("when checked, owner and group won't be changed"));
-
- $cancel->signal_connect(clicked => sub { $dlg->destroy });
- $browse->signal_connect(clicked => sub {
- my $file_dlg = new Gtk2::FileSelection(N("Path selection"));
- $file_dlg->set_modal(1);
- $file_dlg->show;
- $file_dlg->set_filename($file->get_text);
- $file_dlg->cancel_button->signal_connect( clicked => sub { $file_dlg->destroy });
- $file_dlg->ok_button->signal_connect( clicked => sub {
- $file->set_text($file_dlg->get_filename);
- $file_dlg->destroy;
- });
- });
- $ok->signal_connect(clicked => sub {
- $treeModel->set($iter, [ 0 => $file->get_text ]);
- if ($usr_check->get_active) {
- $treeModel->set($iter, [ 1 => 'current' ]);
- $treeModel->set($iter, [ 2 => '' ]);
- } else {
- $treeModel->set($iter, [ 1 => $users->entry->get_text ]);
- $treeModel->set($iter, [ 2 => $groups->entry->get_text ]);
- }
- $user = ($perms{user}{read}->get_active ? 4 : 0)+($perms{user}{write}->get_active ? 2 : 0)+($perms{user}{execute}->get_active ? 1 : 0);
- $group = ($perms{group}{read}->get_active ? 4 : 0)+($perms{group}{write}->get_active ? 2 : 0)+($perms{group}{execute}->get_active ? 1 : 0);
- $other = ($perms{other}{read}->get_active ? 4 : 0)+($perms{other}{write}->get_active ? 2 : 0)+($perms{other}{execute}->get_active ? 1 : 0);
- my $s = ($sticky->get_active ? 1 : 0) + ($suid->get_active ? 4 : 0) + ($gid->get_active ? 2 : 0);
- $treeModel->set($iter, [ 3 => ($s || '') . $user . $group . $other ]);
- $dlg->destroy;
- $modified++;
- });
- $usr_check->signal_connect(clicked => sub {
- my $bool = $usr_check->get_active;
- $groups->set_sensitive(!$bool);
- $users->set_sensitive(!$bool);
- });
-
-
- $usr_vbox->add($usr_check);
- $usr_vbox->add($usr_hbox);
-
- $usr_hbox->add(new Gtk2::Label(N("user :")));
- $usr_hbox->add($users);
- $usr_hbox->add(new Gtk2::Label(N("group :")));
- $usr_hbox->add($groups);
-
- $F_rights->add($hb_rights);
- $F_usr->add($usr_vbox);
-
- gtkpack_($dlg->vbox,
- 0, gtkadd(new Gtk2::Frame(N("Path")),
- gtkpack_(Gtk2::HBox->new(0,5),
- 1, $file,
- 0, $browse
- )
- ),
- 0, $F_usr,
- 1, $F_rights
- );
- $dlg->action_area->add($ok);
- $dlg->action_area->add($cancel);
-
- $dlg->show_all;
-
-}
-
-sub get_user_or_group {
- my $what = @_;
- my @users;
- local *F;
- open F, $what eq 'users' ? '/etc/passwd' : '/etc/group';
-
- local $_;
- while (<F>) {
- m/^([^#:]+):[^:]+:[^:]+:/ or next;
- push @users, $1;
- }
- close F;
- return sort(@users);
-}
-
-sub get_right {
- my ($right) = @_;
- my %rght = ('read' => 0, 'write' => 0, 'execute' => 0);
- $right - 4 >= 0 and $rght{read}=1 and $right = $right-4;
- $right - 2 >= 0 and $rght{write}=1 and $right = $right-2;
- $right - 1 >= 0 and $rght{execute}=1 and $right = $right-1;
- return %rght;
-}
diff --git a/perl-install/standalone/drakproxy b/perl-install/standalone/drakproxy
deleted file mode 100755
index 692ccab8d..000000000
--- a/perl-install/standalone/drakproxy
+++ /dev/null
@@ -1,33 +0,0 @@
-#!/usr/bin/perl
-
-# DrakProxy
-
-# Copyright (C) 1999-2002 MandrakeSoft (damien@mandrakesoft.com)
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-use lib qw(/usr/lib/libDrakX);
-
-use standalone; #- warning, standalone must be loaded very first, for 'explanations'
-use interactive;
-use network::network;
-use any;
-use common;
-
-my $u = { getVarsFromSh('/etc/profile.d/proxy.sh') };
-my $in = 'interactive'->vnew('su', 'network');
-network::network::miscellaneous_choose($in, $u, 1, 1);
-network::network::proxy_configure($u);
-$in->exit(0);
diff --git a/perl-install/standalone/drakpxe b/perl-install/standalone/drakpxe
deleted file mode 100755
index 6bd222a53..000000000
--- a/perl-install/standalone/drakpxe
+++ /dev/null
@@ -1,516 +0,0 @@
-#!/usr/bin/perl
-#
-# François Pons <fpons@mandrakesoft.com>
-#
-# Copyright 2003 MandrakeSoft
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License version 2, as
-# published by the Free Software Foundation.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-
-use strict;
-use lib qw(/usr/lib/libDrakX);
-
-use standalone; #- warning, standalone must be loaded very first, for 'explanations'
-
-use common;
-use interactive;
-use network;
-use log;
-use c;
-use network::netconnect;
-
-$::isInstall and die "Not supported during install.\n";
-
-$::Wizard_pix_up = "wiz_drakgw.png"; #- to change ? keep existing one, nobody will see (too late) ;-)
-$::direct = grep { /-direct/ } @ARGV;
-
-
-#
-#my $sysconf_network = "/etc/sysconfig/network";
-#my $sysconf_dhcpd = "/etc/sysconfig/dhcpd";
-#my $rc_firewall_generic = "/etc/rc.d/rc.firewall";
-#my $rc_firewall_drakgw = "/etc/rc.d/rc.firewall.inet_sharing";
-#my $rc_firewall_24 = "/etc/rc.d/rc.firewall.inet_sharing-2.4";
-#my $masq_file = "/etc/shorewall/masq";
-#my $cups_conf = "/etc/cups/cupsd.conf";
-#
-#my $shorewall = network::shorewall::read();
-#
-#- get network configuration.
-my $netc = {};
-my $intf = {};
-network::read_all_conf('', $netc, $intf);
-
-my $in = 'interactive'->vnew('su', 'default');
-$::Wizard_title = N("PXE Server Configuration");
-
-!$::isEmbedded && $in->isa('interactive::gtk') and $::isWizard = 1;
-
-#pur_gtk_mode() if $::isEmbedded && $in->isa('interactive::gtk');
-
-sub sys { system(@_) == 0 or log::l("[drakpxe] Warning, sys failed for $_[0]") }
-
-sub outpend {
- log::explanations("modified file $_[0]");
- my $f = shift; local *F; open F, ">>$f" or die "outpend in file $f failed: $!\n"; print F foreach @_;
-}
-
-sub start_daemons () {
- log::explanations("Starting daemons");
-
- system("/etc/rc.d/init.d/dhcpd status >/dev/null") == 0 and sys("/etc/rc.d/init.d/dhcpd stop");
-
- sys("/etc/rc.d/init.d/$_ start >/dev/null"), sys("/sbin/chkconfig --level 345 $_ on") foreach 'httpd', 'dhcpd';
-}
-
-sub stop_daemons () {
- log::explanations("Stopping daemons");
- foreach (qw(dhcpd httpd)) {
- system("/etc/rc.d/init.d/$_ status >/dev/null 2>/dev/null") == 0 and sys("/etc/rc.d/init.d/$_ stop");
- }
- sys("/sbin/chkconfig --level 345 $_ off") foreach 'dhcpd', 'httpd';
-}
-
-my $wait_configuring;
-
-sub quit_global {
- my ($in, $exitcode) = @_;
- $in->exit($exitcode);
- goto begin
-}
-
-sub fatal_quit ($) {
- log::l("[drakpxe] FATAL: $_[0]");
- undef $wait_configuring;
- $in->ask_warn('', $_[0]);
- quit_global($in, -1);
-}
-
-#my ($kernel_version) = c::kernel_version() =~ /(...)/;
-#log::l("[drakgw] kernel_version $kernel_version");
-#
-#$kernel_version >= 2.4 or fatal_quit(N("Sorry, we support only 2.4 kernels."));
-
-begin:
-
-#- **********************************
-#- * 0th step: verify if we have multiple network interface.
-
-$::Wizard_no_previous = 1;
-
-$::direct or $in->ask_okcancel(N("Installation Server Configuration"),
-N("You are about to configure your computer to install a PXE server as a DHCP server
-and a TFTP server to build an installation server.
-With that feature, other computers on your local network will be installable using from this computer.
-
-Make sure you have configured your Network/Internet access using drakconnect before going any further.
-
-Note: you need a dedicated Network Adapter to set up a Local Area Network (LAN)."), 1) or quit_global($in, 0);
-
-undef $::Wizard_no_previous;
-
-
-#- **********************************
-#- * 1st step: verify if we have multiple network interface.
-
-step_check_intf:
-
-my @intf = grep { exists $_->{NETWORK} } map {
- unless ($_->{NETWORK}) {
- foreach my $s (split "\n", `route`) {
- print STDERR "$s\n";
- $s =~ /^(\S+)\s+\S+\s+$_->{NETMASK}\s+.*$_->{DEVICE}/ and $_->{NETWORK} = $1;
- }
- } $_ } values %$intf;
-if (@intf < 1) {
- #- no interface already configured found, ask user to configure.
- $in->ask_warn(N("No network adapter on your system!"),
- N("No ethernet network adapter has been detected on your system. Please run the hardware configuration tool."));
- quit_global($in, 0);
-} elsif (@intf > 1) {
- #- there are more than one interface, we need to choose one of them.
- @intf = ($in->ask_from_listf(N("Choose the network interface"),
- N("Please choose which network interface will be used for the dhcp server."),
- sub { N("Interface %s (on network %s)", $_[0]{DEVICE}, $_[0]{NETWORK}) },
- \@intf,
- ) or goto begin);
-}
-
-
-#- **********************************
-#- * 3rd step: select installation directory to be used (if not present, next step
-#- will be creation and copy from existing one).
-
-step_ip_range:
-
-#- read current configuration, or create a default suitable automatically.
-my $dhcpd_conf = parse_dhcpd_conf("/etc/dhcpd.conf", {}, $netc, $intf[0]);
-
-#- get back default of ip.
-my $pool;
-foreach (@{$dhcpd_conf->{network}{pool}}) {
- exists $_->{allow}{$dhcpd_conf->{class_PXE}} and $pool = $_, last;
-}
-my ($start_ip, $end_ip) = @{$pool || { start_ip => join('.', (split '\.', $intf[0]{NETWORK})[0..2], 16),
- end_ip => join('.', (split '\.', $intf[0]{NETWORK})[0..2], 253) }}{qw(start_ip end_ip)};
-
-#- it become too complicated to handle address range, so ask user directly.
-$in->ask_from('DHCP Server Configuration',
- N("The DHCP server will allow other computer to boot using PXE in the given range of address.
-
-The network address is %s using a netmask of %s.
-
-", @{$intf[0]}{qw(NETWORK NETMASK)}), [ { label => N("The DHCP start ip"), val => \$start_ip, type => 'entry' },
- { label => N("The DHCP end ip"), val => \$end_ip, type => 'entry' }, ])
- or goto begin;
-
-
-#- **********************************
-#- * 3rd step: select installation directory to be used (if not present, next step
-#- will be creation and copy from existing one).
-
-step_install_dir:
-
-my $dir = "/export"; #- TODO change according configuration?
-
-$in->ask_from('Choose the installation image directory',
- N("Please indicate where the installation image will be available.
-
-If you do not have an existing directory, please copy the CD or DVD contents.
-
-"),
- [ { label => N("Installation image directory"), val => \$dir, type => 'entry' }, ])
- or goto step_ip_range;
-
-unless (-d $dir && -e "$dir/VERSION" && -d "$dir/isolinux" && -d "$dir/Mandrake/base") {
- $in->ask_warn(N("No image found"),
- N("No CD or DVD image found, please copy the installation program and rpm files."));
- goto step_install_dir;
-}
-
-#- **********************************
-#- * 4st step: ask user for auto installation file.
-
-step_auto_install:
-
-my $auto_inst_cfg = "Mandrake/base/auto_inst.cfg"; #- TODO change according configuration?
--e "$dir/$auto_inst_cfg" or $auto_inst_cfg = '';
-
-$in->ask_from('Choose auto installation',
- N("Please indicate where the auto_install.cfg file is located.
-
-Leave it blank if you do not want to set up automatic installation mode.
-
-"),
- [ { label => N("Location of auto_install.cfg file"), val => \$auto_inst_cfg, type => 'entry' }, ])
- or goto step_install_dir;
-
-#- now install packages...
-my %rpm2file = ('dhcp-server' => '/usr/sbin/dhcpd',
- 'pxe' => '/usr/sbin/pxe',
- 'tftp-server' => '/usr/sbin/in.tftpd',
- 'apache' => '/usr/sbin/httpd');
-
-#- first: try to install all in one step
-my @needed_to_install = grep { !-e $rpm2file{$_} } keys %rpm2file;
-@needed_to_install and $in->do_pkgs->install(@needed_to_install);
-#- second: try one by one if failure detected
-if (grep { !-e $rpm2file{$_} } keys %rpm2file) {
- foreach (keys %rpm2file) {
- -e $rpm2file{$_} or $in->do_pkgs->install($_);
- -e $rpm2file{$_} or fatal_quit(N("Problems installing package %s", $_));
- }
-}
-
-#- check if a pool already exist allowing PXE, else create one wich will be correct.
-if ($pool) {
- @{$pool}{qw(start_ip end_ip)} = ($start_ip, $end_ip);
-} else {
- $pool = { start_ip => $start_ip, end_ip => $end_ip };
- foreach (keys %{$dhcpd_conf->{class}}) {
- $pool->{$_ eq $dhcpd_conf->{class_PXE} || $_ eq 'Etherboot' ? 'allow' : 'deny'}{$_} = undef;
- }
- push @{$dhcpd_conf->{network}{pool}}, $pool;
-}
-build_dhcpd_conf($dhcpd_conf, "/etc/dhcpd.conf");
-
-#- make kernel and initrd available for initrd.
-mkdir "/var/lib/tftpboot/PXEClient/images";
-sys("cp", "-af", "$dir/isolinux/alt0", "/var/lib/tftpboot/PXEClient/images/");
-
-my $pxelinux_cfg = parse_pxelinux_cfg("/var/lib/tftpboot/PXEClient/pxelinux.cfg/default");
-my $label;
-foreach my $i (0..99) {
- $label = undef;
- foreach my $e (@{$pxelinux_cfg->{entry}}) {
- $e->{label} eq "halt$i" and $label = "halt$i", last;
- }
- defined $label or $label = "halt$i", last;
-}
-my $server = $intf[0]{IPADDR} || $netc->{HOSTNAME};
-push @{$pxelinux_cfg->{entry}}, { label => $label,
- kernel => "images/alt0/vmlinuz",
- append => "initrd=images/alt0/all.rdz ramdisk=32000 vga=788 ".($auto_inst_cfg ? "kickstart=$auto_inst_cfg " : "")."automatic=method:http,network:dhcp,interface:eth0,dns:$netc->{dnsServer},server:$server,directory:$dir root=/dev/ram3" };
-build_pxelinux_cfg($pxelinux_cfg, "/var/lib/tftpboot/PXEClient/pxelinux.cfg/default");
-
-#- make directory available for httpd.
-log::explanations("Linking $dir in /var/www/html to make it available");
-system "mkdir", "-p", "/var/www/html/$dir";
-rmdir "/var/www/html/$dir";
-symlink $dir, "/var/www/html/$dir";
-
-stop_daemons();
-start_daemons();
-
-#- sub for reading/writing dhcpd.conf and pxelinux.cfg/default...
-sub parse_dhcpd_conf {
- my ($file, undef, $netc, $intf) = @_;
- my (%dhcpd_conf, $pool);
- local (*F, $_);
-
- #- fake reading configuration from dhcpd.conf file which is really too complex for this tools.
- $dhcpd_conf{class_PXE} = 'PXE';
- $dhcpd_conf{class} = { PXE => undef, Etherboot => undef, known => undef };
- add2hash($dhcpd_conf{network} = { pool => [] }, $intf);
- add2hash($dhcpd_conf{network}, $netc);
-
- if (open F, $file) {
- while (<F>) {
- if (/^\s*pool\s*{/ .. /}/) {
- /^\s*range\s+(\S+)\s+(\S+)\s*;/ and ($pool->{start_ip}, $pool->{end_ip}) = ($1, $2);
- /^\s*(allow|deny)\s+members\s+of\s+"([^"]*)"\s*;/ and $pool->{$1}{$2} = undef;
- /}/ and do { push @{$dhcpd_conf{network}{pool}}, $pool; $pool = undef };
- }
- }
- close F;
- }
-
- \%dhcpd_conf;
-}
-
-sub build_dhcpd_conf {
- my ($dhcpd_conf, $file) = @_;
- local *F;
- my $server = $dhcpd_conf->{network}{IPADDR} || $dhcpd_conf->{network}{HOSTNAME};
- open F, ">$file" or return;
- log::explanations("Modified file $file");
- print F qq(# for explanation in french go to : http://www.delafond.org/traducmanfr/man/man5/dhcpd.conf.5.html
-ddns-update-style none;
-allow booting;
-allow bootp;
-
-# Your dhcp server is not master on your network !
-#not authoritative;
-# Your dhcpd server is master on your network !
-#authoritative;
-not authoritative;
-
-#Interface where dhcpd is active
-DHCPD_INTERFACE = "$dhcpd_conf->{network}{DEVICE}";
-
-# Definition of PXE-specific options
-# Code 1: Multicast IP address of bootfile
-# Code 2: UDP port that client should monitor for MTFTP responses
-# Code 3: UDP port that MTFTP servers are using to listen for MTFTP requests
-# Code 4: Number of secondes a client must listen for activity before trying
-# to start a new MTFTP transfer
-# Code 5: Number of secondes a client must listen before trying to restart
-# a MTFTP transfer
-
-# define Option for the PXE class
-option space PXE;
-option PXE.mtftp-ip code 1 = ip-address;
-option PXE.mtftp-cport code 2 = unsigned integer 16;
-option PXE.mtftp-sport code 3 = unsigned integer 16;
-option PXE.mtftp-tmout code 4 = unsigned integer 8;
-option PXE.mtftp-delay code 5 = unsigned integer 8;
-option PXE.discovery-control code 6 = unsigned integer 8;
-option PXE.discovery-mcast-addr code 7 = ip-address;
-
-#Define options for pxelinux
-option space pxelinux;
-option pxelinux.magic code 208 = string;
-option pxelinux.configfile code 209 = text;
-option pxelinux.pathprefix code 210 = text;
-option pxelinux.reboottime code 211 = unsigned integer 32;
-site-option-space "pxelinux";
-# These lines should be customized to your setup
-#option pxelinux.configfile "configs/common";
-#option pxelinux.pathprefix "/pxelinux/files/";
-#filename "/pxelinux/pxelinux.bin";
-
-option pxelinux.magic f1:00:74:7e;
-option pxelinux.reboottime 30;
-#if exists dhcp-parameter-request-list {
- # Always send the PXELINUX options
-# append dhcp-parameter-request-list 208, 209, 210, 211;
-# append dhcp-parameter-request-list 208,211;
-# }
-
-#Class that determine the options for Etherboot 5.x requests
-class "Etherboot" {
-
-#if The vendor-class-identifier equal Etherboot-5.0
-match if substring (option vendor-class-identifier, 0, 13) = "Etherboot-5.0";
-
-# filename define the file retrieve by the client, there nbgrub
-# our tftp is chrooted so is just the path to the file
-filename "/etherboot/nbgrub";
-
-#Used by etherboot to detect a valid pxe dhcp server
-option vendor-encapsulated-options 3c:09:45:74:68:65:72:62:6f:6f:74:ff;
-
-# Set the "vendor-class-identifier" field to "PXEClient" in dhcp answer
-# if this field is not set the pxe client will ignore the answer !
-option vendor-class-identifier "Etherboot-5.0";
-
-vendor-option-space PXE;
-option PXE.mtftp-ip 0.0.0.0;
-
-# IP of you TFTP server
-next-server $server;
-}
-
-
-# create the Class PXE
-class "PXE" {
-# if the "vendor-class-identifier" is set to "PXEClient" in the client dhcp request
-match if substring(option vendor-class-identifier, 0, 9) = "PXEClient";
-
-# filename define the file retrieve by the client, there pxelinux.0
-# our tftp is chrooted so is just the path to the file
-# If you prefer use grub, use pxegrub compiled for your ethernet card.
-#filename "/PXEClient/pxegrub";
-filename "/PXEClient/pxelinux.0";
-
-# Set the "vendor-class-identifier" field to "PXEClient" in dhcp answer
-# if this field is not set the pxe client will ignore the answer !
-option vendor-class-identifier "PXEClient";
-
-
-vendor-option-space PXE;
-option PXE.mtftp-ip 0.0.0.0;
-
-# IP of you TFTP server
-next-server $server;
-}
-
-# the class know exist just for deny the response to other DHCP request
-class "known" {
- match hardware;
- one-lease-per-client on;
- ddns-updates on;
- ddns-domainname = "$dhcpd_conf->{network}{DOMAINNAME}";
- option domain-name "$dhcpd_conf->{network}{DOMAINNAME}";
- option domain-name-servers $dhcpd_conf->{network}{dnsServer};
- ddns-hostname = pick-first-value(ddns-hostname, option host-name);
- option fqdn.no-client-update on;
- set vendor_class_identifier = option vendor-class-identifier;
-}
-
-# Tags uses by setup_node_mac_to_dhcp
-# TAG: NODE_LIST_BEGIN
-
-# TAG: NODE_LIST_END
-shared-network "mynetwork" {
- subnet $dhcpd_conf->{network}{NETWORK} netmask $dhcpd_conf->{network}{NETMASK} {
- option subnet-mask $dhcpd_conf->{network}{NETMASK};
- option routers $dhcpd_conf->{network}{GATEWAY};
- default-lease-time 28800;
- max-lease-time 86400;
- option domain-name "$dhcpd_conf->{network}{DOMAINNAME}";
- option domain-name-servers $dhcpd_conf->{network}{dnsServer};
-# Used by clusterautosetup-client to find its server
- next-server $server;
-
-);
- foreach (@{$dhcpd_conf->{network}{pool}}) {
- print F " pool {
- range $_->{start_ip} $_->{end_ip};
-";
- print F " allow members of \"$_\";\n" foreach keys %{$_->{allow}};
- print F " deny members of \"$_\";\n" foreach keys %{$_->{deny}};
- print F " }\n";
- }
-print F qq(
-
-# pool {
-# range 192.168.200.200 192.168.200.254;
-# give an address of the the pool for PXE client and deny the other
-#allow members of "PXE";
-#deny members of "known";
-#allow members of "Etherboot";
-# }
- }
-}
-);
- close F;
-}
-
-sub parse_pxelinux_cfg {
- my ($file) = @_;
- my (%pxelinux_cfg, $entry);
- local (*F, $_);
-
- if (open F, $file) {
- while (<F>) {
- chomp;
- s/#.*//; next if /^\s*$/;
- if (/^\s*(PROMPT|DEFAULT|DISPLAY|TIMEOUT)\s+(.*)/i) {
- $pxelinux_cfg{$1} = $2;
- } elsif (/^\s*label\s+(.*)/i) {
- $entry and push @{$pxelinux_cfg{entry}}, $entry;
- $entry = { label => $1 },
- } elsif (/^\s*(LOCALBOOT|KERNEL|APPEND)\s+(.*)/i) {
- $entry->{$1} = $2;
- } else {
- log::l("ignoring line in file $file due to parsing error");
- }
- }
- $entry and push @{$pxelinux_cfg{entry}}, $entry;
- close F;
- }
- #- try to fix bad file (first version of drakpxe for example).
- my %default_pxelinux_cfg = ( PROMPT => 1,
- DEFAULT => "local",
- DISPLAY => "messages",
- TIMEOUT => 50,
- entry => [ { label => "local",
- LOCALBOOT => 0 } ],
- );
- foreach (qw(PROMPT DEFAULT DISPLAY TIMEOUT entry)) {
- length $pxelinux_cfg{$_} > 0 or $pxelinux_cfg{$_} = $default_pxelinux_cfg{$_};
- }
- \%pxelinux_cfg;
-}
-
-sub build_pxelinux_cfg {
- my ($pxelinux_cfg, $file) = @_;
- local *F;
- open F, ">$file" or return;
- log::explanations("Modified file $file");
- foreach (keys %$pxelinux_cfg) {
- /^entry$/ and next;
- print F "$_ $pxelinux_cfg->{$_}\n";
- }
- foreach my $e (@{$pxelinux_cfg->{entry}}) {
- print F "label $e->{label}\n";
- foreach (keys %$e) {
- /^label$/ and next;
- print F " $_ $e->{$_}\n";
- }
- }
- close F;
-}
-
diff --git a/perl-install/standalone/draksec b/perl-install/standalone/draksec
deleted file mode 100755
index 0117e11c7..000000000
--- a/perl-install/standalone/draksec
+++ /dev/null
@@ -1,252 +0,0 @@
-#!/usr/bin/perl
-#*****************************************************************************
-#
-# Copyright (c) 2002 Christian Belisle (cbelisle@mandrakesoft.com)
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License version 2, as
-# published by the Free Software Foundation.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-#*****************************************************************************
-
-use strict;
-use lib qw(/usr/lib/libDrakX);
-use common;
-use standalone;
-use vars qw($MODE %options);
-use ugtk2 qw(:helpers :wrappers :ask :create);
-use run_program;
-use security::level;
-use security::msec;
-use security::help;
-
-#$MODE = 'basic';
-#$0 =~ /draksec-firewall$/ and $MODE = 'firewall';
-#$0 =~ /draksec-perms$/ and $MODE = 'perms';
-
-#/^-?-(\S+)$/ and $options{$1} = 1 foreach @ARGV;
-
-
-my $w;
-
-# factorize this with rpmdrake and harddrake2
-sub wait_msg {
- my $mainw = ugtk2->new('wait', (modal => 1, if_(!$::isEmbedded, transient => $w->{rwindow})));
- my $label = new Gtk2::Label($_[0]);
- $mainw->{window}->add($label);
- $mainw->{window}->show_all;
- $mainw->{window}->realize;
- $label->signal_connect(expose_event => sub { $mainw->{displayed} = 1 });
- $mainw->sync until $mainw->{displayed};
- $mainw->show;
- gtkset_mousecursor_wait($mainw->{rwindow}->window);
- $mainw->flush;
- $mainw;
-}
-
-sub remove_wait_msg { $_[0]->destroy }
-
-sub basic_seclevel_explanations {
- my $text = new Gtk2::TextView;
- $text->set_editable(0);
- gtktext_insert($text,
- formatAlaTeX(N("Standard: This is the standard security recommended for a computer that will be used to connect
- to the Internet as a client.
-
-High: There are already some restrictions, and more automatic checks are run every night.
-
-Higher: The security is now high enough to use the system as a server which can accept
- connections from many clients. If your machine is only a client on the Internet, you
- should choose a lower level.
-
-Paranoid: This is similar to the previous level, but the system is entirely closed and security
- features are at their maximum
-
-Security Administrator:
- If the 'Security Alerts' option is set, security alerts will be sent to this user (username or
- email)")));
-
- gtkpack_(gtkshow(new Gtk2::HBox(0, 0)), 1, $text);
-}
-
-sub new_editable_combo {
- my ($string_list, $default_value) = @_;
- my $w = new Gtk2::Combo();
- $w->entry->set_editable(0);
- $w->set_popdown_strings(@$string_list) unless is_empty_array_ref $string_list;
- $w->entry->set_text($default_value) if $default_value;
- $w;
-}
-
-sub set_help_tip {
- my ($entry, $default, $opt) = @_;
- my $help = $security::help::help{$opt};
- gtkset_tip(new Gtk2::Tooltips, $entry, formatAlaTeX($help) . "\n" . N("(default value: %s)", $default));
-}
-
-my $msec = new security::msec;
-$w = ugtk2->new('draksec');
-my $window = $w->{window};
-
-############################ MAIN WINDOW ###################################
-# Set different options to Gtk2::Window
-unless ($::isEmbedded) {
- $w->{rwindow}->set_position('center');
- $w->{rwindow}->set_title("DrakSec");
- $window->set_size_request(598, 590);
-}
-
-# Connect the signals
-$window->signal_connect('delete_event', sub { $window->destroy() });
-$window->signal_connect('destroy', sub { ugtk2->exit() });
-
-$window->add(my $vbox = gtkshow(new Gtk2::VBox(0, 0)));
-
-# Create the notebook (for bookmarks at the top)
-my $notebook = create_notebook();
-
-my $common_opts = { col_spacings => 10, row_spacings => 5 };
-
-######################## BASIC OPTIONS PAGE ################################
-my $seclevel_entry;
-
-$notebook->append_page(gtkshow(gtkpack(new Gtk2::VBox(0, 0),
- basic_seclevel_explanations($msec),
- create_packtable($common_opts,
- [
- do {
- my @sec_levels = security::level::get_common_list();
- my $current_level = security::level::get_string();
-
- push(@sec_levels, $current_level) unless member($current_level, @sec_levels);
- $seclevel_entry = new_editable_combo(\@sec_levels, $current_level);
-
- new Gtk2::Label(N("Security Level:")), $seclevel_entry;
- }
- ],
- [ new Gtk2::Label(N("Security Alerts:")),
- my $secadmin_check = new Gtk2::CheckButton ],
- [ new Gtk2::Label(N("Security Administrator:")),
- my $secadmin_entry = new Gtk2::Entry($msec->get_check_value("MAIL_USER")) ]))),
- new Gtk2::Label(N("Basic")));
-
-$secadmin_check->set_active(1) if $msec->get_check_value("MAIL_WARN") eq "yes";
-
-######################### NETWORK & SYSTEM OPTIONS #########################
-my @yesno_choices = qw(yes no default ignore);
-my @alllocal_choices = qw(ALL LOCAL NONE default);
-my @all_choices = (@yesno_choices, @alllocal_choices);
-my %options_values;
-my $help_msg = N("The following options can be set to customize your\nsystem security. If you need an explanation, look at the help tooltip.\n");
-
-foreach ([ 'network', N("Network Options") ], [ 'system', N("System Options") ]) {
- my ($domain, $label) = @$_;
- my %values;
- $notebook->append_page(gtkshow(create_scrolled_window(gtkpack_(new Gtk2::VBox(0, 0),
- 0, new Gtk2::Label($help_msg),
- 1, create_packtable($common_opts,
- map {
- my $i = $_;
-
- my $entry;
- my $default = $msec->get_function_default($i);
- if (member($default, @all_choices)) {
- $values{$i} = new_editable_combo(member($default, @yesno_choices) ? \@yesno_choices : member($default, @alllocal_choices) ? \@alllocal_choices : ());
- $entry = $values{$i}->entry;
- } else {
- $values{$i} = new Gtk2::Entry();
- $entry = $values{$i};
- }
- $entry->set_text($msec->get_function_value($i));
- set_help_tip($entry, $default, $i);
- [ new Gtk2::Label($i), $values{$i} ];
- } sort $msec->list_functions($domain))))),
- new Gtk2::Label($label));
- $options_values{$domain} = \%values;
-}
-
-######################## PERIODIC CHECKS ###################################
-my %security_checks_value;
-
-$notebook->append_page(gtkshow(create_scrolled_window(gtkpack_(new Gtk2::VBox(0, 0),
- 0, new Gtk2::Label($help_msg),
- 1, create_packtable($common_opts,
- map {
- my $i = $_;
- $security_checks_value{$i} = new_editable_combo([ 'yes', 'no', 'default'], $msec->get_check_value($i));
- my $entry = $security_checks_value{$i}->entry;
- set_help_tip($entry, $msec->get_check_default($i), $i);
- [ gtkshow(new Gtk2::Label(translate($i))), $security_checks_value{$i} ];
- } sort $msec->list_checks)))),
- new Gtk2::Label(N("Periodic Checks")));
-
-
-####################### OK CANCEL BUTTONS ##################################
-my $bok = gtksignal_connect(new Gtk2::Button(N("Ok")),
- 'clicked' => sub {
- my $seclevel_value = $seclevel_entry->entry->get_text();
- my $secadmin_check_value = $secadmin_check->get_active();
- my $secadmin_value = $secadmin_entry->get_text();
- my $w;
-
- log::explanations("Configuring msec");
-
- if ($seclevel_value ne security::level::get_string()) {
- $w = wait_msg(N("Please wait, setting security level..."));
- log::explanations("Setting security level to $seclevel_value");
- security::level::set(security::level::from_string($seclevel_value));
- remove_wait_msg($w);
- }
-
- $w = wait_msg(N("Please wait, setting security options..."));
- log::explanations("Setting security administrator option");
- $msec->set_check('MAIL_WARN', $secadmin_check_value == 1 ? 'yes' : 'no');
-
- if ($secadmin_value ne $msec->get_check_value('MAIL_USER') && $secadmin_check_value) {
- log::explanations("Setting security administrator contact");
- $msec->set_check('MAIL_USER', $secadmin_value);
- }
-
- log::explanations("Setting security periodic checks");
- foreach my $key (keys %security_checks_value) {
- $msec->set_check($key, $security_checks_value{$key}->entry->get_text());
- }
- $msec->apply_checks;
-
- foreach my $domain (keys %options_values) {
- log::explanations("Setting msec functions related to $domain");
- foreach my $key (keys %{$options_values{$domain}}) {
- my $opt = $options_values{$domain}{$key};
- $msec->set_function($key, $opt =~ /Combo/ ? $opt->entry->get_text() : $opt->get_text());
- }
- }
- $msec->apply_functions;
- log::explanations("Applying msec changes");
- run_program::rooted($::prefix, "/usr/sbin/msec");
-
- remove_wait_msg($w);
-
- ugtk2->exit(0);
- });
-
-my $bcancel = gtksignal_connect(new Gtk2::Button(N("Cancel")),
- 'clicked' => sub { ugtk2->exit(0) });
-gtkpack_($vbox,
- 1, gtkshow($notebook),
- 0, gtkadd(gtkadd(gtkshow(new Gtk2::HBox(0, 0)),
- $bok),
- $bcancel));
-$bcancel->can_default(1);
-$bcancel->grab_default();
-
-$w->main;
-ugtk2->exit(0);
diff --git a/perl-install/standalone/draksound b/perl-install/standalone/draksound
deleted file mode 100755
index 5f27779fb..000000000
--- a/perl-install/standalone/draksound
+++ /dev/null
@@ -1,58 +0,0 @@
-#!/usr/bin/perl
-# DrakxSound
-# Copyright (C) 2002 MandrakeSoft (tvignaud@mandrakesoft.com)
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-use lib qw(/usr/lib/libDrakX);
-
-use standalone; #- warning, standalone must be loaded very first, for 'explanations'
-
-use strict;
-use interactive;
-use common;
-use harddrake::sound;
-use modules;
-use detect_devices;
-
-my $in = 'interactive'->vnew('su');
-
-modules::mergein_conf('/etc/modules.conf');
-
-my @devices = grep { $_->{media_type} eq 'MULTIMEDIA_AUDIO' } detect_devices::probeall(1);
-if (@devices) {
- # TODO: That need some work for multiples sound cards
- map_index {
- # allocate sound-slot in the same order as install2.pm
- # fill $device->{driver} with the right sound-slot-XX or default driver if missing sound-slot [real fix'll be in harddrake service]
- my $driver = modules::get_alias("sound-slot-$::i");
- $driver = modules::get_alias($driver) if $driver =~ /sound-card/; # alsaconf ...
- $_->{current_driver} = $driver if $driver;
- harddrake::sound::config($in, $_);
- } modules::probe_category('multimedia/sound');
-} else {
- $in->ask_warn(N("No Sound Card detected!"),
- formatAlaTeX(N("No Sound Card has been detected on your machine. Please verify that a Linux-supported Sound Card is correctly plugged in.
-
-
-You can visit our hardware database at:
-
-
-http://www.linux-mandrake.com/en/hardware.php3") .
-N("\n\n\nNote: if you've an ISA PnP sound card, you'll have to use the sndconfig program. Just type \"sndconfig\" in a console.")));
-}
-
-modules::write_conf;
-$in->exit(0);
diff --git a/perl-install/standalone/draksplash b/perl-install/standalone/draksplash
deleted file mode 100755
index b0d731877..000000000
--- a/perl-install/standalone/draksplash
+++ /dev/null
@@ -1,558 +0,0 @@
-#!/usr/bin/perl
-
-use strict;
-use lib qw(/usr/lib/libDrakX);
-use standalone;
-use common;
-use ugtk2 qw(:helpers :wrappers :create);
-use interactive;
-
-#- convenience variables for true and false
-my $true = 1;
-
-
-my $in = 'interactive'->vnew('su', 'default');
-
-my $window = ugtk2->new;
-$window->{rwindow}->signal_connect(delete_event => \&CloseAppWindow);
-
-#- verification of package image magik
-unless ($in->do_pkgs->is_installed('ImageMagick')) {
- $in->ask_okcancel(N("Error"), N("package 'ImageMagick' is required to be able to complete configuration.\nClick \"Ok\" to install 'ImageMagick' or \"Cancel\" to quit"))
- and $in->do_pkgs->install('ImageMagick')
- or &CloseAppWindow;
-}
-
-#- application vars
-my $tmp_path = '/tmp/draksplash/';
-! -d $tmp_path and mkdir($tmp_path);
-my $thm_path = '/usr/share/bootsplash/themes/';
-my $thm_conf_path = '/etc/bootsplash/themes/';
-
-my $prev_window;
-my $pix;
-
-my $boot_conf_path = '/etc/bootsplash/themes/';
-my %font_size = ('h' =>16, 'w' =>8);
-my %theme = ('name' => 'new_theme',
- 'res' => {
- 'res' => '800x600',
- 'h' => '600',
- 'w' => '800',
- },
- 'boot_conf' => {
- 'tx' => 0 ,
- 'ty' => 0 ,
- 'tw' => 0 ,
- 'th' => 0 ,
- 'px' => 0 ,
- 'py' => 0 ,
- 'pw' => 0 ,
- 'ph' => 0 ,
- 'pc' => '0x21459d',
- },
- 'boot_img' => ''
- );
-
-my %scale_size = ('tx' => ($theme{res}{w} / $font_size{w}),
- 'ty' => ($theme{res}{h} / $font_size{h}),
- 'tw' => ($theme{res}{w} / $font_size{w}),
- 'th' => ($theme{res}{h} / $font_size{h}),
- 'px' => $theme{res}{w},
- 'py' => $theme{res}{h},
- 'pw' => $theme{res}{w},
- 'ph' => $theme{res}{h},
- );
-
-my %first = ('frame' => new Gtk2::Frame(N("first step creation")),
- 'widget' => {
- 'label' => {
- 'res' => N("final resolution"),
- 'file' => N("choose image file"),
- 'name' => N("Theme name")
- },
- 'button' => {
- #'boot_conf' => N("Make bootsplash step 2"),
- #'lilo_conf' => N("Go to lilosplash configuration"),
- 'file' => N("Browse"),
- },
- 'combo' => {
- 'res' => ['800x600', '1024x768', '1280x1024'],
- 'name' => [ $theme{name} , &giv_exist_thm ]
- }
- },
- 'pos' => [ 'name', 'res', 'file', 'boot_conf', #'save', #'kill'
- ],
- );
-my %boot_conf_frame = ('frame' => new Gtk2::Frame(N("Configure bootsplash picture")),
- 'widget' => {
- 'label' => {
- 'tx' => N("x coordinate of text box\nin number of characters"),
- 'ty' => N("y coordinate of text box\nin number of characters"),
- 'tw' => N("text width"),
- 'th' => N("text box height"),
- 'px' => N("the progress bar x coordinate\nof its upper left corner"),
- 'py' => N("the progress bar y coordinate\nof its upper left corner"),
- 'pw' => N("the width of the progress bar"),
- 'ph' => N("the height of the progress bar"),
- 'pc' => N("the color of the progress bar")
- },
- #- must set scale values to true to get them created by mk_frame
- 'scale' => {
- 'tx' => 1,
- 'ty' => 1,
- 'tw' => 1,
- 'th' => 1,
- 'px' => 1,
- 'py' => 1,
- 'pw' => 1,
- 'ph' => 1,
- },
- 'button' => {
- #'annul' => N("Go back"),
- 'prev' => N("Preview"),
- 'kill' => N("Quit"),
- 'save' => N("Save theme"),
- 'pc' => N("Choose color"),
- },
- 'check' => {
- 'logo' => N("Display logo on Console"),
- 'quiet' => N("Make kernel message quiet by default"),
- },
- },
- 'pos' => [ 'tx 1' ,
- 'ty 1' ,
- 'tw 1' ,
- 'th 1' ,
- 'px 1' ,
- 'py 1' ,
- 'pw 1' ,
- 'ph 1' ,
- 'pc' ,
- 'logo',
- 'quiet',
- 'annul',
- 'prev',
- 'save' ,
- 'kill',
- ],
- );
-#- var action is used to hide/show the correct frame
-my @action_frame = (\%boot_conf_frame , \%first);
-my $VB2 = new Gtk2::VBox(0,5);
-my $first_vbox = new Gtk2::VBox(0,5);
-
-&mk_frame($VB2, \%first);
-#****************************- Signal event actions
-#- change resolution
-$first{widgets}{combo}{res}->entry->signal_connect(changed => sub {
- $theme{res}{res} = $first{widgets}{combo}{res}->entry->get_text;
- ($theme{res}{w}, $theme{res}{h}) = $theme{res}{res} =~ /([^x]+)x([^x]+)/;
- &set_scale_size;
- $boot_conf_frame{frame}->destroy;
- $boot_conf_frame{frame} = new Gtk2::Frame(N("Configure bootsplash picture"));
- &make_boot_frame;
- $first_vbox->add($boot_conf_frame{frame});
- member($theme{name}, &giv_exist_thm) and &thm_in_this_res and &get_this_thm_res_conf or $in->ask_warn(N("Notice"), N("This theme does not yet have a bootsplash in %s !", $theme{res}{res}));
- });
-#- go to bootsplash configuration step 2
-#$first{widgets}{button}{boot_conf}->signal_connect(clicked => sub{show_act(\%boot_conf_frame) } );
-#- image file selection for new theme
-$first{widgets}{button}{file}->signal_connect(clicked => sub {
- my $file_dialog = new Gtk2::FileSelection('choose image');
- $file_dialog->set_filename($first{widgets}{label}{file}->get ne N("choose image file") ? $first{widgets}{label}{file}->get : '~/');
- $file_dialog->cancel_button->signal_connect(clicked => sub { $file_dialog->destroy });
- $file_dialog->ok_button->signal_connect(clicked => sub { $first{widgets}{label}{file}->set_text($file_dialog->get_filename); $file_dialog->destroy });
- $file_dialog->show;
-});
-#- changing theme name
-$first{widgets}{combo}{name}->entry->signal_connect(changed => sub { &get_this_thm_res_conf; $theme{name} = $first{widgets}{combo}{name}->entry->get_text });
-#**************************************************
-
-
-$first_vbox->add($first{frame});
-$first_vbox->add($boot_conf_frame{frame});
-&make_boot_frame;
-
-# set window attributes and show it
-
-unless ($::isEmbedded) {
- $window->{rwindow}->set_border_width(5);
- $window->{window}->add($first_vbox);
- $window->{rwindow}->set_position('center');
- $window->{rwindow}->show_all();
-#&show_act(\%first);
-}
-
-# Gtk event loop
-$window->main;
-
-# Should never get here
-ugtk2->exit(0);
-
-### Callback function to close the window
-sub CloseAppWindow {
- ugtk2->exit(0);
-}
-
-#- ====## used funtions ##=====
-
-#- Desc => write config file for boot theme and copy image in the right location
-sub write_boot_thm {
- my $_w = $in->wait_message('', N("saving Bootsplash theme..."));
- &set_thm_values;
- my $logo = $boot_conf_frame{widgets}{check}{logo}->get_active ? 'yes' : 'no';
- my $quiet = $boot_conf_frame{widgets}{check}{quiet}->get_active ? 'yes' : 'no';
- my $globalconf_file = $thm_conf_path.$theme{name}.'/global.config';
- my $cfg_file = $thm_conf_path.$theme{name}.'/cfg/bootsplash-'.$theme{res}{res}.'.cfg';
- #- verify all dir exists or create them
- -d $thm_conf_path.$theme{name}
- or mkdir($thm_conf_path.$theme{name});
- -d $thm_conf_path.$theme{name}.'/cfg'
- or mkdir($thm_conf_path.$theme{name}.'/cfg');
- -d $thm_path.$theme{name}
- or mkdir($thm_path.$theme{name});
- -d $thm_path.$theme{name}.'/images/'
- or mkdir($thm_path.$theme{name}.'/images/');
- #- copy image to dest by convert
- system('convert -scale '.$theme{res}{res} . ' ' . $first{widgets}{label}{file}->get.' '.$thm_path.$theme{name}.'/images/bootsplash-'.$theme{res}{res}.'.jpg');
- system('/usr/share/bootsplash/scripts/rewritejpeg '.$thm_path.$theme{name}.'/images/bootsplash-'.$theme{res}{res}.'.jpg');
- #- write conf files
- my $cfg_cont = '# This is the configuration file for the '.$theme{res}{res}.' bootsplash picture
-# this file is necessary to specify the coordinates of the text box on the
-# splash screen.
-
-# tx is the x coordinate of the text window in characters. default is 24
-# multiply width font width for coordinate in pixels.
-tx='.$theme{boot_conf}{tx}.'
-
-# ty is the y coordinate of the text window in characters. default is 14
-ty='.$theme{boot_conf}{ty}.'
-
-# tw is the width of the text window in characters. default is 130
-# note: this should at least be 80 as on the standard linux text console
-tw='.$theme{boot_conf}{tw}.'
-
-# th is the height of the text window in characters. default is 44
-# NOTE: this should at least be 25 as on the standard linux text console
-th='.$theme{boot_conf}{th}.'
-
-# px is the progress bar x coordinate of its upper left corner
-px='.$theme{boot_conf}{px}.'
-
-# py is the progress bar y coordinate of its upper left corner
-py='.$theme{boot_conf}{py}.'
-
-# pw is the with of the progress bar
-pw='.$theme{boot_conf}{pw}.'
-
-# ph is the height of the progress bar
-ph='.$theme{boot_conf}{ph}.'
-
-# pc is the color of the progress bar
-pc='.$theme{boot_conf}{pc}.''
-;
- my $globalconf_cont = '# Display logo on console.
-LOGO_CONSOLE='.$logo.'
-
-# Make kernel message quiet by default.
-QUIET='.$quiet
-;
- output($globalconf_file, $globalconf_cont);
- output($cfg_file,$cfg_cont);
-}
-
-
-#- Desc => read the current bootsplash theme configuration if exist
-sub get_this_thm_res_conf {
- member($first{widgets}{combo}{name}->entry->get_text , &giv_exist_thm)
- and $theme{name} = $first{widgets}{combo}{name}->entry->get_text
- and &thm_in_this_res(1)
- and &read_boot_conf;
- -f $thm_path.$theme{name}."/images/bootsplash-".$theme{res}{res}.".jpg"
- and $first{widgets}{label}{file}->set_text($thm_path.$theme{name}."/images/bootsplash-".$theme{res}{res}.".jpg");
- return 1;
-}
-
-sub read_boot_conf {
- chdir($thm_conf_path);
- my $line;
- if (-f $theme{name}.'/cfg/bootsplash-'.$theme{res}{res}.'.cfg') {
- local *CFG;
- open CFG , $theme{name}.'/cfg/bootsplash-'.$theme{res}{res}.'.cfg';
- while ($line = <CFG>) {
- $line =~ m/^([a-z][a-z])=([^\n]+)/
- and $theme{boot_conf}{$1} = $2;
- }
- close CFG;
- &set_scale_values;
- } else {
- return 0;
- }
-}
-
-my %adj;
-sub set_scale_values {
- foreach (keys %{$theme{boot_conf}}) {
- $adj{$_} and $adj{$_}->set_value($theme{boot_conf}{$_});
- }
-}
-
-#- Desc => check if this theme is available in the current resolution else
-#- change the current resolution or display a ask_warn box
-#- Args => ø
-#- return=> (bool)
-sub thm_in_this_res {
- my ($check_res) = @_;
- (-f $thm_path.$theme{name}."/images/bootsplash-".$theme{res}{res}.".jpg") ? return 1 : $check_res == 1 ? return &which_res_exist : return 0;
-}
-
-sub which_res_exist {
- chdir($thm_path.$theme{name}."/images/");
- my $is_ok = 0;
- foreach (@{$first{widget}{combo}{res}}) {
- -f "bootsplash-$_.jpg"
- and $is_ok = 1
- and $first{widgets}{combo}{res}->entry->set_text($_)
- and last;
-
- }
- $is_ok == 1 or $in->ask_warn(N("Notice"), N("This theme does not yet have a bootsplash in %s !", $theme{res}{res})) and return 0;
- return 1;
-}
-
-#- Desc => retrieve all installed theme
-#- Args => ø
-#- Return=> @arr of available theme
-sub giv_exist_thm {
- chdir($thm_path);
- my @thms_dirs;
- foreach (glob("*")) {
- -d $_ && m/^[^.]/
- and push @thms_dirs, $_;
- }
- return @thms_dirs;
-}
-
-#- Desc => show only the right frame
-#- Args => action(str)
-#- Return=> (bool)
-sub show_act {
-# my ($action) = @_;
-# foreach (@action_frame){
-# if($_ == $action){
-# $_->{frame}->show_all ;
-# }else{
-# $_->{frame}->hide;
-# }
-# }
-}
-
-#- Desc => just add tooltips
-#- Args => name of widget(str) and frame to work on it (\%hash)
-sub tool_tip {
- my ($name , $ref) = @_;
- foreach (keys %{$ref->{widget}}) {
- $_ eq 'tooltip' and next;
- if ($ref->{widget}{$_}{$name}) {
- ! $adj{$name.'_tip'} and $adj{$name.'_tip'} = new Gtk2::Tooltips();
- $adj{$name.'_tip'}->set_tip($ref->{widgets}{$_}{$name}, $ref->{widget}{tooltip}{$name}, '');
- }
- }
-}
-
-my %hboxes;
-
-#- Desc => just prepare widgets for a fram hash
-#- Args => $box(a Vbox widget to contain all widgets), \%frame (hash with complete definition of the frame)
-#- Return=> all hash{widgets} are created and packed in $box
-sub mk_frame {
- my ($box , $ref) = @_;
- foreach my $pos (@{$ref->{pos}}) {
- $pos =~ m/^(\w+)(\s+)?(\w+)?$/;
- my $key = $1.'hb';
- #- open a new hbox
- $hboxes{$key} = new Gtk2::HBox($3 ? 1 : 0, 5);
- #- look for label
- $ref->{widget}{label}{$1}
- and $ref->{widgets}{label}{$1} = new Gtk2::Label($ref->{widget}{label}{$1})
- and $hboxes{$key}->add($ref->{widgets}{label}{$1});
- #- look for scale
- $ref->{widget}{scale}{$1}
- and $ref->{widgets}{scale}{$1} = new Gtk2::HScale($adj{$1} = new Gtk2::Adjustment(0, 0, $scale_size{$1}, 1, 10, 0))
- and $hboxes{$key}->add($ref->{widgets}{scale}{$1})
- and $ref->{widgets}{scale}{$1}->set_digits(0);
- $adj{$1} and $adj{$1}->set_value($theme{boot_conf}{$1});
- #- look for combo
- my @popdown;
- $ref->{widget}{combo}{$1}
- and @popdown = @{$ref->{widget}{combo}{$1}}
- and $ref->{widgets}{combo}{$1} = new Gtk2::Combo
- and $hboxes{$key}->add($ref->{widgets}{combo}{$1})
- and $ref->{widgets}{combo}{$1}->set_popdown_strings(@popdown);
- #- look for checkbox
- $ref->{widget}{check}{$1}
- and $ref->{widgets}{check}{$1} = new Gtk2::CheckButton($ref->{widget}{check}{$1})
- and $hboxes{$key}->add($ref->{widgets}{check}{$1})
- and $ref->{widgets}{check}{$1}->set_active(1);
- #- look for button
- $ref->{widget}{button}{$1}
- and $ref->{widgets}{button}{$1} = new Gtk2::Button($ref->{widget}{button}{$1})
- and $hboxes{$key}->add($ref->{widgets}{button}{$1});
- #- look for tooltips
- $ref->{widget}{tooltip}{$1} and &tool_tip($1, \%{$ref});
- $box->add($hboxes{$key});
- }
- $ref->{frame}->add($box);
-}
-
-#- Desc => take a decimal value between 0 to 255 and return the corresponding hexadecimal value
-sub dec2hex {
- my ($dec) = @_;
- my @dec_hex = (0..9, 'A', 'B', 'C', 'D', 'E', 'F');
- my $int;
- my $float;
- $dec = $dec/16;
- $int = int($dec);
- $float = $dec_hex[int(($dec-$int)*16)];
- $int = $dec_hex[$int];
-
- return "$int$float";
-}
-
-#- Desc => prepare and set all signal_connect for boot_frame widget
-sub make_boot_frame {
- my $VB = new Gtk2::VBox(0,5);
- &mk_frame($VB, \%boot_conf_frame);
- #- open a color choose box
- $boot_conf_frame{widgets}{button}{pc}->signal_connect(clicked => sub {
- my $color = new Gtk2::ColorSelectionDialog(N("ProgressBar color selection"));
- $theme{boot_conf}{pc} =~ m/0x(.{2})(.{2})(.{2})/;
- my @rgb = map { hex($_)/255 } ($1 ,$2, $3);
- $color->colorsel->set_color(@rgb);#$theme{boot_conf}{pc});
- $color->cancel_button->signal_connect(clicked => sub { $color->destroy });
- $color->ok_button->signal_connect(clicked => sub {
- @rgb = $color->colorsel->get_color();
- @rgb = map { dec2hex($_*255) } @rgb;
- $theme{boot_conf}{pc} = "0x$rgb[0]$rgb[1]$rgb[2]";
- $color->destroy;
- });
- $color->show;
- });
- #- quit button
- $boot_conf_frame{widgets}{button}{kill}->signal_connect(clicked => \&CloseAppWindow);
- $boot_conf_frame{widgets}{button}{save}->signal_connect(clicked => sub { &write_boot_thm });
- #- return to first screen
- #$boot_conf_frame{widgets}{button}{annul}->signal_connect(clicked => sub { show_act( \%first ) } );
- #- made a preview
- $boot_conf_frame{widgets}{button}{prev}->signal_connect(clicked => sub {
- unless (-f $first{widgets}{label}{file}->get) {
- $in->ask_warn(N("Notice"), N("You must choose an image file first!"));
- return 0;
- }
- #- calculation of the 2 angle of text box and progress bar
- &set_thm_values;
- my $_w = $in->wait_message('', N("Generating preview ..."));
- my $txt_tl_x = $theme{boot_conf}{tx}*$font_size{w};
- my $txt_tl_y = $theme{boot_conf}{ty}*$font_size{h};
- my $txt_width = $theme{boot_conf}{tw}*$font_size{w};
- my $txt_height = $theme{boot_conf}{th}*$font_size{h};
- my $prog_tl_x = $theme{boot_conf}{px};
- my $prog_tl_y = $theme{boot_conf}{py};
- my $prog_width = $theme{boot_conf}{pw};
- my $prog_height = $theme{boot_conf}{ph};
- &show_prev($first{widgets}{label}{file}->get,$txt_tl_x,$txt_tl_y,$txt_width,$txt_height,$prog_tl_x,$prog_tl_y,$prog_width,$prog_height);
- });
- $boot_conf_frame{frame}->show_all;
-# - check scales values are possibly correct
- #&set_scale_values;
-
- foreach my $k (keys %{$theme{boot_conf}}) {
- $k =~ m/[tp][hwyx]/
- and $adj{$k}->signal_connect(value_changed => sub { &check_boot_scales($k) });
- }
-}
-
-#- Desc => set theme values from user entry (scales widgets)
-sub set_thm_values {
- foreach (keys %{$theme{boot_conf}}) {
- m/[tp][hwyx]/
- and $theme{boot_conf}{$_} = int($adj{$_}->get_value);
- }
-}
-
-
-my ($prev_pic, $prev_pix, $prev_canvas);
-
-#- Desc => destroy properly all widget of preview window
-sub kill_preview {
- $prev_window->destroy; undef($prev_window);
- $prev_canvas->destroy; undef($prev_canvas);
- undef($prev_pic);
- undef($prev_pix);
-}
-#- Desc => create a new window with a preview of splash screen
-#- Args => $file (str) full path to preview file
-sub show_prev {
- my ($file,$txt_tl_x,$txt_tl_y,$txt_width,$txt_height,$prog_tl_x,$prog_tl_y,$prog_width, $prog_height) = @_;
- $prev_window
- or $prev_window = new Gtk2::Window('toplevel') and $prev_window->set_policy(0, 1, 1);
-#-PO First %s is theme name, second %s (in parenthesis) is resolution
- $prev_window->set_title(N("%s BootSplash (%s) preview", $theme{name}, $theme{res}{res}));
- $prev_pic = gtkcreate_pixbuf($file);
- $prev_pic->scale_simple($theme{res}{w}, $theme{res}{h},0);
- $prev_pix = $prev_pic->render_pixmap_and_mask($prev_pic);
- $prev_canvas and $prev_canvas->isa('Gtk2::Widget')
- or $prev_canvas = new Gtk2::DrawingArea() and $prev_window->add($prev_canvas);
- $prev_canvas->set_size_request($theme{res}{w}, $theme{res}{h});
- $prev_canvas->signal_connect(expose_event => sub {
- $prev_canvas->window->draw_pixmap($prev_canvas->style->bg_gc('normal'),$prev_pix,0,0,0,0, $theme{res}{w}, $theme{res}{h});
- $prev_canvas->window->draw_rectangle($prev_canvas->style->black_gc, $true,$txt_tl_x, $txt_tl_y,$txt_width,$txt_height);
- $prev_canvas->window->draw_rectangle($prev_canvas->style->black_gc, $true, $prog_tl_x,$prog_tl_y,$prog_width, $prog_height);
- });
- $prev_window->signal_connect(delete_event => \&kill_preview);
- $prev_window->show_all;
-
-}
-
-#- Desc => define the max size of boot's scales
-sub set_scale_size {
- %scale_size = ('tx' => ($theme{res}{w} / $font_size{w}),
- 'ty' => ($theme{res}{h} / $font_size{h}),
- 'tw' => ($theme{res}{w} / $font_size{w}),
- 'th' => ($theme{res}{h} / $font_size{h}),
- 'px' => $theme{res}{w},
- 'py' => $theme{res}{h},
- 'pw' => $theme{res}{w},
- 'ph' => $theme{res}{h},
- );
-}
-
-#- Desc => verify that boot's scales widgets are correctly set
-#- Args => $obj (str) is the scale to check value
-
-sub check_boot_scales {
- my ($obj) = @_;
- my $tw = $adj{tw}->get_value;
- my $tx = $adj{tx}->get_value;
- my $th = $adj{th}->get_value;
- my $ty = $adj{ty}->get_value;
- my $pw = $adj{pw}->get_value;
- my $ph = $adj{ph}->get_value;
- my $px = $adj{px}->get_value;
- my $py = $adj{py}->get_value;
- my $max_x = $scale_size{tw};
- my $max_y = $scale_size{th};
- my $max_xres = $theme{res}{w};
- my $max_yres = $theme{res}{h};
-
- $obj eq 'tw' and $max_x < $tw + $tx and $adj{tx}->set_value($max_x - $tw);
- $obj eq 'tx' and $max_x < $tw + $tx and $adj{tw}->set_value($max_x - $tx);
- $obj eq 'th' and $max_y < $th + $ty and $adj{ty}->set_value($max_y - $th);
- $obj eq 'ty' and $max_y < $th + $ty and $adj{th}->set_value($max_y - $ty);
- $obj eq 'pw' and $max_xres < $pw + $px and $adj{px}->set_value($max_xres - $pw);
- $obj eq 'px' and $max_xres < $pw + $px and $adj{pw}->set_value($max_xres - $px);
- $obj eq 'ph' and $max_yres < $ph + $py and $adj{py}->set_value($max_yres - $ph);
- $obj eq 'py' and $max_yres < $ph + $py and $adj{ph}->set_value($max_yres - $py);
-
-}
diff --git a/perl-install/standalone/drakupdate_fstab b/perl-install/standalone/drakupdate_fstab
deleted file mode 100755
index 73c308bda..000000000
--- a/perl-install/standalone/drakupdate_fstab
+++ /dev/null
@@ -1,163 +0,0 @@
-#!/usr/bin/perl
-
-# drakupdate_fstab
-# Copyright (C) 2002 MandrakeSoft (pixel@mandrakesoft.com)
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-use lib qw(/usr/lib/libDrakX);
-
-use detect_devices;
-use security::level;
-use common;
-use fsedit;
-use lang;
-use any;
-use fs;
-
-$::isStandalone = 1; #- not using standalone.pm which generates too many logs for drakupdate_fstab purpose
-
-$::testing = $ARGV[0] eq '--test' && shift @ARGV;
-$::auto = $ARGV[0] eq '--auto' && shift @ARGV;
-my ($raw_action, $device_name) = @ARGV;
-my ($action) = $raw_action =~ /^--(add|del)/;
-
-@ARGV == 2 && $action or die "usage: drakupdate_fstab [--test] [--auto] [--add | --del] <device>\n";
-
-main($action, $device_name);
-
-
-sub check_hard_drives {
- my ($name) = @_;
-
- #- do not do anything if there are many partitions
- #- otherwise we may add main extended partitions
- if ($name =~ s|/part\d+$||) {
- my @parts = grep { /part/ } all($name);
- @parts <= 1;
- } else {
- 1;
- }
-}
-
-sub device_name_to_entry {
- my ($name) = @_;
- $name =~ s|/dev/||;
- my @l = detect_devices::get();
-
- my ($e, $nb);
- if ((my $devfs_prefix, $nb) = $name =~ m,(.*)/(?:cd|disc|part(\d+))$,) {
- ($e) = grep { $_->{devfs_prefix} eq $devfs_prefix } @l or return;
- } else {
- if (($e) = grep { $name eq $_->{device} } @l) {
- $nb = '';
- } else {
- (my $prefix, $nb) = $name =~ m/^(.*?)(\d*)$/;
- ($e) = grep { $prefix eq ($_->{prefix} || $_->{device}) } @l or return;
- }
- }
-
- if ($nb) {
- $e->{devfs_device} = $e->{devfs_prefix} . '/part' . $nb;
- $e->{device} = ($e->{prefix} || $e->{device}) . $nb;
- }
- $e;
-}
-
-sub set_options {
- my ($part, $use_supermount) = @_;
- my $security = security::level::get();
- my ($iocharset, $codepage) = lang::fs_options(lang::read());
-
- fs::set_default_options($part, 1, $use_supermount, $security, $iocharset, $codepage);
-
- my ($options, $unknown) = fs::mount_options_unpack($part);
- $options->{kudzu} = 1;
- fs::mount_options_pack($part, $options, $unknown);
-}
-
-sub set_mount_point {
- my ($part, $fstab) = @_;
-
- my $mntpoint = detect_devices::suggest_mount_point($part) or return;
- $mntpoint = "/mnt/$mntpoint";
-
- foreach ('', 2 .. 10) {
- next if fsedit::mntpoint2part("$mntpoint$_", $fstab);
- $part->{mntpoint} = "$mntpoint$_";
- return 1;
- }
- 0;
-}
-
-sub main {
- my ($action, $device_name) = @_;
-
- if ($::auto) {
- check_hard_drives($device_name) or return;
- }
-
- my $part = device_name_to_entry($device_name);
- my $fstab_file = '/etc/fstab';
- if (!$part) {
- print STDERR "Can't find device $device_name\n" if $::testing;
- return;
- } elsif ($::testing) {
- cp_af('/etc/fstab', $fstab_file = '/tmp/fstab');
- }
-
- my $fstab = [ fs::read_fstab('', '/etc/fstab', 'keep_freq_passno', 'verbatim_credentials') ];
- my ($existing_fstab_entries, $fstab_) = partition { $_->{device} eq $part->{device} || $_->{device} eq $part->{devfs_device} } @$fstab;
-
- if ($action eq 'add') {
- if (@$existing_fstab_entries) {
- print STDERR "Already in fstab\n" if $::testing;
- return;
- }
- my $use_supermount = 0; #- force non-supermount, supermount is too buggy
- set_options($part, $use_supermount);
- set_mount_point($part, $fstab) or return;
-
- my ($line) = fs::prepare_write_fstab([$part]);
- append_to_file($fstab_file, $line) if $line;
-
- if ($::auto) {
- print $part->{mntpoint}, " ", $use_supermount ? 'supermount' : 'user', "\n";
- }
- } else {
- if (!@$existing_fstab_entries) {
- print STDERR "Not found in fstab\n" if $::testing;
- return;
- }
- foreach (@$existing_fstab_entries) {
- if ($_->{options} !~ /\bkudzu\b/) {
- print STDERR "Not a 'kudzu'-flagged entry\n" if $::testing;
- return;
- }
- }
-
- my ($s) = fs::prepare_write_fstab($fstab_, '', 'keep_smb_credentials');
- output($fstab_file, $s);
-
- if ($::auto) {
- print "$_->{mntpoint}\n" foreach @$existing_fstab_entries;
- }
- }
-
- if ($::testing) {
- print "fstab would have changed:\n";
- system("diff -u /etc/fstab $fstab_file");
- }
-}
diff --git a/perl-install/standalone/drakxservices b/perl-install/standalone/drakxservices
deleted file mode 100755
index bb6dea16d..000000000
--- a/perl-install/standalone/drakxservices
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/usr/bin/perl
-
-use strict;
-use lib qw(/usr/lib/libDrakX);
-
-use standalone; #- warning, standalone must be loaded very first, for 'explanations'
-
-use common;
-use interactive;
-use services;
-use log;
-
-my $in = 'interactive'->vnew('su', 'services');
-begin:
-my $l = services::ask($in);
-services::doit($in, $l) if $l;
-$in->exit(0);
diff --git a/perl-install/standalone/drakxtv b/perl-install/standalone/drakxtv
deleted file mode 100755
index d17f1dcba..000000000
--- a/perl-install/standalone/drakxtv
+++ /dev/null
@@ -1,163 +0,0 @@
-#!/usr/bin/perl
-# DrakxTV
-# $Id$
-
-# Copyright (C) 2002 MandrakeSoft (tvignaud@mandrakesoft.com)
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-use lib qw(/usr/lib/libDrakX);
-
-use standalone; #- warning, standalone must be loaded very first, for 'explanations'
-
-use interactive;
-use strict;
-use detect_devices;
-use lang;
-use log;
-use common;
-
-my $in = 'interactive'->vnew();
-
-sub scan4channels {
- # xawtv has been installed by DrakX when/if it's detected a tv
- # card.
-
- # In the future, we might try to install xawtv if it'sn't there as
- # we're just a, xawtv wraper
-
- # -x "/usr/bin/scantv" or $in->do_pkgs->install('xawtv');
- # -x "/usr/bin/scantv" or { exec {'consolehelper'} $0, ("urpmi", "xawtv") or die N("consolehelper missing") };
- if (!$::testing && ! -x "/usr/bin/scantv") {
- # log::explanations("package xawtv isn't installed");
- $in->ask_warn("XawTV isn't installed!",
- formatAlaTeX(N("XawTV isn't installed!
-
-
-If you do have a TV card but DrakX has neither detected it (no bttv nor saa7134
-module in \"/etc/modules\") nor installed xawtv, please send the
-results of \"lspcidrake -v -f\" to \"install\@mandrakesoft.com\"
-with subject \"undetected TV card\".
-
-
-You can install it by typing \"urpmi xawtv\" as root, in a console.")));
-
- } else {
- my ($ftable_id, $norm);
- # this table must be checked on each xawtv release:
- my %freqtables =
- ("us-bcast" => N("USA (broadcast)"), "us-cable" => N("USA (cable)"), "us-cable-hrc" => N("USA (cable-hrc)"), "canada-cable" => N("Canada (cable)"),
- "japan-bcast" => N("Japan (broadcast)"), "japan-cable" => N("Japan (cable)"), "china-bcast" => N("China (broadcast)"),
- "europe-west" => N("West Europe"), "europe-east" => N("East Europe"), "italy" => N("Italy"), "ireland" => N("Ireland"), "france" => N("France [SECAM]"),
- "newzealand" => N("Newzealand"), "australia" => N("Australia"),
- "southafrica" => N("South Africa"),
- "argentina" => N("Argentina"),
- "australia-optus" => N("Australian Optus cable TV"),
- -1 => N("All")
- );
- # Info: HRC means "Harmonically Related Carrier"
-
- my %countries =
- (
- "AR" => [ "argentina" ],
- "AU" => [ "australia" ],
- "FR" => [ "france", "SECAM" ],
- "CA" => [ "canada-cable" ],
- "IE" => [ "ireland" ],
- "IT" => [ "italy" ],
- "JP" => [ "japan-bcast", "NTSC-JP" ],
- "NZ" => [ "newzealand" ],
- "AT|BE|CH|DE|ES|GB|SE" => [ "europe-west" ],
- "US" => [ "us-bcast", "NTSC" ],
- "ZA" => [ "southafrica" ],
- "CN|TW" => [ "china-bcast" ]
- );
-
- my $tbl;
- my $locale = lang::read('', $>);
- $locale->{country} =~ /$_/ and $tbl = $countries{$_} foreach keys %countries;
- if ($tbl) {
- $ftable_id = $tbl->[0];
- $norm = $tbl->[1] if $tbl->[1];
- }
- # default to pal since most people use that
- $norm ||= "PAL";
- log::l("[drakxtv] guess country=>$locale->{country}, norm=>$norm, area=>$ftable_id");
-
- if ($in->ask_from("TVdrake", N("Please,\ntype in your tv norm and country"),
- [
- { label => N("TV norm:"), val => \$norm, list => [ "NTSC", "NTSC-JP", "PAL", "PAL-M", "PAL-N", "PAL-NC", "SECAM" ], type => 'combo' },
- { label => N("Area:"), val => \$ftable_id, list => [keys %freqtables], format => sub { $freqtables{$_[0]} }, sort => 1 },
- ]
- )) {
- my $_wait = $in->wait_message(N("Please wait"),
- N("Scanning for TV channels in progress ..."));
- # we provide scantv a bogus table (france) which will
- # will be ignored since "All" is selected (because of -a)
- $ftable_id = "france -a " if $ftable_id eq -1;
- # Note that this'll be broken if/when we implement interactive::qt
- my $use_X = $in->isa('interactive::gtk') && -x "/usr/X11R6/bin/xvt";
- my $home = $ENV{HOME};
- my $is_bttv_loaded = cat_("/proc/modules");
- # workaround non loaded bttv
- run_program::run('/sbin/modprobe', 'bttv') if $< == 0 && $is_bttv_loaded !~ /bttv/;
- my $i = system(($use_X ? "xvt -T '" . N("Scanning for TV channels") . " ...' -e " : "") .
- "scantv -n $norm -f $ftable_id -o $home/.xawtv" .
- ($use_X ? "" : " &>$home/tmp/scantv.log;"));
- if ($i) {
- $in->ask_warn(N("There was an error while scanning for TV channels"),
- N("XawTV isn't installed!")) }
- else {
- log::explanations("created file $home/.xawtv");
- $in->ask_warn(N("Have a nice day!"),
- N("Now, you can run xawtv (under X Window!) !\n")) unless $use_X;
- }
- }
- }
-}
-
-my @devices = grep { $_->{media_type} eq 'MULTIMEDIA_VIDEO' || $_->{driver} eq 'usbvision' } detect_devices::probeall(1);
-push @devices, { driver => 'bttv', description => 'dummy' } if $::testing && !@devices;
-if (@devices) {
- # TODO: That need some work for multiples TV cards
- foreach (@devices) {
- if ($< == 0 && (grep { $_->{driver} =~ /(bttv|saa7134)/ } @devices)) {
- require harddrake::v4l;
- require modules;
- no strict 'subs';
- modules::read_conf;
- harddrake::v4l::config($in, $_->{driver});
- modules::write_conf;
- }
- scan4channels();
- }
-} else {
- $in->ask_warn(N("No TV Card detected!"), formatAlaTeX(
- N("No TV Card has been detected on your machine. Please verify that a Linux-supported Video/TV Card is correctly plugged in.
-
-
-You can visit our hardware database at:
-
-
-http://www.linux-mandrake.com/en/hardware.php3")));
-}
-$in->exit(0) if defined $in;
-
-
-# TODO:
-# - offer to sort channels after
-# - use Video-Capture-V4l-0.221 ?
-# - configure kwintv and zapping ? => they've already wizards :-(
-# - install xawtv if needed through consolhelper
diff --git a/perl-install/standalone/fileshareset b/perl-install/standalone/fileshareset
deleted file mode 100755
index 18277d95f..000000000
--- a/perl-install/standalone/fileshareset
+++ /dev/null
@@ -1,389 +0,0 @@
-#!/usr/bin/perl -T
-use strict;
-
-########################################
-# config files
-$nfs_exports::default_options = '*(ro,all_squash,sync)';
-$nfs_exports::conf_file = '/etc/exports';
-$smb_exports::conf_file = '/etc/samba/smb.conf';
-my $authorisation_file = '/etc/security/fileshare.conf';
-my $authorisation_group = 'fileshare';
-
-
-########################################
-# fileshare utility $Id$
-# Copyright (C) 2001-2002 MandrakeSoft (pixel@mandrakesoft.com)
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-
-########################################
-my $uid = $<;
-my $username = getpwuid($uid);
-
-########################################
-# errors
-my $usage =
-"usage: fileshareset --add <dir>
- fileshareset --remove <dir>";
-my $non_authorised =
-qq(You are not authorised to use fileshare'ing
-To grant you the rights:
-- put "RESTRICT=no" in $authorisation_file
-- or put user "$username" in group "$authorisation_group");
-my $no_export_method = "can't export anything: no nfs, no smb";
-
-my %exit_codes = reverse(
- 1 => $non_authorised,
- 2 => $usage,
-
-# when adding
- 3 => "already exported",
- 4 => "invalid mount point",
-
-# when removing
- 5 => "not exported",
-
- 6 => $no_export_method,
-
- 255 => "various",
-);
-
-################################################################################
-# correct PATH needed to call /etc/init.d/... ? seems not, but...
-%ENV = ();#(PATH => '/bin:/sbin:/usr/bin:/usr/sbin');
-
-my $modify = $0 =~ /fileshareset/;
-
-authorisation::check($modify);
-
-my @exports = (
- -e $nfs_exports::conf_file ? nfs_exports::read() : (),
- -e $smb_exports::conf_file ? smb_exports::read() : (),
- );
-@exports or error($no_export_method);
-
-if ($modify) {
- my ($cmd, $dir) = @ARGV;
- $< = $>;
- @ARGV == 2 && ($cmd eq '--add' || $cmd eq '--remove') or error($usage);
-
- verify_mntpoint($dir);
-
- if ($cmd eq '--add') {
- my @errs = map { eval { $_->add($dir) }; $@ } @exports;
- grep { !$_ } @errs or error("already exported");
- } else {
- my @errs = map { eval { $_->remove($dir) }; $@ } @exports;
- grep { !$_ } @errs or error("not exported");
- }
- foreach my $export (@exports) {
- $export->write;
- $export->update_server;
- }
-}
-my @mntpoints = grep { $_ } uniq(map { map { $_->{mntpoint} } @$_ } @exports);
-print "$_\n" foreach grep { own($_) } @mntpoints;
-
-
-sub own { $uid == 0 || (stat($_[0]))[4] == $uid }
-
-sub verify_mntpoint {
- local ($_) = @_;
- my $ok = 1;
- $ok &&= m|^/|;
- $ok &&= !m|/../|;
- $ok &&= !m|[\0\n\r]|;
- $ok &&= -d $_;
- $ok &&= own($_);
- $ok or error("invalid mount point");
-}
-
-sub error {
- my ($string) = @_;
- print STDERR "$string\n";
- exit($exit_codes{$string} || 255);
-}
-sub member { my $e = shift; foreach (@_) { $e eq $_ and return 1 } 0 }
-sub uniq { my %l; $l{$_} = 1 foreach @_; grep { delete $l{$_} } @_ }
-
-
-################################################################################
-package authorisation;
-
-sub read_conf {
- my ($exclusive_lock) = @_;
- open F_lock, $authorisation_file; # don't care if it's missing
- flock(F_lock, $exclusive_lock ? 2 : 1) or die "can't lock";
- my %conf;
- foreach (<F_lock>) {
- s/#.*//; # remove comments
- s/^\s+//;
- s/\s+$//;
- /^$/ and next;
- my ($cmd, $value) = split('=', $_, 2);
- $conf{$cmd} = $value || warn qq(suspicious line "$_" in $authorisation_file\n);
- }
- # no close F_lock, keep it locked
- \%conf
-}
-
-sub check {
- my ($exclusive_lock) = @_;
- my $conf = read_conf($exclusive_lock);
-
- if (lc($conf->{RESTRICT}) eq 'no') {
- # ok, access granted for everybody
- } else {
- my @l;
- while (@l = getgrent) {
- last if $l[0] eq $authorisation_group;
- }
- ::member($username, split(' ', $l[3])) or ::error($non_authorised);
- }
-}
-
-################################################################################
-package exports;
-
-sub find {
- my ($exports, $mntpoint) = @_;
- foreach (@$exports) {
- $_->{mntpoint} eq $mntpoint and return $_;
- }
- undef;
-}
-
-sub add {
- my ($exports, $mntpoint) = @_;
- foreach (@$exports) {
- $_->{mntpoint} eq $mntpoint and die 'add';
- }
- push @$exports, my $e = { mntpoint => $mntpoint };
- $e;
-}
-
-sub remove {
- my ($exports, $mntpoint) = @_;
- my @l = grep { $_->{mntpoint} ne $mntpoint } @$exports;
- @l < @$exports or die 'remove';
- @$exports = @l;
-}
-
-
-################################################################################
-package nfs_exports;
-
-use vars qw(@ISA $conf_file $default_options);
-BEGIN { @ISA = 'exports' }
-
-sub read {
- my $file = $conf_file;
- local *F;
- open F, $file or return [];
-
- my ($prev_raw, $prev_line, @l);
- my $line_nb = 0;
- foreach my $raw (<F>) {
- $line_nb++;
- local $_ = $raw;
- $raw .= "\n" if !/\n/;
-
- s/#.*//; # remove comments
-
- s/^\s+//;
- s/\s+$//; # remove unuseful spaces to help regexps
-
- if (/^$/) {
- # blank lines ignored
- $prev_raw .= $raw;
- next;
- }
-
- if (/\\$/) {
- # line continue across lines
- chop; # remove the backslash
- $prev_line .= "$_ ";
- $prev_raw .= $raw;
- next;
- }
- my $line = $prev_line . $_;
- my $raw_line = $prev_raw . $raw;
- ($prev_line, $prev_raw) = ('', '');
-
- my ($mntpoint, $options) = $line =~ /("[^"]*"|\S+)\s+(.*)/ or die "$file:$line_nb: bad line $line\n";
-
- # You can also specify spaces or any other unusual characters in the
- # export path name using a backslash followed by the character code as
- # 3 octal digits.
- $mntpoint =~ s/\\(\d{3})/chr(oct $1)/ge;
-
- # not accepting weird characters that would break the output
- $mntpoint =~ m/[\0\n\r]/ and die "i won't handle this";
- push @l, { mntpoint => $mntpoint, option => $options, raw => $raw_line };
- }
- bless \@l, 'nfs_exports';
-}
-
-sub write {
- my ($nfs_exports) = @_;
- foreach (@$nfs_exports) {
- if (!exists $_->{options}) {
- $_->{options} = $default_options;
- }
- if (!exists $_->{raw}) {
- my $mntpoint = $_->{mntpoint} =~ /\s/ ? qq("$_->{mntpoint}") : $_->{mntpoint};
- $_->{raw} = sprintf("%s %s\n", $mntpoint, $_->{options});
- }
- }
- local *F;
- open F, ">$conf_file" or die "can't write $conf_file";
- print F $_->{raw} foreach @$nfs_exports;
-}
-
-sub update_server {
- if (fork()) {
- system('/usr/sbin/exportfs', '-r');
- if (system('/sbin/pidof rpc.mountd >/dev/null') != 0 ||
- system('/sbin/pidof nfsd >/dev/null') != 0) {
- # trying to start the server...
- system('/etc/init.d/portmap start') if system('/etc/init.d/portmap status') != 0;
- system('/etc/init.d/nfs', $_) foreach 'stop', 'start';
- }
- exit 0;
- }
-}
-
-################################################################################
-package smb_exports;
-
-use vars qw(@ISA $conf_file);
-BEGIN { @ISA = 'exports' }
-
-sub read {
- my ($s, @l);
- local *F;
- open F, $conf_file;
- local $_;
- while (<F>) {
- if (/^\s*\[.*\]/ || eof F) {
- #- first line in the category
- my ($label) = $s =~ /^\s*\[(.*)\]/;
- my ($mntpoint) = $s =~ /^\s*path\s*=\s*(.*)/m;
- push @l, { mntpoint => $mntpoint, raw => $s, label => $label };
- $s = '';
- }
- $s .= $_;
- }
- bless \@l, 'smb_exports';
-}
-
-sub write {
- my ($smb_exports) = @_;
- foreach (@$smb_exports) {
- if (!exists $_->{raw}) {
- $_->{raw} = <<EOF;
-
-[$_->{label}]
- path = $_->{mntpoint}
- comment = $_->{mntpoint}
- public = yes
- guest ok = yes
- writable = no
- wide links = no
-EOF
- }
- }
- local *F;
- open F, ">$conf_file" or die "can't write $conf_file";
- print F $_->{raw} foreach @$smb_exports;
-}
-
-sub add {
- my ($exports, $mntpoint) = @_;
- my $e = $exports->exports::add($mntpoint);
- $e->{label} = name_mangle($mntpoint, map { $_->{label} } @$exports);
-}
-
-sub name_mangle {
- my ($input, @others) = @_;
-
- local $_ = $input;
-
- # 1. first only keep legal characters. "/" is also kept for the moment
- tr|a-z|A-Z|;
- s|[^A-Z0-9#\-_!/]|_|g; # "$" is allowed except at the end, remove it in any case
-
- # 2. removing non-interesting parts
- s|^/||;
- s|^home/||;
- s|_*/_*|/|g;
- s|_+|_|g;
-
- # 3. if size is too small (!), make it bigger
- $_ .= "_" while length($_) < 3;
-
- # 4. if size is too big, shorten it
- while (length > 12) {
- my ($s) = m|.*?/(.*)|;
- if (length($s) > 8 && !grep { /\Q$s/ } @others) {
- # dropping leading directories when the resulting is still long and meaningful
- $_ = $s;
- next;
- }
- s|(.*)[0-9#\-_!/]|$1| and next;
-
- # inspired by "Christian Brolin" "Long names are doom" on comp.lang.functional
- s|(.+)[AEIOU]|$1| and next; # allButFirstVowels
- s|(.*)(.)\2|$1$2| and next; # adjacentDuplicates
-
- s|(.*).|$1|; # booh, :'-(
- }
-
- # 5. remove "/"s still there
- s|/|_|g;
-
- # 6. resolving conflicts
- my $l = join("|", map { quotemeta } @others);
- my $conflicts = qr|^($l)$|;
- if (/$conflicts/) {
- A: while (1) {
- for (my $nb = 1; length("$_$nb") <= 12; $nb++) {
- if ("$_$nb" !~ /$conflicts/) {
- $_ = "$_$nb";
- last A;
- }
- }
- $_ or die "can't find a unique name";
- # can't find a unique name, dropping the last letter
- s|(.*).|$1|;
- }
- }
-
- # 7. done
- $_;
-}
-
-sub update_server {
- if (fork()) {
- system('/usr/bin/killall -HUP smbd 2>/dev/null');
- if (system('/sbin/pidof smbd >/dev/null') != 0 ||
- system('/sbin/pidof nmbd >/dev/null') != 0) {
- # trying to start the server...
- system('/etc/init.d/smb', $_) foreach 'stop', 'start';
- }
- exit 0;
- }
-}
diff --git a/perl-install/standalone/harddrake2 b/perl-install/standalone/harddrake2
deleted file mode 100755
index d136a9fa3..000000000
--- a/perl-install/standalone/harddrake2
+++ /dev/null
@@ -1,314 +0,0 @@
-#!/usr/bin/perl
-
-use strict;
-use diagnostics;
-use lib qw(/usr/lib/libDrakX);
-use standalone;
-use common;
-
-use ugtk2 qw(:create :helpers :wrappers);
-use interactive;
-use harddrake::data; #- needs to stay after use-ugtk2 as long as this module defines globals containing some N()
-
-
-# { field => [ short_translation, full_description] }
-my %fields =
- (
- "alternative_drivers" => [ N("Alternative drivers"),
- N("the list of alternative drivers for this sound card") ],
- "bus" =>
- [ N("Bus"),
- N("this is the physical bus on which the device is plugged (eg: PCI, USB, ...)") ],
- "channel" => [ N("Channel"), N("EIDE/SCSI channel") ],
- "bogomips" => [ N("Bogomips"), N("The GNU/Linux kernel needs to run a calculation loop at boot time to initialize a timer counter. Its result is stored as bogomips as a way to \"benchmark\" the cpu.") ],
- "bus_id" =>
- [ N("Bus identification"),
- N("- PCI and USB devices: this lists the vendor, device, subvendor and subdevice PCI/USB ids") ],
- "bus_location" =>
- [ N("Location on the bus"),
- N("- pci devices: this gives the PCI slot, device and function of this card
-- eide devices: the device is either a slave or a master device
-- scsi devices: the scsi bus and the scsi device ids") ],
- "cache size" => [ N("Cache size"), N("Size of the (second level) cpu cache") ],
- "coma_bug" => [ N("Coma bug"), N("Whether this cpu has the Cyrix 6x86 Coma bug") ],
- "cpu family" => [ N("Cpuid family"), N("Family of the cpu (eg: 6 for i686 class)") ],
- "cpuid level" => [ N("Cpuid level"), N("Information level that can be obtained through the cpuid instruction") ],
- "cpu MHz" => [ N("Frequency (MHz)"), N("The cpu frequency in Mhz (Mega herz which in first approximation may be coarsely assimilated to number of instructions the cpu is able to execute per second)") ],
- "description" => [ N("Description"), N("This field describes the device") ],
- "device" => [ N("Old device file"),
- N("old static device name used in dev package") ],
- "devfs_device" => [ N("New devfs device"),
- N("new dynamic device name generated by core kernel devfs") ],
- "driver" => [ N("Module"), N("the module of the GNU/Linux kernel that handles the device") ],
- "flags" => [ N("Flags"), N("CPU flags reported by the kernel") ],
- "fdiv_bug" => [ N("Fdiv bug"),
- N("Early Intel Pentium chips manufactured have a bug in their floating point processor which did not achieve the required precision when performing a Floating point DIVision (FDIV)") ],
-
-
- "fpu" => [ N("Is FPU present"), N("yes means the processor has an arithmetic coprocessor") ],
- "fpu_exception" => [ N("Whether the FPU has an irq vector"), N("yes means the arithmetic coprocessor has an exception vector attached") ],
- "f00f_bug" => [N("F00f bug"), N("Early pentiums were buggy and freezed when decoding the F00F bytecode")],
- "hlt_bug" => [ N("Halt bug"),
- N("Some of the early i486DX-100 chips cannot reliably return to operating mode after the \"halt\" instruction is used") ],
-
- "info" => [N("Floppy format"), N("Format of floppies supported by the drive")],
- "level" => [N("Level"), N("Sub generation of the cpu")],
- "media_type" => [ N("Media class"), N("class of hardware device") ],
- "Model" => [N("Model"), N("hard disk model")],
- "model" => [N("Model"), N("Generation of the cpu (eg: 8 for PentiumIII, ...)")],
- "model name" => [N("Model name"), N("Official vendor name of the cpu")],
- "nbuttons" => [ N("Number of buttons"), "the number of buttons the mouse have" ],
- "name" => [ N("Name"), "the name of the cpu" ],
- "port" => [N("Port"), N("network printer port")],
- "processor" => [ N("Processor ID"), N("the number of the processor") ],
- "stepping" => [ N("Model stepping"), N("Stepping of the cpu (sub model (generation) number)") ],
- "type" => [ N("Type"), N("The type of bus on which the mouse is connected") ],
- "Vendor" => [ N("Vendor"), N("the vendor name of the device") ],
- "vendor_id" => [ N("Vendor"), N("the vendor name of the processor") ]
- );
-
-
-my ($in, %IDs, $pid, $w);
-
-my (%options, %check_boxes);
-my $conffile = "/etc/sysconfig/harddrake2/ui.conf";
-
-my ($modem_check_box, $printer_check_box, $current_device, $current_configurator);
-
-
-#-PO Translators, please keep all "/" charaters !!!
-my %menu_options = (
- 'PRINTERS_DETECTION' => [ N("/_Options"), N("/Autodetect _printers") ],
- 'MODEMS_DETECTION' => [ N("/_Options"), N("/Autodetect _modems") ],
- 'JAZZ_DETECTION' => [ N("/_Options"), N("/Autodetect _jazz drives") ],
-);
-
-my @menu_items =
- (
- { path => N("/_File"), type => '<Branch>' },
- { path => N("/_File").N("/_Quit"), accelerator => N("<control>Q"), callback => \&quit_global },
- { path => join('', @{$menu_options{PRINTERS_DETECTION}}), type => '<CheckItem>',
- callback => sub { $options{PRINTERS_DETECTION} = $check_boxes{PRINTERS_DETECTION}->active } },
- { path => join('', @{$menu_options{MODEMS_DETECTION}}), type => '<CheckItem>',
- callback => sub { $options{MODEMS_DETECTION} = $check_boxes{MODEMS_DETECTION}->active } },
- { path => join('', @{$menu_options{JAZZ_DETECTION}}), type => '<CheckItem>',
- callback => sub { $options{JAZZ_DETECTION} = $check_boxes{JAZZ_DETECTION}->active } },
- { path => N("/_Help"), type => '<Branch>' },
- { path => N("/_Help").N("/_Help"), callback => sub { unless (fork()) { exec("drakhelp Drakxtools-Guide.html/harddrake.html") } } },
- {
- path => N("/_Help").N("/_Fields description"),
- callback => sub {
- if ($current_device) {
- $in->ask_warn(N("Harddrake help"),
- N("Description of the fields:\n\n")
- . join("\n\n", map { if_($fields{$_}[0], "$fields{$_}[0]: $fields{$_}[1]") } sort keys %$current_device))
- } else {
- $in->ask_warn(N("Select a device !"), N("Once you've selected a device, you'll be able to see the device information in fields displayed on the right frame (\"Information\")"))
- }
- }
- },
- { path => N("/_Help").N("/_Report Bug"),
- callback => sub { unless (fork()) { exec("drakbug --report harddrake2 &") } } },
- { path => N("/_Help").N("/_About..."),
- callback => sub {
- $in->ask_warn(N("About Harddrake"),
- join("", N("This is HardDrake, a Mandrake hardware configuration tool.\nVersion:"), " $harddrake::data::version\n",
- N("Author:"), " Thierry Vignaud <tvignaud\@mandrakesoft.com> \n\n",
- formatAlaTeX($::license)));
- }
- }
- );
-
-$in = 'interactive'->vnew('su', 'default');
-
-my $wait = $in->wait_message(N("Please wait"), N("Detection in progress"));
-gtkflush();
-
-%options = getVarsFromSh($conffile);
-
-# Build the gui
-add_icon_path('/usr/share/pixmaps/harddrake2/');
-$::noBorder = 1;
-$w = ugtk2->new(N("Harddrake2 version ") . $harddrake::data::version);
-local $::main_window; # fake diagnostics pragma
-$::main_window = $w->{rwindow} unless $::isEmbedded;
-my ($menubar, $factory);
-unless ($::isEmbedded) {
- $w->{window}->set_size_request(805, 550);
- ($menubar, $factory) = create_factory_menu($w->{rwindow}, @menu_items);
-}
-my $tree_model = Gtk2::TreeStore->new(Gtk2::GType->OBJECT, Gtk2::GType->STRING);
-my ($statusbar, $sig_id);
-$w->{window}->add(gtkpack_(0, Gtk2::VBox->new(0, 0),
- if_(!$::isEmbedded, 0, $menubar),
- 1, create_hpaned(gtkadd(new Gtk2::Frame(N("Detected hardware")),
- create_scrolled_window(gtkset_size_request(my $tree = Gtk2::TreeView->new_with_model($tree_model), 350, -1))),
- gtkpack_(0, Gtk2::VBox->new(0, 0),
- 1, gtkadd(my $frame = new Gtk2::Frame(N("Information")),
- create_scrolled_window(my $text = Gtk2::TextView->new)),
- 0, my $module_cfg_button = gtksignal_connect(new Gtk2::Button(N("Configure module")),
- clicked => sub {
- require modules::interactive;
- modules::interactive::config_window($in, $current_device);
- gtkset_mousecursor_normal();
- }),
- 0, my $config_button = gtksignal_connect(new Gtk2::Button(N("Run config tool")),
- # we've a configurator, let's add a button for it and show it
- clicked => sub {
- return 1 if defined $pid;
- if ($pid = fork()) {
- $sig_id = $statusbar->push($statusbar->get_context_id("id"),
- N("Running \"%s\" ...", $current_configurator));
- } else {
- exec($current_configurator) or die "$current_configurator missing\n";
- }
- })
- ),
- ( 'resize1' => 1)
- ),
- 0, $statusbar = new Gtk2::Statusbar,
- if_($::isEmbedded, 0, gtksignal_connect(my $but = new Gtk2::Button(N("Quit")),
- 'clicked' => \&quit_global))
- )
- );
-
-$frame->set_size_request(300, 450) unless $::isEmbedded;
-# $tree->set_column_auto_resize(0, 1);
-my (%data, %configurators);
-$tree->append_column(my $pixcolumn = Gtk2::TreeViewColumn->new_with_attributes(undef, Gtk2::CellRendererPixbuf->new, 'pixbuf' => 0));
-$tree->append_column(my $textcolumn = Gtk2::TreeViewColumn->new_with_attributes(undef, Gtk2::CellRendererText->new, 'text' => 1));
-$tree->set_headers_visible(0);
-my $selection = gtksignal_connect($tree->get_selection(), 'changed' => sub {
- my ($select) = @_;
- my ($model, $iter) = $select->get_selected();
- if ($model) {
- my $id = $model->get($iter, 1);
- $iter->free;
- $current_device = $data{$id};
-
- if ($current_device) {
- gtktext_insert($text, [ map {
-
- # The U+200E character is to force LTR display, as what what follows the colon is always in LTR (device names, paths, etc),
- # this ensures proper displaying of names like /dev/fd0 (otherwise it gets 'dev/fd0/').
- # it must come *after* the space, as the space must follow the colon following the direction of writting.
- if_($fields{$_}[0], [ $fields{$_}[0] . ": \x{200e}", { 'foreground' => 'royalblue3', 'weight' => Gtk2::Pango->WEIGHT_BOLD } ],
- [ ($_ && $current_device->{$_} =~ /^(unknown)/ ? N("unknown") : $_ && $current_device->{$_} =~ /^(Unknown)/ ? N("Unknown") : $current_device->{$_}) . "\n\n", { 'foreground' => ($_ eq 'driver' && $current_device->{$_} =~ /^(unknown|Bad:)/ ? 'indian red' : 'black') } ])
- } sort keys %$current_device ]);
-
- foreach (keys %$current_device) {
- print "Warning: skip \"$_\" field => \"$current_device->{$_}\"\n\n" unless $fields{$_}[0];
- };
-
- # if we've valid driver, let's offer to configure it, else hide buttons
- show_hide(defined($current_device->{driver}) && $current_device->{driver} !~ /^(unknown|Bad|Card|Hsf|.*\|.*)/, $module_cfg_button);
-
- $current_configurator = $configurators{$id};
- show_hide(-x first(split /\s+/, $current_configurator), $config_button); # strip arguments for -x test
- return 1;
- }
- }
- $text->get_buffer->set_text(N_("Click on a device in the left tree in order to display its information here."), -1);
- $config_button->hide;
- $module_cfg_button->hide;
-});
-
-# Fill the graphic devices tree with a "tree branch" widget per device category
-foreach (@harddrake::data::tree) {
- my ($Ident, $title, $icon, $configurator, $detector) = @$_;
- next if ref($detector) ne "CODE"; #skip class witouth detector
- next if $Ident =~ /(MODEM|PRINTER)/ && $::testing;
- next if $Ident =~ /JAZZ/ && !$options{JAZZ_DETECTION};
- next if $Ident =~ /MODEM/ && !$options{MODEMS_DETECTION};
- next if $Ident =~ /PRINTER/ && !$options{PRINTERS_DETECTION};
-
- my @devices = &$detector;
- next unless @devices; # Skip empty class (no devices)
-
- my $parent_iter = $tree_model->append_set(undef, [ 0 => gtkcreate_pixbuf($icon), 1 => $title ]);
-
- # Fill the graphic tree with a "tree leaf" widget per device
- foreach (@devices) {
- # we really should test for $title there:
- if ($_->{bus} eq "PCI") {
- my $i = $_;
- $_->{bus_id} = join ':', map { if_($i->{$_} ne "65535", sprintf("%lx", $i->{$_})) } qw(vendor id subvendor subid);
- $_->{bus_location} = join ':', map { sprintf("%lx", $i->{$_}) } qw(pci_bus pci_device pci_function);
- }
- # split description into manufacturer/description
- ($_->{Vendor}, $_->{description}) = split(/\|/, $_->{description}) if $_->{description};
-
- if ($_->{val}) { # Scanner ?
- my $val = $_->{val};
- ($_->{Vendor}, $_->{description}) = split(/\|/, $val->{DESCRIPTION});
- }
- # EIDE detection incoherency:
- if ($_->{bus} eq 'ide') {
- $_->{channel} = $_->{channel} ? N("secondary") : N("primary");
- delete $_->{info};
- } elsif ($_->{bus} !~ /USB|PCI/) {
- # SCSI detection incoherency:
- my $i = $_;
- $_->{bus_location} = join ':', map { sprintf("%lx", $i->{$_}) } qw(bus id);
- }
- if ($Ident =~ /FLOPPY|ZIP|DVDROM|CDROM|BURNER/) {
- $configurator = "/usr/sbin/diskdrake --removable=$_->{device}";
- } elsif ($Ident eq "AUDIO") {
- require harddrake::sound;
- my $alter = harddrake::sound::get_alternative($_->{driver});
- $_->{alternative_drivers} = join(':', @$alter) if $alter->[0] ne 'unknown';
- }
- foreach my $i (qw(vendor id subvendor subid pci_bus pci_device pci_function MOUSETYPE XMOUSETYPE unsafe val devfs_prefix wacom auxmouse)) { delete $_->{$i} };
-
- my $custom_id = harddrake::data::custom_id($_, $title);
- $custom_id .= ' ' while $data{$custom_id}; # get a unique id for eg bt8xx audio/video funtions
- foreach my $field (qw(devfs_device device)) {
- $_->{$field} = '/dev/'.$_->{$field} if $_->{$field};
- }
- $tree_model->append_set($parent_iter, [ 1 => $custom_id ])->free;
- $data{$custom_id} = $_;
- $configurators{$custom_id} = $configurator;
- }
- $tree->expand_row($tree_model->get_path($parent_iter), 1) unless $title eq N_("Unknown/Others");
- $parent_iter->free;
-}
-
-$SIG{CHLD} = sub { undef $pid; $statusbar->pop($sig_id) };
-$w->{rwindow}->signal_connect(delete_event => \&quit_global);
-$w->{rwindow}->set_position('center') unless $::isEmbedded;
-
-foreach (keys %menu_options) {
- my $title = strip_first_underscore(@{$menu_options{$_}});
- $options{$_} = 0 unless defined($options{$_}); # force detection by default
- unless ($::isEmbedded) {
- $check_boxes{$_} = $factory->get_widget("<main>" . $title);
- $check_boxes{$_}->set_active($options{$_}); # restore saved values
- }
-}
-
-$textcolumn->set_min_width(350);
-#$textcolumn->set_minmax_width(400);
-$textcolumn->set_sizing('GTK_TREE_VIEW_COLUMN_AUTOSIZE');#GROW_ONLY
-#$tree->columns_autosize();
-$w->{rwindow}->show_all;
-undef $wait;
-gtkset_mousecursor_normal();
-$_->hide foreach $module_cfg_button, $config_button; # hide buttons while no device
-$w->main;
-
-
-sub quit_global {
- kill(15, $pid) if $pid;
- setVarsInSh($conffile, \%options);
- ugtk2->exit(0);
-}
-
-sub show_hide {
- my ($bool, $button) = @_;
- if ($bool) { $button->show } else { $button->hide }
-}
-
-
-sub strip_first_underscore {
- join '', map { s/([^_]*)_(.*)/$1$2/; $_ } @_;
-}
diff --git a/perl-install/standalone/icons/categ.png b/perl-install/standalone/icons/categ.png
deleted file mode 100644
index b466e0f43..000000000
--- a/perl-install/standalone/icons/categ.png
+++ /dev/null
Binary files differ
diff --git a/perl-install/standalone/icons/drakTS.620x57.png b/perl-install/standalone/icons/drakTS.620x57.png
deleted file mode 100644
index d4735df1d..000000000
--- a/perl-install/standalone/icons/drakTS.620x57.png
+++ /dev/null
Binary files differ
diff --git a/perl-install/standalone/icons/drakbackup.540x57.png b/perl-install/standalone/icons/drakbackup.540x57.png
deleted file mode 100644
index 18d207e5d..000000000
--- a/perl-install/standalone/icons/drakbackup.540x57.png
+++ /dev/null
Binary files differ
diff --git a/perl-install/standalone/icons/drakconnect_step.png b/perl-install/standalone/icons/drakconnect_step.png
deleted file mode 100644
index e2ddf46d7..000000000
--- a/perl-install/standalone/icons/drakconnect_step.png
+++ /dev/null
Binary files differ
diff --git a/perl-install/standalone/icons/drakfont.620x57.png b/perl-install/standalone/icons/drakfont.620x57.png
deleted file mode 100644
index da4527a7a..000000000
--- a/perl-install/standalone/icons/drakfont.620x57.png
+++ /dev/null
Binary files differ
diff --git a/perl-install/standalone/icons/eth_card_mini2.png b/perl-install/standalone/icons/eth_card_mini2.png
deleted file mode 100644
index 6efbe637c..000000000
--- a/perl-install/standalone/icons/eth_card_mini2.png
+++ /dev/null
Binary files differ
diff --git a/perl-install/standalone/icons/fileopen.xpm b/perl-install/standalone/icons/fileopen.xpm
deleted file mode 100644
index 74049e224..000000000
--- a/perl-install/standalone/icons/fileopen.xpm
+++ /dev/null
@@ -1,34 +0,0 @@
-/* XPM */
-/* Drawn by Mark Donohoe for the K Desktop Environment */
-/* See http://www.kde.org */
-static char*fileopen[]={
-"22 22 6 1",
-"# c #000000",
-"d c #808080",
-"c c #c0c0c0",
-"b c #ffffff",
-"a c #dcdcdc",
-". c None",
-"......................",
-"......................",
-"............####......",
-"...............##.#...",
-"................###...",
-"................###...",
-"...............####...",
-"....####..............",
-"....#aba#######.......",
-"....#babababab#.......",
-"....#aa##########.....",
-"....#ba#aacccccd#.....",
-"....#a#aacacccd#......",
-"....#a#aacccdcd#......",
-"....##aacacccd#.......",
-"....##aacccdcd#.......",
-"....#dddddddd#........",
-"....##########........",
-"......................",
-"......................",
-"......................",
-"......................"};
-
diff --git a/perl-install/standalone/icons/find.xpm b/perl-install/standalone/icons/find.xpm
deleted file mode 100644
index 3145ca7fe..000000000
--- a/perl-install/standalone/icons/find.xpm
+++ /dev/null
@@ -1,34 +0,0 @@
-/* XPM */
-/* Drawn by Mark Donohoe for the K Desktop Environment */
-/* See http://www.kde.org */
-static char*find[]={
-"22 22 6 1",
-"# c #000000",
-"c c #ffffff",
-"b c #dcdcdc",
-"a c #a0a0a4",
-"d c #dcdcdc",
-". c None",
-"......................",
-"......................",
-"......................",
-".......####...........",
-".....a#bccd#a.........",
-".....#ccaacc#a........",
-"....#dcaccccd#........",
-"....#cccccccc#........",
-"....#cccccccc#........",
-"....#dccccccd#........",
-"....a#cccccc#a........",
-".....a#dccd###........",
-"......a####a###.......",
-".......aaaaaa###......",
-"............aa###.....",
-".............aa###....",
-"..............aa###...",
-"...............aa#a...",
-"................aa....",
-"......................",
-"......................",
-"......................"};
-
diff --git a/perl-install/standalone/icons/findf.xpm b/perl-install/standalone/icons/findf.xpm
deleted file mode 100644
index 792007335..000000000
--- a/perl-install/standalone/icons/findf.xpm
+++ /dev/null
@@ -1,31 +0,0 @@
-/* XPM */
-static char * findf_xpm[] = {
-"16 22 6 1",
-" c None",
-". c #000000",
-"+ c #FFFFFF",
-"@ c #0000FF",
-"# c #BEBEFF",
-"$ c #C0C0C0",
-" ",
-" ",
-" ",
-" ........... ",
-".+++++++++++. ",
-".++++++++@#+. ",
-".+++++++++@+. ",
-".++++$...$++. ",
-".+++$.+++.$+. ",
-".+++.+#+#+.+. ",
-".+++.+@@++.+. ",
-".+++.++@#+.+. ",
-".+++$.+++..+. ",
-".@#++$....+.. ",
-".+@+++++++.+. ",
-".++++++++++.+. ",
-".++@#+++++++.+. ",
-" ........... .+.",
-" . ",
-" ",
-" ",
-" "};
diff --git a/perl-install/standalone/icons/ftin.xpm b/perl-install/standalone/icons/ftin.xpm
deleted file mode 100644
index d0326d3ce..000000000
--- a/perl-install/standalone/icons/ftin.xpm
+++ /dev/null
@@ -1,30 +0,0 @@
-/* XPM */
-static char * ftin_xpm[] = {
-"15 22 5 1",
-" c None",
-". c #CD0000",
-"+ c #FFFFFF",
-"@ c #C0C0C0",
-"# c #808080",
-" ",
-" ",
-" ",
-" ",
-" ",
-" . . ",
-" ... ",
-" ...++++++++",
-" ...@@@@@@++",
-" .......+++++#",
-" .....@@@++#+",
-" ++...+++++#+#",
-" +@@@.@@@++#+#+",
-"++++++++++#+#+ ",
-"##########+#+ ",
-"++++++++++#+ ",
-"##########+ ",
-"++++++++++ ",
-" ",
-" ",
-" ",
-" "};
diff --git a/perl-install/standalone/icons/ftout.xpm b/perl-install/standalone/icons/ftout.xpm
deleted file mode 100644
index b4e0135b8..000000000
--- a/perl-install/standalone/icons/ftout.xpm
+++ /dev/null
@@ -1,30 +0,0 @@
-/* XPM */
-static char * ftout_xpm[] = {
-"15 22 5 1",
-" c None",
-". c #00008B",
-"+ c #FFFFFF",
-"@ c #C0C0C0",
-"# c #808080",
-" ",
-" ",
-" ",
-" ",
-" ",
-" . ",
-" ... ",
-" .....+++++++",
-" .......@@@@++",
-" ...+++++++#",
-" +...@@@@++#+",
-" ++...+++++#+#",
-" +@@.+.@@++#+#+",
-"++++++++++#+#+ ",
-"##########+#+ ",
-"++++++++++#+ ",
-"##########+ ",
-"++++++++++ ",
-" ",
-" ",
-" ",
-" "};
diff --git a/perl-install/standalone/icons/gmon.png b/perl-install/standalone/icons/gmon.png
deleted file mode 100644
index 182adca81..000000000
--- a/perl-install/standalone/icons/gmon.png
+++ /dev/null
Binary files differ
diff --git a/perl-install/standalone/icons/harddrake2/cd.png b/perl-install/standalone/icons/harddrake2/cd.png
deleted file mode 100644
index bafe8df2c..000000000
--- a/perl-install/standalone/icons/harddrake2/cd.png
+++ /dev/null
Binary files differ
diff --git a/perl-install/standalone/icons/harddrake2/cpu.png b/perl-install/standalone/icons/harddrake2/cpu.png
deleted file mode 100644
index 404fd1bd6..000000000
--- a/perl-install/standalone/icons/harddrake2/cpu.png
+++ /dev/null
Binary files differ
diff --git a/perl-install/standalone/icons/harddrake2/floppy.png b/perl-install/standalone/icons/harddrake2/floppy.png
deleted file mode 100644
index 65fc529d5..000000000
--- a/perl-install/standalone/icons/harddrake2/floppy.png
+++ /dev/null
Binary files differ
diff --git a/perl-install/standalone/icons/harddrake2/harddisk.png b/perl-install/standalone/icons/harddrake2/harddisk.png
deleted file mode 100644
index a5505988b..000000000
--- a/perl-install/standalone/icons/harddrake2/harddisk.png
+++ /dev/null
Binary files differ
diff --git a/perl-install/standalone/icons/harddrake2/harddrake.png b/perl-install/standalone/icons/harddrake2/harddrake.png
deleted file mode 100644
index 285a5db02..000000000
--- a/perl-install/standalone/icons/harddrake2/harddrake.png
+++ /dev/null
Binary files differ
diff --git a/perl-install/standalone/icons/harddrake2/hw_mouse.png b/perl-install/standalone/icons/harddrake2/hw_mouse.png
deleted file mode 100644
index eff10b81b..000000000
--- a/perl-install/standalone/icons/harddrake2/hw_mouse.png
+++ /dev/null
Binary files differ
diff --git a/perl-install/standalone/icons/harddrake2/hw_network.png b/perl-install/standalone/icons/harddrake2/hw_network.png
deleted file mode 100644
index d10e42acd..000000000
--- a/perl-install/standalone/icons/harddrake2/hw_network.png
+++ /dev/null
Binary files differ
diff --git a/perl-install/standalone/icons/harddrake2/hw_printer.png b/perl-install/standalone/icons/harddrake2/hw_printer.png
deleted file mode 100644
index 3223db418..000000000
--- a/perl-install/standalone/icons/harddrake2/hw_printer.png
+++ /dev/null
Binary files differ
diff --git a/perl-install/standalone/icons/harddrake2/ide_hd.png b/perl-install/standalone/icons/harddrake2/ide_hd.png
deleted file mode 100644
index 872a449a2..000000000
--- a/perl-install/standalone/icons/harddrake2/ide_hd.png
+++ /dev/null
Binary files differ
diff --git a/perl-install/standalone/icons/harddrake2/isdn.png b/perl-install/standalone/icons/harddrake2/isdn.png
deleted file mode 100644
index f4da131d2..000000000
--- a/perl-install/standalone/icons/harddrake2/isdn.png
+++ /dev/null
Binary files differ
diff --git a/perl-install/standalone/icons/harddrake2/joystick.png b/perl-install/standalone/icons/harddrake2/joystick.png
deleted file mode 100644
index 3f56d8126..000000000
--- a/perl-install/standalone/icons/harddrake2/joystick.png
+++ /dev/null
Binary files differ
diff --git a/perl-install/standalone/icons/harddrake2/keyboard.png b/perl-install/standalone/icons/harddrake2/keyboard.png
deleted file mode 100644
index 04e6bd0e7..000000000
--- a/perl-install/standalone/icons/harddrake2/keyboard.png
+++ /dev/null
Binary files differ
diff --git a/perl-install/standalone/icons/harddrake2/memory.png b/perl-install/standalone/icons/harddrake2/memory.png
deleted file mode 100644
index 1f6f57bed..000000000
--- a/perl-install/standalone/icons/harddrake2/memory.png
+++ /dev/null
Binary files differ
diff --git a/perl-install/standalone/icons/harddrake2/menu/harddrake-menu16.png b/perl-install/standalone/icons/harddrake2/menu/harddrake-menu16.png
deleted file mode 100644
index 285a5db02..000000000
--- a/perl-install/standalone/icons/harddrake2/menu/harddrake-menu16.png
+++ /dev/null
Binary files differ
diff --git a/perl-install/standalone/icons/harddrake2/menu/harddrake-menu32.png b/perl-install/standalone/icons/harddrake2/menu/harddrake-menu32.png
deleted file mode 100644
index ceb1c7dca..000000000
--- a/perl-install/standalone/icons/harddrake2/menu/harddrake-menu32.png
+++ /dev/null
Binary files differ
diff --git a/perl-install/standalone/icons/harddrake2/menu/harddrake-menu48.png b/perl-install/standalone/icons/harddrake2/menu/harddrake-menu48.png
deleted file mode 100644
index e21b44956..000000000
--- a/perl-install/standalone/icons/harddrake2/menu/harddrake-menu48.png
+++ /dev/null
Binary files differ
diff --git a/perl-install/standalone/icons/harddrake2/modem.png b/perl-install/standalone/icons/harddrake2/modem.png
deleted file mode 100644
index f070e6004..000000000
--- a/perl-install/standalone/icons/harddrake2/modem.png
+++ /dev/null
Binary files differ
diff --git a/perl-install/standalone/icons/harddrake2/multimedia.png b/perl-install/standalone/icons/harddrake2/multimedia.png
deleted file mode 100644
index 86607e2d0..000000000
--- a/perl-install/standalone/icons/harddrake2/multimedia.png
+++ /dev/null
Binary files differ
diff --git a/perl-install/standalone/icons/harddrake2/scanner.png b/perl-install/standalone/icons/harddrake2/scanner.png
deleted file mode 100644
index a8263f630..000000000
--- a/perl-install/standalone/icons/harddrake2/scanner.png
+++ /dev/null
Binary files differ
diff --git a/perl-install/standalone/icons/harddrake2/scsi.png b/perl-install/standalone/icons/harddrake2/scsi.png
deleted file mode 100644
index 16bcfee25..000000000
--- a/perl-install/standalone/icons/harddrake2/scsi.png
+++ /dev/null
Binary files differ
diff --git a/perl-install/standalone/icons/harddrake2/scsi_hd.png b/perl-install/standalone/icons/harddrake2/scsi_hd.png
deleted file mode 100644
index 16bcfee25..000000000
--- a/perl-install/standalone/icons/harddrake2/scsi_hd.png
+++ /dev/null
Binary files differ
diff --git a/perl-install/standalone/icons/harddrake2/sound.png b/perl-install/standalone/icons/harddrake2/sound.png
deleted file mode 100644
index f4af73412..000000000
--- a/perl-install/standalone/icons/harddrake2/sound.png
+++ /dev/null
Binary files differ
diff --git a/perl-install/standalone/icons/harddrake2/tape.png b/perl-install/standalone/icons/harddrake2/tape.png
deleted file mode 100644
index a298a64f4..000000000
--- a/perl-install/standalone/icons/harddrake2/tape.png
+++ /dev/null
Binary files differ
diff --git a/perl-install/standalone/icons/harddrake2/tv.png b/perl-install/standalone/icons/harddrake2/tv.png
deleted file mode 100644
index aa71bb756..000000000
--- a/perl-install/standalone/icons/harddrake2/tv.png
+++ /dev/null
Binary files differ
diff --git a/perl-install/standalone/icons/harddrake2/unknown.png b/perl-install/standalone/icons/harddrake2/unknown.png
deleted file mode 100644
index d6f6bbf2e..000000000
--- a/perl-install/standalone/icons/harddrake2/unknown.png
+++ /dev/null
Binary files differ
diff --git a/perl-install/standalone/icons/harddrake2/usb.png b/perl-install/standalone/icons/harddrake2/usb.png
deleted file mode 100644
index b13505124..000000000
--- a/perl-install/standalone/icons/harddrake2/usb.png
+++ /dev/null
Binary files differ
diff --git a/perl-install/standalone/icons/harddrake2/video.png b/perl-install/standalone/icons/harddrake2/video.png
deleted file mode 100644
index 69c9cfaa2..000000000
--- a/perl-install/standalone/icons/harddrake2/video.png
+++ /dev/null
Binary files differ
diff --git a/perl-install/standalone/icons/harddrake2/webcam.png b/perl-install/standalone/icons/harddrake2/webcam.png
deleted file mode 100644
index 3ca2ce2a6..000000000
--- a/perl-install/standalone/icons/harddrake2/webcam.png
+++ /dev/null
Binary files differ
diff --git a/perl-install/standalone/icons/hori.png b/perl-install/standalone/icons/hori.png
deleted file mode 100644
index 595805edf..000000000
--- a/perl-install/standalone/icons/hori.png
+++ /dev/null
Binary files differ
diff --git a/perl-install/standalone/icons/ic-drakfont-48.png b/perl-install/standalone/icons/ic-drakfont-48.png
deleted file mode 100644
index c4473e6b5..000000000
--- a/perl-install/standalone/icons/ic-drakfont-48.png
+++ /dev/null
Binary files differ
diff --git a/perl-install/standalone/icons/ic82-CD-40.png b/perl-install/standalone/icons/ic82-CD-40.png
deleted file mode 100644
index 5193e7335..000000000
--- a/perl-install/standalone/icons/ic82-CD-40.png
+++ /dev/null
Binary files differ
diff --git a/perl-install/standalone/icons/ic82-back-up-16.png b/perl-install/standalone/icons/ic82-back-up-16.png
deleted file mode 100644
index 20188e863..000000000
--- a/perl-install/standalone/icons/ic82-back-up-16.png
+++ /dev/null
Binary files differ
diff --git a/perl-install/standalone/icons/ic82-back-up-32.png b/perl-install/standalone/icons/ic82-back-up-32.png
deleted file mode 100644
index 8295f3725..000000000
--- a/perl-install/standalone/icons/ic82-back-up-32.png
+++ /dev/null
Binary files differ
diff --git a/perl-install/standalone/icons/ic82-back-up-48.png b/perl-install/standalone/icons/ic82-back-up-48.png
deleted file mode 100644
index a974f8716..000000000
--- a/perl-install/standalone/icons/ic82-back-up-48.png
+++ /dev/null
Binary files differ
diff --git a/perl-install/standalone/icons/ic82-discdurwhat-40.png b/perl-install/standalone/icons/ic82-discdurwhat-40.png
deleted file mode 100644
index 73bef43ac..000000000
--- a/perl-install/standalone/icons/ic82-discdurwhat-40.png
+++ /dev/null
Binary files differ
diff --git a/perl-install/standalone/icons/ic82-dossier-32.png b/perl-install/standalone/icons/ic82-dossier-32.png
deleted file mode 100644
index 4502dad27..000000000
--- a/perl-install/standalone/icons/ic82-dossier-32.png
+++ /dev/null
Binary files differ
diff --git a/perl-install/standalone/icons/ic82-moreoption-40.png b/perl-install/standalone/icons/ic82-moreoption-40.png
deleted file mode 100644
index d15130bea..000000000
--- a/perl-install/standalone/icons/ic82-moreoption-40.png
+++ /dev/null
Binary files differ
diff --git a/perl-install/standalone/icons/ic82-network-40.png b/perl-install/standalone/icons/ic82-network-40.png
deleted file mode 100644
index 1d688ca48..000000000
--- a/perl-install/standalone/icons/ic82-network-40.png
+++ /dev/null
Binary files differ
diff --git a/perl-install/standalone/icons/ic82-others-40.png b/perl-install/standalone/icons/ic82-others-40.png
deleted file mode 100644
index 6447a7eca..000000000
--- a/perl-install/standalone/icons/ic82-others-40.png
+++ /dev/null
Binary files differ
diff --git a/perl-install/standalone/icons/ic82-system-40.png b/perl-install/standalone/icons/ic82-system-40.png
deleted file mode 100644
index 6b35675e8..000000000
--- a/perl-install/standalone/icons/ic82-system-40.png
+++ /dev/null
Binary files differ
diff --git a/perl-install/standalone/icons/ic82-users-40.png b/perl-install/standalone/icons/ic82-users-40.png
deleted file mode 100644
index d9ae81534..000000000
--- a/perl-install/standalone/icons/ic82-users-40.png
+++ /dev/null
Binary files differ
diff --git a/perl-install/standalone/icons/ic82-when-40.png b/perl-install/standalone/icons/ic82-when-40.png
deleted file mode 100644
index 2846435c8..000000000
--- a/perl-install/standalone/icons/ic82-when-40.png
+++ /dev/null
Binary files differ
diff --git a/perl-install/standalone/icons/ic82-where-40.png b/perl-install/standalone/icons/ic82-where-40.png
deleted file mode 100644
index fdd6beb62..000000000
--- a/perl-install/standalone/icons/ic82-where-40.png
+++ /dev/null
Binary files differ
diff --git a/perl-install/standalone/icons/mdk_logo.png b/perl-install/standalone/icons/mdk_logo.png
deleted file mode 100644
index fe7bc4b4f..000000000
--- a/perl-install/standalone/icons/mdk_logo.png
+++ /dev/null
Binary files differ
diff --git a/perl-install/standalone/icons/net_c.png b/perl-install/standalone/icons/net_c.png
deleted file mode 100644
index 5688f4be1..000000000
--- a/perl-install/standalone/icons/net_c.png
+++ /dev/null
Binary files differ
diff --git a/perl-install/standalone/icons/net_d.png b/perl-install/standalone/icons/net_d.png
deleted file mode 100644
index 1bfdd3ef2..000000000
--- a/perl-install/standalone/icons/net_d.png
+++ /dev/null
Binary files differ
diff --git a/perl-install/standalone/icons/net_u.png b/perl-install/standalone/icons/net_u.png
deleted file mode 100644
index 5c4a16079..000000000
--- a/perl-install/standalone/icons/net_u.png
+++ /dev/null
Binary files differ
diff --git a/perl-install/standalone/icons/reload.xpm b/perl-install/standalone/icons/reload.xpm
deleted file mode 100644
index 658cf36f0..000000000
--- a/perl-install/standalone/icons/reload.xpm
+++ /dev/null
@@ -1,31 +0,0 @@
-/* XPM */
-/* Drawn by Mark Donohoe for the K Desktop Environment */
-/* See http://www.kde.org */
-static char*reload[]={
-"22 22 3 1",
-"# c #808080",
-"a c #000000",
-". c None",
-"......................",
-"......................",
-"......................",
-"......................",
-"........##aaa#........",
-".......#aaaaaaa.......",
-"......#aa#....#a......",
-"......aa#.............",
-".....aaa.......a......",
-"...aaaaaaa....aaa.....",
-"....aaaaa....aaaaa....",
-".....aaa....aaaaaaa...",
-"......a.......aaa.....",
-".............#aa......",
-"......a#....#aa#......",
-".......aaaaaaa#.......",
-"........#aaa##........",
-"......................",
-"......................",
-"......................",
-"......................",
-"......................"};
-
diff --git a/perl-install/standalone/icons/smbnfs_default.png b/perl-install/standalone/icons/smbnfs_default.png
deleted file mode 100644
index 769f171c5..000000000
--- a/perl-install/standalone/icons/smbnfs_default.png
+++ /dev/null
Binary files differ
diff --git a/perl-install/standalone/icons/smbnfs_has_mntpoint.png b/perl-install/standalone/icons/smbnfs_has_mntpoint.png
deleted file mode 100644
index 213ec9eac..000000000
--- a/perl-install/standalone/icons/smbnfs_has_mntpoint.png
+++ /dev/null
Binary files differ
diff --git a/perl-install/standalone/icons/smbnfs_mounted.png b/perl-install/standalone/icons/smbnfs_mounted.png
deleted file mode 100644
index f799b33d1..000000000
--- a/perl-install/standalone/icons/smbnfs_mounted.png
+++ /dev/null
Binary files differ
diff --git a/perl-install/standalone/icons/smbnfs_server.png b/perl-install/standalone/icons/smbnfs_server.png
deleted file mode 100644
index 92af7a316..000000000
--- a/perl-install/standalone/icons/smbnfs_server.png
+++ /dev/null
Binary files differ
diff --git a/perl-install/standalone/icons/tradi.png b/perl-install/standalone/icons/tradi.png
deleted file mode 100644
index a9b19f468..000000000
--- a/perl-install/standalone/icons/tradi.png
+++ /dev/null
Binary files differ
diff --git a/perl-install/standalone/icons/verti.png b/perl-install/standalone/icons/verti.png
deleted file mode 100644
index 6bc84225b..000000000
--- a/perl-install/standalone/icons/verti.png
+++ /dev/null
Binary files differ
diff --git a/perl-install/standalone/icons/wiz_default_left.png b/perl-install/standalone/icons/wiz_default_left.png
deleted file mode 100644
index 2300ab36e..000000000
--- a/perl-install/standalone/icons/wiz_default_left.png
+++ /dev/null
Binary files differ
diff --git a/perl-install/standalone/icons/wiz_default_up.png b/perl-install/standalone/icons/wiz_default_up.png
deleted file mode 100644
index c7c7f586f..000000000
--- a/perl-install/standalone/icons/wiz_default_up.png
+++ /dev/null
Binary files differ
diff --git a/perl-install/standalone/icons/wiz_drakconnect.png b/perl-install/standalone/icons/wiz_drakconnect.png
deleted file mode 100644
index d2e4574b4..000000000
--- a/perl-install/standalone/icons/wiz_drakconnect.png
+++ /dev/null
Binary files differ
diff --git a/perl-install/standalone/icons/wiz_drakgw.png b/perl-install/standalone/icons/wiz_drakgw.png
deleted file mode 100644
index b8b60fe7b..000000000
--- a/perl-install/standalone/icons/wiz_drakgw.png
+++ /dev/null
Binary files differ
diff --git a/perl-install/standalone/icons/wiz_firewall.png b/perl-install/standalone/icons/wiz_firewall.png
deleted file mode 100644
index c7c7f586f..000000000
--- a/perl-install/standalone/icons/wiz_firewall.png
+++ /dev/null
Binary files differ
diff --git a/perl-install/standalone/icons/wiz_logdrake.png b/perl-install/standalone/icons/wiz_logdrake.png
deleted file mode 100644
index 05d3b63b2..000000000
--- a/perl-install/standalone/icons/wiz_logdrake.png
+++ /dev/null
Binary files differ
diff --git a/perl-install/standalone/icons/wiz_printerdrake.png b/perl-install/standalone/icons/wiz_printerdrake.png
deleted file mode 100644
index 77d58df2c..000000000
--- a/perl-install/standalone/icons/wiz_printerdrake.png
+++ /dev/null
Binary files differ
diff --git a/perl-install/standalone/icons/wiz_scannerdrake.png b/perl-install/standalone/icons/wiz_scannerdrake.png
deleted file mode 100644
index c7c7f586f..000000000
--- a/perl-install/standalone/icons/wiz_scannerdrake.png
+++ /dev/null
Binary files differ
diff --git a/perl-install/standalone/interactive_http/Makefile b/perl-install/standalone/interactive_http/Makefile
deleted file mode 100644
index 5607112c9..000000000
--- a/perl-install/standalone/interactive_http/Makefile
+++ /dev/null
@@ -1,21 +0,0 @@
-NAME=libDrakX
-FNAME=$(NAME)/drakxtools_http
-PREFIX=
-DATADIR=$(PREFIX)/usr/share
-
-all: index.html
-
-index.html: index.html.pl
- perl $^ > $@
-
-install:
- install -D miniserv.init $(PREFIX)/etc/init.d/drakxtools_http
- install -D -m 644 authorised_progs $(PREFIX)/etc/drakxtools_http/authorised_progs
- install -D -m 644 miniserv.conf $(PREFIX)/etc/drakxtools_http/conf
- install -D -m 644 miniserv.pam $(PREFIX)/etc/pam.d/miniserv
- install -D -m 644 miniserv.logrotate $(PREFIX)/etc/logrotate.d/drakxtools-http
-
- install -d $(DATADIR)/$(FNAME)/www
- install -m 644 miniserv.pl miniserv.pem miniserv.users $(DATADIR)/$(FNAME)
- install -m 644 index.html $(DATADIR)/$(FNAME)/www
- install interactive_http.cgi $(DATADIR)/$(FNAME)/www
diff --git a/perl-install/standalone/interactive_http/authorised_progs b/perl-install/standalone/interactive_http/authorised_progs
deleted file mode 100644
index fe95e2768..000000000
--- a/perl-install/standalone/interactive_http/authorised_progs
+++ /dev/null
@@ -1,12 +0,0 @@
-/usr/sbin/XFdrake
-/usr/sbin/adduserdrake
-/usr/sbin/diskdrake
-/usr/sbin/drakautoinst
-/usr/sbin/drakboot
-/usr/sbin/drakgw
-/usr/sbin/drakconnect
-/usr/sbin/drakxservices
-/usr/sbin/keyboarddrake
-/usr/sbin/mousedrake
-/usr/sbin/printerdrake
-/usr/sbin/tinyfirewall
diff --git a/perl-install/standalone/interactive_http/index.html.pl b/perl-install/standalone/interactive_http/index.html.pl
deleted file mode 100644
index afd91459b..000000000
--- a/perl-install/standalone/interactive_http/index.html.pl
+++ /dev/null
@@ -1,14 +0,0 @@
-use MDK::Common;
-
-print '<html>
-';
-foreach (map { chomp_($_) } cat_('authorised_progs')) {
- my $name = basename($_);
- print
-qq(<a href="/interactive_http.cgi?state=new&prog=$_">$name</a>
-<br>
-);
-}
-print '
-</html>
-';
diff --git a/perl-install/standalone/interactive_http/interactive_http.cgi b/perl-install/standalone/interactive_http/interactive_http.cgi
deleted file mode 100755
index 935a4a765..000000000
--- a/perl-install/standalone/interactive_http/interactive_http.cgi
+++ /dev/null
@@ -1,95 +0,0 @@
-#!/usr/bin/perl
-
-use lib qw(/usr/lib/libDrakX);
-use CGI;
-use common;
-use c;
-
-my $q = CGI->new;
-$| = 1;
-
-my $script_name = $q->url(-relative => 1);
-
-# name inversed (must be in sync with interactive_http.html)
-my $pipe_r = "/tmp/interactive_http_w";
-my $pipe_w = "/tmp/interactive_http_r";
-
-if ($q->param('state') eq 'new') {
- force_exit_dead_prog();
- mkfifo($pipe_r); mkfifo($pipe_w);
-
- spawn_server($q->param('prog'));
- first_step();
-
-} elsif ($q->param('state') eq 'next_step') {
- next_step();
-} else {
- error("booh...");
-}
-
-sub read_ {
- local *F;
- open F, "<$pipe_r" or error("Failed to connect to the prog");
- my $t;
- print $t while sysread F, $t, 1;
-}
-sub write_ {
- local *F;
- open F, ">$pipe_w" or die;
- my $q = CGI->new;
- $q->save(\*F);
-}
-
-sub first_step { read_() }
-sub next_step { write_(); read_() }
-
-
-sub force_exit_dead_prog {
- -p $pipe_w or return;
- {
- local *F;
- sysopen F, $pipe_w, 1 | c::O_NONBLOCK() or return;
- syswrite F, "force_exit_dead_prog=1\n";
- }
-
- my $cnt = 10;
- while (-p $pipe_w) {
- sleep 1;
- $cnt-- or error("Dead prog failed to exit");
- }
-}
-
-sub spawn_server {
- my ($prog) = @_;
-
- my @authorised_progs = map { chomp_($_) } cat_('/etc/drakxtools_http/authorised_progs');
- member($prog, @authorised_progs) or error("You tried to call a non-authorised program");
-
- fork and return;
-
- $ENV{INTERACTIVE_HTTP} = $script_name;
-
- open STDIN, "</dev/zero";
- open STDOUT, ">/dev/null"; #tmp/log";
- open STDERR, ">&STDOUT";
-
- c::setsid();
- exec $prog or die "prog $prog not found\n";
-}
-
-sub error {
- my $msg = join '', @_;
-
- print $q->header(), $q->start_html();
- print $q->h1(_("Error")), @_;
- print $q->end_html(), "\n";
- exit 0;
-}
-
-sub mkfifo {
- my ($f) = @_;
- -p $f and return;
- unlink $f;
- syscall_('mknod', $f, c::S_IFIFO() | 0600, 0) or die "mkfifo failed";
- chmod 0666, $f;
-}
diff --git a/perl-install/standalone/interactive_http/miniserv.conf b/perl-install/standalone/interactive_http/miniserv.conf
deleted file mode 100644
index 99f6a5172..000000000
--- a/perl-install/standalone/interactive_http/miniserv.conf
+++ /dev/null
@@ -1,13 +0,0 @@
-ssl=1
-log=1
-port=10001
-listen=10001
-forkcgis=1
-realm=Drakxtools Server
-
-addtype_cgi=internal/cgi
-logfile=/var/log/drakxtools_http.log
-pidfile=/var/run/drakxtools_http.pid
-root=/usr/share/libDrakX/drakxtools_http/www
-keyfile=/usr/share/libDrakX/drakxtools_http/miniserv.pem
-userfile=/usr/share/libDrakX/drakxtools_http/miniserv.users
diff --git a/perl-install/standalone/interactive_http/miniserv.init b/perl-install/standalone/interactive_http/miniserv.init
deleted file mode 100644
index c9aaf9aeb..000000000
--- a/perl-install/standalone/interactive_http/miniserv.init
+++ /dev/null
@@ -1,60 +0,0 @@
-#!/bin/sh
-# chkconfig: 235 99 00
-# description: Start or stop the miniserv administration server
-
-# Source function library.
-. /etc/rc.d/init.d/functions
-
-subsys=/var/lock/subsys/drakxtools_http
-name=drakxtools_http
-server=/usr/share/libDrakX/$name/miniserv.pl
-
-start ()
-{
- action "Starting $name: " perl $server /etc/$name/conf
- touch $subsys
- echo $name
-}
-
-stop ()
-{
- action "Shutting down $name: " kill `cat /var/run/$name.pid`
- rm -f $subsys
- echo $name
-}
-
-restart ()
-{
- stop
- start
-}
-
-case "$1" in
-'start')
- start;;
-'stop')
- stop;;
-'status')
- if [ -s /var/run/$name.pid ]; then
- pid=`cat /var/run/$name.pid`
- kill -0 $pid >/dev/null 2>&1
- if [ "$?" = "0" ]; then
- echo "$name (pid $pid) is running"
- else
- echo "$name is stopped"
- fi
- else
- echo "$name is stopped"
- fi
- ;;
-'restart')
- restart;;
-'reload')
- restart;;
-'condrestart')
- [[ -f $subsys ]] && restart;;
-*)
- echo "Usage: $0 {start|stop|restart|status|reload|condrestart}"
- ;;
-esac
-exit 0
diff --git a/perl-install/standalone/interactive_http/miniserv.logrotate b/perl-install/standalone/interactive_http/miniserv.logrotate
deleted file mode 100644
index b1e833f9b..000000000
--- a/perl-install/standalone/interactive_http/miniserv.logrotate
+++ /dev/null
@@ -1,7 +0,0 @@
-# Logrotate file for drakxtools-http RPM
-
-/var/log/drakxtools_http.log {
- weekly
- notifempty
- missingok
-}
diff --git a/perl-install/standalone/interactive_http/miniserv.pam b/perl-install/standalone/interactive_http/miniserv.pam
deleted file mode 100644
index 37eae44e0..000000000
--- a/perl-install/standalone/interactive_http/miniserv.pam
+++ /dev/null
@@ -1,5 +0,0 @@
-#%PAM-1.0
-auth required /lib/security/pam_stack.so service=system-auth
-account required /lib/security/pam_stack.so service=system-auth
-password required /lib/security/pam_stack.so service=system-auth
-session required /lib/security/pam_stack.so service=system-auth
diff --git a/perl-install/standalone/interactive_http/miniserv.pem b/perl-install/standalone/interactive_http/miniserv.pem
deleted file mode 100644
index e11919e37..000000000
--- a/perl-install/standalone/interactive_http/miniserv.pem
+++ /dev/null
@@ -1,18 +0,0 @@
------BEGIN RSA PRIVATE KEY-----
-MIIBOgIBAAJBANaRBV7X6DWUbTm8KBjjHx4CAHVSQCmei8QIwruVPngwOkEhsgzf
-IT1IY6jyY3QM6a4ASl7xokoy5U4QZ8E/q40CAwEAAQJBAIwMLA0zr4UJVCGTBjj4
-RZ84f0QUY3zG10Mk1LXLO/MFlRol+640x/PB76fPKP+Gx+88s8F6lcx7uV+jB0bM
-F6ECIQD3aYxjgxLinAmTjZf5gJDm/5LeEogML7nJ+aXJs8oAFwIhAN4DnKUfjiim
-pOowhaRqy8b9fjXG8L+SG/+KcZDsWzP7AiBO2gXTRVgEfwSSUUNJUo9b/8I4IqHX
-eHJ3C6ip8zIC+wIgdhsVygHvblC4ip0le0IVBdb0vUcH6+GeY2MS5zXVjuECIEP0
-GLnMXcQ02f8rQz0eeBYVHTNXKRMesgo3ZNcpDB2k
------END RSA PRIVATE KEY-----
------BEGIN CERTIFICATE-----
-MIIBNTCB4AIBADANBgkqhkiG9w0BAQQFADAmMRgwFgYDVQQKEw9XZWJtaW4gU29m
-dHdhcmUxCjAIBgNVBAMUASowHhcNOTgwMTAzMTAzNDUwWhcNMDcxMDAzMTAzNDUw
-WjAmMRgwFgYDVQQKEw9XZWJtaW4gU29mdHdhcmUxCjAIBgNVBAMUASowXDANBgkq
-hkiG9w0BAQEFAANLADBIAkEA1pEFXtfoNZRtObwoGOMfHgIAdVJAKZ6LxAjCu5U+
-eDA6QSGyDN8hPUhjqPJjdAzprgBKXvGiSjLlThBnwT+rjQIDAQABMA0GCSqGSIb3
-DQEBBAUAA0EAFCoYeLlWcClpv2sSc7zIchsMR3DKeH/O1ZtfEezzkaonre78HeYV
-wSQvuoVleb7A497TFcSB6+FON6azoVqPyQ==
------END CERTIFICATE-----
diff --git a/perl-install/standalone/interactive_http/miniserv.pl b/perl-install/standalone/interactive_http/miniserv.pl
deleted file mode 100644
index b11ce26e2..000000000
--- a/perl-install/standalone/interactive_http/miniserv.pl
+++ /dev/null
@@ -1,1817 +0,0 @@
-#!/usr/bin/perl
-# A very simple perl web server used by Webmin
-
-# Require basic libraries
-package miniserv;
-use Socket;
-use POSIX;
-use Sys::Hostname;
-
-# Find and read config file
-if (@ARGV != 1) {
- die "Usage: miniserv.pl <config file>";
- }
-if ($ARGV[0] =~ /^\//) {
- $conf = $ARGV[0];
- }
-else {
- chop($pwd = `pwd`);
- $conf = "$pwd/$ARGV[0]";
- }
-open(CONF, $conf) || die "Failed to open config file $conf : $!";
-while(<CONF>) {
- s/\r|\n//g;
- if (/^#/ || !/\S/) { next; }
- /^([^=]+)=(.*)$/;
- $name = $1; $val = $2;
- $name =~ s/^\s+//g; $name =~ s/\s+$//g;
- $val =~ s/^\s+//g; $val =~ s/\s+$//g;
- $config{$name} = $val;
- }
-close(CONF);
-
-# Check is SSL is enabled and available
-if ($config{'ssl'}) {
- eval "use Net::SSLeay";
- if (!$@) {
- $use_ssl = 1;
- # These functions only exist for SSLeay 1.0
- eval "Net::SSLeay::SSLeay_add_ssl_algorithms()";
- eval "Net::SSLeay::load_error_strings()";
- if (defined(&Net::SSLeay::X509_STORE_CTX_get_current_cert) &&
- defined(&Net::SSLeay::CTX_load_verify_locations) &&
- defined(&Net::SSLeay::CTX_set_verify)) {
- $client_certs = 1;
- }
- }
- }
-
-# Check if the syslog module is available to log hacking attempts
-if ($config{'syslog'}) {
- eval "use Sys::Syslog qw(:DEFAULT setlogsock)";
- if (!$@) {
- $use_syslog = 1;
- }
- }
-
-# check if the PAM module is available to authenticate
-eval "use Authen::PAM";
-if (!$@) {
- # check if the PAM authentication can be used by opening a handle
- if (! ref($pamh = new Authen::PAM("miniserv", "root", \&pam_conv_func))) {
- print STDERR "PAM module available, but error during init !\n";
- print STDERR "Disabling PAM functions.\n";
- }
- else {
- $use_pam = 1;
- }
- }
-
-# check if the TCP-wrappers module is available
-if ($config{'libwrap'}) {
- eval "use Authen::Libwrap qw(hosts_ctl STRING_UNKNOWN)";
- if (!$@) {
- $use_libwrap = 1;
- }
- }
-
-# Get miniserv's perl path and location
-$miniserv_path = $0;
-open(SOURCE, $miniserv_path);
-<SOURCE> =~ /^#!(\S+)/; $perl_path = $1;
-close(SOURCE);
-@miniserv_argv = @ARGV;
-
-# Check vital config options
-%vital = ("port", 80,
- "root", "./",
- "server", "MiniServ/0.01",
- "index_docs", "index.html index.htm index.cgi",
- "addtype_html", "text/html",
- "addtype_txt", "text/plain",
- "addtype_gif", "image/gif",
- "addtype_jpg", "image/jpeg",
- "addtype_jpeg", "image/jpeg",
- "realm", "MiniServ",
- "session_login", "/session_login.cgi"
- );
-foreach $v (keys %vital) {
- if (!$config{$v}) {
- if ($vital{$v} eq "") {
- die "Missing config option $v";
- }
- $config{$v} = $vital{$v};
- }
- }
-if (!$config{'sessiondb'}) {
- $config{'pidfile'} =~ /^(.*)\/[^\/]+$/;
- $config{'sessiondb'} = "$1/sessiondb";
- }
-die "Session authentication cannot be used in inetd mode"
- if ($config{'inetd'} && $config{'session'});
-
-# init days and months for http_date
-@weekday = ( "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" );
-@month = ( "Jan", "Feb", "Mar", "Apr", "May", "Jun",
- "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" );
-
-# Change dir to the server root
-chdir($config{'root'});
-$user_homedir = (getpwuid($<))[7];
-
-# Read users file
-if ($config{'userfile'}) {
- open(USERS, $config{'userfile'});
- while(<USERS>) {
- s/\r|\n//g;
- local @user = split(/:/, $_);
- $users{$user[0]} = $user[1];
- $certs{$user[0]} = $user[3] if ($user[3]);
- if ($user[4] =~ /^allow\s+(.*)/) {
- $allow{$user[0]} = [ &to_ipaddress(split(/\s+/, $1)) ];
- }
- elsif ($user[4] =~ /^deny\s+(.*)/) {
- $deny{$user[0]} = [ &to_ipaddress(split(/\s+/, $1)) ];
- }
- }
- close(USERS);
- }
-
-# Setup SSL if possible and if requested
-if ($use_ssl) {
- $ssl_ctx = Net::SSLeay::CTX_new() ||
- die "Failed to create SSL context : $!";
- $client_certs = 0 if (!$config{'ca'} || !%certs);
- if ($client_certs) {
- Net::SSLeay::CTX_load_verify_locations(
- $ssl_ctx, $config{'ca'}, "");
- Net::SSLeay::CTX_set_verify(
- $ssl_ctx, &Net::SSLeay::VERIFY_PEER, \&verify_client);
- }
-
- Net::SSLeay::CTX_use_RSAPrivateKey_file(
- $ssl_ctx, $config{'keyfile'},
- &Net::SSLeay::FILETYPE_PEM) || die "Failed to open SSL key";
- Net::SSLeay::CTX_use_certificate_file(
- $ssl_ctx, $config{'keyfile'},
- &Net::SSLeay::FILETYPE_PEM);
- }
-
-# Setup syslog support if possible and if requested
-if ($use_syslog) {
- eval { openlog("miniserv", "cons,pid,ndelay", "daemon") };
- $use_syslog = 0 if ($@);
- }
-
-# Read MIME types file and add extra types
-if ($config{"mimetypes"} ne "") {
- open(MIME, $config{"mimetypes"});
- while(<MIME>) {
- chop; s/#.*$//;
- if (/^(\S+)\s+(.*)$/) {
- $type = $1; @exts = split(/\s+/, $2);
- foreach $ext (@exts) {
- $mime{$ext} = $type;
- }
- }
- }
- close(MIME);
- }
-foreach $k (keys %config) {
- if ($k !~ /^addtype_(.*)$/) { next; }
- $mime{$1} = $config{$k};
- }
-
-# get the time zone
-if ($config{'log'}) {
- local(@gmt, @lct, $days, $hours, $mins);
- @make_date_marr = ("Jan", "Feb", "Mar", "Apr", "May", "Jun",
- "Jul", "Aug", "Sep", "Oct", "Nov", "Dec");
- @gmt = gmtime(time());
- @lct = localtime(time());
- $days = $lct[3] - $gmt[3];
- $hours = ($days < -1 ? 24 : 1 < $days ? -24 : $days * 24) +
- $lct[2] - $gmt[2];
- $mins = $hours * 60 + $lct[1] - $gmt[1];
- $timezone = ($mins < 0 ? "-" : "+"); $mins = abs($mins);
- $timezone .= sprintf "%2.2d%2.2d", $mins/60, $mins%60;
- }
-
-if ($config{'inetd'}) {
- # We are being run from inetd - go direct to handling the request
- $SIG{'HUP'} = 'IGNORE';
- $SIG{'TERM'} = 'DEFAULT';
- $SIG{'PIPE'} = 'DEFAULT';
- open(SOCK, "+>&STDIN");
-
- # Check if it is time for the logfile to be cleared
- if ($config{'logclear'}) {
- local $write_logtime = 0;
- local @st = stat("$config{'logfile'}.time");
- if (@st) {
- if ($st[9]+$config{'logtime'}*60*60 < time()){
- # need to clear log
- $write_logtime = 1;
- unlink($config{'logfile'});
- }
- }
- else { $write_logtime = 1; }
- if ($write_logtime) {
- open(LOGTIME, ">$config{'logfile'}.time");
- print LOGTIME time(),"\n";
- close(LOGTIME);
- }
- }
-
- # Initialize SSL for this connection
- if ($use_ssl) {
- $ssl_con = Net::SSLeay::new($ssl_ctx);
- Net::SSLeay::set_fd($ssl_con, fileno(SOCK));
- #Net::SSLeay::use_RSAPrivateKey_file(
- # $ssl_con, $config{'keyfile'},
- # &Net::SSLeay::FILETYPE_PEM);
- #Net::SSLeay::use_certificate_file(
- # $ssl_con, $config{'keyfile'},
- # &Net::SSLeay::FILETYPE_PEM);
- Net::SSLeay::accept($ssl_con) || exit;
- }
-
- # Work out the hostname for this web server
- if (!$config{'host'}) {
- ($myport, $myaddr) =
- unpack_sockaddr_in(getsockname(SOCK));
- $myname = gethostbyaddr($myaddr, AF_INET);
- if ($myname eq "") {
- $myname = inet_ntoa($myaddr);
- }
- $host = $myname;
- }
- else { $host = $config{'host'}; }
- $port = $config{'port'};
-
- while(&handle_request(getpeername(SOCK), getsockname(SOCK))) { }
- close(SOCK);
- exit;
- }
-
-# Open main socket
-$proto = getprotobyname('tcp');
-socket(MAIN, PF_INET, SOCK_STREAM, $proto) ||
- die "Failed to open main socket : $!";
-setsockopt(MAIN, SOL_SOCKET, SO_REUSEADDR, pack("l", 1));
-$baddr = $config{"bind"} ? inet_aton($config{"bind"}) : INADDR_ANY;
-for($i=0; $i<5; $i++) {
- last if (bind(MAIN, sockaddr_in($config{port}, $baddr)));
- sleep(1);
- }
-die "Failed to bind port $config{port} : $!" if ($i == 5);
-listen(MAIN, SOMAXCONN);
-
-if ($config{'listen'}) {
- # Open the socket that allows other miniserv servers to find this one
- $proto = getprotobyname('udp');
- if (socket(LISTEN, PF_INET, SOCK_DGRAM, $proto)) {
- setsockopt(LISTEN, SOL_SOCKET, SO_REUSEADDR, pack("l", 1));
- bind(LISTEN, sockaddr_in($config{'listen'}, INADDR_ANY));
- listen(LISTEN, SOMAXCONN);
- }
- else {
- print STDERR "Failed to open listening socket : $!\n";
- $config{'listen'} = 0;
- }
- }
-
-
-# Split from the controlling terminal
-if (fork()) { exit; }
-setsid();
-
-# write out the PID file
-open(PIDFILE, "> $config{'pidfile'}");
-printf PIDFILE "%d\n", getpid();
-close(PIDFILE);
-
-# Start the log-clearing process, if needed. This checks every minute
-# to see if the log has passed its reset time, and if so clears it
-if ($config{'logclear'}) {
- if (!($logclearer = fork())) {
- while(1) {
- local $write_logtime = 0;
- local @st = stat("$config{'logfile'}.time");
- if (@st) {
- if ($st[9]+$config{'logtime'}*60*60 < time()){
- # need to clear log
- $write_logtime = 1;
- unlink($config{'logfile'});
- }
- }
- else { $write_logtime = 1; }
- if ($write_logtime) {
- open(LOGTIME, ">$config{'logfile'}.time");
- print LOGTIME time(),"\n";
- close(LOGTIME);
- }
- sleep(5*60);
- }
- exit;
- }
- push(@childpids, $logclearer);
- }
-
-# Setup the logout time dbm if needed
-if ($config{'session'}) {
- eval "use SDBM_File";
- dbmopen(%sessiondb, $config{'sessiondb'}, 0700);
- eval { $sessiondb{'1111111111'} = 'foo bar' };
- if ($@) {
- dbmclose(%sessiondb);
- eval "use NDBM_File";
- dbmopen(%sessiondb, $config{'sessiondb'}, 0700);
- }
- }
-
-# Run the main loop
-$SIG{'HUP'} = 'miniserv::trigger_restart';
-$SIG{'TERM'} = 'miniserv::term_handler';
-$SIG{'PIPE'} = 'IGNORE';
-@deny = &to_ipaddress(split(/\s+/, $config{"deny"}));
-@allow = &to_ipaddress(split(/\s+/, $config{"allow"}));
-$p = 0;
-while(1) {
- # wait for a new connection, or a message from a child process
- undef($rmask);
- vec($rmask, fileno(MAIN), 1) = 1;
- if ($config{'passdelay'} || $config{'session'}) {
- for($i=0; $i<@passin; $i++) {
- vec($rmask, fileno($passin[$i]), 1) = 1;
- }
- }
- vec($rmask, fileno(LISTEN), 1) = 1 if ($config{'listen'});
-
- local $sel = select($rmask, undef, undef, 10);
- if ($need_restart) { &restart_miniserv(); }
- local $time_now = time();
-
- # Clean up finished processes
- local($pid);
- do { $pid = waitpid(-1, WNOHANG);
- @childpids = grep { $_ != $pid } @childpids;
- } while($pid > 0);
-
- # run the unblocking procedure to check if enough time has passed to
- # unblock hosts that heve been blocked because of password failures
- if ($config{'blockhost_failures'}) {
- $i = 0;
- while ($i <= $#deny) {
- if ($blockhosttime{$deny[$i]} && $config{'blockhost_time'} != 0 &&
- ($time_now - $blockhosttime{$deny[$i]}) >= $config{'blockhost_time'}) {
- # the host can be unblocked now
- $hostfail{$deny[$i]} = 0;
- splice(@deny, $i, 1);
- }
- $i++;
- }
- }
-
- if ($config{'session'}) {
- # Remove sessions with more than 7 days of inactivity
- foreach $s (keys %sessiondb) {
- local ($user, $ltime) = split(/\s+/, $sessiondb{$s});
- if ($time_now - $ltime > 7*24*60*60) {
- delete($sessiondb{$s});
- }
- }
- }
- next if ($sel <= 0);
- if (vec($rmask, fileno(MAIN), 1)) {
- # got new connection
- $acptaddr = accept(SOCK, MAIN);
- if (!$acptaddr) { next; }
-
- # create pipes
- if ($config{'passdelay'} || $config{'session'}) {
- $PASSINr = "PASSINr$p"; $PASSINw = "PASSINw$p";
- $PASSOUTr = "PASSOUTr$p"; $PASSOUTw = "PASSOUTw$p";
- $p++;
- pipe($PASSINr, $PASSINw);
- pipe($PASSOUTr, $PASSOUTw);
- select($PASSINw); $| = 1; select($PASSINr); $| = 1;
- select($PASSOUTw); $| = 1; select($PASSOUTw); $| = 1;
- }
- select(STDOUT);
-
- # Check username of connecting user
- local ($peerp, $peera) = unpack_sockaddr_in($acptaddr);
- $localauth_user = undef;
- if ($config{'localauth'} && inet_ntoa($peera) eq "127.0.0.1") {
- if (open(TCP, "/proc/net/tcp")) {
- # Get the info direct from the kernel
- while(<TCP>) {
- s/^\s+//;
- local @t = split(/[\s:]+/, $_);
- if ($t[1] eq '0100007F' &&
- $t[2] eq sprintf("%4.4X", $peerp)) {
- $localauth_user = getpwuid($t[11]);
- last;
- }
- }
- close(TCP);
- }
- else {
- # Call lsof for the info
- local $lsofpid = open(LSOF,
- "$config{'localauth'} -i TCP\@127.0.0.1:$peerp |");
- while(<LSOF>) {
- if (/^(\S+)\s+(\d+)\s+(\S+)/ &&
- $2 != $$ && $2 != $lsofpid) {
- $localauth_user = $3;
- }
- }
- close(LSOF);
- }
- }
-
- # fork the subprocess
- if (!($handpid = fork())) {
- # setup signal handlers
- $SIG{'TERM'} = 'DEFAULT';
- $SIG{'PIPE'} = 'DEFAULT';
- #$SIG{'CHLD'} = 'IGNORE';
- $SIG{'HUP'} = 'IGNORE';
-
- # Initialize SSL for this connection
- if ($use_ssl) {
- $ssl_con = Net::SSLeay::new($ssl_ctx);
- Net::SSLeay::set_fd($ssl_con, fileno(SOCK));
- #Net::SSLeay::use_RSAPrivateKey_file(
- # $ssl_con, $config{'keyfile'},
- # &Net::SSLeay::FILETYPE_PEM);
- #Net::SSLeay::use_certificate_file(
- # $ssl_con, $config{'keyfile'},
- # &Net::SSLeay::FILETYPE_PEM);
- Net::SSLeay::accept($ssl_con) || exit;
- }
-
- # close useless pipes
- if ($config{'passdelay'} || $config{'session'}) {
- foreach $p (@passin) { close($p); }
- foreach $p (@passout) { close($p); }
- close($PASSINr); close($PASSOUTw);
- }
- close(MAIN);
-
- # Work out the hostname for this web server
- if (!$config{'host'}) {
- ($myport, $myaddr) =
- unpack_sockaddr_in(getsockname(SOCK));
- $myname = gethostbyaddr($myaddr, AF_INET);
- if ($myname eq "") {
- $myname = inet_ntoa($myaddr);
- }
- $host = $myname;
- }
- else { $host = $config{'host'}; }
- $port = $config{'port'};
-
- local $switched = 0;
- if ($config{'remoteuser'} && $localauth_user && !$<) {
- # Switch to the UID of the remote user
- local @u = getpwnam($localauth_user);
- if (@u) {
- $( = $u[3]; $) = "$u[3] $u[3]";
- $< = $> = $u[2];
- $switched = 1;
- }
- }
- if ($config{'switchuser'} && !$< && !$switched) {
- # Switch to the UID of server user
- local @u = getpwnam($config{'switchuser'});
- if (@u) {
- $( = $u[3]; $) = "$u[3] $u[3]";
- $< = $> = $u[2];
- }
- }
-
- while(&handle_request($acptaddr, getsockname(SOCK))) { }
- shutdown(SOCK, 1);
- close(SOCK);
- close($PASSINw); close($PASSOUTw);
- exit;
- }
- push(@childpids, $handpid);
- if ($config{'passdelay'} || $config{'session'}) {
- close($PASSINw); close($PASSOUTr);
- push(@passin, $PASSINr); push(@passout, $PASSOUTw);
- }
- close(SOCK);
- }
-
- if ($config{'listen'} && vec($rmask, fileno(LISTEN), 1)) {
- # Got UDP packet from another miniserv server
- local $rcvbuf;
- local $from = recv(LISTEN, $rcvbuf, 1024, 0);
- next if (!$from);
- local $fromip = inet_ntoa((unpack_sockaddr_in($from))[1]);
- local $toip = inet_ntoa((unpack_sockaddr_in(
- getsockname(LISTEN)))[1]);
- if ((!@deny || !&ip_match($fromip, $toip, @deny)) &&
- (!@allow || &ip_match($fromip, $toip, @allow))) {
- send(LISTEN, "$config{'host'}:$config{'port'}:".
- "$use_ssl", 0, $from);
- }
- }
-
- # check for password-timeout messages from subprocesses
- for($i=0; $i<@passin; $i++) {
- if (vec($rmask, fileno($passin[$i]), 1)) {
- # this sub-process is asking about a password
- $infd = $passin[$i]; $outfd = $passout[$i];
- $inline = <$infd>;
- if ($inline =~ /^delay\s+(\S+)\s+(\S+)\s+(\d+)/) {
- # Got a delay request from a subprocess.. for
- # valid logins, there is no delay (to prevent
- # denial of service attacks), but for invalid
- # logins the delay increases with each failed
- # attempt.
- if ($3) {
- # login OK.. no delay
- print $outfd "0 0\n";
- $hostfail{$2} = 0;
- }
- else {
- # login failed..
- $hostfail{$2}++;
- # add the host to the block list if necessary
- if ($config{'blockhost_failures'} &&
- $hostfail{$2} >= $config{'blockhost_failures'}) {
- push(@deny, $2);
- $blockhosttime{$2} = $time_now;
- $blocked = 1;
- if ($use_syslog) {
- local $logtext = "Security alert: Host $2 ".
- "blocked after $config{'blockhost_failures'} ".
- "failed logins for user $1";
- syslog("crit", $logtext);
- }
- }
- else {
- $blocked = 0;
- }
- $dl = $userdlay{$1} -
- int(($time_now - $userlast{$1})/50);
- $dl = $dl < 0 ? 0 : $dl+1;
- print $outfd "$dl $blocked\n";
- $userdlay{$1} = $dl;
- }
- $userlast{$1} = $time_now;
- }
- elsif ($inline =~ /^verify\s+(\S+)/) {
- # Verifying a session ID
- local $session_id = $1;
- if (!defined($sessiondb{$session_id})) {
- print $outfd "0 0\n";
- }
- else {
- local ($user, $ltime) = split(/\s+/, $sessiondb{$session_id});
- if ($config{'logouttime'} &&
- $time_now - $ltime > $config{'logouttime'}*60) {
- print $outfd "1 ",$time_now - $ltime,"\n";
- delete($sessiondb{$session_id});
- }
- else {
- print $outfd "2 $user\n";
- $sessiondb{$session_id} = "$user $time_now";
- }
- }
- }
- elsif ($inline =~ /^new\s+(\S+)\s+(\S+)/) {
- # Creating a new session
- $sessiondb{$1} = "$2 $time_now";
- }
- elsif ($inline =~ /^delete\s+(\S+)/) {
- # Logging out a session
- print $outfd $sessiondb{$1} ? 1 : 0,"\n";
- delete($sessiondb{$1});
- }
- else {
- # close pipe
- close($infd); close($outfd);
- $passin[$i] = $passout[$i] = undef;
- }
- }
- }
- @passin = grep { defined($_) } @passin;
- @passout = grep { defined($_) } @passout;
- }
-
-# handle_request(remoteaddress, localaddress)
-# Where the real work is done
-sub handle_request
-{
-$acptip = inet_ntoa((unpack_sockaddr_in($_[0]))[1]);
-$localip = $_[1] ? inet_ntoa((unpack_sockaddr_in($_[1]))[1]) : undef;
-if ($config{'loghost'}) {
- $acpthost = gethostbyaddr(inet_aton($acptip), AF_INET);
- $acpthost = $acptip if (!$acpthost);
- }
-else {
- $acpthost = $acptip;
- }
-$datestr = &http_date(time());
-$ok_code = 200;
-$ok_message = "Document follows";
-
-# Wait at most 60 secs for start of headers (but only for the first time)
-if (!$checked_timeout) {
- local $rmask;
- vec($rmask, fileno(SOCK), 1) = 1;
- local $sel = select($rmask, undef, undef, 60);
- $sel || &http_error(400, "Timeout");
- $checked_timeout++;
- }
-
-# Read the HTTP request and headers
-($reqline = &read_line()) =~ s/\r|\n//g;
-if (!($reqline =~ /^(GET|POST|HEAD)\s+(.*)\s+HTTP\/1\..$/)) {
- &http_error(400, "Bad Request");
- }
-$method = $1; $request_uri = $page = $2;
-%header = ();
-local $lastheader;
-while(1) {
- ($headline = &read_line()) =~ s/\r|\n//g;
- last if ($headline eq "");
- if ($headline =~ /^(\S+):\s+(.*)$/) {
- $header{$lastheader = lc($1)} = $2;
- }
- elsif ($headline =~ /^\s+(.*)$/) {
- $header{$lastheader} .= $headline;
- }
- else {
- &http_error(400, "Bad Header $headline");
- }
- }
-if (defined($header{'host'})) {
- if ($header{'host'} =~ /^([^:]+):([0-9]+)$/) { $host = $1; $port = $2; }
- else { $host = $header{'host'}; }
- }
-undef(%in);
-if ($page =~ /^([^\?]+)\?(.*)$/) {
- # There is some query string information
- $page = $1;
- $querystring = $2;
- if ($querystring !~ /=/) {
- $queryargs = $querystring;
- $queryargs =~ s/\+/ /g;
- $queryargs =~ s/%(..)/pack("c",hex($1))/ge;
- $querystring = "";
- }
- else {
- # Parse query-string parameters
- local @in = split(/\&/, $querystring);
- foreach $i (@in) {
- local ($k, $v) = split(/=/, $i, 2);
- $k =~ s/\+/ /g; $k =~ s/%(..)/pack("c",hex($1))/ge;
- $v =~ s/\+/ /g; $v =~ s/%(..)/pack("c",hex($1))/ge;
- $in{$k} = $v;
- }
- }
- }
-$posted_data = undef;
-if ($method eq 'POST' &&
- $header{'content-type'} eq 'application/x-www-form-urlencoded') {
- # Read in posted query string information
- $clen = $header{"content-length"};
- while(length($posted_data) < $clen) {
- $buf = &read_data($clen - length($posted_data));
- if (!length($buf)) {
- &http_error(500, "Failed to read POST request");
- }
- $posted_data .= $buf;
- }
- local @in = split(/\&/, $posted_data);
- foreach $i (@in) {
- local ($k, $v) = split(/=/, $i, 2);
- $k =~ s/\+/ /g; $k =~ s/%(..)/pack("c",hex($1))/ge;
- $v =~ s/\+/ /g; $v =~ s/%(..)/pack("c",hex($1))/ge;
- $in{$k} = $v;
- }
- }
-
-# replace %XX sequences in page
-$page =~ s/%(..)/pack("c",hex($1))/ge;
-
-# check address against access list
-if (@deny && &ip_match($acptip, $localip, @deny) ||
- @allow && !&ip_match($acptip, $localip, @allow)) {
- &http_error(403, "Access denied for $acptip");
- return 0;
- }
-
-if ($use_libwrap) {
- # Check address with TCP-wrappers
- if (!hosts_ctl("miniserv", STRING_UNKNOWN, $acptip, STRING_UNKNOWN)) {
- &http_error(403, "Access denied for $acptip");
- return 0;
- }
- }
-
-# check for the logout flag file, and if existant deny authentication
-if ($config{'logout'} && -r $config{'logout'}.$in{'miniserv_logout_id'}) {
- $deny_authentication++;
- open(LOGOUT, $config{'logout'}.$in{'miniserv_logout_id'});
- chop($count = <LOGOUT>);
- close(LOGOUT);
- $count--;
- if ($count > 0) {
- open(LOGOUT, ">$config{'logout'}$in{'miniserv_logout_id'}");
- print LOGOUT "$count\n";
- close(LOGOUT);
- }
- else {
- unlink($config{'logout'}.$in{'miniserv_logout_id'});
- }
- }
-
-# Check for password if needed
-if (%users) {
- $validated = 0;
- $blocked = 0;
-
- # Session authentication is never used for connections by
- # another miniserv server
- if ($header{'user-agent'} =~ /miniserv/i) {
- $config{'session'} = 0;
- }
-
- # check for SSL authentication
- if ($use_ssl && $verified_client) {
- $peername = Net::SSLeay::X509_NAME_oneline(
- Net::SSLeay::X509_get_subject_name(
- Net::SSLeay::get_peer_certificate(
- $ssl_con)));
- foreach $u (keys %certs) {
- if ($certs{$u} eq $peername) {
- $authuser = $u;
- $validated = 2;
- last;
- }
- }
- }
-
- # Check for normal HTTP authentication
- if (!$validated && !$deny_authentication && !$config{'session'} &&
- $header{authorization} =~ /^basic\s+(\S+)$/i) {
- # authorization given..
- ($authuser, $authpass) = split(/:/, &b64decode($1));
- $validated = &validate_user($authuser, $authpass);
-
- if ($config{'passdelay'} && !$config{'inetd'}) {
- # check with main process for delay
- print $PASSINw "delay $authuser $acptip $validated\n";
- <$PASSOUTr> =~ /(\d+) (\d+)/;
- $blocked = $2;
- sleep($1);
- }
- }
-
- # Check for new session validation
- if ($config{'session'} && !$deny_authentication && $page eq $config{'session_login'}) {
- local $ok = &validate_user($in{'user'}, $in{'pass'});
-
- # check if the test cookie is set
- if ($header{'cookie'} !~ /testing=1/ && $in{'user'}) {
- &http_error(500, "No cookies",
- "Your browser does not support cookies, ".
- "which are required for Webmin to work in ".
- "session authentication mode");
- }
-
- # check with main process for delay
- if ($config{'passdelay'} && $in{'user'}) {
- print $PASSINw "delay $in{'user'} $acptip $ok\n";
- <$PASSOUTr> =~ /(\d+) (\d+)/;
- $blocked = $2;
- sleep($1);
- }
-
- if ($ok) {
- # Logged in OK! Tell the main process about the new SID
- local $sid = time();
- local $mul = 1;
- foreach $c (split(//, crypt($in{'pass'}, substr($$, -2)))) {
- $sid += ord($c) * $mul;
- $mul *= 3;
- }
- print $PASSINw "new $sid $in{'user'}\n";
-
- # Set cookie and redirect
- &write_data("HTTP/1.0 302 Moved Temporarily\r\n");
- &write_data("Date: $datestr\r\n");
- &write_data("Server: $config{'server'}\r\n");
- $portstr = $port == 80 && !$use_ssl ? "" :
- $port == 443 && $use_ssl ? "" : ":$port";
- $prot = $use_ssl ? "https" : "http";
- if ($in{'save'}) {
- &write_data("Set-Cookie: sid=$sid; path=/; expires=\"Fri, 1-Jan-2038 00:00:01\"\r\n");
- }
- else {
- &write_data("Set-Cookie: sid=$sid; path=/\r\n");
- }
- &write_data("Location: $prot://$host$portstr$in{'page'}\r\n");
- &write_keep_alive(0);
- &write_data("\r\n");
- &log_request($acpthost, $authuser, $reqline, 302, 0);
- return 0;
- }
- elsif ($in{'logout'} && $header{'cookie'} =~ /sid=(\d+)/) {
- # Logout clicked .. remove the session
- print $PASSINw "delete $1\n";
- local $dummy = <$PASSINr>;
- $logout = 1;
- $already_session_id = undef;
- }
- else {
- # Login failed .. display the form again
- $failed_user = $in{'user'};
- $request_uri = $in{'page'};
- $already_session_id = undef;
- }
- }
-
- # Check for an existing session
- if ($config{'session'} && !$validated) {
- if ($already_session_id) {
- $session_id = $already_session_id;
- $authuser = $already_authuser;
- $validated = 1;
- }
- elsif (!$deny_authentication && $header{'cookie'} =~ /sid=(\d+)/) {
- $session_id = $1;
- print $PASSINw "verify $session_id\n";
- <$PASSOUTr> =~ /(\d+)\s+(\S+)/;
- if ($1 == 2) {
- # Valid session continuation
- $validated = 1;
- $authuser = $2;
- $already_session_id = $session_id;
- $already_authuser = $authuser;
- }
- elsif ($1 == 1) {
- # Session timed out
- $timed_out = $2;
- }
- else {
- # Invalid session ID .. don't set verified
- }
- }
- }
-
- # Check for local authentication
- if ($localauth_user) {
- if (defined($users{$localauth_user})) {
- $validated = 1;
- $authuser = $localauth_user;
- }
- else {
- $localauth_user = undef;
- }
- }
-
- if (!$validated) {
- if ($blocked == 0) {
- # No password given.. ask
- if ($config{'session'}) {
- # Force CGI for session login
- $validated = 1;
- if ($logout) {
- $querystring .= "&logout=1&page=/";
- }
- else {
- $querystring = "page=".&urlize($request_uri);
- }
- $querystring .= "&failed=$failed_user" if ($failed_user);
- $querystring .= "&timed_out=$timed_out" if ($timed_out);
- $queryargs = "";
- $page = $config{'session_login'};
- }
- else {
- # Ask for login with HTTP authentication
- &write_data("HTTP/1.0 401 Unauthorized\r\n");
- &write_data("Date: $datestr\r\n");
- &write_data("Server: $config{'server'}\r\n");
- &write_data("WWW-authenticate: Basic ".
- "realm=\"$config{'realm'}\"\r\n");
- &write_keep_alive(0);
- &write_data("Content-type: text/html\r\n");
- &write_data("\r\n");
- &reset_byte_count();
- &write_data("<html>\n");
- &write_data("<head><title>Unauthorized</title></head>\n");
- &write_data("<body><h1>Unauthorized</h1>\n");
- &write_data("A password is required to access this\n");
- &write_data("web server. Please try again. <p>\n");
- &write_data("</body></html>\n");
- &log_request($acpthost, undef, $reqline, 401, &byte_count());
- return 0;
- }
- }
- else {
- # when the host has been blocked, give it an error message
- &http_error(403, "Access denied for $acptip. The host has been blocked "
- ."because of too many authentication failures.");
- }
- }
-
- # Check per-user IP access control
- if ($deny{$authuser} && &ip_match($acptip, $localip, @{$deny{$authuser}}) ||
- $allow{$authuser} && !&ip_match($acptip, $localip, @{$allow{$authuser}})) {
- &http_error(403, "Access denied for $acptip");
- return 0;
- }
- }
-
-# Figure out what kind of page was requested
-rerun:
-$simple = &simplify_path($page, $bogus);
-$simple =~ s/[\000-\037]//g;
-if ($bogus) {
- &http_error(400, "Invalid path");
- }
-undef($full);
-if ($config{'preroot'}) {
- # Look in the template root directory first
- $is_directory = 1;
- $sofar = "";
- $full = $config{"preroot"} . $sofar;
- $scriptname = $simple;
- foreach $b (split(/\//, $simple)) {
- if ($b ne "") { $sofar .= "/$b"; }
- $full = $config{"preroot"} . $sofar;
- @st = stat($full);
- if (!@st) { undef($full); last; }
-
- # Check if this is a directory
- if (-d $full) {
- # It is.. go on parsing
- $is_directory = 1;
- next;
- }
- else { $is_directory = 0; }
-
- # Check if this is a CGI program
- if (&get_type($full) eq "internal/cgi") {
- $pathinfo = substr($simple, length($sofar));
- $pathinfo .= "/" if ($page =~ /\/$/);
- $scriptname = $sofar;
- last;
- }
- }
- if ($full) {
- if ($sofar eq '') {
- $cgi_pwd = $config{'root'};
- }
- else {
- "$config{'root'}$sofar" =~ /^(.*\/)[^\/]+$/;
- $cgi_pwd = $1;
- }
- if ($is_directory) {
- # Check for index files in the directory
- foreach $idx (split(/\s+/, $config{"index_docs"})) {
- $idxfull = "$full/$idx";
- if (-r $idxfull && !(-d $idxfull)) {
- $full = $idxfull;
- $is_directory = 0;
- $scriptname .= "/"
- if ($scriptname ne "/");
- last;
- }
- }
- }
- }
- }
-if (!$full || $is_directory) {
- $sofar = "";
- $full = $config{"root"} . $sofar;
- $scriptname = $simple;
- foreach $b (split(/\//, $simple)) {
- if ($b ne "") { $sofar .= "/$b"; }
- $full = $config{"root"} . $sofar;
- @st = stat($full);
- if (!@st) { &http_error(404, "File not found"); }
-
- # Check if this is a directory
- if (-d $full) {
- # It is.. go on parsing
- next;
- }
-
- # Check if this is a CGI program
- if (&get_type($full) eq "internal/cgi") {
- $pathinfo = substr($simple, length($sofar));
- $pathinfo .= "/" if ($page =~ /\/$/);
- $scriptname = $sofar;
- last;
- }
- }
- $full =~ /^(.*\/)[^\/]+$/; $cgi_pwd = $1;
- }
-
-# check filename against denyfile regexp
-local $denyfile = $config{'denyfile'};
-if ($denyfile && $full =~ /$denyfile/) {
- &http_error(403, "Access denied to $page");
- return 0;
- }
-
-# Reached the end of the path OK.. see what we've got
-if (-d $full) {
- # See if the URL ends with a / as it should
- if ($page !~ /\/$/) {
- # It doesn't.. redirect
- &write_data("HTTP/1.0 302 Moved Temporarily\r\n");
- $portstr = $port == 80 && !$use_ssl ? "" :
- $port == 443 && $use_ssl ? "" : ":$port";
- &write_data("Date: $datestr\r\n");
- &write_data("Server: $config{server}\r\n");
- $prot = $use_ssl ? "https" : "http";
- &write_data("Location: $prot://$host$portstr$page/\r\n");
- &write_keep_alive(0);
- &write_data("\r\n");
- &log_request($acpthost, $authuser, $reqline, 302, 0);
- return 0;
- }
- # A directory.. check for index files
- foreach $idx (split(/\s+/, $config{"index_docs"})) {
- $idxfull = "$full/$idx";
- if (-r $idxfull && !(-d $idxfull)) {
- $cgi_pwd = $full;
- $full = $idxfull;
- $scriptname .= "/" if ($scriptname ne "/");
- last;
- }
- }
- }
-if (-d $full) {
- # This is definately a directory.. list it
- &write_data("HTTP/1.0 $ok_code $ok_message\r\n");
- &write_data("Date: $datestr\r\n");
- &write_data("Server: $config{server}\r\n");
- &write_data("Content-type: text/html\r\n");
- &write_keep_alive(0);
- &write_data("\r\n");
- &reset_byte_count();
- &write_data("<h1>Index of $simple</h1>\n");
- &write_data("<pre>\n");
- &write_data(sprintf "%-35.35s %-20.20s %-10.10s\n",
- "Name", "Last Modified", "Size");
- &write_data("<hr>\n");
- opendir(DIR, $full);
- while($df = readdir(DIR)) {
- if ($df =~ /^\./) { next; }
- (@stbuf = stat("$full/$df")) || next;
- if (-d "$full/$df") { $df .= "/"; }
- @tm = localtime($stbuf[9]);
- $fdate = sprintf "%2.2d/%2.2d/%4.4d %2.2d:%2.2d:%2.2d",
- $tm[3],$tm[4]+1,$tm[5]+1900,
- $tm[0],$tm[1],$tm[2];
- $len = length($df); $rest = " "x(35-$len);
- &write_data(sprintf
- "<a href=\"%s\">%-${len}.${len}s</a>$rest %-20.20s %-10.10s\n",
- $df, $df, $fdate, $stbuf[7]);
- }
- closedir(DIR);
- &log_request($acpthost, $authuser, $reqline, $ok_code, &byte_count());
- return 0;
- }
-
-# CGI or normal file
-local $rv;
-if (&get_type($full) eq "internal/cgi") {
- # A CGI program to execute
- $envtz = $ENV{"TZ"};
- $envuser = $ENV{"USER"};
- $envpath = $ENV{"PATH"};
- foreach (keys %ENV) { delete($ENV{$_}); }
- $ENV{"PATH"} = $envpath if ($envpath);
- $ENV{"TZ"} = $envtz if ($envtz);
- $ENV{"USER"} = $envuser if ($envuser);
- $ENV{"HOME"} = $user_homedir;
- $ENV{"SERVER_SOFTWARE"} = $config{"server"};
- $ENV{"SERVER_NAME"} = $host;
- $ENV{"SERVER_ADMIN"} = $config{"email"};
- $ENV{"SERVER_ROOT"} = $config{"root"};
- $ENV{"SERVER_PORT"} = $port;
- $ENV{"REMOTE_HOST"} = $acpthost;
- $ENV{"REMOTE_ADDR"} = $acptip;
- $ENV{"REMOTE_USER"} = $authuser if (defined($authuser));
- $ENV{"SSL_USER"} = $peername if ($validated == 2);
- $ENV{"DOCUMENT_ROOT"} = $config{"root"};
- $ENV{"GATEWAY_INTERFACE"} = "CGI/1.1";
- $ENV{"SERVER_PROTOCOL"} = "HTTP/1.0";
- $ENV{"REQUEST_METHOD"} = $method;
- $ENV{"SCRIPT_NAME"} = $scriptname;
- $ENV{"REQUEST_URI"} = $request_uri;
- $ENV{"PATH_INFO"} = $pathinfo;
- $ENV{"PATH_TRANSLATED"} = "$config{root}/$pathinfo";
- $ENV{"QUERY_STRING"} = $querystring;
- $ENV{"MINISERV_CONFIG"} = $conf;
- $ENV{"HTTPS"} = "ON" if ($use_ssl);
- $ENV{"SESSION_ID"} = $session_id if ($session_id);
- $ENV{"LOCAL_USER"} = $localauth_user if ($localauth_user);
- if (defined($header{"content-length"})) {
- $ENV{"CONTENT_LENGTH"} = $header{"content-length"};
- }
- if (defined($header{"content-type"})) {
- $ENV{"CONTENT_TYPE"} = $header{"content-type"};
- }
- foreach $h (keys %header) {
- ($hname = $h) =~ tr/a-z/A-Z/;
- $hname =~ s/\-/_/g;
- $ENV{"HTTP_$hname"} = $header{$h};
- }
- $ENV{"PWD"} = $cgi_pwd;
- foreach $k (keys %config) {
- if ($k =~ /^env_(\S+)$/) {
- $ENV{$1} = $config{$k};
- }
- }
- delete($ENV{'HTTP_AUTHORIZATION'});
- $ENV{'HTTP_COOKIE'} =~ s/;?\s*sid=(\d+)//;
-
- # Check if the CGI can be handled internally
- open(CGI, $full);
- local $first = <CGI>;
- close(CGI);
- $first =~ s/[#!\r\n]//g;
- $nph_script = ($full =~ /\/nph-([^\/]+)$/);
- if (!$config{'forkcgis'} && $first eq $perl_path && $] >= 5.004) {
- # setup environment for eval
- chdir($ENV{"PWD"});
- @ARGV = split(/\s+/, $queryargs);
- $0 = $full;
- if ($posted_data) {
- # Already read the post input
- $postinput = $posted_data;
- }
- elsif ($method eq "POST") {
- $clen = $header{"content-length"};
- while(length($postinput) < $clen) {
- $buf = &read_data($clen - length($postinput));
- if (!length($buf)) {
- &http_error(500, "Failed to read ".
- "POST request");
- }
- $postinput .= $buf;
- }
- }
- $SIG{'CHLD'} = 'DEFAULT';
- eval {
- # Have SOCK closed if the perl exec's something
- use Fcntl;
- fcntl(SOCK, F_SETFD, FD_CLOEXEC);
- };
- shutdown(SOCK, 0);
-
- if ($config{'log'}) {
- open(MINISERVLOG, ">>$config{'logfile'}");
- chmod(0600, $config{'logfile'});
- }
- $doing_eval = 1;
- eval {
- package main;
- tie(*STDOUT, 'miniserv');
- tie(*STDIN, 'miniserv');
- do $miniserv::full;
- die $@ if ($@);
- };
- $doing_eval = 0;
- if ($@) {
- # Error in perl!
- &http_error(500, "Perl execution failed", $@);
- }
- elsif (!$doneheaders && !$nph_script) {
- &http_error(500, "Missing Headers");
- }
- #close(SOCK);
- $rv = 0;
- }
- else {
- # fork the process that actually executes the CGI
- pipe(CGIINr, CGIINw);
- pipe(CGIOUTr, CGIOUTw);
- pipe(CGIERRr, CGIERRw);
- if (!($cgipid = fork())) {
- chdir($ENV{"PWD"});
- close(SOCK);
- open(STDIN, "<&CGIINr");
- open(STDOUT, ">&CGIOUTw");
- open(STDERR, ">&CGIERRw");
- close(CGIINw); close(CGIOUTr); close(CGIERRr);
- exec($full, split(/\s+/, $queryargs));
- print STDERR "Failed to exec $full : $!\n";
- exit;
- }
- close(CGIINr); close(CGIOUTw); close(CGIERRw);
-
- # send post data
- if ($posted_data) {
- # already read the posted data
- print CGIINw $posted_data;
- }
- elsif ($method eq "POST") {
- $got = 0; $clen = $header{"content-length"};
- while($got < $clen) {
- $buf = &read_data($clen-$got);
- if (!length($buf)) {
- kill('TERM', $cgipid);
- &http_error(500, "Failed to read ".
- "POST request");
- }
- $got += length($buf);
- print CGIINw $buf;
- }
- }
- close(CGIINw);
- shutdown(SOCK, 0);
-
- if (!$nph_script) {
- # read back cgi headers
- select(CGIOUTr); $|=1; select(STDOUT);
- $got_blank = 0;
- while(1) {
- $line = <CGIOUTr>;
- $line =~ s/\r|\n//g;
- if ($line eq "") {
- if ($got_blank || %cgiheader) { last; }
- $got_blank++;
- next;
- }
- ($line =~ /^(\S+):\s+(.*)$/) ||
- &http_error(500, "Bad Header",
- &read_errors(CGIERRr));
- $cgiheader{lc($1)} = $2;
- }
- if ($cgiheader{"location"}) {
- &write_data("HTTP/1.0 302 Moved Temporarily\r\n");
- &write_data("Date: $datestr\r\n");
- &write_data("Server: $config{'server'}\r\n");
- &write_keep_alive(0);
- # ignore the rest of the output. This is a hack, but
- # is necessary for IE in some cases :(
- close(CGIOUTr); close(CGIERRr);
- }
- elsif ($cgiheader{"content-type"} eq "") {
- &http_error(500, "Missing Content-Type Header",
- &read_errors(CGIERRr));
- }
- else {
- &write_data("HTTP/1.0 $ok_code $ok_message\r\n");
- &write_data("Date: $datestr\r\n");
- &write_data("Server: $config{'server'}\r\n");
- &write_keep_alive(0);
- }
- foreach $h (keys %cgiheader) {
- &write_data("$h: $cgiheader{$h}\r\n");
- }
- &write_data("\r\n");
- }
- &reset_byte_count();
- while($line = <CGIOUTr>) {
- &write_data($line);
- }
- close(CGIOUTr); close(CGIERRr);
- $rv = 0;
- }
- }
-else {
- # A file to output
- local @st = stat($full);
- open(FILE, $full) || &http_error(404, "Failed to open file");
- &write_data("HTTP/1.0 $ok_code $ok_message\r\n");
- &write_data("Date: $datestr\r\n");
- &write_data("Server: $config{server}\r\n");
- &write_data("Content-type: ".&get_type($full)."\r\n");
- &write_data("Content-length: $st[7]\r\n");
- &write_data("Last-Modified: ".&http_date($st[9])."\r\n");
- &write_keep_alive();
- &write_data("\r\n");
- &reset_byte_count();
- while(read(FILE, $buf, 1024) > 0) {
- &write_data($buf);
- }
- close(FILE);
- $rv = &check_keep_alive();
- }
-
-# log the request
-&log_request($acpthost, $authuser, $reqline,
- $cgiheader{"location"} ? "302" : $ok_code, &byte_count());
-return $rv;
-}
-
-# http_error(code, message, body, [dontexit])
-sub http_error
-{
-close(CGIOUT);
-local $eh = $error_handler_recurse ? undef :
- $config{"error_handler_$_[0]"} ? $config{"error_handler_$_[0]"} :
- $config{'error_handler'} ? $config{'error_handler'} : undef;
-if ($eh) {
- # Call a CGI program for the error
- $page = "/$eh";
- $querystring = "code=$_[0]&message=".&urlize($_[1]).
- "&body=".&urlize($_[2]);
- $error_handler_recurse++;
- $ok_code = $_[0];
- $ok_message = $_[1];
- goto rerun;
- }
-else {
- # Use the standard error message display
- &write_data("HTTP/1.0 $_[0] $_[1]\r\n");
- &write_data("Server: $config{server}\r\n");
- &write_data("Date: $datestr\r\n");
- &write_data("Content-type: text/html\r\n");
- &write_keep_alive(0);
- &write_data("\r\n");
- &reset_byte_count();
- &write_data("<h1>Error - $_[1]</h1>\n");
- if ($_[2]) {
- &write_data("<pre>$_[2]</pre>\n");
- }
- }
-&log_request($acpthost, $authuser, $reqline, $_[0], &byte_count())
- if ($reqline);
-shutdown(SOCK, 1);
-exit if (!$_[3]);
-}
-
-sub get_type
-{
-if ($_[0] =~ /\.([A-z0-9]+)$/) {
- $t = $mime{$1};
- if ($t ne "") {
- return $t;
- }
- }
-return "text/plain";
-}
-
-# simplify_path(path, bogus)
-# Given a path, maybe containing stuff like ".." and "." convert it to a
-# clean, absolute form.
-sub simplify_path
-{
-local($dir, @bits, @fixedbits, $b);
-$dir = $_[0];
-$dir =~ s/^\/+//g;
-$dir =~ s/\/+$//g;
-@bits = split(/\/+/, $dir);
-@fixedbits = ();
-$_[1] = 0;
-foreach $b (@bits) {
- if ($b eq ".") {
- # Do nothing..
- }
- elsif ($b eq "..") {
- # Remove last dir
- if (scalar(@fixedbits) == 0) {
- $_[1] = 1;
- return "/";
- }
- pop(@fixedbits);
- }
- else {
- # Add dir to list
- push(@fixedbits, $b);
- }
- }
-return "/" . join('/', @fixedbits);
-}
-
-# b64decode(string)
-# Converts a string from base64 format to normal
-sub b64decode
-{
- local($str) = $_[0];
- local($res);
- $str =~ tr|A-Za-z0-9+=/||cd;
- $str =~ s/=+$//;
- $str =~ tr|A-Za-z0-9+/| -_|;
- while ($str =~ /(.{1,60})/gs) {
- my $len = chr(32 + length($1)*3/4);
- $res .= unpack("u", $len . $1 );
- }
- return $res;
-}
-
-# ip_match(remoteip, localip, [match]+)
-# Checks an IP address against a list of IPs, networks and networks/masks
-sub ip_match
-{
-local(@io, @mo, @ms, $i, $j);
-@io = split(/\./, $_[0]);
-local $hn;
-if (!defined($hn = $ip_match_cache{$_[0]})) {
- $hn = gethostbyaddr(inet_aton($_[0]), AF_INET);
- $hn = "" if ((&to_ipaddress($hn))[0] ne $_[0]);
- $ip_match_cache{$_[0]} = $hn;
- }
-for($i=2; $i<@_; $i++) {
- local $mismatch = 0;
- if ($_[$i] =~ /^(\S+)\/(\S+)$/) {
- # Compare with network/mask
- @mo = split(/\./, $1); @ms = split(/\./, $2);
- for($j=0; $j<4; $j++) {
- if ((int($io[$j]) & int($ms[$j])) != int($mo[$j])) {
- $mismatch = 1;
- }
- }
- }
- elsif ($_[$i] =~ /^\*(\S+)$/) {
- # Compare with hostname regexp
- $mismatch = 1 if ($hn !~ /$1$/);
- }
- elsif ($_[$i] eq 'LOCAL') {
- # Compare with local network
- local @lo = split(/\./, $_[1]);
- if ($lo[0] < 128) {
- $mismatch = 1 if ($lo[0] != $io[0]);
- }
- elsif ($lo[0] < 192) {
- $mismatch = 1 if ($lo[0] != $io[0] ||
- $lo[1] != $io[1]);
- }
- else {
- $mismatch = 1 if ($lo[0] != $io[0] ||
- $lo[1] != $io[1] ||
- $lo[2] != $io[2]);
- }
- }
- else {
- # Compare with IP or network
- @mo = split(/\./, $_[$i]);
- while(@mo && !$mo[$#mo]) { pop(@mo); }
- for($j=0; $j<@mo; $j++) {
- if ($mo[$j] != $io[$j]) {
- $mismatch = 1;
- }
- }
- }
- return 1 if (!$mismatch);
- }
-return 0;
-}
-
-# restart_miniserv()
-# Called when a SIGHUP is received to restart the web server. This is done
-# by exec()ing perl with the same command line as was originally used
-sub restart_miniserv
-{
-close(SOCK); close(MAIN);
-foreach $p (@passin) { close($p); }
-foreach $p (@passout) { close($p); }
-if ($logclearer) { kill('TERM', $logclearer); }
-exec($perl_path, $miniserv_path, @miniserv_argv);
-die "Failed to restart miniserv with $perl_path $miniserv_path";
-}
-
-sub trigger_restart
-{
-$need_restart = 1;
-}
-
-sub to_ipaddress
-{
-local (@rv, $i);
-foreach $i (@_) {
- if ($i =~ /(\S+)\/(\S+)/ || $i =~ /^\*\S+$/ ||
- $i eq 'LOCAL') { push(@rv, $i); }
- else { push(@rv, join('.', unpack("CCCC", inet_aton($i)))); }
- }
-return @rv;
-}
-
-# read_line()
-# Reads one line from SOCK or SSL
-sub read_line
-{
-local($idx, $more, $rv);
-if ($use_ssl) {
- while(($idx = index($read_buffer, "\n")) < 0) {
- # need to read more..
- if (!($more = Net::SSLeay::read($ssl_con))) {
- # end of the data
- $rv = $read_buffer;
- undef($read_buffer);
- return $rv;
- }
- $read_buffer .= $more;
- }
- $rv = substr($read_buffer, 0, $idx+1);
- $read_buffer = substr($read_buffer, $idx+1);
- return $rv;
- }
-else { return <SOCK>; }
-}
-
-# read_data(length)
-# Reads up to some amount of data from SOCK or the SSL connection
-sub read_data
-{
-if ($use_ssl) {
- local($rv);
- if (length($read_buffer)) {
- $rv = $read_buffer;
- undef($read_buffer);
- return $rv;
- }
- else {
- return Net::SSLeay::read($ssl_con, $_[0]);
- }
- }
-else {
- local $buf;
- read(SOCK, $buf, $_[0]) || return undef;
- return $buf;
- }
-}
-
-# write_data(data)
-# Writes a string to SOCK or the SSL connection
-sub write_data
-{
-if ($use_ssl) {
- Net::SSLeay::write($ssl_con, $_[0]);
- }
-else {
- syswrite(SOCK, $_[0], length($_[0]));
- }
-$write_data_count += length($_[0]);
-}
-
-# reset_byte_count()
-sub reset_byte_count { $write_data_count = 0; }
-
-# byte_count()
-sub byte_count { return $write_data_count; }
-
-# log_request(hostname, user, request, code, bytes)
-sub log_request
-{
-if ($config{'log'}) {
- local(@tm, $dstr, $user, $ident, $headers);
- if ($config{'logident'}) {
- # add support for rfc1413 identity checking here
- }
- else { $ident = "-"; }
- @tm = localtime(time());
- $dstr = sprintf "%2.2d/%s/%4.4d:%2.2d:%2.2d:%2.2d %s",
- $tm[3], $make_date_marr[$tm[4]], $tm[5]+1900,
- $tm[2], $tm[1], $tm[0], $timezone;
- $user = $_[1] ? $_[1] : "-";
- if (fileno(MINISERVLOG)) {
- seek(MINISERVLOG, 0, 2);
- }
- else {
- open(MINISERVLOG, ">>$config{'logfile'}");
- chmod(0600, $config{'logfile'});
- }
- foreach $h (split(/\s+/, $config{'logheaders'})) {
- $headers .= " $h=\"$header{$h}\"";
- }
- print MINISERVLOG "$_[0] $ident $user [$dstr] \"$_[2]\" ",
- "$_[3] $_[4]$headers\n";
- close(MINISERVLOG);
- }
-}
-
-# read_errors(handle)
-# Read and return all input from some filehandle
-sub read_errors
-{
-local($fh, $_, $rv);
-$fh = $_[0];
-while(<$fh>) { $rv .= $_; }
-return $rv;
-}
-
-sub write_keep_alive
-{
-local $mode;
-if (@_) { $mode = $_[0]; }
-else { $mode = &check_keep_alive(); }
-&write_data("Connection: ".($mode ? "Keep-Alive" : "close")."\r\n");
-}
-
-sub check_keep_alive
-{
-return $header{'connection'} =~ /keep-alive/i;
-}
-
-sub term_handler
-{
-if (@childpids) {
- kill('TERM', @childpids);
- }
-exit(1);
-}
-
-sub http_date
-{
-local @tm = gmtime($_[0]);
-return sprintf "%s, %d %s %d %2.2d:%2.2d:%2.2d GMT",
- $weekday[$tm[6]], $tm[3], $month[$tm[4]], $tm[5]+1900,
- $tm[2], $tm[1], $tm[0];
-}
-
-sub TIEHANDLE
-{
-my $i; bless \$i, shift;
-}
-
-sub WRITE
-{
-$r = shift;
-my($buf,$len,$offset) = @_;
-&write_to_sock(substr($buf, $offset, $len));
-}
-
-sub PRINT
-{
-$r = shift;
-$$r++;
-&write_to_sock(@_);
-}
-
-sub PRINTF
-{
-shift;
-my $fmt = shift;
-&write_to_sock(sprintf $fmt, @_);
-}
-
-sub READ
-{
-$r = shift;
-substr($_[0], $_[2], $_[1]) = substr($postinput, $postpos, $_[1]);
-$postpos += $_[1];
-}
-
-sub OPEN
-{
-print STDERR "open() called - should never happen!\n";
-}
-
-sub READLINE
-{
-if ($postpos >= length($postinput)) {
- return undef;
- }
-local $idx = index($postinput, "\n", $postpos);
-if ($idx < 0) {
- local $rv = substr($postinput, $postpos);
- $postpos = length($postinput);
- return $rv;
- }
-else {
- local $rv = substr($postinput, $postpos, $idx-$postpos+1);
- $postpos = $idx+1;
- return $rv;
- }
-}
-
-sub GETC
-{
-return $postpos >= length($postinput) ? undef
- : substr($postinput, $postpos++, 1);
-}
-
-sub CLOSE { }
-
-sub DESTROY { }
-
-# write_to_sock(data, ...)
-sub write_to_sock
-{
-foreach $d (@_) {
- if ($doneheaders || $miniserv::nph_script) {
- &write_data($d);
- }
- else {
- $headers .= $d;
- while(!$doneheaders && $headers =~ s/^(.*)(\r)?\n//) {
- if ($1 =~ /^(\S+):\s+(.*)$/) {
- $cgiheader{lc($1)} = $2;
- }
- elsif ($1 !~ /\S/) {
- $doneheaders++;
- }
- else {
- &http_error(500, "Bad Header");
- }
- }
- if ($doneheaders) {
- if ($cgiheader{"location"}) {
- &write_data(
- "HTTP/1.0 302 Moved Temporarily\r\n");
- &write_data("Date: $datestr\r\n");
- &write_data("Server: $config{server}\r\n");
- &write_keep_alive(0);
- }
- elsif ($cgiheader{"content-type"} eq "") {
- &http_error(500, "Missing Content-Type Header");
- }
- else {
- &write_data("HTTP/1.0 $ok_code $ok_message\r\n");
- &write_data("Date: $datestr\r\n");
- &write_data("Server: $config{server}\r\n");
- &write_keep_alive(0);
- }
- foreach $h (keys %cgiheader) {
- &write_data("$h: $cgiheader{$h}\r\n");
- }
- &write_data("\r\n");
- &reset_byte_count();
- &write_data($headers);
- }
- }
- }
-}
-
-sub verify_client
-{
-local $cert = Net::SSLeay::X509_STORE_CTX_get_current_cert($_[1]);
-if ($cert) {
- local $errnum = Net::SSLeay::X509_STORE_CTX_get_error($_[1]);
- $verified_client = 1 if (!$errnum);
- }
-return 1;
-}
-
-sub END
-{
-if ($doing_eval) {
- # A CGI program called exit! This is a horrible hack to
- # finish up before really exiting
- close(SOCK);
- &log_request($acpthost, $authuser, $reqline,
- $cgiheader{"location"} ? "302" : $ok_code, &byte_count());
- }
-}
-
-# urlize
-# Convert a string to a form ok for putting in a URL
-sub urlize {
- local($tmp, $tmp2, $c);
- $tmp = $_[0];
- $tmp2 = "";
- while(($c = chop($tmp)) ne "") {
- if ($c !~ /[A-z0-9]/) {
- $c = sprintf("%%%2.2X", ord($c));
- }
- $tmp2 = $c . $tmp2;
- }
- return $tmp2;
-}
-
-# validate_user(username, password)
-sub validate_user
-{
-return 0 if (!$_[0] || !$users{$_[0]});
-if ($users{$_[0]} eq 'x' && $use_pam) {
- $pam_username = $_[0];
- $pam_password = $_[1];
- local $pamh = new Authen::PAM("miniserv", $pam_username, \&pam_conv_func);
- if (!ref($pamh)) {
- print STDERR "PAM init failed : $pamh\n";
- return 0;
- }
- local $pam_ret = $pamh->pam_authenticate();
- return $pam_ret == PAM_SUCCESS ? 1 : 0;
- }
-else {
- return $users{$_[0]} eq crypt($_[1], $users{$_[0]}) ? 1 : 0;
- }
-}
-
-# the PAM conversation function for interactive logins
-sub pam_conv_func
-{
-my @res;
-while ( @_ ) {
- my $code = shift;
- my $msg = shift;
- my $ans = "";
-
- $ans = $pam_username if ($code == PAM_PROMPT_ECHO_ON() );
- $ans = $pam_password if ($code == PAM_PROMPT_ECHO_OFF() );
-
- push @res, PAM_SUCCESS();
- push @res, $ans;
- }
-push @res, PAM_SUCCESS();
-return @res;
-}
-
diff --git a/perl-install/standalone/interactive_http/miniserv.users b/perl-install/standalone/interactive_http/miniserv.users
deleted file mode 100644
index f7338497a..000000000
--- a/perl-install/standalone/interactive_http/miniserv.users
+++ /dev/null
@@ -1 +0,0 @@
-root:x:0
diff --git a/perl-install/standalone/keyboarddrake b/perl-install/standalone/keyboarddrake
deleted file mode 100755
index f69005dad..000000000
--- a/perl-install/standalone/keyboarddrake
+++ /dev/null
@@ -1,50 +0,0 @@
-#!/usr/bin/perl
-
-use lib qw(/usr/lib/libDrakX);
-
-use standalone; #- warning, standalone must be loaded very first, for 'explanations'
-
-use interactive;
-use keyboard;
-use Xconfig::xfree;
-use common;
-use any;
-use c;
-
-my $in;
-my $keyboard = keyboard::read();
-if (my ($kb) = grep { !/^-/ } @ARGV) {
- keyboard::KEYBOARD2text($kb) or die "bad keyboard $kb\n";
- $keyboard->{KEYBOARD} = $kb;
-} else {
- $in = 'interactive'->vnew('su', 'keyboard');
-
- choose:
- $keyboard->{KEYBOARD} = $in->ask_from_listf(N("Keyboard"),
- N("Please, choose your keyboard layout."),
- sub { translate(keyboard::KEYBOARD2text($_[0])) },
- [ keyboard::KEYBOARDs() ],
- $keyboard->{KEYBOARD}) or goto end;
-
- keyboard::group_toggle_choose($in, $keyboard) or goto choose;
-}
-
-if ($::expert) {
- my $isNotDelete = !$in->ask_yesorno("BackSpace", N("Do you want the BackSpace to return Delete in console?"), 1);
- $keyboard->{BACKSPACE} = $isNotDelete ? "BackSpace" : "Delete";
-}
-
-my $xkb = keyboard::keyboard2full_xkb($keyboard);
-system('setxkbmap', '-option', '') if $xkb->{XkbOptions}; #- need re-initialised other toggles are cumulated
-system('setxkbmap', $xkb->{XkbLayout}, '-model' => $xkb->{XkbModel}, '-option' => $xkb->{XkbOptions} || '', '-compat' => $xkb->{XkbCompat} || '');
-eval {
- my $xfree_conf = Xconfig::xfree->read;
- $xfree_conf->set_keyboard($xkb);
- $xfree_conf->write;
-};
-
-keyboard::write($keyboard);
-system('/etc/init.d/keytable', 'restart');
-
-end:
- $in->exit(0) if $in;
diff --git a/perl-install/standalone/livedrake b/perl-install/standalone/livedrake
deleted file mode 100755
index 03868c03b..000000000
--- a/perl-install/standalone/livedrake
+++ /dev/null
@@ -1,40 +0,0 @@
-#!/usr/bin/perl
-
-use lib qw(/usr/lib/libDrakX);
-
-use standalone; #- warning, standalone must be loaded very first, for 'explanations'
-
-use common;
-use interactive;
-use run_program;
-use c;
-
-my $in = 'interactive'->vnew('su', 'default');
-
-my $cd_mntpoint = "/mnt/cdrom";
-
-while (! -x "$cd_mntpoint/Mandrake/mdkinst/usr/bin/perl-install/live_install") {
- ejectCdrom();
- $in->ask_okcancel(N("Change Cd-Rom"),
-N("Please insert the Installation Cd-Rom in your drive and press Ok when done.
-If you don't have it, press Cancel to avoid live upgrade."), 1) or $in->exit(0);
- run_program::run("mount", "/mnt/cdrom");
-}
-
-if (-x "$cd_mntpoint/Mandrake/mdkinst/usr/bin/perl-install/live_install") {
- chdir "/$cd_mntpoint/Mandrake/mdkinst/usr/bin/perl-install/";
- $::testing or exec "./live_install";
-}
-
-$in->ask_warn('', N("Unable to start live upgrade !!!\n"));
-$in->exit(1);
-
-sub ejectCdrom {
- my ($cdrom) = @_;
- $cdrom or cat_("/proc/mounts") =~ m|(/dev/\S+)\s+/mnt/cdrom\s| and $cdrom = $1;
- $cdrom or cat_("/etc/fstab") =~ m|(/dev/\S+)\s+/mnt/cdrom\s| and $cdrom = $1;
- my $f = eval { $cdrom && detect_devices::tryOpen($cdrom) } or return;
- run_program::run("umount", "/mnt/cdrom");
- ioctl $f, c::CDROM_LOCKDOOR(), 0;
- ioctl $f, c::CDROMEJECT(), 1;
-}
diff --git a/perl-install/standalone/localedrake b/perl-install/standalone/localedrake
deleted file mode 100644
index 66bcc05bf..000000000
--- a/perl-install/standalone/localedrake
+++ /dev/null
@@ -1,47 +0,0 @@
-#!/usr/bin/perl
-
-use lib qw(/usr/lib/libDrakX);
-
-use standalone; #- warning, standalone must be loaded very first, for 'explanations'
-
-use interactive;
-use common;
-use lang;
-use any;
-
-my ($klang, $country, $apply);
-
-foreach (@ARGV) {
- $apply = /--apply/;
- $klang = $1 if /--kde_lang=(.*)/;
- $kcountry = uc($1) if /--kde_country=(.*)/;
-}
-if (defined $klang) {
- $klang or exit;
- my $lang = member($klang, lang::list_langs()) ? $klang : 'en_US';
- my $country = member($kcountry, lang::list_countries()) ? $kcountry : 'US';
- my $locale = lang::read('', $>);
- $klang and $locale->{lang} = $lang;
- $kcountry and $locale->{country} = $country;
- lang::write('', $locale, $>, 'dont_touch_kde_files') if $apply;
-
- #- help KDE defaulting to the right charset
- print lang::charset2kde_charset(lang::l2charset($lang)), "\n";
-} else {
- my $locale = lang::read('', $>);
- my $in = 'interactive'->vnew;
- select_language:
- $locale->{lang} = any::selectLanguage($in, $locale->{lang}) or goto the_end;
- any::selectCountry($in, $locale) or goto select_language;
- lang::write('', $locale, $>);
- if ($>) {
- if (my $wm = any::running_window_manager()) {
- $in->ask_okcancel('', N("The change is done, but to be effective you must logout"), 1)
- and any::ask_window_manager_to_logout($wm);
- }
- }
-the_end:
- $in->exit(0);
-}
-
-
diff --git a/perl-install/standalone/logdrake b/perl-install/standalone/logdrake
deleted file mode 100755
index eafe06737..000000000
--- a/perl-install/standalone/logdrake
+++ /dev/null
@@ -1,487 +0,0 @@
-#! /usr/bin/perl
-# $Id$
-
-# Copyright (C) 2001-2002 MandrakeSoft
-# Yves Duret <yduret at mandrakesoft.com>
-# some code is Copyright: (C) 1999, Michael T. Babcock <mikebabcock@pobox.com>
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# TODO: consider switching from TreeView to gtkhtml
-
-use strict;
-use lib qw(/usr/lib/libDrakX);
-use standalone; #- warning, standalone must be loaded very first, for 'explanations'
-use common;
-use interactive;
-use ugtk2 qw(:wrappers :helpers :create);
-
-$::isInstall and die "Not supported during install.\n";
-
-my $in = 'interactive'->vnew('su', 'default');
-my $cron_hourly = "/etc/cron.hourly/logdrake_service";
-
-#- parse arguments list.
-foreach (@ARGV) {
- /^--explain=(.*)$/ and do { $::isExplain = ($::Explain) = $1; $::isFile = 1; $::File = "/var/log/explanations"; next };
- /^--file=(.*)$/ and do { $::isFile = ($::File) = $1; next };
- /^--word=(.*)$/ and do { $::isWord = ($::Word) = $1; next };
- /^--alert$/ and do { alert_config(); quit() };
-}
-
-$::isTail = 1 if $::isFile;
-$| = 1 if $::isTail;
-my $h = chomp_(`hostname -s`);
-
-my $my_win = ugtk2->new('logdrake');
-unless ($::isEmbedded) {
- $my_win->{rwindow}->set_title(N("logdrake"));
- $my_win->{window}->set_border_width(5);
- #$my_win->{rwindow}->set_policy(1, 1, 1);
- #$my_win->{window}->set_default_size(540,460);
-}
-$my_win->{window}->signal_connect(delete_event => \&quit);
-
-my $cal = gtkset_sensitive(new Gtk2::Calendar(), 0);
-my $mday = (localtime(time()))[3];
-$cal->select_day($mday);
-my @months = qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec);
-my $cal_mode = 0;
-my $cal_butt = gtksignal_connect(new Gtk2::CheckButton(N("Show only for the selected day")), clicked => sub { $cal_mode = !$cal_mode; gtkset_sensitive($cal,$cal_mode) });
-
-### menus definition
-# the menus are not shown
-# but they provides shiny shortcut like C-q
-my @menu_items = (
- { path => N("/_File"), type => '<Branch>' },
- { path => N("/File/_New"), accelerator => N("<control>N") },
- { path => N("/File/_Open"), accelerator => N("<control>O") },
- { path => N("/File/_Save"), accelerator => N("<control>S"), callback => \&save },
- { path => N("/File/Save _As") },
- { path => N("/File/-"),type => '<Separator>' },
- { path => N("/File/_Quit"), accelerator => N("<control>Q"), callback => \&quit },
- { path => N("/_Options"), type => '<Branch>' },
- { path => N("/Options/Test") },
- { path => N("/_Help"),type => '<LastBranch>' },
- { path => N("/Help/_About...") }
- );
-my $menubar = create_factory_menu($my_win->{rwindow}, @menu_items) unless $::isEmbedded;
-######### menus end
-
-
-########## font and colors
-my %n = ('font' => ''); # Gtk2::Pango::FontDescription->from_string('Serif 12');#Gtk2::Gdk::Font->fontset_load(N("-misc-fixed-medium-r-*-*-*-100-*-*-*-*-*-*,*"));
-my %b = ('font' => 'Bold'); #Gtk2::Pango::FontDescription->from_string('Serif Bold 12');#Gtk2::Gdk::Font->fontset_load(N("-misc-fixed-bold-r-*-*-*-100-*-*-*-*-*-*,*"));
-
-#$black = "\033[30m";
-#$red = "\033[31m";
-#$green = "\033[32m";
-#$yellow = "\033[33m";
-#$blue = "\033[34m";
-#$magenta = "\033[35m";
-#$purple = "\033[35m";
-#$cyan = "\033[36m";
-#$white = "\033[37m";
-#$darkgray = "\033[30m";
-#$col_norm = "\033[00m";
-#$col_background = "\033[07m";
-#$col_brighten = "\033[01m";
-#$col_underline = "\033[04m";
-#$col_blink = "\033[05m";
-
-my $white = gtkcolor(50400, 655, 20000);
-my $black = gtkcolor(0, 0, 0);
-my $red = gtkcolor(0xFFFF, 655, 655);
-my $green = gtkcolor(0x0, 0x9898,0x0);
-my $yellow = gtkcolor(0xFFFF, 0xD7D7, 0);
-my $blue = gtkcolor(655, 655, 0xFFFF);
-my $magenta = gtkcolor(0xFFFF, 655, 0xFFFF);
-my $purple = gtkcolor(0xA0A0, 0x2020, 0xF0F0);
-my $cyan = gtkcolor(0x0, 0x9898, 0x9898);
-my $darkgray = gtkcolor(0x2F2F, 0x4F4F, 0x4F4F);
-
-# Define global terms:
-# Define good notables:
-my @word_good = ("starting\n", "Freeing", "Detected", "starting.", "accepted.\n", "authenticated.\n", "Ready", "active", "reloading", "saved;", "restarting", "ONLINE\n");
-my @word_warn = ("dangling", "closed.\n", "Assuming", "root", "root\n", "exiting\n", "missing", "Ignored", "adminalert:", "deleting", "OFFLINE\n");
-my @word_bad = ("bad");
-my @word_note = ("LOGIN", "DHCP_OFFER", "optimized", "reset:", "unloaded", "disconnected", "connect", "Successful", "registered\n");
-my @line_good = ("up", "DHCP_ACK", "Cleaned", "Initializing", "Starting", "success", "successfully", "alive", "found", "ONLINE\n");
-my @line_warn = ("warning:", "WARNING:", "invalid", "obsolete", "bad", "Password", "detected", "timeout", "timeout:", "attackalert:", "wrong", "Lame", "FAILED", "failing", "unknown", "obsolete", "stopped.\n", "terminating.", "disabled\n", "disabled", "Lost");
-my @line_bad = ("DENY", "lost", "shutting", "dead", "DHCP_NAK", "failure;", "Unable", "inactive", "terminating", "refused", "rejected", "down", "OFFLINE\n", "error\n", "ERROR\n", "ERROR:", "error", "ERROR", "error:", "failed:");
-
-# Define specifics:
-my @daemons = ("named");
-
-# Now define what we want to use when:
-my $col_good = 'green4';
-my $col_warn = 'yellow4';
-my $col_bad = 'red';
-my $col_note = 'purple';
-my $col = 'darkcyan';
-
-######### font and colors end
-
-my %files = (
- "auth" => { file => "/var/log/auth.log", desc => N("Authentication") },
- "user" => { file => "/var/log/user.log", desc => N("User") },
- "messages" => { file => "/var/log/messages", desc => N("Messages") },
- "syslog" => { file => "/var/log/syslog", desc => N("Syslog") },
- "explanations" => { file => "/var/log/explanations", desc => N("Mandrake Tools Explanation") }
-);
-
-my $yy = gtkset_sensitive(gtksignal_connect(new Gtk2::Button(N("search")) , clicked => \&search),0);
-my $log_text = new Gtk2::TextView;
-$log_text->set_property('editable', 0);
-
-my $log_buf = $log_text->get_buffer();
-my $refcount_search;
-#### far from window
-
-my %toggle;
-
-gtkadd($my_win->{window},
- gtkpack_(new Gtk2::VBox(0,0),
- if_(!$::isExplain && !$::isEmbedded, 0, N("A tool to monitor your logs")),
- if_(!$::isFile, 0, gtkadd(new Gtk2::Frame(N("Settings")),
- gtkpack__(new Gtk2::VBox(0,2),
- gtkpack__(new Gtk2::VBox(0,2),
- # N("Show lines"),
- gtkpack__(new Gtk2::HBox(0,0),
- " " . N("matching") . " ", my $e_yes = new Gtk2::Entry(),
- " " . N("but not matching") . " ", my $e_no = new Gtk2::Entry()
- )
- ),
- gtkpack_(new Gtk2::HBox(0,0),
- 1, gtkadd(gtkset_border_width(new Gtk2::Frame(N("Choose file")),2),
- gtkpack(gtkset_border_width(Gtk2::VBox->new(0,0),0),
- map { $toggle{$_} = gtksignal_connect(new Gtk2::CheckButton($files{$_}{desc}),
- clicked => sub {
- $refcount_search++;
- gtkset_sensitive($yy,$refcount_search);
- }) } keys %files,
- )
- ),
- 0, gtkadd(gtkset_border_width(new Gtk2::Frame(N("Calendar")),2),
- gtkpack__(gtkset_border_width(new Gtk2::VBox(0,0),5),
- $cal_butt, $cal
- )
- )
- ),
- $yy,
- )
- )
- ),
- !$::isExplain ? (1, gtkadd(new Gtk2::Frame(N("Content of the file")),
- create_scrolled_window($log_text)
- )) : (1, create_scrolled_window($log_text)),
- if_(!$::isExplain, 0, gtkadd(gtkset_border_width(gtkset_layout(Gtk2::HButtonBox->new, 'end'), 5),
- if_(!$::isFile, gtksignal_connect(new Gtk2::Button(N("Mail alert")),
- clicked => sub {
- eval { alert_config() };
- if ($@ =~ /wizcancel/) {
- $::Wizard_no_previous = 1;
- $::Wizard_no_cancel = 1;
- $::WizardWindow->destroy if defined $::WizardWindow;
- undef $::WizardWindow;
- } else { print "CRITICAL: \"$@\"\n" }
-
- })),
- gtksignal_connect(new Gtk2::Button(N("Save")), clicked => \&save),
- gtksignal_connect(new Gtk2::Button($::isEmbedded ? N("Cancel") : N("Quit")), clicked => \&quit)
- )
- )
- )
- );
-
-$::isFile and gtkset_size_request($log_text, 400, 500);
-
-$my_win->{window}->realize;
-$my_win->{window}->show_all();
-search() if $::isFile;
-$my_win->main;
-
-sub quit { ugtk2->exit(0) }
-
-#-------------------------------------------------------------
-# search functions
-#-------------------------------------------------------------
-sub search {
-# gtk_text_buffer_delete();
-#BUG $log_text->backward_delete($log_text->get_length()); #BUG
-#BUG $log_text->freeze();
- if ($::isFile) {
- parse_file($::File);
- } else {
- foreach (keys %files) {
- parse_file($files{$_}{file}) if $toggle{$_}->active;
- }
- }
-#BUG $log_text->thaw();
- $log_text->show();
- gtkflush();
-}
-
-local *F;
-
-sub parse_file {
- my ($file) = @_;#$_[0];
-
- $file =~ s/\.gz$//;
- my ($pbar, $win_pb);
- unless ($::isEmbedded) {
- gtkadd($win_pb = gtkset_modal(new Gtk2::Window('toplevel'), 1),
- gtkpack(new Gtk2::VBox(2,0),
- new Gtk2::Label(" " . N("please wait, parsing file: %s", $files{$_}{desc}) . " "),
- $pbar = new Gtk2::ProgressBar()
- )
- );
- $win_pb->set_transient_for($my_win->{rwindow});
- $win_pb->set_modal(1);
- $win_pb->set_position('center');
- $win_pb->realize();
- $win_pb->show_all();
- }
- my $ey = $e_yes->get_chars(0, -1);
- my $en = $e_no->get_chars(0, -1);
- $ey =~ s/ OR /\|/;
- $ey =~ s/^\*$//;
- $en =~ s/^\*$/.*/;
- $ey = $ey . $::Word if $::isWord;
-
- if ($cal_mode) {
- my (undef, $month, $day) = $cal->get_date();
- $ey = $months[$month]."\\s{1,2}$day\\s.*$ey.*\n";
- }
-
- my @all = catMaybeCompressed($file);
-
- if ($::isExplain) {
- my (@t, $t);
- while (@all) {
- $t = pop @all;
- next if $t =~ /logdrake/;
- last if $t !~ /$::Explain/;
- push @t, $t;
- }
- @all = reverse @t;
- }
-
- my $taille = @all;
- my $i = 0;
- foreach (@all) {
- $i++;
- if (!$::isEmbedded && $i % 10) {
- $pbar->set_fraction($i/$taille);
- gtkflush();
- }
-
- if ($en eq "" and /$ey/i) { logcolorize($_); next }
- if (! /$en/i and /$ey/i) { logcolorize($_); next }
- if (! /$en/i and $ey eq "") { logcolorize($_); next }
- }
- $win_pb->destroy() unless $::isEmbedded;
-
- if ($::isTail) {
- close F;
- open F, $file or die "E: $!";
- local $_;
- while (<F>) {}; #to prevent to output the file twice..
-# $log_text->set_point($log_text->get_length());
- my $timer = Gtk2->timeout_add(1000, \&input_callback);
- }
-}
-
-sub input_callback {
- logcolorize($_) while <F>;
- seek F, 0, 1;
-}
-
-
-##########################################################################################
-
-sub logcolorize {
-
- # we get date & time if it is date & time (dmesg)
- s/(\D{3} .. (\d\d:\d\d:\d\d ))//;
- my $timestamp = $::isExplain ? $2 : $1;
- my @rec = split;
-
- log_output($timestamp, { %b, 'foreground' => 'darkcyan' }); # date & time if any...
- # BUG: $col hasn't yet be reseted
- $::isExplain or log_output("$rec[0] ", { %b, 'foreground' => $rec[0] eq $h ? 'blue' : $col }); # hostname
-
- if ($rec[1] eq "last") {
- log_output(" last message repeated ", { %n, 'foreground' => 'green' });
- log_output($rec[4], { %b, 'foreground' => 'green' });
- log_output(" times\n", { %n, 'foreground' => 'green' });
- return;
- }
- # Extract PID if present
- if ($rec[1] =~ /\[(\d+)\]\:/) {
- my ($pid) = $1;
- $rec[1] =~ s/\[$1\]\://;
- log_output($rec[1] . "[", { %n, 'foreground' => 'green' });
- log_output($pid, { %b, 'foreground' => 'black' });
- log_output("]: ", { %n, 'foreground' => 'green' });
- }
- else {
- log_output($rec[1] . " ", { %n, 'foreground' => 'green' });
- }
-
- foreach my $therest (2 .. $#rec) {
- $col = 'darkcyan';
-
- # Check for keywords to highlight
- foreach (@word_good) { $col = $col_good if $_ eq $rec[$therest] }
- foreach (@word_warn) { $col = $col_warn if $_ eq $rec[$therest] }
- foreach (@word_bad) { $col = $col_bad if $_ eq $rec[$therest] }
- foreach (@word_note) { $col = $col_note if $_ eq $rec[$therest] }
-
- # Watch for words that indicate entire lines should be highlighted
- #foreach (@line_good) { $col = $col_good if $_ eq $rec[$therest] }
- #foreach (@line_warn) { $col = $col_warn if $_ eq $rec[$therest] }
- #foreach (@line_bad) { $col = $col_bad if $_ eq $rec[$therest] }
-
- log_output("$rec[$therest] ", { %n, 'foreground' => $col });
- }
- log_output("\n", { %n, 'foreground' => 'black' });
-}
-
-
-# log_output (Gtk2::TextView, [ [ ... ] ])
-sub log_output {
- gtktext_append($log_text, [ \@_ ]);
-# $log_buf->insert($buf->get_end_iter(), @_, -1);
-}
-
-
-#-------------------------------------------------------------
-# mail/sms alert
-#-------------------------------------------------------------
-
-sub alert_config {
-
- $::isWizard = 1;
- $::Wizard_pix_up = "wiz_logdrake.png"; # FIXME
- $::Wizard_title = N("Mail alert");
-
- my $cron = q(#!/usr/bin/perl
-# generated by logdrake
-use MDK::Common;
-my $r = "*** " . chomp_(`date`) . " ***\n";
-
-);
-
-my $initdir = "/etc/init.d";
-
- my ($load, $email, $smtp);
- $load = 3;
-
- begin:
- $::Wizard_finished = 0;
- $::Wizard_no_previous = 1;
- $in->ask_okcancel(N("Mail alert configuration"),
- N("Welcome to the mail configuration utility.\n\nHere, you'll be able to set up the alert system.\n"),
- 1) or quit();
-
- step_service:
- undef $::Wizard_no_previous;
- undef $::Wizard_finished;
- my $service = {
- httpd => N("Apache World Wide Web Server"),
- bind => N("Domain Name Resolver"),
- ftp => N("Ftp Server"),
- postfix => N("Postfix Mail Server"),
- samba => N("Samba Server"),
- sshd => N("SSH Server"),
- webmin => N("Webmin Service"),
- xinetd => N("Xinetd Service")
- };
- my @installed_d;
- foreach my $serv (keys %$service) {
- -e "$initdir/$serv" && push @installed_d, $serv;
- }
- my %services_to_check;
- $in->ask_from(N("service setting"),
- N("You will receive an alert if one of the selected services is no longer running"),
- [ map { { label => $_, val => \$services_to_check{$_}, type => "bool", text => $service->{$_} } } @installed_d
- ]) or goto begin;
-
- $cron .= "#- check services\n";
- foreach (keys %services_to_check) {
- next unless $services_to_check{$_};
- $cron .= "\$r .= \"Service $_ ($service->{$_} is not running)\\n\" unless -e \"/var/lock/subsys/$_\";\n";
- }
-
- step_load:
- undef $::Wizard_finished;
- $in->ask_from(N("load setting"),
- N("You will receive an alert if the load is higher than this value"),
- [
- { label => "load ", val => \$load, type => 'range', min => 1, max => 50 },
- ]) or goto step_service;
-
- $cron .= sprintf(<<'EOF', $load);
-#- load
-my ($load) = split ' ', first(cat_("/proc/loadavg"));
-$r .= "Load is huge: $load\n" if $load > %s;
-
-EOF
-
- step_output:
-# $::Wizard_no_previous = 1;
- $::Wizard_finished = 1;
- $in->ask_from(N("alert configuration"),
- N("Please enter your email address below "),
- [
- { label => "" },
- { label => "Email", val => \$email },
- ]) or goto step_load;
-
- $cron .= q(#- report it
-
-my $email = ) . "'$email';\n\n";
-
- $cron .= q(local *F;
-open F, '|/usr/sbin/sendmail -oi -t';
-print F q(Subject: logdrake Mail Alert
-From: root@localhost
-To: ), "$email\n";
-print F $r;
-
-# EOF);
- output $cron_hourly, $cron;
- chmod 0755, $cron_hourly;
-
- undef $::isWizard;
- if (defined $::WizardWindow) {
- $::WizardWindow->destroy;
- undef $::WizardWindow;
- }
-}
-
-
-#-------------------------------------------------------------
-# menu callback functions
-#-------------------------------------------------------------
-
-
-sub save {
- $::isWizard = 0;
- $yy = $in->ask_file(N("Save as.."), "/root") or return;
- my $buf = $log_text->get_buffer;
- output($yy, $buf->get_text(($buf->get_bounds), 0));
-}
diff --git a/perl-install/standalone/lsnetdrake b/perl-install/standalone/lsnetdrake
deleted file mode 100755
index f08008aa4..000000000
--- a/perl-install/standalone/lsnetdrake
+++ /dev/null
@@ -1,30 +0,0 @@
-#!/usr/bin/perl
-
-use lib qw(/usr/lib/libDrakX);
-use standalone;
-use network::nfs;
-use network::smb;
-
-"@ARGV" =~ /-h/ and die "usage: lsnetdrake [-h] [--nfs] [--smb]\n";
-
-my $nfs = !@ARGV || "@ARGV" =~ /-(nfs)/;
-my $smb = !@ARGV || "@ARGV" =~ /-(smb)/;
-
-$| = 1;
-$ENV{PATH} = "/sbin:/usr/sbin:$ENV{PATH}";
-
-my @l;
-push @l, network::nfs->new if $nfs;
-push @l, network::smb->new if $smb;
-
-foreach my $class (@l) {
- foreach my $server (sort_names($class->find_servers)) {
- foreach (sort_names(eval { $class->find_exports($server) })) {
- print $class->to_fullstring($_), "\n";
- }
- }
-}
-
-sub sort_names {
- sort { $a->{name} cmp $b->{name} } @_;
-}
diff --git a/perl-install/standalone/mousedrake b/perl-install/standalone/mousedrake
deleted file mode 100755
index 602f28db0..000000000
--- a/perl-install/standalone/mousedrake
+++ /dev/null
@@ -1,64 +0,0 @@
-#!/usr/bin/perl
-
-use lib qw(/usr/lib/libDrakX);
-
-use standalone; #- warning, standalone must be loaded very first, for 'explanations'
-
-use common;
-use interactive;
-use modules;
-use mouse;
-use c;
-
-
-my $in = 'interactive'->vnew('su', 'mouse');
-
-modules::mergein_conf('/etc/modules.conf') if -r '/etc/modules.conf';
-
-undef $::Plug;
-begin:
-my $mouse = mouse::read();
-if (!$::noauto) {
- my $probed_mouse = mouse::detect();
- $mouse = $probed_mouse if !$mouse->{XMOUSETYPE} || !$probed_mouse->{unsafe};
-}
-
-if (!$mouse || !$::auto) {
- $mouse ||= mouse::fullname2mouse("serial|Generic 2 Button Mouse");
- if ($::isEmbedded && $in->isa('interactive::gtk')) {
- #- HACK: waiting for the ask_from_treelistf to attach itself
- #- and adding the nice test mouse to it
- Gtk2->timeout_add(100, sub {
- defined $::Plug && defined $::Plug->child or return 1;
- mouse::test_mouse_standalone($mouse, $::Plug->child);
- 0;
- });
- }
- my $name = $in->ask_from_treelistf('mousedrake', N("Please choose your mouse type."), '|',
- sub { join '|', map { translate($_) } split '\|', $_[0] },
- [ mouse::fullnames ],
- $mouse->{type} . '|' . $mouse->{name});
- $name or $in->exit(0);
- my $mouse_chosen = mouse::fullname2mouse($name);
- $mouse = $mouse_chosen if !($mouse->{type} eq $mouse_chosen->{type} && $mouse->{name} eq $mouse_chosen->{name});
-
- if ($mouse->{device} eq "usbmouse") {
- modules::load_category('bus/usb') or die 'no usb bus found\n';
- modules::load(qw(hid mousedev usbmouse));
- }
-
- $mouse->{XEMU3} = 'yes' if $mouse->{nbuttons} < 3 && (!$::noauto || $in->ask_yesorno('', N("Emulate third button?"), 1));
-
- $mouse->{device} = $in->ask_from_listf(N("Mouse Port"),
- N("Please choose which serial port your mouse is connected to."),
- \&mouse::serial_port2text,
- [ mouse::serial_ports ],
- $mouse->{device},
- ) || goto begin if $mouse->{type} eq 'serial';
-}
-
-mouse::write_conf($in, $mouse, 1);
-system('service', 'gpm', 'restart') if -e '/var/lock/subsys/gpm';
-
-$in->exit(0);
-goto begin;
diff --git a/perl-install/standalone/net_monitor b/perl-install/standalone/net_monitor
deleted file mode 100755
index 2df918780..000000000
--- a/perl-install/standalone/net_monitor
+++ /dev/null
@@ -1,571 +0,0 @@
-#!/usr/bin/perl
-
-# Monitor
-
-# Copyright (C) 1999-2002 MandrakeSoft (damien@mandrakesoft.com)
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-use lib qw(/usr/lib/libDrakX);
-
-use strict;
-use standalone; #- warning, standalone must be loaded very first, for 'explanations'
-
-#- languages that can't be displayed with gtk1, so we unset translations
-#- for them until this tool is ported to gtk2
-if ($ENV{LANGUAGE} =~ /\b(ar|he|hi|ta)/) { $ENV{LANGUAGE} = "C" };
-
-use my_gtk qw(:helpers :wrappers);
-use common;
-use network::netconnect;
-use network::tools;
-use MDK::Common::Globals "network", qw($in $prefix $connect_file $disconnect_file $connect_prog);
-
-if ("@ARGV" =~ /--status/) { print connected(); exit(0) }
-my $force = "@ARGV" =~ /--force/;
-my $quiet = "@ARGV" =~ /--quiet/;
-my $connect = "@ARGV" =~ /--connect/;
-my $disconnect = "@ARGV" =~ /--disconnect/;
-my ($default_intf) = "@ARGV" =~ /--defaultintf (\w+)/;
-
-if ($force) {
- $connect and system("/etc/sysconfig/network-scripts/net_cnx_up");
- $disconnect and system("/etc/sysconfig/network-scripts/net_cnx_down");
- $connect = $disconnect = 0;
-}
-$quiet and exit(0);
-init Gtk;
-
-require_root_capability();
-
-my $window1 = my_gtk->new('net_monitor');
-$window1->{rwindow}->signal_connect(delete_event => sub { my_gtk->exit(0) });
-unless ($::isEmbedded) {
- $window1->{rwindow}->set_position(1) ;
- $window1->{rwindow}->set_title(N("Network Monitoring"));
- $window1->{rwindow}->set_policy(1, 1, 1);
- $window1->{rwindow}->set_border_width(5);
-}
-#$::isEmbedded or $window1->{rwindow}->set_usize(580, 320);
-
-my $colorr = gtkcolor(50400, 655, 20000);
-my $colort = gtkcolor(55400, 55400, 655);
-my $colora = gtkcolor(655, 50400, 655);
-my $isconnected = -1;
-my @interfaces;
-my $monitor = {};
-my $netcnx = {};
-my $netc = {};
-my $intf = {};
-my $c_time = 0;
-my $ct_tag;
-my $style = new Gtk::Style;
-$style->font(Gtk::Gdk::Font->fontset_load("-adobe-times-medium-r-normal-*-12-*-75-75-p-*-iso8859-*,*-r-*"));
-
-network::netconnect::load_conf($netcnx, $netc, $intf);
-network::netconnect::read_net_conf('', $netcnx, $netc);
-my $combo1 = new Gtk::Combo;
-$combo1->set_popdown_strings(network::netconnect::get_profiles());
-$combo1->entry->set_text($netcnx->{PROFILE} || "default");
-$combo1->entry->set_editable(0);
-MDK::Common::Globals::init(
- in => $in,
- prefix => '',
- connect_file => "/etc/sysconfig/network-scripts/net_cnx_up",
- disconnect_file => "/etc/sysconfig/network-scripts/net_cnx_down",
- connect_prog => "/etc/sysconfig/network-scripts/net_cnx_pg");
-
-gtkadd($window1->{window},
- gtkpack_(new Gtk::VBox(0,5),
- 0, N("Network Monitoring"),
- 1, gtkpack_(new Gtk::HBox(0,5),
- 1, my $notebook = new Gtk::Notebook,
- 0, gtkpack_(new Gtk::VBox(0,5),
- 0, gtkadd(gtkset_shadow_type(new Gtk::Frame(N("Settings")), 'etched_out'),
- gtkpack__(gtkset_border_width(new Gtk::VBox(0,5),5),
- gtkpack__(new Gtk::HBox(0,0),
- N("Connection type: "), my $label_cnx_type = new Gtk::Label("")),
- gtkpack__(new Gtk::HBox(0,0),
- N("Profile "), $combo1)
- )
- ),
- 1, gtkadd(gtkset_shadow_type(new Gtk::Frame(N("Statistics")), 'etched_out'),
- gtkpack__(new Gtk::VBox(0,0),
- create_packtable({ col_spacings => 1, row_spacings => 1 },
- [ "", "instantaneous" , "average"],
- [ N("Sending Speed:"), my $label_st = new Gtk::Label(""), my $label_sta = new Gtk::Label("na")],
- [ N("Receiving Speed:"),my $label_sr = new Gtk::Label(""), my $label_sra = new Gtk::Label("na")],
- ),
- gtkpack__(new Gtk::HBox(0,0), " " . N("Connection Time: "), my $label_ct = new Gtk::Label("")),
- )
- ),
- 0, gtkpack_(new Gtk::HBox(0,5),
- 1, gtksignal_connect(my $button_connect = gtkset_sensitive(new Gtk::Button(), 0), clicked => \&connection),
- 0, new Gtk::VSeparator,
- 0, gtkpack(new Gtk::VBox(0,5),
- gtksignal_connect(new Gtk::Button(N("Logs")), clicked => sub {
- -e "/usr/sbin/logdrake"
- ? system('/usr/sbin/logdrake --file=/var/log/messages &')
- : system('/usr/X11R6/bin/xvt -e "tail -f /var/log/messages " &')
- }),
- gtksignal_connect(my $button_close = new Gtk::Button(N("Close")), clicked => sub { my_gtk->exit(0) }),
- )
- )
- )
- ),
- 0, my $statusbar = new Gtk::Statusbar
- )
- );
-$window1->{rwindow}->show_all;
-$window1->{rwindow}->realize;
-$combo1->entry->signal_connect(changed => sub {
- network::netconnect::set_profile($netcnx, $combo1->entry->get_text());
- network::netconnect::load_conf($netcnx, $netc, $intf);
- network::netconnect::set_net_conf($netcnx, $netc, $intf);
- network::netconnect::read_net_conf('', $netcnx, $netc);
- });
-my $gct = new Gtk::Gdk::GC($window1->{rwindow}->window);
-$gct->set_foreground($colort);
-my $gcr = new Gtk::Gdk::GC($window1->{rwindow}->window);
-$gcr->set_foreground($colorr);
-my $gca = new Gtk::Gdk::GC($window1->{rwindow}->window);
-$gca->set_foreground($colora);
-my ($pix_c_map, $pix_c_mask) = gtkcreate_png("net_c.png");
-my ($pix_d_map, $pix_d_mask) = gtkcreate_png("net_d.png");
-my ($pix_u_map, $pix_u_mask) = gtkcreate_png("net_u.png");
-$button_connect->add(gtkpack__(new Gtk::VBox(0,3),
- my $pix_c = new Gtk::Pixmap($pix_u_map, $pix_u_mask),
- my $label_c = new Gtk::Label(N("Wait please"))
- ));
-$statusbar->push(1, N("Wait please, testing your connection..."));
-$window1->{rwindow}->show_all();
-#$window1->{rwindow}->set_policy (1, 1, 1);
-
-my $time_tag = Gtk->timeout_add(1000, \&rescan);
-my $time_tag2 = Gtk->timeout_add(1000, \&update);
-
-update();
-rescan();
-
-while ($isconnected == -2 || $isconnected == -1) {
- ugtk::gtkflush()
-}
-
-Gtk->timeout_remove($time_tag2);
-$time_tag2 = Gtk->timeout_add(20000, \&update);
-
-connection() if $connect && !$isconnected || $disconnect && $isconnected;
-$window1->main;
-my_gtk->exit(0);
-
-my $during_connection;
-my $first;
-
-sub connection {
- $during_connection = 1;
- my $wasconnected = $isconnected;
-
- $button_connect->set_sensitive(0);
- $button_close->set_sensitive(0);
- $statusbar->pop(1);
- $statusbar->push(1, $wasconnected ? N("Disconnecting from the Internet ") : N("Connecting to the Internet "));
- if ($wasconnected == 1) {
- $c_time = time();
- $ct_tag = Gtk->timeout_add(1000, sub {
- my ($sec,$min,$hour) = gmtime(time() - $c_time);
- my $e = sprintf ("%02d:%02d:%02d", $hour, $min, $sec);
- $label_ct->set($e); 1 })
- } else { Gtk->timeout_remove($ct_tag) }
- my $nb_point = 1;
- $first = 1;
-
- my $tag = Gtk->timeout_add(1000, sub {
- $statusbar->pop(1);
- $statusbar->push(1, ($wasconnected == 1 ? N("Disconnecting from the Internet ") : N("Connecting to the Internet "))
- . join('', map { "." } (1..$nb_point)));
- $nb_point++;
- if ($nb_point < 4) { return 1 }
- my $ret = 1;
-
- my $isconnect = test_connected(0);
-
- if ($nb_point < 20) {
- if ($first == 1) { # first time
- if ($isconnect == -2) { # wait for last test to finish
- test_connected(2); # not yet terminated, try to cancel it
- return 1;
- }
- test_connected(1); # initiates new connection test
- $first = 0;
- return 1;
- }
- if ($isconnect == -2) { return 1 } # no result yet, wait.
- if ($isconnect == $wasconnected) {
- # we got a test result; but the connection state did not change; retry.
- test_connected(1);
- return 1;
- }
- }
- # either we got a result, or we timed out.
- if ($isconnect != -2 or $nb_point > 20) {
- $isconnected = $isconnect;
- $ret = 0;
- $statusbar->pop(1);
- $statusbar->push(1, $wasconnected ? ($isconnected ?
- N("Disconnection from the Internet failed.") :
- N("Disconnection from the Internet complete.")) :
- ($isconnected ?
- N("Connection complete.") :
- N("Connection failed.\nVerify your configuration in the Mandrake Control Center."))
- );
- my $delay = 1000;
- # keep the message displayed longer if there is a problem.
- if ($isconnected == $wasconnected) { $delay = 5000 }
- my $tag3 = Gtk->timeout_add($delay, sub {
-
- $button_connect->set_sensitive(1);
- $button_close->set_sensitive(1);
- undef $during_connection;
- update();
- return 0;
- });
- } # END IF
- return $ret });
-
- my $netc = {};
- Gtk->main_iteration while Gtk->events_pending;
-
- if ($wasconnected == 1) {
- system("/etc/sysconfig/network-scripts/net_cnx_down &");
- } else {
- system("/etc/sysconfig/network-scripts/net_cnx_up &");
- }
-}
-
-sub rescan {
- get_val();
- foreach (@interfaces) {
- my $intf = $_;
- my $recv = $monitor->{$intf}{val}[0];
- my $transmit = $monitor->{$intf}{val}[8];
- my $refr = $monitor->{$intf}{referencer};
- my $reft = $monitor->{$intf}{referencet};
- $monitor->{sr} += $recv - $refr;
- $monitor->{st} += $transmit - $reft;
-
- $monitor->{$intf}{recva} += $recv - $refr;
- $monitor->{$intf}{recvan}++;
- if ($monitor->{$intf}{recvan} > 9) {
- push(@{$monitor->{$intf}{stack_ra}}, $monitor->{$intf}{recva}/10);
- $monitor->{$intf}{recva} = $monitor->{$intf}{recvan} = 0;
- } else { push(@{$monitor->{$intf}{stack_ra}}, -1) }
- shift @{$monitor->{$intf}{stack_ra}} if @{$monitor->{$intf}{stack_ra}} > 250;
-
- push(@{$monitor->{$intf}{stack_r}}, $recv - $refr);
- shift @{$monitor->{$intf}{stack_r}} if @{$monitor->{$intf}{stack_r}} > 250;
- $monitor->{$intf}{labelr}->set(formatXiB($recv - $monitor->{$intf}{initialr}));
- $monitor->{$intf}{referencer} = $recv;
-
- $monitor->{$intf}{transmita} += $transmit - $reft;
- $monitor->{$intf}{transmitan}++;
- if ($monitor->{$intf}{transmitan} > 9) {
- push(@{$monitor->{$intf}{stack_ta}}, $monitor->{$intf}{transmita}/10);
- $monitor->{$intf}{transmita} = $monitor->{$intf}{transmitan} = 0;
- } else { push(@{$monitor->{$intf}{stack_ta}}, -1) }
- shift @{$monitor->{$intf}{stack_ta}} if @{$monitor->{$intf}{stack_ta}} > 250;
-
- push(@{$monitor->{$intf}{stack_t}}, $transmit - $reft);
- shift @{$monitor->{$intf}{stack_t}} if @{$monitor->{$intf}{stack_t}} > 250;
- $monitor->{$intf}{labelt}->set(formatXiB($transmit - $monitor->{$intf}{initialt}));
- $monitor->{$intf}{referencet} = $transmit;
-
- draw_monitor($monitor->{$intf});
- }
- $label_sr->set(formatXiB($monitor->{sr}) . "/s");
- $label_st->set(formatXiB($monitor->{st}) . "/s");
- $monitor->{sra} += $monitor->{sr};
- $monitor->{sta} += $monitor->{st};
- $monitor->{nba}++;
- if ($monitor->{nba} > 9) {
- $label_sra->set(formatXiB($monitor->{sra}/10) . "/s");
- $label_sta->set(formatXiB($monitor->{sta}/10) . "/s");
- $monitor->{sra} = 0;
- $monitor->{sta} = 0;
- $monitor->{nba} = 0;
- }
- $label_cnx_type->set($netcnx->{type});
- $monitor->{$_} = 0 foreach 'sr', 'st';
- 1;
-}
-
-sub get_val {
- my @ret;
- my $a = cat_("/proc/net/dev");
- $a =~ s/^.*?\n.*?\n//;
- $a =~ s/^\s*lo:.*?\n//;
- my @line = split(/\n/, $a);
- foreach (@line) {
- s/\s*(\w*)://;
- my $intf = $1;
- push (@ret,$intf);
- $monitor->{$intf}{val} = [split()];
- $monitor->{$intf}{intf} = $intf;
- }
- @ret;
-}
-
-sub change_color {
- my ($color) = @_;
- my $window = new Gtk::Window -toplevel;
- my $doit;
- $window->signal_connect(delete_event => sub { Gtk->main_quit() });
- $window->set_position(1);
- $window->set_title(N("Color configuration"));
- $window->set_border_width(5);
- gtkadd(gtkset_modal($window,1),
- gtkpack_(new Gtk::VBox(0,5),
- 1, my $colorsel = new Gtk::ColorSelection,
- 0, gtkadd(gtkset_layout(new Gtk::HButtonBox, -end),
- gtksignal_connect(new Gtk::Button(N("OK")), clicked => sub { $doit = 1; Gtk->main_quit() }),
- gtksignal_connect(new Gtk::Button(N("Cancel")), clicked => sub { Gtk->main_quit() }),
- )
- )
- );
- $colorsel->set_color($color->red()/65535, $color->green()/65535, $color->blue()/65535, $color->pixel());
- $window->show_all();
- Gtk->main;
- $window->destroy();
- $doit or return $color;
- my (@color) = $colorsel->get_color();
- my_gtk::gtkcolor($color[0]*65535, $color[1]*65535, $color[2]*65535);
-}
-
-my $scale;
-sub update {
- if (!$during_connection) {
- my $isconnect = test_connected(0);
- if ($isconnect != -2) {
- $isconnected = $isconnect; # save current state
- $isconnect = test_connected(1); # start new test
- }
- };
-
- my @intfs = get_val(); # get values from /proc file system
- if ($combo1->entry->get_text ne ($netcnx->{PROFILE} || "default")) {
- $combo1->entry->set_text($netcnx->{PROFILE} || "default");
- }
- foreach (@intfs) {
- my $intf = $_;
- if (!member($intf,@interfaces)) {
- $default_intf = $intf;
- $monitor->{$intf}{initialr} = $monitor->{$intf}{val}[0];
- $monitor->{$intf}{initialt} = $monitor->{$intf}{val}[8];
- $monitor->{$intf}{darea} = new Gtk::DrawingArea();
- $monitor->{$intf}{darea}->set_events(["pointer_motion_mask"]);
- $notebook->append_page(gtkshow(my $page = gtkpack_(new Gtk::VBox(0,0),
- 0, gtkpack__(gtkset_border_width(new Gtk::HBox(0,0), 5),
- gtksize($monitor->{$intf}{darea},300, 150)),
- 0, gtkpack_(new Gtk::HBox(0,0),
- 1, gtkpack__(new Gtk::VBox(0,0),
- gtkpack__(gtkset_border_width(new Gtk::HBox(0,5), 5),
- gtksignal_connect(my $button_t = gtkset_relief(new Gtk::Button(), 'none'), clicked => sub {
- $colort = change_color($colort);
- $gct->set_foreground($colort);
- $_[0]->draw(undef);
- }),
- N("sent: "), $monitor->{$intf}{labelt} = new Gtk::Label("0")),
- gtkpack__(gtkset_border_width(new Gtk::HBox(0,5), 5),
- gtksignal_connect(my $button_r = gtkset_relief(new Gtk::Button(), 'none'), clicked => sub {
- $colorr = change_color($colorr);
- $gcr->set_foreground($colorr);
- $_[0]->draw(undef);
- }),
- N("received: "), $monitor->{$intf}{labelr} = new Gtk::Label("0")),
- gtkpack__(gtkset_border_width(new Gtk::HBox(0,5), 5),
- gtksignal_connect(my $button_a = gtkset_relief(new Gtk::Button(), 'none'), clicked => sub {
- $colora = change_color($colora);
- $gca->set_foreground($colora);
- $_[0]->draw(undef);
- }),
- N("average"))
- ),
- 0, gtkpack__(gtkset_border_width(new Gtk::VBox(0,0), 5),
- gtkadd(gtkset_shadow_type(new Gtk::Frame(N("Local measure")), 'etched_out'),
- gtkpack__(gtkset_border_width(new Gtk::VBox(0,0), 5),
- gtkpack__(new Gtk::HBox(0,0),
- N("sent: "),
- my $measure_t = new Gtk::Label("0")
- ),
- gtkpack__(new Gtk::HBox(0,0),
- N("received: "),
- my $measure_r = new Gtk::Label("0")
- )
- )
- )
- )
- )
- )),
- new Gtk::Label($intf));
- foreach my $i ([$button_t, $gct], [$button_r, $gcr], [$button_a, $gca]) {
- $i->[0]->add(gtksignal_connect(gtkshow(gtksize(gtkset_usize(new Gtk::DrawingArea(), 10, 10), 10, 10)), expose_event => sub { $_[0]->window->draw_rectangle($i->[1], 1, 0, 0, 10, 10) }));
- }
- $notebook->set_page($notebook->page_num($page));
- $monitor->{$intf}{page} = ($notebook->page_num($page));
- $monitor->{$intf}{pixmap_db} = new Gtk::Gdk::Pixmap($monitor->{$intf}{darea}->window, 300, 150);
- $monitor->{$intf}{referencer} = $monitor->{$intf}{val}[0];
- $monitor->{$intf}{referencet} = $monitor->{$intf}{val}[8];
- $monitor->{$intf}{pixmap_db}->draw_rectangle($monitor->{$intf}{darea}->style->black_gc, 1, 0, 0, 300, 150);
- $monitor->{$intf}{darea}->signal_connect(motion_notify_event =>
- sub { my ($w, $e) = @_;
- my $x = $e->{'x'} - 50;
- my $y = $e->{'y'};
- my $received = $x >= 0 ? $monitor->{$intf}{stack_r}[$x] : 0;
- my $transmitted = $x >= 0 ? $monitor->{$intf}{stack_t}[$x] : 0;
- my $type;
- $y * $scale / 150 < $transmitted and $type = N("transmitted");
- (150 - $y) * $scale / 150 < $received and $type = N("received");
- $measure_r->set(formatXiB($received));
- $measure_t->set(formatXiB($transmitted));
- });
- $monitor->{$intf}{darea}->signal_connect(expose_event => sub {
- $monitor->{$intf}{darea}->window->draw_pixmap($monitor->{$intf}{darea}->style->bg_gc('normal'),
- $monitor->{$intf}{pixmap_db}, 0, 0, 0, 0, 300, 150);
- });
- }
- }
- foreach (@interfaces) {
- my $intf = $_;
- $notebook->remove_page($monitor->{$intf}{page}) unless member($intf,@intfs);
- }
- @interfaces = @intfs;
- my $netc = {};
- if ($isconnected != -2 && $isconnected != -1 && !$during_connection) {
- if ($isconnected == 1 && !in_ifconfig($netcnx->{NET_INTERFACE})) {
- $isconnected = 0;
- $statusbar->pop(1);
- $statusbar->push(1, N("Warning, another internet connection has been detected, maybe using your network"));
- } else {
- #- translators : $netcnx->{type} is the type of network connection (modem, adsl...)
- $statusbar->pop(1);
- $statusbar->push(1, $isconnected == 1 ? N("Connected") : N("Not connected"));
- }
- $label_c->set($isconnected == 1 ? N("Disconnect %s", $netcnx->{type}) : N("Connect %s", $netcnx->{type}));
- $isconnected == 1 ? $pix_c->set($pix_c_map, $pix_c_mask) : $pix_c->set($pix_d_map, $pix_d_mask);
- $button_connect->set_sensitive(1);
- }
- if (!(-e $connect_file && -e $disconnect_file)) {
- $button_connect->set_sensitive(0);
- $label_c->set("No internet connection configured");
- }
- 1;
-}
-
-sub in_ifconfig {
- my ($intf) = @_;
- -e '/sbin/ifconfig' or return 1;
- $intf eq '' and return 1;
- `/sbin/ifconfig` =~ /$intf/;
-}
-
-sub draw_monitor {
- my ($o) = @_;
- defined $o->{darea} or return;
- $o->{pixmap_db}->draw_rectangle($o->{darea}->style->black_gc, 1, 0, 0, 300, 150);
- my $maxr = 0;
- foreach (@{$o->{stack_r}}) { $maxr = $_ if $_ > $maxr }
- my $maxt = 0;
- foreach (@{$o->{stack_t}}) { $maxt = $_ if $_ > $maxt }
- my $ech = $maxr + $maxt;
- $ech == 0 and $ech = 1;
- $scale = $ech;
- my $step = 49;
- foreach (@{$o->{stack_t}}) {
- $o->{pixmap_db}->draw_rectangle($gct, 1, $step, 0, 1, $_*150/$ech);
- $step++;
- }
- $step = 49;
- my ($av1, $av2, $last_a);
- foreach (@{$o->{stack_ta}}) {
- if ($_ != -1) {
- if (!defined $av1) { $av1 = $_ } else { defined $av2 or $av2 = $_ }
- if ($av1 && $av2) {
- $o->{pixmap_db}->draw_line($gca, $step-15, $av1*150/$ech, $step-5, $av2*150/$ech);
- $av1 = $av2;
- undef $av2;
- $last_a = $step-50;
- }
- }
- $step++;
- }
- $step = 49;
- foreach (@{$o->{stack_r}}) {
- $o->{pixmap_db}->draw_rectangle($gcr, 1, $step, 151-$_*150/$ech, 1, $_*150/$ech);
- $step++;
- }
- $step = 49;
- ($av1, $av2) = undef;
- foreach (@{$o->{stack_ra}}) {
- if ($_ != -1) {
- if (!defined $av1) { $av1 = $_ } else { defined $av2 or $av2 = $_ }
- if (defined $av1 && defined $av2) {
- $o->{pixmap_db}->draw_line($gca, $step-15, 151-$av1*150/$ech, $step-5, 151-$av2*150/$ech);
- $av1 = $av2;
- undef $av2;
- }
- }
- $step++;
- }
-
- my $switch = 1;
- my $gcl = new Gtk::Gdk::GC($o->{darea}->window);
- $gcl->set_foreground($o->{darea}->window->get_colormap->color_white());
- $gcl->set_line_attributes(1, 'on-off-dash', 'not-last', 'round');
- for (my $i = 30; $i <= 120; $i += 30) {
- $o->{pixmap_db}->draw_line($gcl, 50, $i, 300, $i);
- my ($gc2, $text);
- my ($dif1, $dif2);
- if ($last_a) {
- $dif1 = abs(150-@{$o->{stack_ra}}[$last_a]*150/$ech - $i);
- $dif2 = abs(@{$o->{stack_ta}}[$last_a]*150/$ech - $i);
- } else {
- $dif1 = abs(150-@{$o->{stack_r}}[@{$o->{stack_r}}-1]*150/$ech - $i);
- $dif2 = abs(@{$o->{stack_t}}[@{$o->{stack_t}}-1]*150/$ech - $i);
- }
- if ($dif1 < $dif2) {
- $text = formatXiB((150-$i)*$ech/150);
- $gc2 = $gcr;
- my $x_l = 5;
- if ($i > 30 && $switch) {
- $o->{pixmap_db}->draw_line($gct, $x_l, 0, $x_l, $i-30);
- $o->{pixmap_db}->draw_line($gct, $x_l-1, 0, $x_l-1, $i-30);
- $o->{pixmap_db}->draw_line($gct, $x_l+1, 0, $x_l+1, $i-30);
- $o->{pixmap_db}->draw_polygon($gct, 1, $x_l-4, $i-30, $x_l+5, $i-30, $x_l, $i-25);
- }
- if ($switch) {
- $o->{pixmap_db}->draw_line($gcr, $x_l, 150, $x_l, $i);
- $o->{pixmap_db}->draw_line($gcr, $x_l-1, 150, $x_l-1, $i);
- $o->{pixmap_db}->draw_line($gcr, $x_l+1, 150, $x_l+1, $i);
- $o->{pixmap_db}->draw_polygon($gcr, 1, $x_l-5, $i, $x_l+5, $i, $x_l, $i-6);
- }
- undef $switch;
- } else {
- $text = formatXiB($i*$ech/150);
- $gc2 = $gct;
- }
- my $w = $style->font->string_width($text);
- $o->{pixmap_db}->draw_string($style->font, $gc2, 45-$w, $i+5, ($text));
- }
- $o->{darea}->draw(undef);
-}
diff --git a/perl-install/standalone/printerdrake b/perl-install/standalone/printerdrake
deleted file mode 100755
index 7d4576656..000000000
--- a/perl-install/standalone/printerdrake
+++ /dev/null
@@ -1,65 +0,0 @@
-#!/usr/bin/perl
-
-# printerdrake
-# Copyright (C) 1999-2002 MandrakeSoft (fpons@mandrakesoft.com)
-# Original version for printer configuration from pad.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-use lib qw(/usr/lib/libDrakX);
-
-use standalone; #- warning, standalone must be loaded very first, for 'explanations'
-use common;
-use interactive;
-use printer::printerdrake;
-use printer::main;
-use modules;
-use c;
-
-local $_ = join '', @ARGV;
-
-printer::main::get_usermode ();
-
-my $printer;
-
-my $in = 'interactive'->vnew('su', if_(!$::isEmbedded, 'printer-mdk'));
-
-my $commandline = $_;
-
-exit 0 unless printer::printerdrake::first_time_dialog($printer, $in, 1);
-
-{
-# Check whether Foomatic is installed and install it if necessary
-printer::printerdrake::install_foomatic($in);
-
-my $w = $in->wait_message(N("Printerdrake"),
- N("Reading data of installed printers..."));
-# Get what was installed before
-eval { $printer = printer::main::getinfo('') };
-# Choose the spooler by command line options
-$commandline =~ /-cups/ and
- $printer->{SPOOLER} = 'cups' and printer::main::read_configured_queues($printer);
-$commandline =~ /-lpr/ and
- $printer->{SPOOLER} = 'lpd' and printer::main::read_configured_queues($printer);
-$commandline =~ /-lpd/ and
- $printer->{SPOOLER} = 'lpd' and printer::main::read_configured_queues($printer);
-$commandline =~ /-lprng/ and
- $printer->{SPOOLER} ='lprng' and printer::main::read_configured_queues($printer);
-$commandline =~ /-pdq/ and
- $printer->{SPOOLER} = 'pdq' and printer::main::read_configured_queues($printer);
--r '/etc/modules.conf' and modules::mergein_conf('/etc/modules.conf');
-}
-
-printer::printerdrake::main($printer, $in, 1);
diff --git a/perl-install/standalone/scannerdrake b/perl-install/standalone/scannerdrake
deleted file mode 100755
index 95facfa73..000000000
--- a/perl-install/standalone/scannerdrake
+++ /dev/null
@@ -1,787 +0,0 @@
-#!/usr/bin/perl
-
-# scannerdrake $Id$
-# Yves Duret <yduret at mandrakesoft.com>
-# Copyright (C) 2001-2002 MandrakeSoft
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-use lib qw(/usr/lib/libDrakX);
-use strict;
-use standalone; #- warning, standalone must be loaded very first, for 'explanations'
-use common;
-
-use interactive;
-use scanner;
-use handle_configs;
-use services;
-
-foreach (@ARGV) {
- /^--update-usbtable$/ and do { scanner::updateScannerDBfromUsbtable(); exit() };
- /^--update-sane=(.*)$/ and do { scanner::updateScannerDBfromSane($1); exit() };
- /^--manual$/ and $::Manual=1;
- /^--dynamic=(.*)$/ and do { dynamic($1); exit() };
-}
-
-my $in = 'interactive'->vnew('su', 'default');
-if (!files_exist('/usr/bin/scanimage',
- '/usr/bin/xsane',
- if_(files_exist("/usr/bin/gimp"),
- "/usr/lib/gimp/*/plug-ins/xsane"))) {
- $in->do_pkgs->install('sane-backends', 'xsane',
- if_($in->do_pkgs->is_installed('gimp'),
- 'xsane-gimp'));
-}
-if ($::Manual) { manual(); quit() }
-my $wait = $in->wait_message(N("Scannerdrake"),
- N("Searching for configured scanners ..."));
-my @c = scanner::configured();
-$wait = undef;
-$wait = $in->wait_message(N("Scannerdrake"),
- N("Searching for new scanners ..."));
-my @f = scanner::detect(@c);
-$wait = undef;
-my $changed = 0;
-@f and $changed = auto();
-if ($changed) {
- my $wait =
- $in->wait_message(N("Scannerdrake"),
- N("Re-generating list of configured scanners ..."));
- @c = scanner::configured();
-}
-mainwindow(@c);
-quit();
-
-sub removeverticalbar {
- my ($s) = @_;
- $s =~ s/\|/ /g;
- $s =~ /^\s*(\S+)\s+/;
- my $make = $1;
- my $searchmake = handle_configs::searchstr($make);
- $s =~ s/($searchmake)\s*$searchmake/$1/;
- return $s;
-}
-
-sub auto {
- my $changed = 0;
- foreach (@f) {
- my $c = 0;
- if (member($_->{val}{DESCRIPTION}, keys %$scanner::scannerDB)) {
- my $name = $_->{val}{DESCRIPTION};
- $name =~ s/\s$//; # some HP entries have a trailing space, i will correct usbtable asap
- if ($scanner::scannerDB->{$name}{flags}{unsupported}) {
- $in->ask_warn('Scannerdrake', N("The %s is not supported by this version of Mandrake Linux.", removeverticalbar($name)));
- next;
- }
- if ($in->ask_yesorno('Scannerdrake', N("%s found on %s, configure it automatically?", removeverticalbar($name), $_->{port}),1)) {
- $c = (tryConfScanner($name, $_->{port},
- $_->{val}{vendor},
- $_->{val}{id}) or
- manual($_->{port}, $_->{val}{vendor},
- $_->{val}{id}, $name));
- } else {
- $c = manual($_->{port}, $_->{val}{vendor},
- $_->{val}{id}, $name);
- }
- } else {
- $in->ask_yesorno('Scannerdrake',
- N("%s is not in the scanner database, configure it manually?",
- removeverticalbar($_->{val}{DESCRIPTION})),1)
- and ($c =
- manual($_->{port}, $_->{val}{vendor}, $_->{val}{id},
- $_->{val}{DESCRIPTION}));
- }
- $changed ||= $c;
- }
- return $changed;
-}
-
-sub manual {
- my ($port, $vendor, $product, $name) = @_;
- my $s =
- $in->ask_from_treelist('Scannerdrake',
- N("Select a scanner model") .
- if_($port || $name, N(" (")) .
- if_($name, N("Detected model: %s",
- removeverticalbar($name))) .
- if_($port && $name, N(", ")) .
- if_($port, N("Port: %s", $port)) .
- if_($port || $name, N(")")),
- '|', [' None', keys %$scanner::scannerDB],
- '') or return 0;
- return 0 if $s eq ' None';
- if ($scanner::scannerDB->{$s}{flags}{unsupported}) {
- $in->ask_warn('Scannerdrake', N("The %s is not supported by this version of Mandrake Linux.", removeverticalbar($s)));
- return 0;
- }
- return tryConfScanner($s, $port, $vendor, $product);
-}
-
-sub dynamic {
- @f = scanner::detect();
- my $name;
- foreach (@f) {
- if (member($_->{val}{DESCRIPTION}, keys %$scanner::scannerDB)) {
- $name = $_->{val}{DESCRIPTION};
- $name =~ s/\s$//; #some HP entry have a trailing space, i will correct usbtable asap
- if ($scanner::scannerDB->{$name}{flags}{unsupported}) {
- $in->ask_warn('Scannerdrake', N("The %s is not supported by this version of Mandrake Linux.", removeverticalbar($name)));
- next;
- }
- scanner::confScanner($name, $_->{port},
- $_->{val}{vendor}, $_->{val}{id});
- } else {
- $in->ask_warn('Scannerdrake', N("The %s is not known by this version of Scannerdrake.", removeverticalbar($name)));
- }
- }
-}
-
-sub tryConfScanner {
- # take care if interactive output is needed (unsupported, parallel..)
- my ($model, $port, $vendor, $product) = @_;
- if ($scanner::scannerDB->{$model}{flags}{unsupported}) {
- $in->ask_warn('Scannerdrake', N("The %s is unsupported",
- removeverticalbar($model)));
- return 0;
- }
- if ($scanner::scannerDB->{$model}{ask} =~ /DEVICE/ || !$port) {
- $port ||= N("Auto-detect available ports");
- $in->ask_from('Scannerdrake',
- N("Please select the device where your %s is attached", removeverticalbar($model)) . " " .
- N("(Note: Parallel ports cannot be auto-detected)"),
- [
- { label => N("choose device"),
- val => \$port,
- list => [N("Auto-detect available ports"),
- '/dev/scanner',
- '/dev/usb/scanner0',
- '/dev/usb/scanner1',
- '/dev/usb/scanner2',
- 'libusb:001:001',
- 'libusb:001:002',
- 'libusb:001:003',
- 'libusb:001:004',
- 'libusb:001:005',
- 'libusb:001:006',
- 'libusb:001:007',
- 'libusb:001:008',
- 'libusb:001:009',
- 'libusb:001:010',
- '/dev/sg0',
- '/dev/sg1',
- '/dev/sg2',
- '/dev/sg3',
- '/dev/sg4',
- '/dev/parport0',
- '/dev/parport1',
- '/dev/parport2',
- '/dev/pt_drv',
- '/dev/ttyS0',
- '/dev/ttyS1',
- '/dev/ttyS2'],
- not_edit => 0, sort => 0 },
- ],
- ) or return 0;
- if ($port eq N("Auto-detect available ports")) {
- $wait = $in->wait_message(N("Scannerdrake"),
- N("Searching for scanners ..."));
- my @d = scanner::detect();
- undef $wait;
- my @list = map {
- $_->{port} . " (" .
- removeverticalbar($_->{val}{DESCRIPTION}) . ")";
- } @d;
- $port ||= $list[0];
- $in->ask_from('Scannerdrake',
- N("Please select the device where your %s is attached", removeverticalbar($model)),
- [
- { label => N("choose device"),
- val => \$port,
- list => \@list,
- not_edit => 1, sort => 0 },
- ],
- ) or return 0;
- $port =~ s/^\s*([^\(\s]*)\s*\(.*$/$1/;
- foreach (@d) {
- next if $_->{port} ne $port;
- $vendor = $_->{val}{vendor};
- $product = $_->{val}{id};
- last;
- }
- }
- }
- ($vendor, $product) = scanner::get_usb_ids_for_port($port);
- if ($scanner::scannerDB->{$model}{server} =~ /(printerdrake|hpoj)/i) {
- $in->ask_warn('Scannerdrake', N("The %s must be configured by printerdrake.\nYou can launch printerdrake from the Mandrake Control Center in Hardware section.", removeverticalbar($model)));
- return 0;
- }
- scanner::confScanner($model, $port, $vendor, $product);
- $in->ask_warn(N("Congratulations!"),
- N("Your %s has been configured.\nYou may now scan documents using \"XSane\" from Multimedia/Graphics in the applications menu.", removeverticalbar($model)));
- return 1;
-}
-
-sub quit {
- $in->exit(0);
-}
-
-sub mainwindow {
- my @configured = @_;
- # main loop
- my $maindone;
- while (!$maindone) {
- # Generate list of configured scanners
- my $msg = do {
- if (@configured) {
- my @scannerlist =
- map {
- my $entry = $_->{val}{DESCRIPTION};
- if_($entry, " - $entry\n");
- } @configured;
- if (@scannerlist) {
- my $main_msg =
- @scannerlist > 1 ?
- N_("The following scanners\n\n%s\nare available on your system.\n") :
- N_("The following scanner\n\n%s\nis available on your system.\n");
- sprintf($main_msg, join('', @scannerlist));
- } else {
- N("There are no scanners found which are available on your system.\n");
- }
- } else {
- N("There are no scanners found which are available on your system.\n");
- }
- };
- my $buttonclicked;
- #- Show dialog
- if ($in->ask_from_
- (
- {
- title => N("Scannerdrake"),
- messages => $msg,
- ok => "",
- cancel => "",
- },
- [
- { val => N("Search for new scanners"),
- type => 'button',
- clicked_may_quit => sub {
- $buttonclicked = "autoadd";
- 1;
- } },
- { val => N("Add a scanner manually"),
- type => 'button',
- clicked_may_quit => sub {
- $buttonclicked = "manualadd";
- 1;
- } },
- { val => N("Scanner sharing"),
- type => 'button',
- clicked_may_quit => sub {
- $buttonclicked = "sharing";
- 1;
- } },
- { val => N("Quit"),
- type => 'button',
- clicked_may_quit => sub {
- $buttonclicked = "quit";
- 1;
- } },
- ]
- )
- ) {
- my $changed = 0;
- if ($buttonclicked eq "autoadd") {
- # Do scanner auto-detection
- my $wait =
- $in->wait_message(N("Scannerdrake"),
- N("Searching for configured scanners ..."));
- @configured = scanner::configured();
- $wait =
- $in->wait_message(N("Scannerdrake"),
- N("Searching for new scanners ..."));
- my @f = scanner::detect(@configured);
- $wait = undef;
- if (@f) {
- $changed = auto();
- }
- } elsif ($buttonclicked eq "manualadd") {
- # Show dialogs to manually add a scanner
- $changed = manual();
- } elsif ($buttonclicked eq "sharing") {
- # Show dialog to set up scanner sharing
- $changed = sharewindow(@configured);
- } elsif ($buttonclicked eq "quit") {
- # We have clicked "Quit"
- $maindone = 1;
- }
- if ($changed) {
- my $wait =
- $in->wait_message(N("Scannerdrake"),
- N("Re-generating list of configured scanners ..."));
- @configured = scanner::configured();
- }
- } else {
- # Cancel clicked
- $maindone = 1;
- }
- }
-}
-
-sub makeexportmenues {
- my @exports = @_;
- my %menuexports = map {
- ($_ eq '+' ? N("All remote machines") : $_) => $_;
- } map {
- # Remove comments and blank lines
- (/^\s*($|\#)/ ? () : chomp_($_));
- } @exports;
- my %menuexports_inv = reverse %menuexports;
- return (\%menuexports, \%menuexports_inv);
-}
-
-sub makeimportmenues {
- my @imports = @_;
- my %menuimports = map {
- ($_ eq 'localhost' ? N("This machine") : $_) => $_;
- } map {
- # Remove comments and blank lines
- if_(!/^\s*($|\#)/, chomp_($_));
- } @imports;
- my %menuimports_inv = reverse %menuimports;
- return (\%menuimports, \%menuimports_inv);
-}
-
-sub sharewindow {
- my @configured = @_;
- # Read list of hosts to where to export the local scanners
- my @exports = cat_("/etc/sane.d/saned.conf");
- my ($menuexports, $menuexports_inv) =
- makeexportmenues(@exports);
- # Read list of hosts from where to import scanners
- my @imports = cat_("/etc/sane.d/net.conf");
- my ($menuimports, $menuimports_inv) =
- makeimportmenues(@imports);
- # Is saned running?
- my $sanedrunning = services::starts_on_boot("saned");
- my $oldsanedrunning = $sanedrunning;
- # Is the "net" SANE backend active
- my $netbackendactive = grep { /^\s*net\s*$/ }
- cat_("/etc/sane.d/dll.conf");
- my $oldnetbackendactive = $netbackendactive;
- # Set this to 1 to tell the caller that the list of locally available
- # scanners has changed (Here if the SANE client configuration has
- # changed)
- my $changed = 0;
- my $importschanged = 0;
- # main loop
- my $maindone;
- while (!$maindone) {
- my $buttonclicked;
- #- Show dialog
- if ($in->ask_from_
- (
- {
- title => N("Scannerdrake"),
- messages => N("Here you can choose whether the scanners connected to this machine should be accessable by remote machines and by which remote machines.") .
- N("You can also decide here whether scanners on remote machines should be made available on this machine."),
- },
- [
- { text => N("The scanners on this machine are available to other computers"), type => 'bool',
- val => \$sanedrunning },
- { val => N("Scanner sharing to hosts: ") .
- (keys %{$menuexports} > 0 ?
- (keys %{$menuexports} > 2 ?
- join(", ", (keys %{$menuexports})[0,1]) . " ..." :
- join(", ", keys %{$menuexports})) :
- N("No remote machines")),
- type => 'button',
- clicked_may_quit => sub {
- $buttonclicked = "exports";
- 1;
- },
- disabled => sub {
- !$sanedrunning;
- } },
- { text => N("Use scanners on remote computers"),
- type => 'bool',
- val => \$netbackendactive },
- { val => N("Use the scanners on hosts: ") .
- (keys %{$menuimports} > 0 ?
- (keys %{$menuimports} > 2 ?
- join(", ", (keys %{$menuimports})[0,1]) . " ..." :
- join(", ", keys %{$menuimports})) :
- N("No remote machines")),
- type => 'button',
- clicked_may_quit => sub {
- $buttonclicked = "imports";
- 1;
- },
- disabled => sub {
- !$netbackendactive;
- } },
- ]
- )
- ) {
- if ($buttonclicked eq "exports") {
- # Show dialog to add hosts to share scanners to
- my $subdone = 0;
- my $choice;
- while (!$subdone) {
- my @list = keys %{$menuexports};
- # Entry should be edited when double-clicked
- $buttonclicked = "edit";
- $in->ask_from_
- (
- { title => N("Sharing of local scanners"),
- messages => N("These are the machines on which the locally connected scanner(s) should be available:"),
- ok => "",
- cancel => "",
- },
- # List the hosts
- [ { val => \$choice, format => \&translate,
- sort => 0, separator => "####",
- tree_expanded => 1,
- quit_if_double_click => 1,
- allow_empty_list => 1,
- list => \@list },
- { val => N("Add host"),
- type => 'button',
- clicked_may_quit => sub {
- $buttonclicked = "add";
- 1;
- } },
- { val => N("Edit selected host"),
- type => 'button',
- clicked_may_quit => sub {
- $buttonclicked = "edit";
- 1;
- },
- disabled => sub {
- return ($#list < 0);
- } },
- { val => N("Remove selected host"),
- type => 'button',
- clicked_may_quit => sub {
- $buttonclicked = "remove";
- 1;
- },
- disabled => sub {
- return ($#list < 0);
- } },
- { val => N("Done"),
- type => 'button',
- clicked_may_quit => sub {
- $buttonclicked = "";
- $subdone = 1;
- 1;
- } },
- ]
- );
- if ($buttonclicked eq "add" ||
- $buttonclicked eq "edit") {
- my ($hostchoice, $ip);
- if ($buttonclicked eq "add") {
- # Use first entry as default for a new entry
- $hostchoice =
- N("Name/IP address of host:");
- } else {
- if ($menuexports->{$choice} eq '+') {
- # Entry is "All hosts"
- $hostchoice = $choice;
- } else {
- # Entry is a name/an IP address
- $hostchoice =
- N("Name/IP address of host:");
- $ip = $choice;
- }
- }
- my @menu = (N("All remote machines"),
- N("Name/IP address of host:"));
- # Show the dialog
- my $address;
- my $oldaddress =
- ($buttonclicked eq "edit" ?
- $menuexports->{$choice} : "");
- if ($in->ask_from_
- (
- { title => N("Sharing of local scanners"),
- messages => N("Choose the host on which the local scanners should be made available:"),
- callbacks => {
- complete => sub {
- if ($hostchoice eq $menu[0]) {
- $address = "+";
- } elsif ($hostchoice eq $menu[1]) {
- $address = $ip;
- }
- # Do not allow an empty address
- if ($address !~ /\S/) {
- $in->ask_warn(N("Scannerdrake"),
- N("You must enter a host name or an IP address.\n"));
- return (1,0);
- }
- # Strip off leading and trailing
- # spaces
- $address =~ s/^\s*(.*?)\s*$/$1/;
- # Check whether item is duplicate
- if ($address ne $oldaddress &&
- member("$address\n",
- @exports)) {
- $in->ask_warn(N("Scannerdrake"),
- N("This host is already in the list, it cannot be added again.\n"));
- return (1,1);
- }
- return 0;
- },
- },
- },
- # List the host types
- [ { val => \$hostchoice, format => \&translate,
- type => 'list',
- sort => 0,
- list => \@menu },
- { val => \$ip,
- disabled => sub {
- $hostchoice ne
- N("Name/IP address of host:");
- } },
- ],
- )) {
- # OK was clicked, insert new item into the list
- if ($buttonclicked eq "add") {
- handle_configs::set_directive(\@exports,
- $address);
- } else {
- handle_configs::replace_directive(\@exports,
- $oldaddress,
- $address);
- }
- # Refresh list of hosts
- ($menuexports, $menuexports_inv) =
- makeexportmenues(@exports);
- # Position the list cursor on the new/modified
- # item
- $choice = $menuexports_inv->{$address};
- }
- } elsif ($buttonclicked eq "remove") {
- my $address = $menuexports->{$choice};
- handle_configs::remove_directive(\@exports,
- $address);
- # Refresh list of hosts
- ($menuexports, $menuexports_inv) =
- makeexportmenues(@exports);
- }
- }
- } elsif ($buttonclicked eq "imports") {
- # Show dialog to add hosts on which the scanners should be
- # used
- my $subdone = 0;
- my $choice;
- while (!$subdone) {
- my @list = keys %{$menuimports};
- # Entry should be edited when double-clicked
- $buttonclicked = "edit";
- $in->ask_from_
- (
- { title => N("Usage of remote scanners"),
- messages => N("These are the machines from which the scanners should be used:"),
- ok => "",
- cancel => "",
- },
- # List the hosts
- [ { val => \$choice, format => \&translate,
- sort => 0, separator => "####",
- tree_expanded => 1,
- quit_if_double_click => 1,
- allow_empty_list => 1,
- list => \@list },
- { val => N("Add host"),
- type => 'button',
- clicked_may_quit => sub {
- $buttonclicked = "add";
- 1;
- } },
- { val => N("Edit selected host"),
- type => 'button',
- clicked_may_quit => sub {
- $buttonclicked = "edit";
- 1;
- },
- disabled => sub {
- return ($#list < 0);
- } },
- { val => N("Remove selected host"),
- type => 'button',
- clicked_may_quit => sub {
- $buttonclicked = "remove";
- 1;
- },
- disabled => sub {
- return ($#list < 0);
- } },
- { val => N("Done"),
- type => 'button',
- clicked_may_quit => sub {
- $buttonclicked = "";
- $subdone = 1;
- 1;
- } },
- ]
- );
- if ($buttonclicked eq "add" ||
- $buttonclicked eq "edit") {
- my ($hostchoice, $ip);
- if ($buttonclicked eq "add") {
- # Use first entry as default for a new entry
- $hostchoice =
- N("Name/IP address of host:");
- } else {
- if ($menuimports->{$choice} eq 'localhost') {
- # Entry is "This machine"
- $hostchoice = $choice;
- } else {
- # Entry is a name/an IP address
- $hostchoice =
- N("Name/IP address of host:");
- $ip = $choice;
- }
- }
- my @menu = (N("This machine"),
- N("Name/IP address of host:"));
- # Show the dialog
- my $address;
- my $oldaddress =
- ($buttonclicked eq "edit" ?
- $menuimports->{$choice} : "");
- if ($in->ask_from_
- (
- { title => N("Sharing of local scanners"),
- messages => N("Choose the host on which the local scanners should be made available:"),
- callbacks => {
- complete => sub {
- if ($hostchoice eq $menu[0]) {
- $address = 'localhost';
- } elsif ($hostchoice eq $menu[1]) {
- $address = $ip;
- }
- # Do not allow an empty address
- if ($address !~ /\S/) {
- $in->ask_warn(N("Scannerdrake"),
- N("You must enter a host name or an IP address.\n"));
- return (1,0);
- }
- # Strip off leading and trailing
- # spaces
- $address =~ s/^\s*(.*?)\s*$/$1/;
- # Check whether item is duplicate
- if ($address ne $oldaddress &&
- member("$address\n",
- @imports)) {
- $in->ask_warn(N("Scannerdrake"),
- N("This host is already in the list, it cannot be added again.\n"));
- return (1,1);
- }
- return 0;
- },
- },
- },
- # List the host types
- [ { val => \$hostchoice, format => \&translate,
- type => 'list',
- sort => 0,
- list => \@menu },
- { val => \$ip,
- disabled => sub {
- $hostchoice ne
- N("Name/IP address of host:");
- } },
- ],
- )) {
- # OK was clicked, insert new item into the list
- if ($buttonclicked eq "add") {
- handle_configs::set_directive(\@imports,
- $address);
- } else {
- handle_configs::replace_directive(\@imports,
- $oldaddress,
- $address);
- }
- $importschanged = 1;
- # Refresh list of hosts
- ($menuimports, $menuimports_inv) =
- makeimportmenues(@imports);
- # Position the list cursor on the new/modified
- # item
- $choice = $menuimports_inv->{$address};
- }
- } elsif ($buttonclicked eq "remove") {
- my $address = $menuimports->{$choice};
- handle_configs::remove_directive(\@imports,
- $address);
- # Refresh list of hosts
- ($menuimports, $menuimports_inv) =
- makeimportmenues(@imports);
- $importschanged = 1;
- }
- }
- } else {
- # We have clicked "OK"
- $maindone = 1;
- if ($importschanged) {
- $changed = 1;
- }
- # Write /etc/sane.d/saned.conf
- output("/etc/sane.d/saned.conf", @exports);
- # Write /etc/sane.d/net.conf
- output("/etc/sane.d/net.conf", @imports);
- # Turn on/off saned
- if ($sanedrunning != $oldsanedrunning) {
- if ($sanedrunning) {
- # Make sure saned and xinetd is installed and
- # running
- if (!files_exist('/usr/sbin/xinetd',
- '/usr/sbin/saned')) {
- $in->do_pkgs->install('xinetd', 'saned');
- }
- # Start saned and make sure that it gets started on
- # every boot
- services::start_service_on_boot("saned");
- services::start_service_on_boot("xinetd");
- services::restart("xinetd");
- } else {
- # Stop saned and make sure that it does not get
- # started when booting
- services::do_not_start_service_on_boot("saned");
- services::restart("xinetd");
- }
- }
- # Turn on/off "net" SANE backend
- if ($netbackendactive != $oldnetbackendactive) {
- my @dllconf = cat_("/etc/sane.d/dll.conf");
- if ($netbackendactive) {
- handle_configs::set_directive(\@dllconf, "net");
- } else {
- handle_configs::comment_directive(\@dllconf, "net");
- }
- output("/etc/sane.d/dll.conf", @dllconf);
- $changed = 1;
- }
- }
- } else {
- # Cancel clicked
- $maindone = 1;
- }
- }
- return $changed;
-}
diff --git a/perl-install/standalone/service_harddrake b/perl-install/standalone/service_harddrake
deleted file mode 100755
index 1c5771143..000000000
--- a/perl-install/standalone/service_harddrake
+++ /dev/null
@@ -1,84 +0,0 @@
-#!/usr/bin/perl -w
-
-use lib qw(/usr/lib/libDrakX);
-
-use strict;
-use standalone; #- warning, standalone must be loaded very first, for 'explanations'
-use common;
-use interactive;
-use harddrake::data;
-use harddrake::sound;
-use modules;
-use Storable qw(store retrieve);
-
-my $invert_do_it = $ARGV[0] eq 'X11' ? 1 : 0;
-my ($hw_sysconfdir, $timeout) = ("/etc/sysconfig/harddrake2", $invert_do_it ? 600 : 5);
-my $last_boot_config = $hw_sysconfdir."/previous_hw";
-
-$last_boot_config .= '_X11' if $invert_do_it;
-
-modules::mergein_conf('/etc/modules.conf');
-
-# first run ? if not read old hw config
-my $previous_config = -f $last_boot_config && -s $last_boot_config ? Storable::retrieve($last_boot_config) : {};
-$previous_config = $$previous_config if ref($previous_config) !~ /HASH/;
-my (%config, $wait);
-my $in = interactive->vnew;
-
-# For each hw, class, detect device, compare and offer to reconfigure if needed
-foreach (@harddrake::data::tree) {
- my ($Ident, $item, undef, $configurator, $detector, $do_it) = @$_;
- next unless $do_it ^ $invert_do_it;
- # No detector ? (should never happen but who know ?)
- ref($detector) eq 'CODE' or next;
-
- my %ID = map {
- my $i = $_;
- my $id = defined $i->{device} ? $i->{device} : join(':', map { $i->{$_} } qw(vendor id subvendor subid));
- $id => $i;
- } &$detector;
- $config{$Ident} = \%ID;
- next if is_empty_hash_ref $previous_config; # don't fsck on first run
-
- my $oldconfig = $previous_config->{$Ident};
-
- my $msg;
- my @was_removed = difference2([ keys %$oldconfig ], [ keys %ID ]);
- if (@was_removed) {
- $msg .= N("Some devices in the \"%s\" hardware class were removed:\n", $item) .
- "- " . harddrake::data::custom_id($oldconfig->{$_}, $item) . " was removed\n" foreach @was_removed . "\n";
- }
- my @added = difference2([ keys %ID ], [ keys %$oldconfig ]);
- $msg .= N("Some devices were added:\n", $item) if @added;
- $msg .= "- " . harddrake::data::custom_id($ID{$_}, $item) . " was added\n" foreach @added;
- @added || @was_removed or next;
- next unless -x $configurator;
- my ($pid, $no);
- $SIG{ALRM} = sub { $no = 1; kill 15, $pid };
- unless ($pid = fork()) {
- exec("/usr/share/harddrake/confirm 'Hardware changes in $Ident class ($timeout seconds to answer)' '" . $msg . "Do you want to run the appropriate config tool ?'");
- }
- alarm($timeout);
- wait();
- my $res = $?;
- alarm(0);
- if ($no) {
- require interactive;
- undef $wait;
- $wait = $in->wait_message(N("Please wait"), N("Hardware probing in progress"));
- } elsif ($res) {
- if (fork()) {
- wait();
- } else { exec("$configurator 2>/dev/null") or die "$configurator missing\n" }
- }
-}
-
-# output new hw config
-log::explanations("created file $last_boot_config");
-Storable::store(\%config, $last_boot_config);
-
-# automatic sound slots configuration
-harddrake::sound::configure_sound_slots();
-modules::write_conf();
-
-$in->exit(0);
diff --git a/perl-install/standalone/service_harddrake.sh b/perl-install/standalone/service_harddrake.sh
deleted file mode 100644
index b3da8d1a4..000000000
--- a/perl-install/standalone/service_harddrake.sh
+++ /dev/null
@@ -1,53 +0,0 @@
-#!/bin/bash
-#
-# harddrake This scripts runs the harddrake hardware probe.
-#
-# chkconfig: 345 05 95
-# description: This runs the hardware probe, and optionally configures \
-# changed hardware.
-
-# This is an interactive program, we need the current locale
-
-[[ -f /etc/profile.d/lang.sh ]] && . /etc/profile.d/lang.sh
-
-# Source function library.
-. /etc/rc.d/init.d/functions
-
-
-SUBSYS=/var/lock/subsys/harddrake
-
-case "$1" in
- start)
-# We (mdk) don't support updfstab (yet)
-# action "Updating /etc/fstab" /usr/sbin/updfstab
-
- gprintf "Checking for new hardware"
- /usr/share/harddrake/service_harddrake 2>/dev/null
- RETVAL=$?
- if [ "$RETVAL" -eq 0 ]; then
- action "" /bin/true
- else
- action "" /bin/false
- fi
- # We don't want to run this on random runlevel changes.
- touch $SUBSYS
-# [ /etc/modules.conf -nt /lib/modules/$(uname -r)/modules.dep ] && touch /lib/modules/$(uname -r)/modules.dep 2>/dev/null >/dev/null || : &
- exit $RETVAL
- ;;
- status)
- if [ -f $SUBSYS ]; then
- gprintf "Harddrake service was run at boot time"
- else gprintf "Harddrake service was not run at boot time"
- fi
- ;;
- reload)
- ;;
- stop)
- # dummy
- rm -f $SUBSYS
- ;;
- *)
- gprintf "Usage: %s {start|stop}\n" "$0"
- exit 1
- ;;
-esac