Префиксы в ISPManager 5 Lite

Код:

cat /usr/local/mgr5/etc/xml/ispmgr_mod_add.prefix.xml 
<?xml version="1.0" encoding="UTF-8"?>
<mgrdata>
        <handler name="add.prefix.pl" type="xml">
                <event name="check.username" after="yes" />
                <event name="check.dbname" after="yes" />
        </handler>
</mgrdata>

Код:

cat /usr/local/mgr5/addon/add.prefix.pl 
#!/usr/bin/perl -w
#

# надо отловить db.restore, before

use Data::Dumper;
use XML::LibXML;
#-------------------------------------------------------------------------------
#-------------------------------------------------------------------------------
$owner = $ENV{'AUTH_USER'};
$value = $ENV{'PARAM_value'};
#-------------------------------------------------------------------------------
open (LOGFILE, ">>/tmp/add.prefix.pl.txt");
#-------------------------------------------------------------------------------
my $d = XML::LibXML->new->parse_string(join "", <STDIN>);
#-------------------------------------------------------------------------------
#-------------------------------------------------------------------------------
if($owner eq "root" || $ENV{'AUTH_LEVEL'} eq "30"){
        #-------------------------------------------------------------------------------
        print $d->toString;
        #-------------------------------------------------------------------------------
        exit;
        #-------------------------------------------------------------------------------
}
#-------------------------------------------------------------------------------
#-------------------------------------------------------------------------------
#print LOGFILE "\n";
#print LOGFILE " ====> started at " . print_date(time()) . " in " . print_hour(time()) . ":" . print_min(time()) . ":" . print_sec(time()) . "\n";
#print LOGFILE $d->toString . "\n";
#print LOGFILE "========================================\n";
#-------------------------------------------------------------------------------
# проверяем шаблон
$pattern = '^' . $owner . '_[A-Za-z0-9\-\w]+$';
#-------------------------------------------------------------------------------
#print LOGFILE "value = $value; pattern = $pattern\n";
#-------------------------------------------------------------------------------
#if($value =~ /$pattern/ || ($ENV{'AUTH_IP'} eq 'usermove' && substr($value,0,index($value,'_')) eq 'tmp')){
if($value =~ /$pattern/ || substr($value,0,index($value,'_')) eq 'tmp'){
        # всё хорошо, префикс уже есть
}else{
        #-------------------------------------------------------------------------------
        # проверяем, если используется AUTH_IP=usermove, то надо проверить наличие
        # подчёркивания, и отсечь часть после первого - это и будет 'value'
        if($ENV{'AUTH_IP'} eq 'usermove'){
                #-------------------------------------------------------------------------------
                if(index($value,'_') > 0){
                        $value = substr($value, index($value,'_') + 1, 16);
                }
        }
        #-------------------------------------------------------------------------------
        $value = $owner . "_" . $value;
        #-------------------------------------------------------------------------------
}
#-------------------------------------------------------------------------------
#-------------------------------------------------------------------------------
# обгрызаем полученное на 16 символах
#$value = substr($value, 0, 16);
#-------------------------------------------------------------------------------
#-------------------------------------------------------------------------------
# находим ноду doc
for my $doc ($d->findnodes('//doc')){
        #-------------------------------------------------------------------------------
        # удаляем ноду со значением
        for my $dead ($doc->findnodes('//value')){
                #-------------------------------------------------------------------------------
                $dead->unbindNode;
                #-------------------------------------------------------------------------------
        }
        #-------------------------------------------------------------------------------
        #-------------------------------------------------------------------------------
        $new = XML::LibXML::Element->new($ENV{'PARAM_name'});
        $new->appendTextNode($value);
        $doc->addChild($new);
        #-------------------------------------------------------------------------------
        $new = XML::LibXML::Element->new('value');
        $new->appendTextNode($value);
        $doc->addChild($new);
        #-------------------------------------------------------------------------------
}
#-------------------------------------------------------------------------------
#-------------------------------------------------------------------------------
#print LOGFILE $d->toString . "\n";
#print LOGFILE "========================================\n";
#print LOGFILE "========================================\n\n\n";
#-------------------------------------------------------------------------------
print $d->toString ;
#-------------------------------------------------------------------------------
#-------------------------------------------------------------------------------



# functions
sub trim {
        my($string)=@_;
        return $string unless $string;
        for ($string) {
                s/^\s+//;
                s/\s+$//;
        }
        return $string;
}

sub print_date {
        my ($date) = @_;
        my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime ($date);
        return (1900 + $year) . "-" . sprintf("%02u", ++$mon) . "-" . sprintf("%02u", $mday);
}

sub print_year {
        my ($date) = @_;
        my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime ($date);
        return (1900 + $year);
}

sub print_month {
        my ($date) = @_;
        my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime ($date);
        return sprintf("%02u", ++$mon);
}

sub print_day {
        my ($date) = @_;
        my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime ($date);
        return sprintf("%02u", $mday);
}

sub print_hour {
        my ($date) = @_;
        my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime ($date);
        return sprintf("%02u", $hour);
}

sub print_min {
        my ($date) = @_;
        my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime ($date);
        return sprintf("%02u", $min);
}

sub print_sec {
        my ($date) = @_;
        my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime ($date);
        return sprintf("%02u", $sec);
}


exit;

Добавить комментарий