# -*- perl -*- # # $Id: Makefile.PL,v 1.2 1999/02/13 00:24:43 joe Exp $ # # # Apache::Roaming - A mod_perl handler for Roaming Profiles # # # Based on mod_roaming by # Vincent Partington # See http://www.xs4all.nl/~vincentp/software/mod_roaming.html # # # Copyright (C) 1999 Jochen Wiedmann # Am Eisteich 9 # 72555 Metzingen # Germany # # Phone: +49 7123 14887 # Email: joe@ispsoft.de # # All rights reserved. # # You may distribute this module under the terms of either # the GNU General Public License or the Artistic License, as # specified in the Perl README file. # ############################################################################ require 5.004; use strict; use ExtUtils::MakeMaker; use Getopt::Long; use Cwd; use vars qw($opt_config); Getopt::Long::GetOptions('config'); my %prereq = ('File::Spec' => 0, 'Data::Dumper' => 0, 'URI::Escape' => 0, 'Apache' => 0); use lib 'lib'; eval { require Apache::Roaming::LiPrefs::Config }; my $cfg; eval {require File::Spec; require Data::Dumper}; if (!$@ && (!($cfg = eval { require ".status"}) or $opt_config)) { $cfg = {} if !$cfg or ref($cfg) ne 'HASH'; my $httpd_path = $cfg->{'httpd_path'}; if (!$httpd_path) { foreach my $dir (File::Spec->path()) { my $file = File::Spec->catfile($dir, "httpd"); if (-x $file) { $httpd_path = $file; last; } } } $cfg->{'httpd_path'} = prompt("Path of the Apache server: ", $httpd_path || '/usr/sbin/httpd'); die "Cannot execute HTTPD server $cfg->{'httpd_path'}: No such file" unless -x $cfg->{'httpd_path'}; my $httpd_V_output = `$cfg->{'httpd_path'} -V`; my $httpd_conf_path = ($httpd_V_output =~ /\s+-D\s+SERVER_CONFIG_FILE="(.*?)"/) ? $1 : "/etc/httpd/httpd.conf"; $cfg->{'httpd_conf_path'} = prompt("Path of the httpd.conf file: ", $httpd_conf_path); my $httpd_conf_contents; die "Failed to read httpd config file $cfg->{'httpd_conf_path'}: $!" unless open(FILE, "<$cfg->{'httpd_conf_path'}"); my(@module_list, $server_root); while (defined(my $line = )) { if ($line =~ /\s*ServerRoot\s+\"?(.*?)\"?\s*$/) { $server_root = $1; } if ($line =~ /^\s*(AddModule|LoadModule)\s+/ || $line =~ /^\s*ClearModuleList\s*$/) { push(@module_list, $line); } } close(FILE); @module_list = map { if ($_ =~ /^\s*LoadModule\s+(\S+)\s+(.*)/) { my $module = $1; my $path = $2; if ($path !~ /^\//) { die "Cannot parse httpd config file $cfg->{'httpd_conf_path'}:" . " Missing ServerRoot" unless $server_root; $_ = "LoadModule $module $server_root/$path\n"; } } $_; } @module_list; $cfg->{'dynamic_module_list'} = join("", @module_list); $cfg->{'httpd_user'} = prompt("HTTPD's UID for running tests: ", $cfg->{'httpd_user'} || ('#' . $>)); my $gid = $); $gid =~ s/\s.*//; $cfg->{'httpd_group'} = prompt("HTTPD's GID for running tests: ", $cfg->{'httpd_group'} || ('#' . $gid)); $cfg->{'httpd_port'} = prompt("Port to use for running tests: ", $cfg->{'httpd_port'} || 8259); my $tdir = $cfg->{'t_dir'} = File::Spec->catdir(Cwd::getcwd(), "t"); $cfg->{'httpd_conf'} = File::Spec->catfile($tdir, "httpd.cnf"); $cfg->{'access_conf'} = File::Spec->catfile($tdir, "access.cnf"); $cfg->{'srm_conf'} = File::Spec->catfile($tdir, "srm.cnf"); $cfg->{'types_conf'} = File::Spec->catfile($tdir, "mime.types"); $cfg->{'user_file'} = File::Spec->catfile($tdir, "htusers"); my $log_dir = File::Spec->catdir($tdir, "logs"); $cfg->{'log_dir'} = $log_dir; $cfg->{'access_log'} = File::Spec->catfile($log_dir, "access.log"); $cfg->{'error_log'} = File::Spec->catfile($log_dir, "error.log"); $cfg->{'lock_file'} = File::Spec->catfile($log_dir, "httpd.lck"); $cfg->{'pid_file'} = File::Spec->catfile($log_dir, "httpd.pid"); my $o_dir = $cfg->{'output_dir'} = File::Spec->catdir($tdir, "output"); $cfg->{'roaming_dir'} = File::Spec->catdir($o_dir, "roaming"); my $dump = Data::Dumper->new([$cfg], ['cfg']); $dump->Indent(1); if (!open(STATUS, ">.status") || !(print STATUS $dump->Dump()) || !close(STATUS)) { die "Error while creating file .status: $!"; } my $reply = prompt("Do you want to configure the Apache::Roaming::LiPrefs module?", "y"); if ($reply =~ /y/i) { foreach my $ref (['Enable Autoupdate', 'bool', 'initial', 'autoupdate.enabled', 'false'], ["Enable what's related?", 'bool', 'initial', 'browser.related.enabled', 'true'], ['Startup Page', 'string', 'initial', 'browser.startup.page', 'none', sub { my $in = shift; $in = 'none' if !defined($in) or $in eq '0'; $in; }, sub { my $out = shift; $out = '0' if !defined($out) or $out eq 'none'; }], ['By default send HTML mail', 'bool', 'initial', 'mail.html_compose', 'false'], ['Default domain', 'string', 'initial', 'mail.identity.defaultdomain'], ['Leave mail on server', 'bool', 'initial', 'mail.leave_on_server', 'false'], ['Remember mail password', 'bool', 'initial', 'mail.remember_password', 'false'], ['Default NNTP server', 'string', 'initial', 'network.hosts.nntp_server'], ['Default POP3 server', 'string', 'initial', 'network.hosts.pop_server'], ['Default SMTP server', 'string', 'initial', 'network.hosts.smtp_server'], ['Proxy autoconfiguration URL', 'string', 'initial', 'network.proxy.autoconfig_url'], ['FTP Proxy', 'string', 'initial', 'network.proxy.ftp'], ['FTP Proxy Port', 'string', 'initial', 'network.proxy.ftp_port'], ['Gopher Proxy', 'string', 'initial', 'network.proxy.gopher'], ['Gopher Proxy Port', 'string', 'initial', 'network.proxy.gopher_port'], ['HTTP Proxy', 'string', 'initial', 'network.proxy.http'], ['HTTP Proxy Port', 'string', 'initial', 'network.proxy.http_port'], ['SSL Proxy', 'string', 'initial', 'network.proxy.ssl'], ['SSL Proxy Port', 'string', 'initial', 'network.proxy.ssl_port'], ['WAIS Proxy', 'string', 'initial', 'network.proxy.wais'], ['WAIS Proxy Port', 'string', 'initial', 'network.proxy.wais_port'], ['No Proxies for', 'string', 'initial', 'network.proxy.no_proxies_on', '127.0.0.1 localhost'], ['Send Email address as FTP password', 'bool', 'initial', 'security.email_as_ftp_password', 'true'], ['Send Warning while submitting an insecure POST', 'bool', 'initial', 'security.warn_entering_secure', 'true'], ['Send Warning while entering a secure area', 'bool', 'initial', 'security.warn_submit_insecure', 'true']) { my($prompt, $type, $initial, $var, $default, $in_filter, $out_filter) = @$ref; if (exists($Apache::Roaming::LiPrefs::ALWAYS{$var})) { $initial = 'always'; $default = $Apache::Roaming::LiPrefs::ALWAYS{$var}; } elsif (exists($Apache::Roaming::LiPrefs::INITIAL{$var})) { $initial = 'initial'; $default = $Apache::Roaming::LiPrefs::INITIAL{$var}; } $default = &$in_filter($default) if $in_filter; if ($type eq 'bool') { if (defined($default) and $default ne 'true' and $default ne 'false') { $default = $default ? 'true' : 'false'; } } $default = defined($default) ? prompt($prompt, $default) : prompt($prompt); if ($type eq 'bool') { if (defined($default) and $default ne 'true' and $default ne 'false') { $default = $default ? 'true' : 'false'; } } $default = &$out_filter($default) if $out_filter; $initial = prompt(" Allow user to override this variable?", ($initial eq 'initial') ? 'y' : 'n') if defined($default); if ($initial =~ /y/i) { delete $Apache::Roaming::LiPrefs::ALWAYS{$var}; $Apache::Roaming::LiPrefs::INITIAL{$var} = $default; delete $Apache::Roaming::LiPrefs::INITIAL{$var} unless defined($default); } else { delete $Apache::Roaming::LiPrefs::INITIAL{$var}; $Apache::Roaming::LiPrefs::ALWAYS{$var} = $default; delete $Apache::Roaming::LiPrefs::ALWAYS{$var} unless defined($default); } } } } if (!open(CONF, ">$cfg->{'access_conf'}") || !close(CONF)) { die "Error while writing $cfg->{'access_conf'}: $!"; } if (!open(CONF, ">$cfg->{'srm_conf'}") || !close(CONF)) { die "Error while writing $cfg->{'srm_conf'}: $!"; } if (!open(CONF, ">$cfg->{'types_conf'}") || !close(CONF)) { die "Error while writing $cfg->{'types_conf'}: $!"; } my $config_dir = File::Spec->catdir(File::Spec->curdir(), "lib", "Apache", "Roaming", "LiPrefs"); if (!-d $config_dir and !(mkdir $config_dir, 0755)) { die "Error while creating directory $config_dir"; } my $config_file = File::Spec->catfile($config_dir, "Config.pm"); my $initial = Data::Dumper->new([\%Apache::Roaming::LiPrefs::INITIAL], ['initial']); $initial->Indent(1); my $always = Data::Dumper->new([\%Apache::Roaming::LiPrefs::ALWAYS], ['always']); $always->Indent(1); my $config_contents = sprintf(<<'EOF', $initial->Dump(), $always->Dump()); package Apache::Roaming::LiPrefs::Config; my %s my %s %%Apache::Roaming::LiPrefs::INITIAL = %%$initial; %%Apache::Roaming::LiPrefs::ALWAYS = %%$always; 1; EOF if (!open(CONF, ">$config_file") || !(print CONF $config_contents) || !close(CONF)) { die "Error while creating $config_file: $!"; } my %opts = ( 'NAME' => 'Apache::Roaming', 'dist' => { SUFFIX => '.gz', DIST_DEFAULT => 'all tardist', COMPRESS => 'gzip -9vf' }, 'VERSION_FROM' => 'lib/Apache/Roaming.pm', # finds $VERSION 'clean' => { 'FILES' => 't/logs t/output t/htusers'}, 'realclean' => { 'FILES' => '.status t/*.cnf'}, ); if ($ExtUtils::MakeMaker::VERSION >= 5.43) { $opts{'AUTHOR'} = 'Jochen Wiedmann '; $opts{'PREREQ_PM'} = \%prereq; $opts{'ABSTRACT'} = 'Netscape Roaming Access via Apache'; } WriteMakefile(%opts); exit 0; package MY; sub libscan { my $self = shift; my $path = shift; return undef if $path =~ /\~$/; $path; } sub postamble { qq{ pm_to_blib: README README: lib/Apache/Roaming.pm \tperldoc -t lib/Apache/Roaming.pm >README }; }