root/tags/omega-1.0.0-rc2/engine/ispcp-htuser-mngr

Revision 479, 25.1 kB (checked in by malte, 2 years ago)

--

Line 
1 #!/usr/bin/perl
2
3 # ISPCP ω (OMEGA) - Virtual Hosting Control System | Omega Version
4 # Copyright (c) 2001-2006 by moleSoftware GmbH
5 # http://www.molesoftware.com
6 # Copyright (c) 2006-2007 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
34 use FindBin;
35 use lib "$FindBin::Bin/";
36 require 'ispcp_common_code.pl';
37
38 use strict;
39
40 use warnings;
41
42 $main::htuser_task_id = undef;
43
44 sub htuser_mngr_start_up {
45
46         my ($rs, $rdata) = (undef, undef);
47
48         push_el(\@main::el, 'htuser_mngr_start_up()', 'Starting...');
49
50         # checking for master process;
51
52 #       $rs = check_master();
53 #
54 #       return $rs if ($rs != 0);
55
56         # Let's clear Execution Logs, if any.
57
58         if (-e $main::ispcp_htuser_mngr_el) {
59
60                 $rs = del_file($main::ispcp_htuser_mngr_el);
61
62                 return $rs if ($rs != 0);
63
64         }
65
66         # config check;
67
68         $rs = get_conf();
69
70         return $rs if ($rs != 0);
71
72         # sql check;
73
74         #
75         # getting initial data also must be done here;
76         #
77
78         my $sql = "select * from domain;";
79
80         ($rs, $rdata) = doSQL($sql);
81
82         return $rs if ($rs != 0);
83
84         #
85         # getting task id and domain record id;
86         #
87
88         $main::htuser_task_id = $ARGV[0];
89
90         push_el(\@main::el, 'htuser_mngr_start_up()', 'Ending...');
91
92         return 0;
93
94 }
95
96 sub htuser_mngr_shut_down {
97
98         my $rs = undef;
99
100         push_el(\@main::el, 'htuser_mngr_shut_down()', 'Starting...');
101
102         push_el(\@main::el, 'htuser_mngr_shut_down()', 'Ending...');
103
104         return 0;
105
106 }
107
108 #
109 # AuthUserFile add/remove entries;
110 #
111
112 sub htuser_add_user_data {
113
114         push_el(\@main::el, 'htuser_add_user_data()', 'Starting...');
115
116         my ($dmn_name, $uname, $upass) = @_;
117
118         my $rs = undef;
119
120         my $htaccess_users_file_name = $main::cfg{'HTACCESS_USERS_FILE_NAME'};
121
122         my $apache_www_dir = $main::cfg{'APACHE_WWW_DIR'};
123
124         my $htaccess_users_file = "$apache_www_dir/$dmn_name/$htaccess_users_file_name";
125
126         my $htaccess_users_content = '';
127
128         if (-e $htaccess_users_file) {
129
130                 open(F, '<', $htaccess_users_file);
131
132                 while (!eof(F)) {
133
134                         my $line = readline(F);
135
136                         $htaccess_users_content .= $line if ($line !~ /^$uname:/);
137
138
139                 }
140
141                 close(F);
142
143                 $htaccess_users_content .= "$uname:$upass\n";
144
145         } else {
146
147                 $htaccess_users_content = "$uname:$upass\n";
148
149         }
150
151         $rs = store_file($htaccess_users_file, $htaccess_users_content, 'root', 'root', 0644);
152
153         return $rs if ($rs != 0);
154
155         push_el(\@main::el, 'htuser_add_user_data()', 'Ending...');
156
157         return 0;
158
159 }
160
161 sub htuser_del_user_data {
162
163         push_el(\@main::el, 'htuser_del_user_data()', 'Starting...');
164
165         my ($dmn_name, $uname) = @_;
166
167         my $rs = undef;
168
169         my $htaccess_users_file_name = $main::cfg{'HTACCESS_USERS_FILE_NAME'};
170
171         my $apache_www_dir = $main::cfg{'APACHE_WWW_DIR'};
172
173         my $htaccess_users_file = "$apache_www_dir/$dmn_name/$htaccess_users_file_name";
174
175         my $htaccess_users_content = '';
176
177         if (-e $htaccess_users_file) {
178
179                 open(F, '<', $htaccess_users_file);
180
181                 while (!eof(F)) {
182
183                         my $line = readline(F);
184
185                         $htaccess_users_content .= $line if ($line !~ /^$uname:/);
186
187
188                 }
189
190                 close(F);
191
192                 $rs = store_file(
193                                                  $htaccess_users_file,
194                                                  $htaccess_users_content,
195                                                  'root',
196                                                  'root',
197                                                  0644
198                                                 );
199
200                 return $rs if ($rs != 0);
201
202         }
203
204         push_el(\@main::el, 'htuser_del_user_data()', 'Ending...');
205
206         return 0;
207
208 }
209
210 #
211 # AuthGroupFile add/remove entries;
212 #
213
214 sub htuser_add_group_line_data {
215
216         push_el(\@main::el, 'htuser_add_group_line_data()', 'Starting...');
217
218         my ($line, $gname, $uname) = @_;
219
220         if ($line !~ / $uname/) {
221
222                 $line =~ s/$gname://;
223
224                 chop($line);
225
226                 $line = "$gname:$line $uname\n";
227
228         }
229
230         push_el(\@main::el, 'htuser_add_group_line_data()', 'Ending...');
231
232         return $line;
233 }
234
235 sub htuser_add_group_data {
236
237         push_el(\@main::el, 'htuser_add_group_data()', 'Starting...');
238
239         my ($dmn_name, $gname, $uname) = @_;
240
241         my $rs = undef;
242
243         my $htaccess_groups_file_name = $main::cfg{'HTACCESS_GROUPS_FILE_NAME'};
244
245         my $apache_www_dir = $main::cfg{'APACHE_WWW_DIR'};
246
247         my $htaccess_groups_file = "$apache_www_dir/$dmn_name/$htaccess_groups_file_name";
248
249         my $htaccess_groups_content = '';
250
251
252         if (-e $htaccess_groups_file) {
253
254                 my $gf_edit_flag = 0;
255
256                 open(F, '<', $htaccess_groups_file);
257
258                 while (!eof(F)) {
259
260                         my $line = readline(F);
261
262                         if ($line !~ /^$gname:/) {
263
264                                 $htaccess_groups_content .= $line;
265
266                         } else {
267
268                                 $htaccess_groups_content .= htuser_add_group_line_data($line, $gname, $uname);
269
270                                 $gf_edit_flag++;
271
272                         }
273
274                 }
275
276                 $htaccess_groups_content .= "$gname: $uname\n" if ($gf_edit_flag == 0);
277
278                 close(F);
279
280         } else {
281
282                 $htaccess_groups_content = "$gname: $uname\n";
283
284         }
285
286         $rs = store_file($htaccess_groups_file, $htaccess_groups_content, 'root', 'root', 0644);
287
288         return $rs if ($rs != 0);
289
290         push_el(\@main::el, 'htuser_add_group_data()', 'Ending...');
291
292         return 0;
293
294 }
295
296 sub htuser_del_group_line_data {
297
298         push_el(\@main::el, 'htuser_del_group_line_data()', 'Starting...');
299
300         my ($line, $gname, $uname) = @_;
301
302         if ($line =~ / $uname/) {
303
304                 $line =~ s/$gname://;
305
306                 chop($line);
307
308                 $line =~ s/ $uname//;
309
310                 $line = "$gname:$line\n" if (length($line) > 0);
311
312         }
313
314         push_el(\@main::el, 'htuser_del_group_line_data()', 'Ending...');
315
316         return $line;
317 }
318
319 sub htuser_del_group_data {
320
321         push_el(\@main::el, 'htuser_del_group_data()', 'Starting...');
322
323         my ($dmn_name, $gname, $uname) = @_;
324
325         my $rs = undef;
326
327         my $htaccess_groups_file_name = $main::cfg{'HTACCESS_GROUPS_FILE_NAME'};
328
329         my $apache_www_dir = $main::cfg{'APACHE_WWW_DIR'};
330
331         my $htaccess_groups_file = "$apache_www_dir/$dmn_name/$htaccess_groups_file_name";
332
333         my $htaccess_groups_content = '';
334
335         if (-e $htaccess_groups_file) {
336
337                 open(F, '<', $htaccess_groups_file);
338
339                 while (!eof(F)) {
340
341                         my $line = readline(F);
342
343                         if ($line !~ /^$gname:/) {
344
345                                 $htaccess_groups_content .= $line;
346
347                         } else {
348
349                                 $htaccess_groups_content .= htuser_del_group_line_data($line, $gname, $uname);
350
351                         }
352
353                 }
354
355                 close(F);
356
357                 $rs = store_file($htaccess_groups_file, $htaccess_groups_content, 'root', 'root', 0644);
358
359                 return $rs if ($rs != 0);
360
361         }
362
363         push_el(\@main::el, 'htuser_del_group_data()', 'Ending...');
364
365         return 0;
366
367 }
368
369 sub htuser_del_user_system_data {
370
371         my ($htuser_data) = @_;
372
373         my ($rs, $rdata, $sql) = (undef, undef, undef);
374
375         push_el(\@main::el, 'htuser_del_user_system_data()', 'Starting...');
376
377         if (!defined($htuser_data) || $htuser_data eq '') {
378
379                 push_el(\@main::el, 'htuser_del_user_system_data()', 'ERROR: Undefined Input Data...');
380
381                 return -1;
382
383         }
384
385         my ($dmn_id, $dmn_name, $user_ids, $auth_type, $auth_name, $path, $status, $domain_uid, $domain_gid) =
386
387                 (@$htuser_data[0],
388                  @$htuser_data[1],
389                  @$htuser_data[2],
390                  @$htuser_data[3],
391                  @$htuser_data[4],
392                  @$htuser_data[5],
393                  @$htuser_data[6],
394                  @$htuser_data[7],
395                  @$htuser_data[8]);
396
397         my $apache_www_dir = $main::cfg{'APACHE_WWW_DIR'};
398
399         my $htaccess_users_file_name = $main::cfg{'HTACCESS_USERS_FILE_NAME'};
400
401         my $htaccess_users_file = "$apache_www_dir/$dmn_name/$htaccess_users_file_name";
402
403         my $htaccess_file = "$apache_www_dir/$dmn_name/$path/.htaccess";
404
405         foreach (split(',', $user_ids)) {
406
407                 my $id = $_;
408
409                 $sql = "select uname from htaccess_users where id = $id";
410
411                 ($rs, $rdata) = doSQL($sql);
412
413                 return $rs if ($rs != 0);
414
415                 $rdata = @$rdata[0];
416
417                 my ($uname) = (@$rdata[0]);
418
419                 $rs = htuser_del_user_data($dmn_name, $uname);
420
421                 return $rs if ($rs != 0);
422
423         }
424        
425         foreach (split(',', $dmn_id)) {
426
427                 my $id = $_;
428
429                 $sql = "select count(dmn_id) from htaccess where dmn_id = $id";
430
431                 ($rs, $rdata) = doSQL($sql);
432
433                 return $rs if ($rs != 0);
434
435                 $rdata = @$rdata[0];
436
437                 my ($rcounter) = (@$rdata[0]);
438
439                 if($rcounter eq '1') {
440
441                         if (-e $htaccess_file) {
442
443                                 del_file($htaccess_file);
444
445                         }
446
447                 }
448
449         }
450
451
452         return $rs if ($rs != 0);
453
454         push_el(\@main::el, 'htuser_del_user_system_data()', 'Ending...');
455
456         return 0;
457
458 }
459
460 sub htuser_add_user_system_data {
461
462         my ($htuser_data) = @_;
463
464         my ($rs, $rdata, $sql) = (undef, undef, undef);
465
466         push_el(\@main::el, 'htuser_add_user_system_data()', 'Starting...');
467
468         if (!defined($htuser_data) || $htuser_data eq '') {
469
470                 push_el(\@main::el, 'htuser_add_user_system_data()', 'ERROR: Undefined Input Data...');
471
472                 return -1;
473
474         }
475
476         my ($dmn_id, $dmn_name, $user_ids, $auth_type, $auth_name, $path, $status, $domain_uid, $domain_gid) =
477
478                 (@$htuser_data[0],
479                  @$htuser_data[1],
480                  @$htuser_data[2],
481                  @$htuser_data[3],
482                  @$htuser_data[4],
483                  @$htuser_data[5],
484                  @$htuser_data[6],
485                  @$htuser_data[7],
486                  @$htuser_data[8]);
487
488         my $apache_www_dir = $main::cfg{'APACHE_WWW_DIR'};
489
490         my $htaccess_users_file_name = $main::cfg{'HTACCESS_USERS_FILE_NAME'};
491
492         my $htaccess_users_file = "$apache_www_dir/$dmn_name/$htaccess_users_file_name";
493
494         my $htaccess_file = "$apache_www_dir/$dmn_name/$path/.htaccess";
495
496         my $unames = '';
497
498         foreach (split(',', $user_ids)) {
499
500                 my $id = $_;
501
502                 $sql = "select uname, upass from htaccess_users where id = $id";
503
504                 ($rs, $rdata) = doSQL($sql);
505
506                 return $rs if ($rs != 0);
507
508                 $rdata = @$rdata[0];
509
510                 my ($uname, $upass) = (@$rdata[0], @$rdata[1]);
511
512                 $rs = htuser_add_user_data($dmn_name, $uname, $upass);
513
514                 return $rs if ($rs != 0);
515
516                 $unames .= "$uname ";
517
518         }
519
520         my $htaccess_content =
521         set_zone( (get_file($htaccess_file))[1], "
522         AuthType $auth_type
523         AuthName \"$auth_name\"
524         AuthUserFile $htaccess_users_file
525         Require user $unames
526         ", "PROTECTION", "#" );
527
528         $rs = store_file($htaccess_file, $htaccess_content, $domain_uid, $domain_gid, 0644);
529
530         return $rs if ($rs != 0);
531
532         push_el(\@main::el, 'htuser_add_user_system_data()', 'Ending...');
533
534         return 0;
535
536 }
537
538 sub htuser_add_user_to_group {
539
540         my ($dmn_id, $dmn_name, $ugroup, $uid) = @_;
541
542         my ($rs, $rdata) = (undef, undef);
543
544         push_el(\@main::el, 'htuser_add_user_to_group_data()', 'Starting...');
545
546         my $sql = "select uname,upass from htaccess_users where id = $uid and dmn_id = $dmn_id";
547
548         ($rs, $rdata) = doSQL($sql);
549
550         return $rs if ($rs != 0);
551
552         if (scalar(@$rdata) == 1) {
553
554                 my $entry = @$rdata[0];
555
556                 my ($uname, $upass) = (@$entry[0], @$entry[1]);
557
558                 $rs = htuser_add_user_data($dmn_name, $uname, $upass);
559
560                 return $rs if ($rs != 0);
561
562                 $rs = htuser_add_group_data($dmn_name, $ugroup, $uname);
563
564                 return $rs if ($rs != 0);
565
566         }
567
568         push_el(\@main::el, 'htuser_add_user_to_group_data()', 'Ending...');
569
570         return 0;
571
572 }
573
574 sub htuser_add_group_system_data {
575
576         my ($htuser_data) = @_;
577
578         my ($rs, $rdata, $sql) = (undef, undef, undef);
579
580         push_el(\@main::el, 'htuser_add_group_system_data()', 'Starting...');
581
582         if (!defined($htuser_data) || $htuser_data eq '') {
583
584                 push_el(
585                                 \@main::el,
586                                 'htuser_add_group_system_data()', 'ERROR: Undefined Input Data...'
587                            );
588
589                 return -1;
590
591         }
592
593         my ($dmn_id,
594                 $dmn_name,
595                 $group_ids,
596                 $auth_type,
597                 $auth_name,
598                 $path,
599                 $status,
600                 $domain_uid,
601                 $domain_gid) = (@$htuser_data[0],
602                                                 @$htuser_data[1],
603                                                 @$htuser_data[2],
604                                                 @$htuser_data[3],
605                                                 @$htuser_data[4],
606                                                 @$htuser_data[5],
607                                                 @$htuser_data[6],
608                                                 @$htuser_data[7],
609                                                 @$htuser_data[8]);
610
611         my $ugroups = '';
612
613         #
614         # add all user data for this group;
615         #
616
617         foreach (split(',', $group_ids)) {
618
619                 my $group_id = $_;
620
621                 $sql = <<SQL_QUERY;
622
623                         select
624
625                                 ugroup, members
626
627                         from
628
629                                 htaccess_groups
630
631                         where
632
633                                 id = $group_id
634
635                         and
636
637                                 dmn_id = $dmn_id
638 SQL_QUERY
639
640                 ($rs, $rdata) = doSQL($sql);
641
642                 $rdata = @$rdata[0];
643
644                 my ($ugroup, $members) = (@$rdata[0], @$rdata[1]);
645
646                 foreach (split(',', $members)) {
647
648                         my $user_id = $_;
649
650                         $rs = htuser_add_user_to_group($dmn_id, $dmn_name, $ugroup, $user_id);
651
652                         return $rs if ($rs != 0);
653
654                 }
655
656                 $ugroups .= "$ugroup ";
657
658         }
659
660         my $htaccess_users_file_name = $main::cfg{'HTACCESS_USERS_FILE_NAME'};
661
662         my $htaccess_groups_file_name = $main::cfg{'HTACCESS_GROUPS_FILE_NAME'};
663
664         my $apache_www_dir = $main::cfg{'APACHE_WWW_DIR'};
665
666         my $htaccess_users_file = "$apache_www_dir/$dmn_name/$htaccess_users_file_name";
667
668         my $htaccess_groups_file = "$apache_www_dir/$dmn_name/$htaccess_groups_file_name";
669
670         my $htaccess_file = "$apache_www_dir/$dmn_name/$path/.htaccess";
671
672
673         my $htaccess_content =
674         set_zone( (get_file($htaccess_file))[1], "
675         AuthType $auth_type
676         AuthName \"$auth_name\"
677         AuthUserFile $htaccess_users_file
678         AuthGroupFile $htaccess_groups_file
679         Require group $ugroups
680         ", "PROTECTION", "#" );
681
682         $rs = store_file($htaccess_file, $htaccess_content, $domain_uid, $domain_gid, 0644);
683
684         return $rs if ($rs != 0);
685
686         push_el(\@main::el, 'htuser_add_group_system_data()', 'Ending...');
687
688         return 0;
689
690 }
691
692 sub htuser_del_group_system_data {
693
694         my ($htuser_data) = @_;
695
696         my ($rs, $rdata, $sql) = (undef, undef, undef);
697
698         push_el(\@main::el, 'htuser_del_group_system_data()', 'Starting...');
699
700         if (!defined($htuser_data) || $htuser_data eq '') {
701
702                 push_el(\@main::el, 'htuser_del_group_system_data()', 'ERROR: Undefined Input Data...');
703
704                 return -1;
705
706         }
707
708         my ($dmn_id, $dmn_name, $group_ids, $auth_type, $auth_name, $path, $status, $domain_uid, $domain_gid) =
709
710                 (@$htuser_data[0],
711                  @$htuser_data[1],
712                  @$htuser_data[2],
713                  @$htuser_data[3],
714                  @$htuser_data[4],
715                  @$htuser_data[5],
716                  @$htuser_data[6],
717                  @$htuser_data[7],
718                  @$htuser_data[8]);
719
720         my $htaccess_users_file_name = $main::cfg{'HTACCESS_USERS_FILE_NAME'};
721
722         my $htaccess_groups_file_name = $main::cfg{'HTACCESS_GROUPS_FILE_NAME'};
723
724         my $apache_www_dir = $main::cfg{'APACHE_WWW_DIR'};
725
726         my $htaccess_users_file = "$apache_www_dir/$dmn_name/$htaccess_users_file_name";
727
728         my $htaccess_groups_file = "$apache_www_dir/$dmn_name/$htaccess_groups_file_name";
729
730         my $htaccess_file = "$apache_www_dir/$dmn_name/$path/.htaccess";
731
732         foreach (split(',', $group_ids)) {
733
734                 my $group_id = $_;
735
736                 $sql = "select ugroup, members from htaccess_groups where id = $group_id and dmn_id = $dmn_id";
737
738                 ($rs, $rdata) = doSQL($sql);
739
740                 $rdata = @$rdata[0];
741
742                 my ($gname, $members) = (@$rdata[0], @$rdata[1]);
743
744                 foreach (split(',', $members)) {
745
746                         my $id = $_;
747
748                         $sql = "select uname from htaccess_users where id = $id";
749
750                         ($rs, $rdata) = doSQL($sql);
751
752                         return $rs if ($rs != 0);
753
754                         $rdata = @$rdata[0];
755
756                         my ($uname) = (@$rdata[0]);
757
758                         $rs = htuser_del_group_data($dmn_name, $gname, $uname);
759
760                         return $rs if ($rs != 0);
761
762                 }
763
764
765         }
766
767         return $rs if ($rs != 0);
768
769         push_el(\@main::el, 'htuser_del_group_system_data()', 'Ending...');
770
771         return 0;
772
773 }
774
775 %main::cleared = ();
776
777 sub htuser_mngr_engine {
778
779         my ($rs, $rows, $rdata) = (undef, undef, undef);
780
781         push_el(\@main::el, 'htuser_mngr_engine()', 'Starting...');
782
783         my $sql;
784
785         #
786         # user management;
787         #
788
789         $sql = <<SQL_QUERY;
790
791                 select
792
793                         t1.dmn_id,
794                         t2.domain_name,
795                         t1.user_id,
796                         t1.auth_type,
797                         t1.auth_name,
798                         t1.path,
799                         t1.status,
800                         t2.domain_uid,
801                         t2.domain_gid
802
803                 from
804
805                         htaccess as t1,
806                         domain as t2
807
808                 where
809
810                         t1.id = $main::htuser_task_id
811
812                 and
813
814                         t1.user_id != 0
815
816                 and
817
818                         t1.dmn_id = t2.domain_id
819
820 SQL_QUERY
821
822         ($rs, $rows) = doSQL($sql);
823
824         return $rs if ($rs != 0);
825
826         if (scalar(@$rows) == 0) {
827
828                 #
829                 # protect with group;
830                 #
831
832                 $sql = <<SQL_QUERY;
833
834                 select
835
836                         t1.dmn_id,
837                         t2.domain_name,
838                         t1.group_id,
839                         t1.auth_type,
840                         t1.auth_name,
841                         t1.path,
842                         t1.status,
843                         t2.domain_uid,
844                         t2.domain_gid
845
846                 from
847
848                         htaccess as t1,
849                         domain as t2
850
851                 where
852
853                         t1.id = $main::htuser_task_id
854
855                 and
856
857                         t1.group_id != 0
858
859                 and
860
861                         t1.dmn_id = t2.domain_id
862
863 SQL_QUERY
864
865                 ($rs, $rows) = doSQL($sql);
866
867                 return $rs if ($rs != 0);
868
869                 if (scalar(@$rows) != 0) {
870
871                         my $entry = @$rows[0];
872
873                         my ($htuser_status,
874                                 $htuser_id,
875                                 $dmn_name,
876                                 $path,
877                                 $dmn_id) = (@$entry[6],
878                                                    $main::htuser_task_id,
879                                                    @$entry[1],
880                                                    @$entry[5],
881                                                    @$entry[0]);
882
883                         my $htaccess_group_cf = "/tmp/htaccess-group-cf-$dmn_name";
884
885                         if (! -e $htaccess_group_cf) {
886
887                                 print "group removal\n";
888
889                                 $main::cleared{$dmn_name} = 'yes';
890
891                                 sys_command_rs("touch $htaccess_group_cf");
892
893                                 my $htaccess_users_file_name =
894
895                                 $main::cfg{'HTACCESS_USERS_FILE_NAME'};
896
897                                 my $htaccess_groups_file_name =
898
899                                 $main::cfg{'HTACCESS_GROUPS_FILE_NAME'};
900
901                                 my $apache_www_dir =
902
903                                 $main::cfg{'APACHE_WWW_DIR'};
904
905                                 my $htaccess_users_file =
906
907                                 "$apache_www_dir/$dmn_name/$htaccess_users_file_name";
908
909                                 my $htaccess_groups_file =
910
911                                 "$apache_www_dir/$dmn_name/$htaccess_groups_file_name";
912
913                                 my $htaccess_file =
914
915                                 "$apache_www_dir/$dmn_name/$path/.htaccess";
916
917                         }
918
919                         if ($htuser_status eq 'toadd' || $htuser_status eq 'change') {
920
921                                 $rs = htuser_add_group_system_data($entry);
922
923                                 if ($rs == 0) {
924
925                                         $sql = "update htaccess set status='ok' where id = $htuser_id";
926
927                                 } else {
928
929                                         my ($sub_name, $msg) = split(/$main::el_sep/, pop_el(\@main::el));
930
931                                         $msg =~ s/\'/\\\'/g;
932
933                                         $sql = "update htaccess set status='$sub_name | $msg' where id = $htuser_id;";
934
935                                 }
936
937                                 ($rs, $rdata) = doSQL($sql);
938
939                                 return $rs if ($rs != 0);
940
941                         } elsif ($htuser_status eq 'delete') {
942
943                                 $rs = htuser_del_group_system_data($entry);
944
945                                 if ($rs == 0) {
946
947                                         $sql = "delete from htaccess where id = $htuser_id";
948
949                                 } else {
950
951                                         my ($sub_name, $msg) = split(/$main::el_sep/, pop_el(\@main::el));
952
953                                         $msg =~ s/\'/\\\'/g;
954
955                                         $sql = "update htaccess set status='$sub_name | $msg' where id = $htuser_id;";
956
957                                 }
958
959                                 ($rs, $rdata) = doSQL($sql);
960
961                                 return $rs if ($rs != 0);
962
963                         }
964
965                 }
966
967         } else {
968
969                 #
970                 # continue with single user;
971                 #
972
973                 my $entry = @$rows[0];
974
975                 my ($htuser_status, $htuser_id, $dmn_name, $path) =
976
977                         (@$entry[6], $main::htuser_task_id, @$entry[1], @$entry[5]);
978
979                 my $htaccess_user_cf = "/tmp/htaccess-user-cf-$dmn_name";
980
981                 my $htaccess_group_cf = "/tmp/htaccess-group-cf-$dmn_name";
982
983                 if ($htuser_status eq 'toadd' || $htuser_status eq 'change') {
984
985                         #print "user removal\n";
986
987                         if (! -e $htaccess_user_cf &&
988                                 ! -e $htaccess_group_cf) {
989
990                                 $main::cleared{$dmn_name} = 'yes';
991
992                                 sys_command_rs("touch $htaccess_user_cf");
993
994                                 my $htaccess_users_file_name =
995
996                                 $main::cfg{'HTACCESS_USERS_FILE_NAME'};
997
998                                 my $htaccess_groups_file_name =
999
1000                                 $main::cfg{'HTACCESS_GROUPS_FILE_NAME'};
1001
1002                                 my $apache_www_dir =
1003
1004                                 $main::cfg{'APACHE_WWW_DIR'};
1005
1006                                 my $htaccess_users_file =
1007
1008                                 "$apache_www_dir/$dmn_name/$htaccess_users_file_name";
1009
1010                                 my $htaccess_groups_file =
1011
1012                                 "$apache_www_dir/$dmn_name/$htaccess_groups_file_name";
1013
1014                                 my $htaccess_file =
1015
1016                                 "$apache_www_dir/$dmn_name/$path/.htaccess";
1017
1018                         }
1019
1020                         $rs = htuser_add_user_system_data($entry);
1021
1022                         if ($rs == 0) {
1023
1024                                 $sql = "update htaccess set status='ok' where id = $htuser_id";
1025
1026                         } else {
1027
1028                                 my ($sub_name, $msg) = split(/$main::el_sep/, pop_el(\@main::el));
1029
1030                                 $msg =~ s/\'/\\\'/g;
1031
1032                                 $sql = "update htaccess set status='$sub_name | $msg' where id = $htuser_id;";
1033
1034                         }
1035
1036                         ($rs, $rdata) = doSQL($sql);
1037
1038                         return $rs if ($rs != 0);
1039
1040                 } elsif ($htuser_status eq 'delete') {
1041
1042                         $rs = htuser_del_user_system_data($entry);
1043
1044                         if ($rs == 0) {
1045
1046                                 $sql = "delete from htaccess where id = $htuser_id";
1047
1048                         } else {
1049
1050                                 my ($sub_name, $msg) = split(/$main::el_sep/, pop_el(\@main::el));
1051
1052                                 $msg =~ s/\'/\\\'/g;
1053
1054                                 $sql = "update htaccess set status='$sub_name | $msg' where id = $htuser_id;";
1055
1056                         }
1057
1058                         ($rs, $rdata) = doSQL($sql);
1059
1060                         return $rs if ($rs != 0);
1061
1062                 }
1063
1064         }
1065
1066 # see if user or group data has changed (password - change ?)
1067 # first the users
1068 #
1069                         my $sql_id = "select t1.dmn_id,t2.domain_name  from htaccess as t1,domain as t2 where t1.id = $main::htuser_task_id and t1.dmn_id = t2.domain_id";
1070
1071                          ($rs, $rdata) = doSQL($sql_id);
1072
1073                         my $htaccess_data = @$rdata[0];
1074
1075                         $sql = "select uname, upass, dmn_id, status, id from htaccess_users where dmn_id = '".@$htaccess_data[0]."' and status != 'ok' ";
1076
1077                                 ($rs, $rows) = doSQL($sql);
1078
1079                                         if (scalar(@$rows) != 0) {
1080
1081                                         foreach (@$rows) {
1082
1083                                                 push_el(\@main::el, 'htuser-usermanagement()', 'Starting...');
1084
1085                                                 my $query_user = $_;
1086
1087                                                 my ($htpasswd_name,
1088                                                         $htpasswd_pass,
1089                                                         $htpasswd_dnm,
1090                                                         $htpasswd_status) = (@$query_user[0],
1091                                                                                                  @$query_user[1],
1092                                                                                                  @$htaccess_data[1],
1093                                                                                                  @$query_user[3]);
1094
1095                                                 push_el(\@main::el, 'htuser-usermanagement()', 'TASK : '.$htpasswd_status.' user : '.$htpasswd_name);
1096
1097                                                 if ($htpasswd_status eq 'change') {
1098
1099                                                                 push_el(\@main::el, 'htuser-usermanagement()', 'Change User ID : '.@$query_user[0].'...');
1100
1101                                                                 $rs = htuser_del_user_data($htpasswd_dnm, $htpasswd_name);
1102             &nb