Модераторы: korob2001, ginnie

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Apache::Admin::Config, не работает 
:(
    Опции темы
sir_nuf_nuf
Дата 13.9.2008, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 920
Регистрация: 6.1.2008

Репутация: 14
Всего: 31



может деректива называется не так как ты ожидаешь ? 
ну не пиши 403 в названии - получи директивы так:
Код

$vh->directive('ErrorDocument');


а потом Data::Dumper посмотри че у  них внутри и как добраться до числа 403.
Код

use Data::Dumper;
print Dumper([$vh->directive('ErrorDocument')]);



--------------------
user posted image
user posted image
PM MAIL Jabber   Вверх
gcc
Дата 13.9.2008, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



не много сделал, времени не хватило делать, не доделал - доделаю, на страницу сразу может вывести очень много информации, правильно ли делать если шаблон в хєш и вывести его отдельно от кода логики?

тот модуль apache::admin::config с ООП не понял как правильно и лучше сделать решил просто отдельно...  (реально тот модуль переделать чтобы html прикрутить или это не нужно?)



 
Код

 use Apache::Admin::Config;
   my $conf = new Apache::Admin::Config 'hhh.conf', 
      or die $Apache::Admin::Config::ERROR;
     my $vhost;
     my $templ_value;
       my ($serveradmin, $serveralis, $costomlog, $errorlog, @drtvs4 );
     foreach my $vh ($conf->section('VirtualHost'))    {
           if($vh->directive('ServerName')->value eq 'hhh.org')   {
        
           $serveradmin=$vh->directive('ServerAdmin');
           $serveralis=$vh->directive('ServerAlias');
           $costomlog=$vh->directive('CustomLog');
           $errorlog=$vh->directive('ErrorLog');
           @drtvs4 = $vh->directive('ErrorDocument');

           }
           } 
           
       
         my $template = HTML::Template->new(filename => $dir.'tempele-apache22-aid.html' ,die_on_bad_params => '0');
         
             my $url = $query ->url(-relative => 1);
             
             $template->param(URL => $url);
             #$aid
             $template->param(AID => $aid);
         
            # $url = $query ->url(-relative => 1);
             
            # $template->param(URL => $url);
             #$aid
            # $template->param(AID => $aid);
            ##########################################################
                   
                   
                     if (defined($saa)) {
                            if ($serveradmin) {   
                            use Data::Validate::Email qw(is_email);
                                     if ( ((length($saa)) && (70 > length($saa)) && ( 5 < length($saa))) && (is_email($saa)) ) {
                                          $vh->directive('ServerAdmin')->set_value($saa);
                                          my  $okssa="ok add ServerAdmin";
                                         } else { %templ_value = ('errorsa' => 1);} 
                            } else {  $vh->add_directive(ServerAdmin => $saa) }
                      }
                      
                          if ($serveradmin) {     
                             #my ($serveradmin);     
                            # my $serveradmin=$vh->directive('ServerAdmin');
                        %templ_value = ('serveradmin' => $serveradmin);   
                      # %teplt = ('serveradmin' => $vh->directive('ServerAdmin') );    
                      
                      #%teplt = ('serveradmin2' => $vh->directive('ServerAdmin'));
#my $teplt;                         
                       #print $teplt{'serveradmin2'}; 
                       #  print $serveradmin;
                       } else { %templ_value = ('noserverserveradmin' => '1');
                       }
                       
             $template->param(NOSERVERADMIN => $templ_value{'noserverserveradmin'});
             $template->param(SERVERADMIN => $templ_value{'serveradmin'});
             $template->param(ERRORSA => $templ_value{'errorsa'}); 

                          
                       my $addsa=$query->param("addsa");
                       if (defined($addsa))  {
                       use Data::Validate::Domain qw(is_domain);
                       
                       if (((70 > length($addsa)) && ( 4 < length($addsa))) && (is_domain($addsa))) {                      
 
                            if ( $serveralis) {                         
                            #my $serveralis=$vh->directive('ServerAlias');
                            my @serv_array = split(/ /,$serveralis );
                            my $n=scalar(@serv_array);
                            my ($match, $found, $item);
                              foreach $item (@serv_array){
                              if ($item eq $addsa) {$match=$item; $found=1; last;}
                              }
                            
                            if (!$found) { 
                               $serv_array[$n]=$addsa;
                               my $addsa2 = join(' ',@serv_array);
                               $vh->directive('ServerAlias')->set_value($addsa2);
                            } else {%templ_value = ('addsa_found' => '1'); }
                            }
                           }  else {%templ_value = ('addsa_noval' => '1'); }
                       } 
                       
                       
                       
                       my $sadelete=$query->param("sadelete");
                       
                       if (defined($sadelete)) {
                       
                       if ($serveralis) {  
                            my @serv_array;                  
                           # my $serveralis=$vh->directive('ServerAlias');
                            @serv_array = split(/ /,$serveralis );
                            my $n=scalar(@serv_array);
                            
                           # if ($n > $sadelete) {
                           # my $sadelete_ar=1;
                           #  } else {
                           #   exit;
                           
                              delete(@serv_array[$sadelete]);
                            
                              my $addsa2 = join(' ', @serv_array);
                              
                              $vh->directive('ServerAlias')->set_value($addsa2);
                            
                       }
                       }

            my $allsa=$query->param("allsa");
                      if (defined($allsa)) {
                         my $satooall=$query->param("satooall");                       
                          if ($serveralis) {                         
                              $satooall=$query->param("satooall"); 
                              
                            my @serv_array;  
                            #my $serveralis=$vh->directive('ServerAlias');
                            @serv_array = split(/ /,$serveralis );
                            my $n=scalar(@serv_array);    
                            
                            my $ss="*.hhh.org";                  
                             
                              if ((defined($satooall)) && ($satooall eq "1")) {
                              
                             
                                   if (($n eq '2') && ($serv_array[1] eq $ss)) {%templ_value = ('satooall_in_use' => '1'); }
                                   else {
                                   my $allsa2="$nameserver2 $ss";
                                   
                                   $vh->directive('ServerAlias')->set_value($allsa2);
                                   #my $satooal_added="1"; 
                                   }
                              
 
                              } elsif ((defined($satooall)) && ($satooall eq "2")) {
                              
                              
                                   if (($n > 0) && ($serv_array[1] ne $ss)) { %templ_value = ('nosatooall_in_use' => '1') ; }
                                   else {
                                   my $allsa2=$nameserver2;
                                   
                                   $vh->directive('ServerAlias')->set_value($allsa2);
                                   #my $one_satooal_added="1";
                                   }
                                                     
                              } else { %templ_value = ('no_satooall_param' => '1'); }
                           }
                       } 

                         
                         my (@serv_array, @array_for_template) ;
                       
                        if ( $serveralis) {                         
                        #my $serveralis=$vh->directive('ServerAlias');
                                               
                                                              
                            @serv_array = split(/ /,$serveralis );
                           
                          my $n=scalar(@serv_array);
                           
                           my  $ss="*hhh.org";  
                           
                  shift (@serv_array);
                 $ns=1;
                  @array_for_template;
                 @array_for_template = map +{ savalue => $_, savalue2 => $aid, savalue3 => $ns++ }, @serv_array;


                                
                                if (($n eq 2) && ($serv_array[1] eq $ss)) { %templ_value = ('temlp_serveralis_all' => '1'); } 
                                else {  %templ_value = ('notemlp_serveralis_all' => '1'); } 

                         } else {  %templ_value = ('noserveralis' => '1');}
                         
                         
                         # if ($templ_value{'notemlp_serveralis_all'}) {exit;}     
                                          



             $template->param(TEMP_SERVERALIAS_ALL => $templ_value{'temlp_serveralis_all'}); #:
             $template->param(NOTEMP_SERVERALIAS_ALL => $templ_value{'notemlp_serveralis_all'});
             
             if ($templ_value{'addsa_found'}) { $template->param(ADDSA_FOUND => 'ServerAlias found, not added')}
             
             $template->param(ADDSA_NOVAL => $templ_value{'addsa_noval'});
             
             $template->param(SATOOALL_IN_USE => $templ_value{'satooall_in_use'});
             $template->param(NOSATOOALL_IN_USE => $templ_value{'nosatooall_in_use'});
             $template->param(NO_SATOOALL_IN_USE => $templ_value{'no_satooall_param'});
             
             #%templ_value = ('notemlp_serveralis_all' => '1')
             

             
             if ($templ_value{'notemlp_serveralis_all'}) {  $template->param(SA8 => \@array_for_template); }
      my $oneoffcl=$query->param("oneoffcl");
                        
                        if (defined($oneoffcl)) {
                        my $clvalue=$query->param("clvalue");
                        
                             if ($clvalue eq '1') {
                        
                                    if ($costomlog) { %templ_value = ('customlog_in_use' => '1'); }
                                    else { 
                                    my $dircl="/home/$qhost/log/httpd-access.log combined";
                                    $vh->add_directive(CustomLog=>$dircl);
                                    }
                        
                             } elsif ($clvalue eq '2') {
                                    if ($costomlog) { 
                                    $vh->directive('CustomLog')->delete;                                    
                                    }
                                    else { %templ_value = ('no_customlog_in_use' => '1'); }
                                    
                        
                             } else { %templ_value = ('no_clvalue' => '1'); }
                        }
                                            
                     
                        my $type_cl=$query->param("type_cl");
                        if (defined($type_cl)) {
                        
                        my $typecls=$query->param("typecls");
                                                
                              if ($costomlog) { 
                              
                              my $customl_type=$costomlog;
                              my ($file, $typelog) = split(/ /,$customl_type );
                              
                                     if (($typecls eq '0') && ($typelog eq 'combined')) {
                                                                          
                                     %templ_value = ('typecls_in_use_combined' => '1') ;
                              
                                     } elsif (($typecls eq '0') && ($typelog ne 'combined')) {
                                     my $typecls_value="$file combined";
                                     
                                     $vh->directive('CustomLog')->set_value($typecls_value);
                                     
                                     } elsif (($typecls eq '1') && ($typelog eq 'common')) {
                                     
                                      %templ_value = ('typecls_in_use_common' => '1');
                                     
                                     } elsif (($typecls eq '1') && ($typelog ne 'common')) {
                                     $typecls_value="$file common";
                                     
                                     $vh->directive('CustomLog')->set_value($typecls_value);
                                     
                                     } else { %templ_value = ('no_typecls' => '1');}
                      
                              } else { %templ_value = ('no_cl' => '1'); }
                        }
                        
      if ($costomlog) { 
                        
             %templ_value = ('customlogtrue' => '1');
             
             #$template->param(CLTRUE => $templ_value{'customlogtrue'} );
             
             #my $customlog=$vh->directive('CustomLog');
                        my ($file, $typelog) = split(/ /,$customlog );

                                 if ($typelog eq 'combined') {
                                 %templ_value = ('customlogtype_cd' => '1');
                                 } elsif ($typelog eq 'common') {                     
                                 %templ_value = ('customlogtype_cn' => '1');
                                 } else {%templ_value = ('nocustomlogtype' => '1') ;}
                        
                         } else {%templ_value = ('nocustomlog' => '1');}
                         
                  if ($templ_value{'customlogtrue'}) {exit;}       
                         
             #$template->param(CLTRUE => $templ_value{'customlogtrue'} );
             $template->param(CLT_CD => $templ_value{'customlogtype_cd'} );
             $template->param(CLT_CN => $templ_value{'customlogtype_cn'} );  
             $template->param(NOCLT => $templ_value{'nocustomlogtype'} );
             $template->param(NOCLTRUE => $templ_value{'nocustomlog'});
             
             $template->param(CL_IN_USE => $templ_value{'customlog_in_use'} );
             $template->param(NO_CL_IN_USE => $templ_value{'no_customlog_in_use'});             
             $template->param(NO_CLVALUE => $templ_value{'no_clvalue'});
                          
             $template->param(TYPE_CL_IN_USE_D => $templ_value{'typecls_in_use_combined'});
             $template->param(TYPE_CL_IN_USE_C => $templ_value{'typecls_in_use_common'});
             $template->param(NOTYPE_CL => $templ_value{'no_typecls'});
             $template->param(NO_CL_IN_USE => $templ_value{'no_cl'}); 


Это сообщение отредактировал(а) gcc - 24.10.2008, 02:50
PM WWW ICQ Skype GTalk Jabber   Вверх
gcc
Дата 7.10.2008, 10:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



>> 
Код


                           if ($errorlog) { 
                            %templ_value = ('errorlogtrue' => '1');
                           } else { %templ_value = ('noerrorlog' => '1'); }
                           
                           
            $template->param(ERRORLOG   => $templ_value{'notemlp_serveralis_all'} );
            $template->param(NOERRORLOG => $templ_value{'notemlp_serveralis_all'} );    
                           
                          sub eett1 {
                          
                           #$edtvalue=$query->param("edtvalue");
                           #$edvalue=$query->param("edvalue");
                           
                           my ($type_errord,$edvalue,$edtvalue)= @_;
      
                          if ( ( (($type_errord eq '2') || ($type_errord eq '3')) && (!length($edvalue)) || (65 < length($edvalue))  || (5 > length($edvalue)))) {
                          my $error_typedoc2='1'; 
                          my $error_typedoc=\$error_typedoc2; 
                          return $error_typedoc; 
                          }
                                                         
                                                                             
                           if (($type_errord > 0) && ((3 == length($edtvalue))) ) {
                           my ($found, $item); 
                           my @er_array = (100,101,200,201,202,203,204,205,206,300,301,302,
                                          303,304,305,400,401,402,403,404,405,406,407,408,
                                          409,410,411,412,413,414,415,500,501,502,503,504,505); 
                           
                              foreach $item (@er_array){
                              if ($item eq $edtvalue) { $found=1; last;}
                              }
                              
                            if (!$found) { 
                            my $error_type2="1"; my $error_type=\$error_type2;
                            return $error_type;
                            }

                            my $tttt2="1"; 
                            my $tttt=\$tttt2;
                            return $tttt;                                                 
                            } 
                           }
                           
                           sub eett2 {
                           #$edtvalue="404";
                           #$edtvalue2="http://jcsasha.24ua.com4";
                           
                          #$edtvalue=$query->param("edtvalue");
                          #$edvalue=$query->param("edvalue");

                           my (@drtvs4, $edtvalue)=@_;
                           
                           my @drtvs3;                        

                           for my $loopindex (0..$#drtvs4) {
                           my ($key, $value) = split(/ /,$drtvs4[$loopindex]);
                           push(@drtvs3, {$key => $value});
                           }
                           
                           my ($match_key, $match_index, $found);
                             for my $loopindex (0..$#drtvs3) {                             
                               for my $key2 (keys %{$drtvs3[$loopindex]}) { 
                                   if ($key2 eq $edtvalue) {

                                   $drtvs3[$loopindex]{$key2};
                                   $match_key=$key2; $match_index=$loopindex; $found=1; last;
                                           }
                                    }
                               }
                             print $match_index;     
                            if (!$found) {
                            my $error_typeer2="1"; my $error_typeer=\$error_typeer2;
                            return $error_typeer; 
                            }
                            
                            my $match_index2=\$match_index;
                            
                            return (@drtvs3,$match_index2);
                            }
                           
                           
                           my $eddelete=$query->param("eddelete");
                           my $edadd=$query->param("edadd");
                           my $edchange=$query->param("edchange");

                           
                           
                           if ($eddelete || $edchange) {
                          
                          @drtvs4 = $vh->directive('ErrorDocument'); 

                         
                          my $edtvalue=$query->param("edtvalue");
                          my $edvalue=$query->param("edvalue");
                          
                          
                          #if (($ttttyui="7")=eett1()) { exit;}
                          
                          #eett1();                         
                             
                          #     print $$tttt2;                   
                          
                          #if ($$tttt2) #{exit;}
                          #{
                          #eett2();
                          
                          #print $$error_typedoc2;
                          
                          my ($type_errord, $tttt, $match_index2, @drtvs3 );
                          if ((defined($eddelete)) && (@drtvs4 )) {
                          my $type_errord="1";
                          } elsif (defined($edadd)) {
                          my $type_errord="2";
                          } elsif ((defined($edchange)) && (@drtvs4)) {
                          my $type_errord="3";                          
                          } else { my $type_errord="0"; 
                          }


                                                   
                          eett1($type_errord,$edvalue,$edtvalue);
                          #if ($$tttt) { exit;}

                          if (eett1($type_errord,$edvalue,$edtvalue) && $$tttt && eett2(@drtvs4, $edtvalue) && defined($$match_index2)  ) {
                         
                          
                            
                               while ($vh->directive('ErrorDocument')) {
                                $vh->directive('ErrorDocument')->delete;   }  
                                         
                                         print $match_index2;              
                                      #if ($eddadd) {   
                                      #$match_index+=1;   
                                                
                                      $drtvs3[$$match_index2]={$edtvalue => $edvalue};
                                      
                                      #eslif ()
                                       
                            
                                       for my $loopindex2 (0..$#drtvs3) {
  
                                         for my $key4 (keys %{$drtvs3[$loopindex2]}) { 
                                          # print "$key4  $drtvs3[$loopindex2]{$key4}"; 
           
                                           my $value_er=$drtvs3[$loopindex2]{$key4};
           
                                           my $setvalue_error="$key4 $value_er";
           
                                           $vh->add_directive(ErrorDocument=> $setvalue_error);
                                         }
  
                                       }  
                              }        
                            
                            }
                         
                         
                         
                            

                             my @arrayedout;
                             if (@drtvs4) {  
                          
                           #@arrayed = $vh->directive('ErrorDocument');
                           
                           for my $loopindex9 (0..$#drtvs4) {
                           my ($key9, $value9) = split(/ /, $drtvs4[$loopindex9]);
                           push(@arrayedout,{errort => $key9, erroru => $value9, aid => $aid});
                           }
                           } 
                           
                         $template->param(SA10 => \@arrayedout); 
                    


print $query->header( -charset => "utf8");
print $template->output();


Это сообщение отредактировал(а) gcc - 7.10.2008, 10:27
PM WWW ICQ Skype GTalk Jabber   Вверх
gcc
Дата 24.10.2008, 02:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



код я переписал еще, если надо могу показать, но его много, смотреть долго...
есть большие модули со многими директивами, например mod_security, директив штук 100 наверное

можно как-то провериться валидность текста который будет введен в apache? сможет ли apache перегрузиться?

Это сообщение отредактировал(а) gcc - 24.10.2008, 22:05
PM WWW ICQ Skype GTalk Jabber   Вверх
ginnie
Дата 24.10.2008, 22:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



Цитата(gcc @  24.10.2008,  02:41 Найти цитируемый пост)
можно как провериться валидность текста который будет введен в apache? сможет ли apache перегрузиться?


Коллеги, только я не могу понять смысл предложений?  smile 

Код

httpd -f /path/to/httpd.conf -t


Это сообщение отредактировал(а) ginnie - 24.10.2008, 22:09


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
gcc
Дата 24.10.2008, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



извените, я секунду назад откорректировал smile

что нужно сдедать: 

нужно вставить допустим из формы в CGI скрипте данные в файл конфига в секцию vhost... 
ну можно эти данные которые будут вставляться проверить? (этих директив штук 100 чтобы не каждую директиву проверять, как apache проверяет конфиг? или это нельзя сделать?




Это сообщение отредактировал(а) gcc - 24.10.2008, 22:22
PM WWW ICQ Skype GTalk Jabber   Вверх
gcc
Дата 24.10.2008, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



Код

 apachectl -f /usr/local/etc/apache22/ab.conf -t
Syntax error on line 8 of /usr/local/etc/apache22/ab.conf:
Invalid command 'SuexecUserGroup', perhaps misspelled or defined by a module not included in the server configuration


как часть проверить, он хочет главный конфиг, как проверить перед тем как вставлять в рабочий конфиг...

=================================================

посмотрел исходнини одного модуля apache там проверки на валидность нету, точнее проверка идет по всему коду...
я так понял что нельзя... лучше perl'ом




Это сообщение отредактировал(а) gcc - 25.10.2008, 08:15
PM WWW ICQ Skype GTalk Jabber   Вверх
ginnie
Дата 25.10.2008, 09:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



Цитата(gcc @  24.10.2008,  22:29 Найти цитируемый пост)
как проверить перед тем как вставлять в рабочий конфиг...

Сделать копию главного конфига, добавить туда включение нового конфига и проверять при помощи httpd. Проверка модулями не даст 100% гарантии, что в apache все заработает.


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
gcc
Дата 20.11.2008, 00:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



вот опубликовали http://www.opennet.ru/tips/info/1842.shtml

только я до окнца не дописывал, вообще в apache директив штук 2000 всего наверное

нужна еще кому-то, кроме меня, такая большая программа? (а то писать это не хочется сильно)

Это сообщение отредактировал(а) gcc - 20.11.2008, 00:10
PM WWW ICQ Skype GTalk Jabber   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0669 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.