| line | stmt | bran | cond | sub | pod | time | code | 
| 1 |  |  |  |  |  |  | # -*- perl -*- | 
| 2 |  |  |  |  |  |  |  | 
| 3 | 1 |  |  | 1 |  | 761 | use strict; | 
|  | 1 |  |  |  |  | 2 |  | 
|  | 1 |  |  |  |  | 38 |  | 
| 4 |  |  |  |  |  |  |  | 
| 5 | 1 |  |  | 1 |  | 6 | use Wizard::State (); | 
|  | 1 |  |  |  |  | 2 |  | 
|  | 1 |  |  |  |  | 16 |  | 
| 6 | 1 |  |  | 1 |  | 40 | use Wizard::SaveAble (); | 
|  | 0 |  |  |  |  |  |  | 
|  | 0 |  |  |  |  |  |  | 
| 7 |  |  |  |  |  |  | use Wizard::Examples::Apache (); | 
| 8 |  |  |  |  |  |  | use Wizard::Examples::Apache::Host (); | 
| 9 |  |  |  |  |  |  | use Wizard::Examples::Apache::Server (); | 
| 10 |  |  |  |  |  |  | use Wizard::Examples::Apache::Directory (); | 
| 11 |  |  |  |  |  |  | use Wizard::Examples::Apache::Config (); | 
| 12 |  |  |  |  |  |  |  | 
| 13 |  |  |  |  |  |  |  | 
| 14 |  |  |  |  |  |  | package Wizard::Examples::Apache::VirtualServer; | 
| 15 |  |  |  |  |  |  |  | 
| 16 |  |  |  |  |  |  | @Wizard::Examples::Apache::VirtualServer::ISA = qw(Wizard::Examples::Apache::Server); | 
| 17 |  |  |  |  |  |  | $Wizard::Examples::Apache::VirtualServer::VERSION = '0.01'; | 
| 18 |  |  |  |  |  |  |  | 
| 19 |  |  |  |  |  |  | my $allModes = {'http' => 1, 'https' => 1, 'both' => 1}; | 
| 20 |  |  |  |  |  |  | my $isHttps = {'https' => 1, 'both' => 1}; | 
| 21 |  |  |  |  |  |  | my $isHttp = {'http' => 1, 'both' => 1}; | 
| 22 |  |  |  |  |  |  |  | 
| 23 |  |  |  |  |  |  | sub createDefault { | 
| 24 |  |  |  |  |  |  | my $self = shift || die "Missing state"; | 
| 25 |  |  |  |  |  |  | my $name = shift || die "Missing server name"; | 
| 26 |  |  |  |  |  |  | my $defroot = shift || die "Missing default root directory"; | 
| 27 |  |  |  |  |  |  | my $sbasedir = shift || die "Missing basedir of server"; | 
| 28 |  |  |  |  |  |  | my $vs = bless({'apache-virtualserver-admin' => 'webmaster@' . $name, | 
| 29 |  |  |  |  |  |  | 'apache-virtualserver-enable-ep' => '', | 
| 30 |  |  |  |  |  |  | 'apache-virtualserver-options' => '', | 
| 31 |  |  |  |  |  |  | 'apache-virtualserver-isdefault' => 'yes', | 
| 32 |  |  |  |  |  |  | 'apache-virtualserver-interface' => '', | 
| 33 |  |  |  |  |  |  | 'apache-virtualserver-http-mode' => 'http', | 
| 34 |  |  |  |  |  |  | 'apache-virtualserver-http-port' => '80', | 
| 35 |  |  |  |  |  |  | 'apache-virtualserver-https-port' => '443', | 
| 36 |  |  |  |  |  |  | 'apache-virtualserver-http-version' => 'HTTP/1.1', | 
| 37 |  |  |  |  |  |  | 'apache-virtualserver-enable-pcgi' => '', | 
| 38 |  |  |  |  |  |  | 'apache-virtualserver-index' => '', | 
| 39 |  |  |  |  |  |  | 'apache-virtualserver-sslcrtfile' => '', | 
| 40 |  |  |  |  |  |  | 'apache-virtualserver-sslkeyfile' => '', | 
| 41 |  |  |  |  |  |  | 'apache-virtualserver-name' => $name, | 
| 42 |  |  |  |  |  |  | 'apache-virtualserver-enable-ssi' => '', | 
| 43 |  |  |  |  |  |  | 'apache-virtualserver-http_mode' => 'http', | 
| 44 |  |  |  |  |  |  | 'apache-virtualserver-http_port' => 80, | 
| 45 |  |  |  |  |  |  | 'apache-virtualserver-root' => File::Spec->catdir($defroot, $name), | 
| 46 |  |  |  |  |  |  | }, 'Wizard::SaveAble' ); | 
| 47 |  |  |  |  |  |  | $self->{'virtualserver'} = $vs; | 
| 48 |  |  |  |  |  |  | my $file = File::Spec->catfile($sbasedir, "$name.cfg"); | 
| 49 |  |  |  |  |  |  | my $dir = File::Spec->catdir($sbasedir, $name); | 
| 50 |  |  |  |  |  |  | File::Path::mkpath([$dir],0, 0777); | 
| 51 |  |  |  |  |  |  | die "Couldn't create directory $dir: $!" unless -d $dir; | 
| 52 |  |  |  |  |  |  | $vs->CreateMe(1); | 
| 53 |  |  |  |  |  |  | $vs->File($file); | 
| 54 |  |  |  |  |  |  | $vs->Modified(1); | 
| 55 |  |  |  |  |  |  | Wizard::Examples::Apache::Directory::createDefault($self, $dir); | 
| 56 |  |  |  |  |  |  | } | 
| 57 |  |  |  |  |  |  |  | 
| 58 |  |  |  |  |  |  | sub GetKey { 'virtualserver';}; | 
| 59 |  |  |  |  |  |  |  | 
| 60 |  |  |  |  |  |  | sub init { | 
| 61 |  |  |  |  |  |  | my $self = shift; | 
| 62 |  |  |  |  |  |  | return $self->SUPER::init(1) unless shift; | 
| 63 |  |  |  |  |  |  | my $item = $self->{'virtualserver'} || die "Missing virtualserver"; | 
| 64 |  |  |  |  |  |  | ($self->SUPER::init(1), $item); | 
| 65 |  |  |  |  |  |  | } | 
| 66 |  |  |  |  |  |  |  | 
| 67 |  |  |  |  |  |  | sub _superFileDir { | 
| 68 |  |  |  |  |  |  | Wizard::Examples::Apache::Host::getFileDir(shift, shift, | 
| 69 |  |  |  |  |  |  | 'Wizard::Examples::Apache::Server'); | 
| 70 |  |  |  |  |  |  | } | 
| 71 |  |  |  |  |  |  |  | 
| 72 |  |  |  |  |  |  | sub ShowMe { | 
| 73 |  |  |  |  |  |  | my($self, $wiz, $vs) = @_; | 
| 74 |  |  |  |  |  |  | my $server = $self->{'server'} || die "Missing server"; | 
| 75 |  |  |  |  |  |  | my $defvsroot = $self->{'server'}->{'apache-server-vserver-root'} || die "Missing default root dir for virtual servers"; | 
| 76 |  |  |  |  |  |  | my $name = $vs->{'apache-virtualserver-name'} | 
| 77 |  |  |  |  |  |  | or die "Missing virtual WWWserver name"; | 
| 78 |  |  |  |  |  |  | my $https = $isHttps->{$vs->{'apache-virtualserver-http-mode'}} || ''; | 
| 79 |  |  |  |  |  |  | my $http = $isHttp->{$vs->{'apache-virtualserver-http-mode'}} || ''; | 
| 80 |  |  |  |  |  |  |  | 
| 81 |  |  |  |  |  |  | my $http_only = $http && !$https; | 
| 82 |  |  |  |  |  |  | my $domain = $name; | 
| 83 |  |  |  |  |  |  | if($domain =~ /^([^\.]\.)*([^\.]\.[^\.])$/) { | 
| 84 |  |  |  |  |  |  | $domain = $2; | 
| 85 |  |  |  |  |  |  | } | 
| 86 |  |  |  |  |  |  | my $vsroot = File::Spec->catfile($defvsroot, $name); | 
| 87 |  |  |  |  |  |  | (['Wizard::Elem::Title', | 
| 88 |  |  |  |  |  |  | 'value' => $vs->CreateMe() ? | 
| 89 |  |  |  |  |  |  | 'Apache Wizard: Create a new virtual WWWserver' : | 
| 90 |  |  |  |  |  |  | 'Apache Wizard: Edit an existing virtual WWWserver'], | 
| 91 |  |  |  |  |  |  | ['Wizard::Elem::Text', | 
| 92 |  |  |  |  |  |  | 'name' => 'apache-virtualserver-root', | 
| 93 |  |  |  |  |  |  | 'value' => $vs->{'apache-virtualserver-root'} || $vsroot, | 
| 94 |  |  |  |  |  |  | 'descr' => 'Virtual WWW server root directory'], | 
| 95 |  |  |  |  |  |  | ['Wizard::Elem::Text', 'name' => 'apache-virtualserver-admin', | 
| 96 |  |  |  |  |  |  | 'value' => $vs->{'apache-virtualserver-admin'} || "webmaster\@$domain", | 
| 97 |  |  |  |  |  |  | 'descr' => 'Virtual WWW server admin'], | 
| 98 |  |  |  |  |  |  | ['Wizard::Elem::Text', 'name' => 'apache-virtualserver-http-port', | 
| 99 |  |  |  |  |  |  | 'value' => $vs->{'apache-virtualserver-http-port'} || '', | 
| 100 |  |  |  |  |  |  | 'descr' => 'Virtual WWW server HTTP port (if left empty the HTTP port of the server will be assumed)'], | 
| 101 |  |  |  |  |  |  | ($https ? (   ['Wizard::Elem::Text', 'name' => 'apache-virtualserver-https-port', | 
| 102 |  |  |  |  |  |  | 'value' => $vs->{'apache-virtualserver-https-port'} || '', | 
| 103 |  |  |  |  |  |  | 'descr' => 'Virtual WWW server HTTPS port (if left empty ' | 
| 104 |  |  |  |  |  |  | . ' the HTTPS port of the server will be assumed)'], | 
| 105 |  |  |  |  |  |  | ['Wizard::Elem::Text', 'name' => 'apache-virtualserver-sslkeyfile', | 
| 106 |  |  |  |  |  |  | 'value' => $vs->{'apache-virtualserver-sslkeyfile'} || | 
| 107 |  |  |  |  |  |  | File::Spec->catfile($vsroot, "$name.key"), | 
| 108 |  |  |  |  |  |  | 'descr' => 'Private key file'], | 
| 109 |  |  |  |  |  |  | ['Wizard::Elem::Text', 'name' => 'apache-virtualserver-sslcrtfile', | 
| 110 |  |  |  |  |  |  | 'value' => $vs->{'apache-virtualserver-sslcrtfile'} || | 
| 111 |  |  |  |  |  |  | File::Spec->catfile($vsroot, "$name.crt"), | 
| 112 |  |  |  |  |  |  | 'descr' => 'Certificate file']) : ()), | 
| 113 |  |  |  |  |  |  | ($http_only ? (['Wizard::Elem::Select', 'name' => 'apache-virtualserver-http-version', | 
| 114 |  |  |  |  |  |  | 'options' => ['HTTP/1.0', 'HTTP/1.1'], | 
| 115 |  |  |  |  |  |  | 'value' => $vs->{'apache-virtualserver-http-version'} || 'HTTP/1.1', | 
| 116 |  |  |  |  |  |  | 'descr' => 'Virtual WWW server HTTP version']) : ()), | 
| 117 |  |  |  |  |  |  | ['Wizard::Elem::Text', 'name' => 'apache-virtualserver-interface', | 
| 118 |  |  |  |  |  |  | 'value' => $vs->{'apache-virtualserver-interface'}, | 
| 119 |  |  |  |  |  |  | 'descr' => 'Virtual WWW server interface number'], | 
| 120 |  |  |  |  |  |  | ['Wizard::Elem::Text', 'name' => 'apache-virtualserver-index', | 
| 121 |  |  |  |  |  |  | 'value' => $vs->{'apache-virtualserver-index'}, | 
| 122 |  |  |  |  |  |  | 'descr' => 'Virtual WWW server DirectoryIndex'], | 
| 123 |  |  |  |  |  |  | ['Wizard::Elem::Text', 'name' => 'apache-virtualserver-options', | 
| 124 |  |  |  |  |  |  | 'value' => $vs->{'apache-virtualserver-options'}, | 
| 125 |  |  |  |  |  |  | 'descr' => 'Virtual WWW server Options'], | 
| 126 |  |  |  |  |  |  | ['Wizard::Elem::CheckBox', 'name' => 'apache-virtualserver-enable-pcgi', | 
| 127 |  |  |  |  |  |  | 'value' => $vs->{'apache-virtualserver-enable-pcgi'}, | 
| 128 |  |  |  |  |  |  | 'descr' => 'Enable PCGI'], | 
| 129 |  |  |  |  |  |  | ['Wizard::Elem::CheckBox', 'name' => 'apache-virtualserver-enable-ep', | 
| 130 |  |  |  |  |  |  | 'value' => $vs->{'apache-virtualserver-enable-ep'}, | 
| 131 |  |  |  |  |  |  | 'descr' => 'Enable EP'], | 
| 132 |  |  |  |  |  |  | ['Wizard::Elem::CheckBox', 'name' => 'apache-virtualserver-enable-ssi', | 
| 133 |  |  |  |  |  |  | 'value' => $vs->{'apache-virtualserver-enable-ssi'}, | 
| 134 |  |  |  |  |  |  | 'descr' => 'Enable Server Side Includes'], | 
| 135 |  |  |  |  |  |  | ['Wizard::Elem::Submit', 'name' => 'Action_VServerSave', | 
| 136 |  |  |  |  |  |  | 'value' => 'Save these settings', 'id' => 1], | 
| 137 |  |  |  |  |  |  | ['Wizard::Elem::BR'], | 
| 138 |  |  |  |  |  |  | ['Wizard::Elem::Submit', 'value' => 'Return to Virtual WWW server Menu', | 
| 139 |  |  |  |  |  |  | 'name' => 'Action_Reset', | 
| 140 |  |  |  |  |  |  | 'id' => 95], | 
| 141 |  |  |  |  |  |  | ['Wizard::Elem::Submit', 'value' => 'Return to Server Menu', | 
| 142 |  |  |  |  |  |  | 'name' => 'Wizard::Examples::Apache::Server::Action_Reset', | 
| 143 |  |  |  |  |  |  | 'id' => 96], | 
| 144 |  |  |  |  |  |  | ['Wizard::Elem::Submit', 'value' => 'Return to Host Menu', | 
| 145 |  |  |  |  |  |  | 'name' => 'Wizard::Examples::Apache::Host::Action_Reset', | 
| 146 |  |  |  |  |  |  | 'id' => 97], | 
| 147 |  |  |  |  |  |  | ['Wizard::Elem::Submit', 'value' => 'Return to Top Menu', | 
| 148 |  |  |  |  |  |  | 'name' => 'Wizard::Examples::Apache::Action_Reset', | 
| 149 |  |  |  |  |  |  | 'id' => 98], | 
| 150 |  |  |  |  |  |  | ['Wizard::Elem::Submit', 'value' => 'Exit Apache Wizard', | 
| 151 |  |  |  |  |  |  | 'id' => 99]); | 
| 152 |  |  |  |  |  |  | } | 
| 153 |  |  |  |  |  |  |  | 
| 154 |  |  |  |  |  |  | sub Action_Enter { | 
| 155 |  |  |  |  |  |  | my($self, $wiz) = @_; | 
| 156 |  |  |  |  |  |  | $self->SUPER::Load($wiz, 'Wizard::Examples::Apache::Server'); | 
| 157 |  |  |  |  |  |  | $self->Action_Reset($wiz); | 
| 158 |  |  |  |  |  |  | } | 
| 159 |  |  |  |  |  |  |  | 
| 160 |  |  |  |  |  |  | sub Action_Reset { | 
| 161 |  |  |  |  |  |  | my($self, $wiz) = @_; | 
| 162 |  |  |  |  |  |  | my($prefs, $basedir, $host, $server) = $self->init(); | 
| 163 |  |  |  |  |  |  |  | 
| 164 |  |  |  |  |  |  | delete $self->{'virtualserver'}; | 
| 165 |  |  |  |  |  |  | $self->Store($wiz); | 
| 166 |  |  |  |  |  |  |  | 
| 167 |  |  |  |  |  |  | # Return the initial menu. | 
| 168 |  |  |  |  |  |  | (['Wizard::Elem::Title', 'value' => 'Apache Wizard Virtual WWWserver Menu'], | 
| 169 |  |  |  |  |  |  | ['Wizard::Elem::Submit', 'value' => 'Create a new virtual WWWserver', | 
| 170 |  |  |  |  |  |  | 'name' => 'Action_CreateVServer', | 
| 171 |  |  |  |  |  |  | 'id' => 1], | 
| 172 |  |  |  |  |  |  | ['Wizard::Elem::Submit', 'value' => 'Modify an existing virtual WWWserver', | 
| 173 |  |  |  |  |  |  | 'name' => 'Action_ModifyVServer', | 
| 174 |  |  |  |  |  |  | 'id' => 2], | 
| 175 |  |  |  |  |  |  | ['Wizard::Elem::Submit', 'value' => 'Directory Menu', | 
| 176 |  |  |  |  |  |  | 'name' => 'Action_DirectoryMenu', | 
| 177 |  |  |  |  |  |  | 'id' => 3], | 
| 178 |  |  |  |  |  |  | ['Wizard::Elem::Submit', 'value' => 'Delete an existing virtual WWWserver', | 
| 179 |  |  |  |  |  |  | 'name' => 'Action_DeleteVServer', | 
| 180 |  |  |  |  |  |  | 'id' => 4], | 
| 181 |  |  |  |  |  |  | ['Wizard::Elem::BR'], | 
| 182 |  |  |  |  |  |  | ['Wizard::Elem::Submit', 'value' => 'Return to Server Menu', | 
| 183 |  |  |  |  |  |  | 'name' => 'Wizard::Examples::Apache::Server::Action_Reset', | 
| 184 |  |  |  |  |  |  | 'id' => 96], | 
| 185 |  |  |  |  |  |  | ['Wizard::Elem::Submit', 'value' => 'Return to Host Menu', | 
| 186 |  |  |  |  |  |  | 'name' => 'Wizard::Examples::Apache::Host::Action_Reset', | 
| 187 |  |  |  |  |  |  | 'id' => 97], | 
| 188 |  |  |  |  |  |  | ['Wizard::Elem::Submit', 'value' => 'Return to Top Menu', | 
| 189 |  |  |  |  |  |  | 'name' => 'Wizard::Examples::Apache::Action_Reset', | 
| 190 |  |  |  |  |  |  | 'id' => 98], | 
| 191 |  |  |  |  |  |  | ['Wizard::Elem::Submit', 'value' => 'Exit Apache Wizard', | 
| 192 |  |  |  |  |  |  | 'id' => 99]); | 
| 193 |  |  |  |  |  |  | } | 
| 194 |  |  |  |  |  |  |  | 
| 195 |  |  |  |  |  |  | sub FirstParams { | 
| 196 |  |  |  |  |  |  | my $self = shift; my $wiz = shift; | 
| 197 |  |  |  |  |  |  | my $vs = shift; | 
| 198 |  |  |  |  |  |  | my $button = shift || "Continue creation"; | 
| 199 |  |  |  |  |  |  | my $action = shift || "Action_FirstParamsVServer"; | 
| 200 |  |  |  |  |  |  |  | 
| 201 |  |  |  |  |  |  | (['Wizard::Elem::Title', 'value' => 'Virtual WWW server'], | 
| 202 |  |  |  |  |  |  | ['Wizard::Elem::Text', 'name' => 'apache-virtualserver-name', | 
| 203 |  |  |  |  |  |  | 'value' => $vs->{'apache-virtualserver-name'}, | 
| 204 |  |  |  |  |  |  | 'descr' => 'Virtual WWW server DNS name or IP address'], | 
| 205 |  |  |  |  |  |  | ['Wizard::Elem::Select', 'name' => 'apache-virtualserver-http-mode', | 
| 206 |  |  |  |  |  |  | 'options' => ['http', 'https', 'both'], | 
| 207 |  |  |  |  |  |  | 'value' => $vs->{'apache-virtualserver-http-mode'}, | 
| 208 |  |  |  |  |  |  | 'descr' => 'Choose a server type'], | 
| 209 |  |  |  |  |  |  | ['Wizard::Elem::Submit', 'name' => $action, 'value' => $button, | 
| 210 |  |  |  |  |  |  | 'id' => 1], | 
| 211 |  |  |  |  |  |  | ['Wizard::Elem::BR'], | 
| 212 |  |  |  |  |  |  | ['Wizard::Elem::Submit', 'name' => 'Action_Reset', | 
| 213 |  |  |  |  |  |  | 'value' => 'Return to Virtual WWW Server menu ', | 
| 214 |  |  |  |  |  |  | 'id' => '95'], | 
| 215 |  |  |  |  |  |  | ['Wizard::Elem::Submit', 'value' => 'Return to Server Menu', | 
| 216 |  |  |  |  |  |  | 'name' => 'Wizard::Examples::Apache::Server::Action_Reset', | 
| 217 |  |  |  |  |  |  | 'id' => 96], | 
| 218 |  |  |  |  |  |  | ['Wizard::Elem::Submit', 'value' => 'Return to Host Menu', | 
| 219 |  |  |  |  |  |  | 'name' => 'Wizard::Examples::Apache::Host::Action_Reset', | 
| 220 |  |  |  |  |  |  | 'id' => 97], | 
| 221 |  |  |  |  |  |  | ['Wizard::Elem::Submit', 'value' => 'Return to Top Menu', | 
| 222 |  |  |  |  |  |  | 'name' => 'Wizard::Examples::Apache::Action_Reset', | 
| 223 |  |  |  |  |  |  | 'id' => 98], | 
| 224 |  |  |  |  |  |  | ['Wizard::Elem::Submit', 'value' => 'Exit Apache Wizard', | 
| 225 |  |  |  |  |  |  | 'id' => 99]); | 
| 226 |  |  |  |  |  |  | } | 
| 227 |  |  |  |  |  |  |  | 
| 228 |  |  |  |  |  |  | sub GetIfaces { | 
| 229 |  |  |  |  |  |  | my $self = shift; | 
| 230 |  |  |  |  |  |  | my ($prefs, $basedir, $host, $server) = $self->init(); | 
| 231 |  |  |  |  |  |  | my $hname = $host->{'apache-host-name'}; | 
| 232 |  |  |  |  |  |  | my ($fileo, $diro) = $self->getFileDir('', 'Wizard::Examples::Apache::Host'); | 
| 233 |  |  |  |  |  |  | my $tdir; | 
| 234 |  |  |  |  |  |  |  | 
| 235 |  |  |  |  |  |  | my $fho = Symbol::gensym(); | 
| 236 |  |  |  |  |  |  | my $fh = Symbol::gensym(); | 
| 237 |  |  |  |  |  |  | my $maxkey=0; | 
| 238 |  |  |  |  |  |  | my $ifaces = {}; | 
| 239 |  |  |  |  |  |  | opendir($fho, $diro) || die "Failed to open directory $diro: $!"; | 
| 240 |  |  |  |  |  |  | while($tdir=readdir($fho)) { | 
| 241 |  |  |  |  |  |  | my $dir = File::Spec->catdir($diro, $tdir); | 
| 242 |  |  |  |  |  |  | next unless (-d $dir) && ($dir !~ /^[\.]{1,2}$/); | 
| 243 |  |  |  |  |  |  | opendir($fh, $dir) || die "Failed to open directory $dir: $!"; | 
| 244 |  |  |  |  |  |  | $ifaces = { %$ifaces, | 
| 245 |  |  |  |  |  |  | map { if(/\.cfg$/) { | 
| 246 |  |  |  |  |  |  | my $vs = do File::Spec->catfile($dir, $_); | 
| 247 |  |  |  |  |  |  | $maxkey = $vs->{'apache-virtualserver-interface'} | 
| 248 |  |  |  |  |  |  | if $vs->{'apache-virtualserver-interface'} > $maxkey; | 
| 249 |  |  |  |  |  |  | (defined($vs->{'apache-virtualserver-interface'})) ? | 
| 250 |  |  |  |  |  |  | ($vs->{'apache-virtualserver-interface'} => File::Spec->catfile($tdir,$vs->{'apache-virtualserver-name'})) | 
| 251 |  |  |  |  |  |  | : (); | 
| 252 |  |  |  |  |  |  | } else { | 
| 253 |  |  |  |  |  |  | (); | 
| 254 |  |  |  |  |  |  | } | 
| 255 |  |  |  |  |  |  | } readdir($fh) }; | 
| 256 |  |  |  |  |  |  | closedir($fh); | 
| 257 |  |  |  |  |  |  | } | 
| 258 |  |  |  |  |  |  | closedir($fho); | 
| 259 |  |  |  |  |  |  | $ifaces->{'_max'} = $maxkey; | 
| 260 |  |  |  |  |  |  | return $ifaces; | 
| 261 |  |  |  |  |  |  | } | 
| 262 |  |  |  |  |  |  |  | 
| 263 |  |  |  |  |  |  | sub Action_CreateVServer { | 
| 264 |  |  |  |  |  |  | my $self = shift; | 
| 265 |  |  |  |  |  |  | $self->Action_CreateItem(@_, 1); | 
| 266 |  |  |  |  |  |  | return $self->FirstParams(shift, $self->{'virtualserver'}); | 
| 267 |  |  |  |  |  |  | } | 
| 268 |  |  |  |  |  |  |  | 
| 269 |  |  |  |  |  |  | sub AssignFirstParams { | 
| 270 |  |  |  |  |  |  | my($self, $wiz, $vs) = @_; | 
| 271 |  |  |  |  |  |  | my($prefs, $basedir, $host, $server) = $self->init(); | 
| 272 |  |  |  |  |  |  | my $errors = ''; | 
| 273 |  |  |  |  |  |  | my $old_name = $vs->{'apache-virtualserver-name'} || ''; | 
| 274 |  |  |  |  |  |  | my $name = $wiz->param('apache-virtualserver-name') | 
| 275 |  |  |  |  |  |  | or ($errors .= "Missing virtual WWW server name.\n"); | 
| 276 |  |  |  |  |  |  | my $http_mode = $wiz->param('apache-virtualserver-http-mode') | 
| 277 |  |  |  |  |  |  | or ($errors .= "Missing virtual WWW server http mode.\n"); | 
| 278 |  |  |  |  |  |  | $errors .= "Invalid http mode.\n" unless defined($allModes->{$http_mode}); | 
| 279 |  |  |  |  |  |  |  | 
| 280 |  |  |  |  |  |  | my $ifaces = $self->GetIfaces(); | 
| 281 |  |  |  |  |  |  | my $iface = $vs->{'apache-virtualserver-interface'}; | 
| 282 |  |  |  |  |  |  |  | 
| 283 |  |  |  |  |  |  | $vs->{'apache-virtualserver-name'} = $name; | 
| 284 |  |  |  |  |  |  | $vs->{'apache-virtualserver-http-version'} = 'HTTP/1.0' if $isHttps->{$http_mode}; | 
| 285 |  |  |  |  |  |  | $vs->{'apache-virtualserver-http-mode'} = $http_mode; | 
| 286 |  |  |  |  |  |  | if (($vs->{'apache-virtualserver-http-version'} eq 'HTTP/1.0') && ($iface !~ /^[\d]+$/)) { | 
| 287 |  |  |  |  |  |  | $vs->{'apache-virtualserver-interface'} = $ifaces->{'_max'}+1 ; | 
| 288 |  |  |  |  |  |  | } | 
| 289 |  |  |  |  |  |  | my($file, $dir) =$self->getFileDir(); | 
| 290 |  |  |  |  |  |  |  | 
| 291 |  |  |  |  |  |  | $vs->{'_virtualserver_old_name'} = $old_name; | 
| 292 |  |  |  |  |  |  |  | 
| 293 |  |  |  |  |  |  |  | 
| 294 |  |  |  |  |  |  | if ($name) { | 
| 295 |  |  |  |  |  |  | $errors .= "Cannot resolve IP address or DNS name.\n" | 
| 296 |  |  |  |  |  |  | unless Socket::inet_aton($name); | 
| 297 |  |  |  |  |  |  | if($vs->CreateMe() or $name ne $old_name) { | 
| 298 |  |  |  |  |  |  | $errors .= "A virtual server $name already exists: $file.\n" if -e $file; | 
| 299 |  |  |  |  |  |  | $errors .= "A virtual server $name already exists: $dir.\n" if -e $dir; | 
| 300 |  |  |  |  |  |  | } | 
| 301 |  |  |  |  |  |  | } | 
| 302 |  |  |  |  |  |  |  | 
| 303 |  |  |  |  |  |  | die $errors if $errors; | 
| 304 |  |  |  |  |  |  | } | 
| 305 |  |  |  |  |  |  |  | 
| 306 |  |  |  |  |  |  | sub Action_FirstParamsVServer { | 
| 307 |  |  |  |  |  |  | my($self, $wiz) = @_; | 
| 308 |  |  |  |  |  |  | my $vs = $self->{'virtualserver'}; | 
| 309 |  |  |  |  |  |  |  | 
| 310 |  |  |  |  |  |  | $self->AssignFirstParams($wiz, $vs); | 
| 311 |  |  |  |  |  |  | $self->Store($wiz); | 
| 312 |  |  |  |  |  |  | $self->ShowMe($wiz, $vs); | 
| 313 |  |  |  |  |  |  | } | 
| 314 |  |  |  |  |  |  |  | 
| 315 |  |  |  |  |  |  | sub Action_VServerSave { | 
| 316 |  |  |  |  |  |  | my $self=shift; my $wiz = shift; | 
| 317 |  |  |  |  |  |  | my($prefs, $basedir, $host, $server, $vs) = $self->init(1); | 
| 318 |  |  |  |  |  |  |  | 
| 319 |  |  |  |  |  |  | my $name = $vs->{'apache-virtualserver-name'}; | 
| 320 |  |  |  |  |  |  | my $old_name = delete $vs->{'_virtualserver_old_name'} || ''; | 
| 321 |  |  |  |  |  |  |  | 
| 322 |  |  |  |  |  |  | foreach my $opt ($wiz->param()) { | 
| 323 |  |  |  |  |  |  | $vs->{$opt} = $wiz->param($opt) | 
| 324 |  |  |  |  |  |  | if (($opt =~ /^apache\-virtualserver/) | 
| 325 |  |  |  |  |  |  | && (defined($wiz->param($opt)))); | 
| 326 |  |  |  |  |  |  | } | 
| 327 |  |  |  |  |  |  |  | 
| 328 |  |  |  |  |  |  | # Verify the new settings | 
| 329 |  |  |  |  |  |  | my $errors = ''; | 
| 330 |  |  |  |  |  |  | my $admin = $vs->{'apache-virtualserver-admin'} | 
| 331 |  |  |  |  |  |  | or ($errors .= "Missing virtual WWW server admin.\n"); | 
| 332 |  |  |  |  |  |  | my $dohttps = $isHttps->{$vs->{'apache-virtualserver-http-mode'}} || ''; | 
| 333 |  |  |  |  |  |  | my $dohttp = $isHttp->{$vs->{'apache-virtualserver-http-mode'}} || ''; | 
| 334 |  |  |  |  |  |  | my $doiface = 0; | 
| 335 |  |  |  |  |  |  | my $httpver; | 
| 336 |  |  |  |  |  |  |  | 
| 337 |  |  |  |  |  |  | $httpver = (($vs->{'apache-virtualserver-http-version'} =~ /^HTTP\/1\.[\d]$/) ? | 
| 338 |  |  |  |  |  |  | $vs->{'apache-virtualserver-http-version'} : '') | 
| 339 |  |  |  |  |  |  | or ($errors .= "Invalid HTTP version.\n"); | 
| 340 |  |  |  |  |  |  |  | 
| 341 |  |  |  |  |  |  | $httpver = $vs->{'apache-virtualserver-http-version'} = 'HTTP/1.0' if $dohttps; | 
| 342 |  |  |  |  |  |  | $doiface = 1 if $httpver eq 'HTTP/1.0'; | 
| 343 |  |  |  |  |  |  |  | 
| 344 |  |  |  |  |  |  | my $vsroot = $vs->{'apache-virtualserver-root'} | 
| 345 |  |  |  |  |  |  | or ($errors .= "Missing virtual WWW server root dir.\n"); | 
| 346 |  |  |  |  |  |  | if($dohttps) { | 
| 347 |  |  |  |  |  |  | my $sslkey = $vs->{'apache-virtualserver-sslkeyfile'} | 
| 348 |  |  |  |  |  |  | or ($errors .= "Missing SSL key file.\n"); | 
| 349 |  |  |  |  |  |  | my $sslcrt = $vs->{'apache-virtualserver-sslcrtfile'} | 
| 350 |  |  |  |  |  |  | or ($errors .= "Missing SSL certificate file.\n"); | 
| 351 |  |  |  |  |  |  | } | 
| 352 |  |  |  |  |  |  | my $sname = $server->{'apache-server-name'}; | 
| 353 |  |  |  |  |  |  | if($doiface) { | 
| 354 |  |  |  |  |  |  | my $ifaces = $self->GetIfaces(); | 
| 355 |  |  |  |  |  |  | my $iface = $vs->{'apache-virtualserver-interface'}; | 
| 356 |  |  |  |  |  |  | if($iface =~ /^[\d]+$/) { | 
| 357 |  |  |  |  |  |  | $errors .=  "Interface already in use by " . $ifaces->{$iface} . ".\n" | 
| 358 |  |  |  |  |  |  | if (defined($ifaces->{$iface})) && ($ifaces->{$iface} ne $sname . '/' .  $old_name); | 
| 359 |  |  |  |  |  |  | } else { | 
| 360 |  |  |  |  |  |  | $errors .= "Missing interface number.\n"; | 
| 361 |  |  |  |  |  |  | } | 
| 362 |  |  |  |  |  |  | } else { | 
| 363 |  |  |  |  |  |  | $vs->{'apache-virtualserver-interface'} = ''; | 
| 364 |  |  |  |  |  |  | } | 
| 365 |  |  |  |  |  |  | die $errors if $errors; | 
| 366 |  |  |  |  |  |  |  | 
| 367 |  |  |  |  |  |  | my($file, $dir, $odir) = $self->getFileDir(); | 
| 368 |  |  |  |  |  |  |  | 
| 369 |  |  |  |  |  |  | if(!$vs->CreateMe() and $name ne $old_name) { | 
| 370 |  |  |  |  |  |  | my $old_file = File::Spec->catfile($odir, "$old_name.cfg"); | 
| 371 |  |  |  |  |  |  | my $old_dir = File::Spec->catdir($odir, $old_name); | 
| 372 |  |  |  |  |  |  | rename($old_file, $file) | 
| 373 |  |  |  |  |  |  | or die "Failed to rename $old_file to $file: $!"; | 
| 374 |  |  |  |  |  |  | rename($old_dir, $dir) | 
| 375 |  |  |  |  |  |  | or die "Failed to rename $old_dir to $dir: $!"; | 
| 376 |  |  |  |  |  |  | } | 
| 377 |  |  |  |  |  |  | $vs->File($file); | 
| 378 |  |  |  |  |  |  | if($vs->CreateMe()) { | 
| 379 |  |  |  |  |  |  | File::Path::mkpath([$dir], 0, 0777); | 
| 380 |  |  |  |  |  |  | die "Couldn't create directory $dir: $!" unless -d $dir; | 
| 381 |  |  |  |  |  |  | Wizard::Examples::Apache::Directory::createDefault($self, $dir); | 
| 382 |  |  |  |  |  |  | } | 
| 383 |  |  |  |  |  |  | $vs->Modified(1); | 
| 384 |  |  |  |  |  |  | $self->Store($wiz, 1); | 
| 385 |  |  |  |  |  |  | $self->Action_Reset($wiz); | 
| 386 |  |  |  |  |  |  | } | 
| 387 |  |  |  |  |  |  |  | 
| 388 |  |  |  |  |  |  |  | 
| 389 |  |  |  |  |  |  | sub Action_ModifyVServer { | 
| 390 |  |  |  |  |  |  | my $self = shift; | 
| 391 |  |  |  |  |  |  | $self->Action_ModifyItem(shift, shift || 'Modify virtual server', | 
| 392 |  |  |  |  |  |  | shift || 'Action_EditVServer', 'Virtual WWW server'); | 
| 393 |  |  |  |  |  |  | } | 
| 394 |  |  |  |  |  |  |  | 
| 395 |  |  |  |  |  |  | sub Action_EditVServer { | 
| 396 |  |  |  |  |  |  | my $self = shift; my $wiz = shift; | 
| 397 |  |  |  |  |  |  | $self->Load($wiz); | 
| 398 |  |  |  |  |  |  | $self->FirstParams($wiz, $self->{'virtualserver'}, "Continue editing"); | 
| 399 |  |  |  |  |  |  | } | 
| 400 |  |  |  |  |  |  |  | 
| 401 |  |  |  |  |  |  | sub Action_DeleteVServer { | 
| 402 |  |  |  |  |  |  | shift->Action_ModifyVServer(shift, 'Delete this virtual server', | 
| 403 |  |  |  |  |  |  | 'Action_DeleteVServer2'); | 
| 404 |  |  |  |  |  |  | } | 
| 405 |  |  |  |  |  |  |  | 
| 406 |  |  |  |  |  |  | sub Action_DirectoryMenu { | 
| 407 |  |  |  |  |  |  | shift->Action_ModifyVServer(shift, 'Manage directory configurations on this virtual server', | 
| 408 |  |  |  |  |  |  | 'Wizard::Examples::Apache::Directory::Action_Enter'); | 
| 409 |  |  |  |  |  |  | } | 
| 410 |  |  |  |  |  |  |  | 
| 411 |  |  |  |  |  |  |  | 
| 412 |  |  |  |  |  |  | sub Action_DeleteVServer2 { | 
| 413 |  |  |  |  |  |  | my $self = shift; my $wiz = shift; | 
| 414 |  |  |  |  |  |  | my($prefs, $basedir, $host, $server) = $self->init(); | 
| 415 |  |  |  |  |  |  | my $hname = $host->{'apache-host-name'}; | 
| 416 |  |  |  |  |  |  | my $sname = $server->{'apache-server-name'}; | 
| 417 |  |  |  |  |  |  | my $name = $wiz->param('apache-virtualserver') || die "Missing virtual WWW server name"; | 
| 418 |  |  |  |  |  |  | my $file = File::Spec->catfile($basedir, $hname, $sname, "$name.cfg"); | 
| 419 |  |  |  |  |  |  | my $dir = File::Spec->catdir($basedir, $hname, $sname, $name); | 
| 420 |  |  |  |  |  |  | my $vserver = Wizard::SaveAble->new($file); | 
| 421 |  |  |  |  |  |  |  | 
| 422 |  |  |  |  |  |  | if ($vserver->{'apache-virtualserver-isdefault'}) { | 
| 423 |  |  |  |  |  |  | return (['Wizard::Elem::Data', 'descr' => 'ERROR: ', | 
| 424 |  |  |  |  |  |  | 'value' => 'Default virtual server can not be deleted'], | 
| 425 |  |  |  |  |  |  | $self->Action_Reset($wiz)); | 
| 426 |  |  |  |  |  |  | } | 
| 427 |  |  |  |  |  |  |  | 
| 428 |  |  |  |  |  |  | $self->{'virtualserver'}=$vserver; | 
| 429 |  |  |  |  |  |  | $self->Store($wiz); | 
| 430 |  |  |  |  |  |  | my $https = $isHttps->{$vserver->{'apache-virtualserver-http_mode'}} || ''; | 
| 431 |  |  |  |  |  |  |  | 
| 432 |  |  |  |  |  |  | (['Wizard::Elem::Title', 'value' => 'Deleting an Apache server'], | 
| 433 |  |  |  |  |  |  | ['Wizard::Elem::Data', 'descr' => 'Virtual WWW server name', | 
| 434 |  |  |  |  |  |  | 'value' => $vserver->{'apache-virtualserver-name'}], | 
| 435 |  |  |  |  |  |  | ['Wizard::Elem::Data', 'descr' => 'Virtual WWW server root', | 
| 436 |  |  |  |  |  |  | 'value' => $vserver->{'apache-virtualserver-root'}], | 
| 437 |  |  |  |  |  |  | ['Wizard::Elem::Data', 'descr' => 'Virtual WWW server admin', | 
| 438 |  |  |  |  |  |  | 'value' => $vserver->{'apache-virtualserver-admin'}], | 
| 439 |  |  |  |  |  |  | ['Wizard::Elem::Data', 'descr' => 'Virtual WWW server HTTP port', | 
| 440 |  |  |  |  |  |  | 'value' => $vserver->{'apache-virtualserver-http-port'}], | 
| 441 |  |  |  |  |  |  | ($https ? (['Wizard::Elem::Data', 'descr' => 'Virtual WWW server HTTPS port', | 
| 442 |  |  |  |  |  |  | 'value' => $vserver->{'apache-virtualserver-https-port'}], | 
| 443 |  |  |  |  |  |  | ['Wizard::Elem::Data', 'descr' => 'Virtual WWW Server key file', | 
| 444 |  |  |  |  |  |  | 'value' => $vserver->{'apache-virtualserver-sslkeyfile'}], | 
| 445 |  |  |  |  |  |  | ['Wizard::Elem::Data', 'descr' => 'Virtual WWW Server certificate file', | 
| 446 |  |  |  |  |  |  | 'value' => $vserver->{'apache-virtualserver-sslcrtfile'}]) : ()), | 
| 447 |  |  |  |  |  |  | ['Wizard::Elem::Submit', 'value' => 'Yes, delete it', | 
| 448 |  |  |  |  |  |  | 'id' => 1, 'name' => 'Action_DeleteVServer3'], | 
| 449 |  |  |  |  |  |  | (-d $dir ? ['Wizard::Elem::Submit', | 
| 450 |  |  |  |  |  |  | 'value' => 'Yes, delete it, including data directory', | 
| 451 |  |  |  |  |  |  | 'id' => 2, 'name' => 'Action_DeleteVServer4'] : ()), | 
| 452 |  |  |  |  |  |  | ['Wizard::Elem::BR'], | 
| 453 |  |  |  |  |  |  | ['Wizard::Elem::Submit', 'value' => 'Return to Server Menu', | 
| 454 |  |  |  |  |  |  | 'name' => 'Wizard::Examples::Apache::Server::Action_Reset', | 
| 455 |  |  |  |  |  |  | 'id' => 96], | 
| 456 |  |  |  |  |  |  | ['Wizard::Elem::Submit', 'value' => 'Return to Host Menu', | 
| 457 |  |  |  |  |  |  | 'name' => 'Wizard::Examples::Apache::Host::Action_Reset', | 
| 458 |  |  |  |  |  |  | 'id' => 97], | 
| 459 |  |  |  |  |  |  | ['Wizard::Elem::Submit', 'value' => 'Return to Top Menu', | 
| 460 |  |  |  |  |  |  | 'name' => 'Wizard::Examples::Apache::Action_Reset', | 
| 461 |  |  |  |  |  |  | 'id' => 98], | 
| 462 |  |  |  |  |  |  | ['Wizard::Elem::Submit', 'value' => 'Exit Apache Wizard', | 
| 463 |  |  |  |  |  |  | 'id' => 99]); | 
| 464 |  |  |  |  |  |  | } | 
| 465 |  |  |  |  |  |  |  | 
| 466 |  |  |  |  |  |  |  | 
| 467 |  |  |  |  |  |  | sub Action_DeleteVServer3 { | 
| 468 |  |  |  |  |  |  | my($self, $wiz) = @_; | 
| 469 |  |  |  |  |  |  | $self->DeleteItem($wiz); | 
| 470 |  |  |  |  |  |  | $self->Action_Reset($wiz); | 
| 471 |  |  |  |  |  |  | } | 
| 472 |  |  |  |  |  |  |  | 
| 473 |  |  |  |  |  |  | sub Action_DeleteVServer4 { | 
| 474 |  |  |  |  |  |  | my($self, $wiz) = @_; | 
| 475 |  |  |  |  |  |  | $self->DeleteItem($wiz,1); | 
| 476 |  |  |  |  |  |  | $self->Action_Reset($wiz); | 
| 477 |  |  |  |  |  |  | } |