root/trunk/engine/ispcp-sub-mngr

Revision 1397, 52.8 kB (checked in by scitech, 2 weeks ago)

small fixes

Line 
1 #!/usr/bin/perl
2
3 # ispCP ω (OMEGA) a Virtual Hosting Control Panel
4 # Copyright (c) 2001-2006 by moleSoftware GmbH
5 # http://www.molesoftware.com
6 # Copyright (c) 2006-2008 by isp Control Panel
7 # http://isp-control.net
8 #
9 #
10 # License:
11 #    This program is free software; you can redistribute it and/or
12 #    modify it under the terms of the MPL Mozilla Public License
13 #    as published by the Free Software Foundation; either version 1.1
14 #    of the License, or (at your option) any later version.
15 #
16 #    This program is distributed in the hope that it will be useful,
17 #    but WITHOUT ANY WARRANTY; without even the implied warranty of
18 #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19 #    MPL Mozilla Public License for more details.
20 #
21 #    You may have received a copy of the MPL Mozilla Public License
22 #    along with this program.
23 #
24 #    An on-line copy of the MPL Mozilla Public License can be found
25 #    http://www.mozilla.org/MPL/MPL-1.1.html
26 #
27 #
28 # The ISPCP ω Home Page is at:
29 #
30 #    http://isp-control.net
31 #
32
33 use FindBin;
34 use lib "$FindBin::Bin/";
35 require 'ispcp_common_code.pl';
36
37 use strict;
38
39 use warnings;
40
41 $main::sub_task_id = undef;
42
43 sub sub_mngr_start_up {
44
45     my ($rs, $rdata) = (undef, undef);
46
47     push_el(\@main::el, 'sub_mngr_start_up()', 'Starting...');
48
49     # checking for master process;
50
51     $rs = check_master();
52
53     return $rs if ($rs != 0);
54
55     # Let's clear Execution Logs, if any.
56
57     if (-e $main::ispcp_sub_mngr_el) {
58
59         $rs = del_file($main::ispcp_sub_mngr_el);
60
61         return $rs if ($rs != 0);
62
63     }
64
65     # config check;
66
67     $rs = get_conf();
68
69     return $rs if ($rs != 0);
70
71     # license request check;
72
73     #
74     # ($rs, $rdata) = license_request();
75     #
76     # return $rs if ($rs != 0);
77     #
78     # License conditions must be stand here;
79     #
80
81     # sql check;
82
83     #
84     # getting initial data also must be done here;
85     #
86
87     my $sql = "
88         SELECT
89                 subdomain_id,
90                 domain_id,
91                 subdomain_name,
92                 subdomain_mount,
93                 subdomain_status
94         FROM
95                 subdomain
96     ";
97
98     ($rs, $rdata) = doSQL($sql);
99
100     return $rs if ($rs != 0);
101
102
103
104     #
105     # getting task id and domain record id;
106     #
107
108     $main::sub_task_id = $ARGV[0];
109
110     push_el(\@main::el, 'sub_mngr_start_up()', 'Ending...');
111
112     return 0;
113
114 }
115
116 sub sub_mngr_shut_down {
117
118     my $rs = undef;
119
120     push_el(\@main::el, 'sub_mngr_shut_down()', 'Starting...');
121
122     push_el(\@main::el, 'sub_mngr_shut_down()', 'Ending...');
123
124     return 0;
125
126 }
127
128 sub sub_add_named_cfg_data {
129
130     my ($sub_data) = @_;
131
132     my ($rs, $rdata) = (undef, undef);
133
134     push_el(\@main::el, 'sub_add_named_cfg_data()', 'Starting...');
135
136     if (!defined($sub_data) || $sub_data eq '') {
137
138         push_el(\@main::el, 'sub_add_named_cfg_data()', 'ERROR: Undefined Input Data...');
139
140         return -1;
141
142     }
143
144     #
145     # Initial data we need;
146     #
147
148     my $sub_pref = @$sub_data[2];
149
150     my $dmn_name = @$sub_data[6];
151
152     my $sub_name = "$sub_pref.$dmn_name";
153
154     my $dmn_ip = @$sub_data[26];
155
156
157     my $timestamp = time;
158
159
160     my $conf_dir = $main::cfg{'CONF_DIR'};
161
162
163     my $tpl_dir = "$conf_dir/bind/parts";
164
165     my $working_dir = "$conf_dir/bind/working";
166
167     my $backup_dir = "$conf_dir/bind/backup";
168
169
170     my $db_fname = "$dmn_name.db";
171
172     my $working_cfg = "$working_dir/$db_fname";
173
174     my $sys_cfg = $main::cfg{'BIND_DB_DIR'}."/$db_fname";
175
176     my $backup_cfg = "$backup_dir/$db_fname.$timestamp";
177
178     #
179     # Let's get needed templates;
180     #
181
182     my (
183         $db_sub_entry_b,
184         $db_sub_entry,
185         $db_sub_entry_e,
186         $db_time_b,
187         $db_time_e
188        ) = (
189             'db_sub_entry_b.tpl',
190             'db_sub_entry.tpl',
191             'db_sub_entry_e.tpl',
192             'db_time_b.tpl',
193             'db_time_e.tpl'
194            );
195
196     (
197      $rs,
198      $db_sub_entry_b,
199      $db_sub_entry,
200      $db_sub_entry_e,
201      $db_time_b,
202      $db_time_e
203     ) = get_tpl(
204                 $tpl_dir,
205                 $db_sub_entry_b,
206                 $db_sub_entry,
207                 $db_sub_entry_e,
208                 $db_time_b,
209                 $db_time_e
210                );
211
212     return $rs if ($rs != 0);
213
214     #
215     # Let's prepare needed templates;
216     #
217
218     my %tag_hash = (
219                     '{SUB_NAME}' => $sub_name,
220                     '{DMN_IP}' => $dmn_ip,
221                     '{DMN_NAME}' => $dmn_name
222                    );
223
224     my ($db_sub_entry_b_val, $db_sub_entry_e_val) = (undef, undef);
225
226     (
227      $rs,
228      $db_sub_entry_b_val,
229      $db_sub_entry,
230      $db_sub_entry_e_val,
231      $db_time_b,
232      $db_time_e
233     ) = prep_tpl(
234                  \%tag_hash,
235                  $db_sub_entry_b,
236                  $db_sub_entry,
237                  $db_sub_entry_e,
238                  $db_time_b,
239                  $db_time_e
240                 );
241
242     return $rs if ($rs != 0);
243
244     #
245     # Getting working config;
246     #
247
248     my $working = undef;
249
250     ($rs, $working) = get_file($working_cfg);
251
252     return $rs if ($rs != 0);
253
254     #
255     # Is Any subdomain entry like this exists here ?!
256     #
257
258     ($rs, $rdata) = get_tag($db_sub_entry_b_val, $db_sub_entry_e_val, $working);
259
260     if ($rs == 0) {
261
262         ($rs, $working) = del_tag($db_sub_entry_b_val, "$db_sub_entry_e_val\n", $working);
263
264         return $rs if ($rs != 0);
265
266     }
267
268     #
269     # Is supdomain extension tags exist in working config ?
270     #
271
272     ($rs, $rdata) = get_tag($db_sub_entry_b, $db_sub_entry_e, $working);
273
274     return $rs if ($rs != 0);
275
276     #
277     # Let's construct new record then and put it working config;
278     #
279
280     my $db_sub_entry_val = "$db_sub_entry_b_val$db_sub_entry$db_sub_entry_e_val\n$db_sub_entry_b$db_sub_entry_e";
281
282     ($rs, $working) = repl_tag($db_sub_entry_b, $db_sub_entry_e, $working, $db_sub_entry_val, "sub_add_named_cfg_data");
283
284     return $rs if ($rs != 0);
285
286     #
287     # {TIMESTAMP} must be updated too;
288     #
289
290     ($rs, $rdata) = get_tag($db_time_b, $db_time_e, $working);
291
292     return $rs if ($rs != 0);
293
294     my @rdata2 = split(/\n/, $rdata);
295     my $seq = $rdata2[1];
296
297     $seq =~ s/;.*//;
298     $seq =~ s/^\s+//;
299     $seq =~ s/\s+$//;
300     $seq = substr($seq, -2);
301     $seq = int($seq) + 1;
302
303         #
304         # RFC 1912
305         #
306
307     my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
308     my $time2 = sprintf "%4d%02d%02d%02d",$year+1900,$mon+1,$mday,$seq;
309
310     my $db_time_val = "$db_time_b\t\t\t $time2\t\n$db_time_e";
311
312     ($rs, $working) = repl_tag($db_time_b, $db_time_e, $working, $db_time_val, "sub_add_named_cfg_data");
313
314     return $rs if ($rs != 0);
315
316     #
317     # Backuping system config;
318     #
319
320     ($rs, $rdata) = sys_command("cp -p $sys_cfg $backup_cfg");
321
322     return $rs if ($rs != 0);
323
324     #
325     # Let's store prepared data;
326     #
327
328     ($rs, $rdata) = store_file($working_cfg, $working, $main::cfg{'ROOT_USER'}, $main::cfg{'ROOT_GROUP'}, 0644);
329
330     return $rs if ($rs != 0);
331
332     ($rs, $rdata) = store_file($sys_cfg, $working, $main::cfg{'ROOT_USER'}, $main::cfg{'ROOT_GROUP'}, 0644);
333
334     return $rs if ($rs != 0);
335
336     push_el(\@main::el, 'sub_add_named_cfg_data()', 'Ending...');
337
338     return 0;
339
340 }
341
342 sub sub_del_named_cfg_data {
343
344     my ($sub_data) = @_;
345
346     my ($rs, $rdata) = (undef, undef);
347
348     push_el(\@main::el, 'sub_del_named_cfg_data()', 'Starting...');
349
350     if (!defined($sub_data) || $sub_data eq '') {
351
352         push_el(\@main::el, 'sub_del_named_cfg_data()', 'ERROR: Undefined Input Data...');
353
354         return -1;
355
356     }
357
358     #
359     # Initial data we need;
360     #
361
362     my $sub_pref = @$sub_data[2];
363
364     my $dmn_name = @$sub_data[6];
365
366     my $sub_name = "$sub_pref.$dmn_name";
367
368     my $dmn_ip = @$sub_data[26];
369
370
371     my $timestamp = time;
372
373
374     my $conf_dir = $main::cfg{'CONF_DIR'};
375
376
377     my $tpl_dir = "$conf_dir/bind/parts";
378
379     my $working_dir = "$conf_dir/bind/working";
380
381     my $backup_dir = "$conf_dir/bind/backup";
382
383
384     my $db_fname = "$dmn_name.db";
385
386     my $working_cfg = "$working_dir/$db_fname";
387
388     my $sys_cfg = $main::cfg{'BIND_DB_DIR'}."/$db_fname";
389
390     my $backup_cfg = "$backup_dir/$db_fname.$timestamp";
391
392     #
393     # Let's get needed templates;
394     #
395
396     my (
397         $db_sub_entry_b,
398         $db_sub_entry,
399         $db_sub_entry_e,
400         $db_time_b,
401         $db_time_e
402        ) = (
403             'db_sub_entry_b.tpl',
404             'db_sub_entry.tpl',
405             'db_sub_entry_e.tpl',
406             'db_time_b.tpl',
407             'db_time_e.tpl'
408            );
409
410     (
411      $rs,
412      $db_sub_entry_b,
413      $db_sub_entry,
414      $db_sub_entry_e,
415      $db_time_b,
416      $db_time_e
417     ) = get_tpl(
418                 $tpl_dir,
419                 $db_sub_entry_b,
420                 $db_sub_entry,
421                 $db_sub_entry_e,
422                 $db_time_b,
423                 $db_time_e
424                );
425
426     return $rs if ($rs != 0);
427
428     #
429     # Let's prepare needed templates;
430     #
431
432     my %tag_hash = (
433                     '{SUB_NAME}' => $sub_name,
434                     '{DMN_IP}' => $dmn_ip,
435                     '{DMN_NAME}' => $dmn_name
436                    );
437
438     my ($db_sub_entry_b_val, $db_sub_entry_e_val) = (undef, undef);
439
440     (
441      $rs,
442      $db_sub_entry_b_val,
443      $db_sub_entry,
444      $db_sub_entry_e_val,
445      $db_time_b,
446      $db_time_e
447     ) = prep_tpl(
448                  \%tag_hash,
449                  $db_sub_entry_b,
450                  $db_sub_entry,
451                  $db_sub_entry_e,
452                  $db_time_b,
453                  $db_time_e
454                 );
455
456     return $rs if ($rs != 0);
457
458     #
459     # Getting working config;
460     #
461
462     my $working = undef;
463
464     ($rs, $working) = get_file($working_cfg);
465
466     return $rs if ($rs != 0);
467
468     #
469     # Is Any subdomain entry like this exists here ?!
470     #
471
472     ($rs, $rdata) = get_tag($db_sub_entry_b_val, $db_sub_entry_e_val, $working);
473
474     if ($rs == 0) {
475
476         ($rs, $working) = del_tag($db_sub_entry_b_val, "$db_sub_entry_e_val\n", $working);
477
478         return $rs if ($rs != 0);
479
480     }
481
482     #
483     # Is supdomain extension tags exist in working config ?
484     #
485
486     ($rs, $rdata) = get_tag($db_sub_entry_b, $db_sub_entry_e, $working);
487
488     return $rs if ($rs != 0);
489
490     #
491     # {TIMESTAMP} must be updated too;
492     #
493
494     ($rs, $rdata) = get_tag($db_time_b, $db_time_e, $working);
495
496     return $rs if ($rs != 0);
497
498     my @rdata2 = split(/\n/, $rdata);
499     my $seq = $rdata2[1];
500
501     $seq =~ s/;.*//;
502     $seq =~ s/^\s+//;
503     $seq =~ s/\s+$//;
504     $seq = substr($seq, -2);
505     $seq = int($seq) + 1;
506
507         #
508         # RFC 1912
509         #
510
511     my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
512         my $time2 = sprintf "%4d%02d%02d%02d",$year+1900,$mon+1,$mday,$seq;
513
514     my $db_time_val = "$db_time_b\t\t\t $time2\t\n$db_time_e";
515
516     ($rs, $working) = repl_tag($db_time_b, $db_time_e, $working, $db_time_val, "sub_del_named_cfg_data");
517
518     return $rs if ($rs != 0);
519
520     #
521     # Backuping system config;
522     #
523
524     ($rs, $rdata) = sys_command("cp -p $sys_cfg $backup_cfg");
525
526     return $rs if ($rs != 0);
527
528     #
529     # Let's store prepared data;
530     #
531
532     ($rs, $rdata) = store_file($working_cfg, $working, $main::cfg{'ROOT_USER'}, $main::cfg{'ROOT_GROUP'}, 0644);
533
534     return $rs if ($rs != 0);
535
536     ($rs, $rdata) = store_file($sys_cfg, $working, $main::cfg{'ROOT_USER'}, $main::cfg{'ROOT_GROUP'}, 0644);
537
538     return $rs if ($rs != 0);
539
540     push_el(\@main::el, 'sub_del_named_cfg_data()', 'Ending...');
541
542     return 0;
543
544 }
545
546 sub sub_add_named_data {
547
548     my ($sub_data) = @_;
549
550     my $rs = undef;
551
552     push_el(\@main::el, 'sub_add_named_data()', 'Starting...');
553
554     if (!defined($sub_data) || $sub_data eq '') {
555
556         push_el(\@main::el, 'sub_add_named_data()', 'ERROR: Undefined Input Data...');
557
558         return -1;
559
560     }
561
562     return 0 if ($main::cfg{'CMD_NAMED'} eq 'no');
563
564     $rs = sub_add_named_cfg_data($sub_data);
565
566     return $rs if ($rs != 0);
567
568     push_el(\@main::el, 'sub_add_named_data()', 'Ending...');
569
570     return 0;
571
572 }
573
574 sub sub_change_named_data {
575
576     my ($sub_data) = @_;
577
578     my $rs = undef;
579
580     push_el(\@main::el, 'sub_change_named_data()', 'Starting...');
581
582     if (!defined($sub_data) || $sub_data eq '') {
583
584         push_el(\@main::el, 'sub_change_named_data()', 'ERROR: Undefined Input Data...');
585
586         return -1;
587
588     }
589
590     return 0 if ($main::cfg{'CMD_NAMED'} eq 'no');
591
592     $rs = sub_add_named_cfg_data($sub_data);
593
594     return $rs if ($rs != 0);
595
596     push_el(\@main::el, 'sub_change_named_data()', 'Ending...');
597
598     return 0;
599
600 }
601
602 sub sub_del_named_data {
603
604     my ($sub_data) = @_;
605
606     my $rs = undef;
607
608     push_el(\@main::el, 'sub_del_named_data()', 'Starting...');
609
610     if (!defined($sub_data) || $sub_data eq '') {
611
612         push_el(\@main::el, 'sub_del_named_data()', 'ERROR: Undefined Input Data...');
613
614         return -1;
615
616     }
617
618     return 0 if ($main::cfg{'CMD_NAMED'} eq 'no');
619
620     $rs = sub_del_named_cfg_data($sub_data);
621
622     return $rs if ($rs != 0);
623
624     push_el(\@main::el, 'sub_del_named_data()', 'Ending...');
625
626     return 0;
627
628 }
629
630 sub gen_httpd_sub_group_entry {
631
632     my ($sub_data) = @_;
633
634     my ($rs, $rdata) = (undef, undef);
635
636     push_el(\@main::el, 'gen_httpd_sub_group_entry()', 'Starting...');
637
638     if (!defined($sub_data) || $sub_data eq '') {
639
640         push_el(\@main::el, 'gen_httpd_sub_group_entry()', 'ERROR: Undefined Input Data...');
641
642         return (-1, '');
643
644     }
645
646     #
647     # Initial data we need;
648     #
649
650     my $sub_pref = @$sub_data[2];
651
652     my $sub_mount = @$sub_data[3];
653
654     my $dmn_id = @$sub_data[5];
655
656     my $dmn_name = @$sub_data[6];
657
658     my $sub_name = "$sub_pref.$dmn_name";
659
660     my $sub_ip = @$sub_data[26];
661
662     my ($sub_php, $sub_cgi) = (@$sub_data[24], @$sub_data[25]);
663
664     my $conf_dir = $main::cfg{'CONF_DIR'};
665
666     #
667     # Getting needed templates;
668     #
669
670     my $tpl_dir = "$conf_dir/apache/parts";
671
672     my (
673         $sub_b,
674         $sub_entry,
675         $sub_e,
676         $sub_cgi_b,
677         $sub_cgi_entry,
678         $sub_cgi_e,
679         $sub_php_b,
680         $sub_php_entry,
681         $sub_php_e,
682         $sub_php2_b,
683         $sub_php2_entry,
684         $sub_php2_e,
685         $sub_custom
686        ) = ('', '', '', '', '', '', '', '', '', '', '', '', '');
687
688     (
689      $rs,
690      $sub_b,
691      $sub_entry,
692      $sub_e,
693      $sub_cgi_b,
694      $sub_cgi_entry,
695      $sub_cgi_e,
696      $sub_php_b,
697      $sub_php_entry,
698      $sub_php_e,
699      $sub_php2_b,
700      $sub_php2_entry,
701      $sub_php2_e,
702      $sub_custom
703     ) = get_tpl (
704                  $tpl_dir,
705                  'sub_b.tpl',
706                  'sub_entry.tpl',
707                  'sub_e.tpl',
708                  'sub_cgi_b.tpl',
709                  'sub_cgi_entry.tpl',
710                  'sub_cgi_e.tpl',
711                  'sub_php_b.tpl',
712                  'sub_php_entry.tpl',
713                  'sub_php_e.tpl',
714                  'sub_php2_b.tpl',
715                  'sub_php2_entry.tpl',
716                  'sub_php2_e.tpl',
717                  'custom.conf.tpl'
718                 );
719
720     return ($rs, '') if ($rs != 0);
721
722     #
723     # Preparing needed templates;
724     #
725
726     my ($suexec_uid, $suexec_gid) = get_dmn_suexec_user($dmn_id);
727
728     my $suexec_user_pref = $main::cfg{'APACHE_SUEXEC_USER_PREF'};
729
730     my ($suexec_user, $suexec_group) = ("$suexec_user_pref$suexec_uid", "$suexec_user_pref$suexec_gid");
731
732     my %tag_hash =
733
734         (
735          '{DMN_NAME}' => $dmn_name,
736          '{DMN_GRP}' => $dmn_name,
737          '{STARTER_DIR}' => $main::cfg{'PHP_STARTER_DIR'},
738          '{PHP_VERSION}' => $main::cfg{'PHP_VERSION'},
739          '{WWW_DIR}' => $main::cfg{'APACHE_WWW_DIR'},
740          '{APACHE_LOG_DIR}' => $main::cfg{'APACHE_LOG_DIR'},
741          '{SUB_NAME}' => $sub_name,
742          '{SELF}' => $sub_name,
743          '{SUB_IP}' => $sub_ip,
744          '{SUB_NAME_PHP2}' => "$dmn_name$sub_mount",
745          '{MOUNT_POINT}' => $sub_mount,
746          '{GUI_ROOT_DIR}' => $main::cfg{'GUI_ROOT_DIR'},
747          '{PEAR_DIR}' => $main::cfg{'PEAR_DIR'},
748          '{APACHE_USERS_LOG_DIR}' => $main::cfg{'APACHE_USERS_LOG_DIR'},
749          '{CUSTOM_SITES_CONFIG_DIR}' => $main::cfg{'APACHE_CUSTOM_SITES_CONFIG_DIR'},
750          '{SUEXEC_USER}' => $suexec_user,
751          '{SUEXEC_GROUP}' => $suexec_group
752         );
753
754     (
755      $rs,
756      $sub_b,
757      $sub_entry,
758      $sub_e,
759      $sub_cgi_entry,
760      $sub_php2_entry,
761      $sub_custom
762     ) = prep_tpl(
763                  \%tag_hash,
764                  $sub_b,
765                  $sub_entry,
766                  $sub_e,
767                  $sub_cgi_entry,
768                  $sub_php2_entry,
769                  $sub_custom
770                 );
771
772     return ($rs, '') if ($rs != 0);
773
774     #
775     # Any CGI support ?
776     #
777
778     my $cgi_entry = undef;
779
780     if ($sub_cgi eq 'yes') {
781
782         $cgi_entry = "$sub_cgi_b$sub_cgi_entry$sub_cgi_e";
783
784     } else {
785
786         $cgi_entry = "$sub_cgi_b$sub_cgi_e";
787
788     }
789
790     ($rs, $sub_entry) = repl_tag(
791                                  $sub_cgi_b,
792                                  $sub_cgi_e,
793                                  $sub_entry,
794                                  $cgi_entry,
795                                  "gen_httpd_sub_group_entry"
796                                 );
797
798     return ($rs, '') if ($rs != 0);
799
800     #
801     # Without PHP support ?
802     #
803
804     my $php_entry = undef;
805
806     if ($sub_php eq 'no') {
807
808         $php_entry = "$sub_php_b$sub_php_entry$sub_php_e";
809
810     } else {
811
812         $php_entry = "$sub_php_b$sub_php_e";
813
814         my $php2_entry = "$sub_php2_b$sub_php2_entry$sub_php2_e";
815
816         ($rs, $sub_entry) = repl_tag(
817                                      $sub_php2_b,
818                                      $sub_php2_e,
819                                      $sub_entry,
820                                      $php2_entry,
821                                      "gen_httpd_sub_group_entry"
822                                     );
823
824         return ($rs, '') if ($rs != 0);
825
826     }
827
828     ($rs, $sub_entry) = repl_tag(
829                                  $sub_php_b,
830                                  $sub_php_e,
831                                  $sub_entry,
832                                  $php_entry,
833                                  "gen_httpd_sub_group_entry"
834                                 );
835
836     return ($rs, '') if ($rs != 0);
837
838     my $sub_entry_val = "$sub_b$sub_entry$sub_e";
839
840     #
841     # Custom domain config file
842     #
843
844     if ( ! -e "$main::cfg{'APACHE_CUSTOM_SITES_CONFIG_DIR'}/$sub_name.conf" ){
845
846         $rs = store_file("$main::cfg{'APACHE_CUSTOM_SITES_CONFIG_DIR'}/$sub_name.conf", $sub_custom , $main::cfg{'ROOT_USER'}, $main::cfg{'ROOT_GROUP'}, 0644);
847
848         return $rs if ($rs != 0);
849     }
850
851     push_el(\@main::el, 'gen_httpd_sub_group_entry()', 'Ending...');
852
853     return (0, $sub_entry_val);
854
855 }
856
857 sub sub_add_httpd_cfg_data {
858
859     my ($sub_data) = @_;
860
861     my ($rs, $rdata) = (undef, undef);
862
863     push_el(\@main::el, 'sub_add_httpd_cfg_data()', 'Starting...');
864
865     if (!defined($sub_data) || $sub_data eq '') {
866
867         push_el(\@main::el, 'sub_add_httpd_cfg_data()', 'ERROR: Undefined Input Data...');
868
869         return -1;
870
871     }
872
873     #
874     # Initial data we need;
875     #
876
877     my $sub_pref = @$sub_data[2];
878
879     my $dmn_name = @$sub_data[6];
880
881     my $sub_name = "$sub_pref.$dmn_name";
882
883     my $sub_mount = @$sub_data[3];
884
885     my $sub_ip = @$sub_data[26];
886
887
888     my $conf_dir = $main::cfg{'CONF_DIR'};
889
890     my $tpl_dir = "$conf_dir/apache/parts";
891
892     my $working_dir = "$conf_dir/apache/working";
893
894     my $backup_dir = "$conf_dir/apache/backup";
895
896
897     my $sys_cfg = "$main::cfg{'APACHE_SITES_DIR'}/ispcp.conf";
898
899     my $timestamp = time;
900
901     my $working_cfg = "$working_dir/ispcp.conf";
902
903     my $backup_cfg = "$backup_dir/httpd.conf.$timestamp";
904
905     #
906     # Needed templates;
907     #
908
909     my (
910         $cfg_b,
911         $cfg_e,
912         $vh_b,
913         $vh_e,
914         $dg_b,
915         $dg_e,
916         $sub_b,
917         $sub_e
918        ) = ('', '', '', '', '', '', '', '', '');
919
920     (
921      $rs,
922      $cfg_b,
923      $cfg_e,
924      $vh_b,
925      $vh_e,
926      $dg_b,
927      $dg_e,
928      $sub_b,
929      $sub_e
930     ) = get_tpl (
931                  $tpl_dir,
932                  'cfg_b.tpl',
933                  'cfg_e.tpl',
934                  'vh_b.tpl',
935                  'vh_e.tpl',
936                  'dg_b.tpl',
937                  'dg_e.tpl',
938                  'sub_b.tpl',
939                  'sub_e.tpl'
940                 );
941
942     return $rs if ($rs != 0);
943
944     #
945     # Prepareing templates;
946     #
947
948     my (
949         $vh_b_val,
950         $vh_entry_val,
951         $vh_e_val,
952         $dg_b_val,
953         $dg_e_val,
954         $sub_b_val,
955         $sub_e_val
956        ) = ('', '', '', '', '', '', '');
957
958     my %tag_hash =  (
959                      '{IP}' => $sub_ip,
960                      '{DMN_GRP}' => $dmn_name,
961                      '{SUB_NAME}' => $sub_name
962                     );
963
964     (
965      $rs,
966      $vh_b_val,
967      $vh_e_val,
968      $dg_b_val,
969      $dg_e_val,
970      $sub_b_val,
971      $sub_e_val
972     ) = prep_tpl (
973                   \%tag_hash,
974                   $vh_b,
975                   $vh_e,
976                   $dg_b,
977                   $dg_e,
978                   $sub_b,
979                   $sub_e
980                  );
981
982     return $rs if ($rs != 0);
983
984     #
985     # Let's get some configs;
986     #
987
988     my ($sys, $working) = ('', '');
989
990     ($rs, $sys) = get_file($sys_cfg);
991
992     return $rs if ($rs != 0);
993
994     ($rs, $working) = get_file($working_cfg);
995
996     return $rs if ($rs != 0);
997
998     #
999     # May the Force Be With Us... ;)
1000     #
1001
1002     #
1003     # Are $cfg_b, $cfg_e tags exist in the working confing ?
1004     #
1005
1006     ($rs, $rdata) = get_tag($cfg_b, $cfg_e, $working);
1007
1008     return $rs if ($rs != 0);
1009
1010     #
1011     # Is our Virtual Host exist in the working config ?
1012     #
1013
1014     ($rs, $rdata) = get_tag($vh_b_val, $vh_e_val, $working);
1015
1016     return $rs if ($rs != 0);
1017
1018
1019     my $vh_entry_working = $rdata;
1020
1021
1022     ($rs, $rdata) = get_tag(
1023                             $dg_b_val,
1024                             $dg_e_val,
1025                             $vh_entry_working
1026                            );
1027
1028     return $rs if ($rs != 0);
1029
1030
1031     my $dg_entry_working = $rdata;
1032
1033     ($rs, $rdata) = get_tag($sub_b_val, $sub_e_val, $dg_entry_working);
1034
1035     if ($rs == 0) {
1036
1037         ($rs, $dg_entry_working) = del_tag($sub_b_val, "$sub_e_val\n", $dg_entry_working);
1038
1039         return $rs if ($rs != 0);
1040
1041     }
1042
1043     ($rs, $rdata) = get_tag($sub_b, $sub_e, $dg_entry_working);
1044
1045     return $rs if ($rs != 0);
1046
1047
1048     my ($sub_entry, $sub_entry_val) = ('', '');
1049
1050     ($rs, $sub_entry) = gen_httpd_sub_group_entry($sub_data);
1051
1052     return $rs if ($rs != 0);
1053
1054     $sub_entry_val = "$sub_entry\n$sub_b$sub_e";
1055
1056     ($rs, $dg_entry_working) = repl_tag($sub_b, $sub_e, $dg_entry_working, $sub_entry_val);
1057
1058     return $rs if ($rs != 0);
1059
1060     #
1061     # Fit all back to top;
1062     #
1063
1064     ($rs, $vh_entry_working) = repl_tag($dg_b_val, $dg_e_val, $vh_entry_working, $dg_entry_working, "sub_add_httpd_cfg_data");
1065
1066     return $rs if ($rs != 0);
1067
1068     ($rs, $working) = repl_tag(
1069                                $vh_b_val,
1070                                $vh_e_val,
1071                                $working,
1072                                $vh_entry_working,
1073                                "sub_add_httpd_cfg_data"
1074                               );
1075
1076     return $rs if ($rs != 0);
1077
1078     #
1079     # Let's store all the stuff;
1080     #
1081
1082     ($rs, $rdata) = get_tag($cfg_b, $cfg_e, $sys);
1083
1084     if ($rs == 0) {
1085
1086         ($rs, $sys) = repl_tag($cfg_b, $cfg_e, $sys, $working, "sub_add_httpd_cfg_data");
1087
1088         return $rs if ($rs != 0);
1089
1090     } elsif ($rs == -1) {
1091
1092         $sys .= $working;
1093
1094     } else {
1095
1096         return $rs;
1097
1098     }
1099
1100     #
1101     # Backup must be made before last savings;
1102     #
1103
1104     ($rs, $rdata) = sys_command("cp -p $sys_cfg $backup_cfg");
1105
1106     return $rs if ($rs != 0);
1107
1108     ($rs, $rdata) = store_file($working_cfg, $working, $main::cfg{'ROOT_USER'}, $main::cfg{'ROOT_GROUP'}, 0644);
1109
1110     return $rs if ($rs != 0);
1111
1112     ($rs, $rdata) = store_file($sys_cfg, $sys, $main::cfg{'ROOT_USER'}, $main::cfg{'ROOT_GROUP'}, 0644);
1113
1114     return $rs if ($rs != 0);
1115
1116     push_el(\@main::el, 'sub_add_httpd_cfg_data()', 'Ending...');
1117
1118     return 0;
1119
1120 }
1121
1122 sub sub_change_httpd_cfg_data {
1123
1124     my ($sub_data) = @_;
1125
1126     my $rs = undef;
1127
1128     push_el(\@main::el, 'sub_change_httpd_cfg_data()', 'Starting...');
1129
1130     if (!defined($sub_data) || $sub_data eq '') {
1131
1132         push_el(\@main::el, 'sub_change_httpd_cfg_data()', 'ERROR: Undefined Input Data...');
1133
1134         return -1;
1135
1136     }
1137
1138     $rs = sub_add_httpd_cfg_data($sub_data);
1139
1140     return $rs if ($rs != 0);
1141
1142     push_el(\@main::el, 'sub_change_httpd_cfg_data()', 'Ending...');
1143
1144     return 0;
1145
1146 }
1147
1148 sub sub_del_httpd_cfg_data {
1149
1150     my ($sub_data) = @_;
1151
1152     my ($rs, $rdata) = (undef, undef);
1153
1154     push_el(\@main::el, 'sub_del_httpd_cfg_data()', 'Starting...');
1155
1156     if (!defined($sub_data) || $sub_data eq '') {
1157
1158         push_el(\@main::el, 'sub_del_httpd_cfg_data()', 'ERROR: Undefined Input Data...');
1159
1160         return -1;
1161
1162     }
1163
1164     #
1165     # Initial data we need;
1166     #
1167
1168     my $sub_pref = @$sub_data[2];
1169
1170     my $dmn_name = @$sub_data[6];
1171
1172     my $sub_name = "$sub_pref.$dmn_name";
1173
1174     my $sub_mount = @$sub_data[3];
1175
1176     my $sub_ip = @$sub_data[26];
1177
1178
1179     my $conf_dir = $main::cfg{'CONF_DIR'};
1180
1181     my $tpl_dir = "$conf_dir/apache/parts";
1182
1183     my $working_dir = "$conf_dir/apache/working";
1184
1185     my $backup_dir = "$conf_dir/apache/backup";
1186
1187
1188     my $sys_cfg = "$main::cfg{'APACHE_SITES_DIR'}/ispcp.conf";
1189
1190     my $timestamp = time;
1191
1192     my $working_cfg = "$working_dir/ispcp.conf";
1193
1194     my $backup_cfg = "$backup_dir/httpd.conf.$timestamp";
1195
1196     #
1197     # Needed templates;
1198     #
1199
1200     my (
1201         $cfg_b,
1202         $cfg_e,
1203         $vh_b,
1204         $vh_e,
1205         $dg_b,
1206         $dg_e,
1207         $sub_b,
1208         $sub_e
1209        ) = ('', '', '', '', '', '', '', '', '');
1210
1211     (
1212      $rs,
1213      $cfg_b,
1214      $cfg_e,
1215      $vh_b,
1216      $vh_e,
1217      $dg_b,
1218      $dg_e,
1219      $sub_b,
1220      $sub_e
1221     ) = get_tpl (
1222                  $tpl_dir,
1223                  'cfg_b.tpl',
1224                  'cfg_e.tpl',
1225                  'vh_b.tpl',
1226                  'vh_e.tpl',
1227                  'dg_b.tpl',
1228                  'dg_e.tpl',
1229                  'sub_b.tpl',
1230                  'sub_e.tpl'
1231                 );
1232
1233     return $rs if ($rs != 0);
1234
1235     #
1236     # Prepareing templates;
1237     #
1238
1239     my (
1240         $vh_b_val,
1241         $vh_entry_val,
1242         $vh_e_val,
1243         $dg_b_val,
1244         $dg_e_val,
1245         $sub_b_val,
1246         $sub_e_val
1247        ) = ('', '', '', '', '', '', '');
1248
1249     my %tag_hash =  (
1250                      '{IP}' => $sub_ip,
1251                      '{DMN_GRP}' => $dmn_name,
1252                      '{SUB_NAME}' => $sub_name
1253                     );
1254
1255     (
1256      $rs,
1257      $vh_b_val,
1258      $vh_e_val,
1259      $dg_b_val,
1260      $dg_e_val,
1261      $sub_b_val,
1262      $sub_e_val
1263     ) = prep_tpl (
1264                   \%tag_hash,
1265                   $vh_b,
1266                   $vh_e,
1267                   $dg_b,
1268                   $dg_e,
1269                   $sub_b,
1270                   $sub_e
1271                  );
1272
1273     return $rs if ($rs != 0);
1274
1275     #
1276     # Let's get some configs;
1277     #
1278
1279     my ($sys, $working) = ('', '');
1280
1281     ($rs, $sys) = get_file($sys_cfg);
1282
1283     return $rs if ($rs != 0);
1284
1285     ($rs, $working) = get_file($working_cfg);
1286
1287     return $rs if ($rs != 0);
1288
1289     #
1290     # May the Force Be With Us... ;)
1291     #
1292
1293     #
1294     # Are $cfg_b, $cfg_e tags exist in the working confing ?
1295     #
1296
1297     ($rs, $rdata) = get_tag($cfg_b, $cfg_e, $working);
1298
1299     return $rs if ($rs != 0);
1300
1301     #
1302     # Is our Virtual Host exist in the wo