Code

Updated mail service
[gosa.git] / gosa-plugins / mail / admin / systems / services / mail / class_goMailServer.inc
1 <?php
3 class goMailServer extends goService{
4         
5   var $cli_summary      = "This pluign is used within the ServerService Pluign \nand indicates that this server supports mailqueue listings and so on.";
6   var $cli_description  = "Some longer text\nfor help";
7   var $cli_parameters   = array("eins" => "Eins ist toll", "zwei" => "Zwei ist noch besser");
9   /* This plugin only writes its objectClass */
10   var $objectclasses    = array("goMailServer");
12   /* This class can't be assigned twice so it conflicts with itsself */
13   var $DisplayName      = "";
14   var $dn               = NULL;
15   var $StatusFlag       = "goMailServerStatus";
16   var $attributes       = array("description","postfixHeaderSizeLimit",
17       "postfixMailboxSizeLimit","postfixMessageSizeLimit",
18       "postfixMyDestinations","postfixMyDomain","postfixMyhostname",
19       "postfixMyNetworks","postfixRelayhost","postfixTransportTable",
20       "postfixSenderRestrictions","postfixRecipientRestrictions");
22   var $goMailServerStatus               ;
23   var $postfixHeaderSizeLimit           = 0;
24   var $postfixMailboxSizeLimit          = 0;
25   var $postfixMessageSizeLimit          = 0;
26   var $postfixMyDestinations            = array();
27   var $postfixMyDomain                  = "";
28   var $postfixMyhostname                = "";
29   var $postfixMyNetworks                = array();
30   var $postfixRelayhost                 = "";
31   var $postfixTransportTable            = array();
32   var $postfixSenderRestrictions        = array();
33   var $postfixRecipientRestrictions     = array();
34   var $description                      = "";
35   var $RestrictionFilters               = array();
36   var $TransportProtocols               = array(); 
37   var $Actions                          = array();
38   var $cn                               = "";
39   var $conflicts                        = array("goMailServer","kolab");
40   var $view_logged  =FALSE;
42   function goMailServer(&$config,$dn)
43   {
44     goService::goService($config,$dn);
45     $this->DisplayName = _("Mail smtp service (Postfix)");
47     $this->Actions = array( SERVICE_STOPPED=>SERVICE_STOPPED,
48                             SERVICE_STARTED => SERVICE_STARTED,
49                             SERVICE_RESTARTED=>SERVICE_RESTARTED); 
51     /* Fill  RestrictionFilters   TransportProtocols  from external hooks */
52     $str = $this->config->data['TABS']['SERVERSERVICE'];
53     $this->TransportProtocols =array("smtp"=>"SMTP");
54     $this->RestrictionFilters = array("FILTER"=>"FILTER"); 
55     foreach(array("POSTFIXRESTRICTIONFILTERS"=>"RestrictionFilters",
56           "POSTFIXPROTOCOLS"        =>"TransportProtocols") as $file => $var){
57       if($this->config->get_cfg_value($file) != ""){
58         $file = $this->config->get_cfg_value($file);
59         if((isset($file)) && is_readable($file)){
60           $tmp = file_get_contents($file);
61           $tmp2= preg_split("/\n/",$tmp);
62           foreach($tmp2 as $entry){
63             if(empty($entry)) continue;
64             if(preg_match("/:/",$entry)){
65               $tmp3 = explode(":",$entry);
66               $r = $this->$var;
67               $r[$tmp3[0]]=$tmp3[1];
68               $this->$var = $r;
69             }else{
70               $r = $this->$var;
71               $r[$entry] =$entry;
72               $this->$var = $r;
73             }
74           }
75         }
76       }
77     }
80     /* Get postfix my networks */
81     $this->postfixMyNetworks = array();
82     $tmp = array();
83     if(isset($this->attrs['postfixMyNetworks'][0])){
84       $tmp = explode(",",$this->attrs['postfixMyNetworks'][0]);
85       foreach($tmp as $str){
86         if(!empty($str)){
87           $this->postfixMyNetworks[base64_encode($str)] = $str;
88         }
89       }
90     }
93     /* Create full name */
94     if(isset($this->attrs['postfixMyDomain'][0])){
95       $this->postfixMyhostname .= ".".$this->attrs['postfixMyDomain'][0];
96     }
97   
99     /* Get postfix my domains */
100     $this->postfixMyDestinations = array(); 
101     if(isset($this->attrs['postfixMyDestinations'][0])){
102       unset($this->attrs['postfixMyDestinations']['count']);
103       foreach($this->attrs['postfixMyDestinations'] as $str){
104         $this->postfixMyDestinations[base64_encode($str)] = $str;
105       }
106     }
109     /* Get transport tables */
110     $tmp = array();
111     $this->postfixTransportTable = array();
112     if(isset($this->attrs['postfixTransportTable'])){
113       $tmp = array();
114       unset($this->attrs['postfixTransportTable']['count']);
115       foreach($this->attrs['postfixTransportTable'] as $entry){
117         //0: offshore.vip.ms-europa.lhsystems.com smtp:172.28.0.2
119         $Number   = preg_replace('/^([^:]+):.*$/', '\\1', $entry);
120         $Rest     = trim(preg_replace("/^[0-9]*:/","",$entry));
122         $Protocol_Destination = preg_replace("/^.*\ /","",$Rest);
123         $Source               = preg_replace("/\ .*$/","",$Rest);
125         $Protocol     = preg_replace ('/^([^:]+):.*$/', '\\1' ,trim($Protocol_Destination));
126         $Destination  = preg_replace ('/^[^:]+:(.*)$/', '\\1'    ,trim($Protocol_Destination));
128         $Destination  = preg_replace ("/[\[\]]/","",$Destination);
130         $tmp[$Number]['src'] = $Source;
131         $tmp[$Number]['dst'] = $Destination;
132         $tmp[$Number]['prt'] = $Protocol;
133       }
134       ksort($tmp);
135       foreach($tmp as $entry){
136         $this->postfixTransportTable[] = $entry;
137       }
138     }
139    
141     /* Get sender restrictions */
142     $tmp = array();
143     $this->postfixSenderRestrictions = array();
144     if(isset($this->attrs['postfixSenderRestrictions'])){
145       unset($this->attrs['postfixSenderRestrictions']['count']);
146       foreach($this->attrs['postfixSenderRestrictions'] as $entry){
147         $nr  = preg_replace("/:.*$/","",$entry);
148         $rest= trim(preg_replace("/^[^:]+:/","",$entry));
149         $src = preg_replace("/ .*$/","",$rest);
150         $rest= preg_replace("/^[^ ]+ /","",$rest);
151         $dst = preg_replace("/^.* /","",$rest);
152         $prt = preg_replace("/ .*$/","",$rest);
153  
154         $tmp[$nr]['src'] = $src;
155         $tmp[$nr]['dst'] = $dst;
156         $tmp[$nr]['filter'] = $prt;
157       }
158       ksort($tmp);
159       foreach($tmp as $entry){
160         $this->postfixSenderRestrictions[] = $entry;
161       }
162     }
164  
165     /* Get sender restrictions */
166     $tmp = array();
167     $this->postfixRecipientRestrictions = array();
168     if(isset($this->attrs['postfixRecipientRestrictions'])){
169       unset($this->attrs['postfixRecipientRestrictions']['count']);
170       foreach($this->attrs['postfixRecipientRestrictions'] as $entry){
171         $nr  = preg_replace("/:.*$/","",$entry);
172         $rest= trim(preg_replace("/^[^:]+:/","",$entry));
173         $src = preg_replace("/ .*$/","",$rest);
174         $rest= preg_replace("/^[^ ]+ /","",$rest);
175         $dst = preg_replace("/^.* /","",$rest);
176         $prt = preg_replace("/ .*$/","",$rest);
177  
178         $tmp[$nr]['src'] = $src;
179         $tmp[$nr]['dst'] = $dst;
180         $tmp[$nr]['filter'] = $prt;
181       }
182       ksort($tmp);
183       foreach($tmp as $entry){
184         $this->postfixRecipientRestrictions[] = $entry;
185       }
186     }
188     // Prepare lists
189     $this->recipientRestrictionList = new sortableListing(array(),array(), TRUE);
190     $this->recipientRestrictionList->setDeleteable(true);
191     $this->recipientRestrictionList->setEditable(false);
192     $this->recipientRestrictionList->setWidth("100%");
193     $this->recipientRestrictionList->setHeight("100px");
194     $this->recipientRestrictionList->setDefaultSortColumn(0);
195     $this->recipientRestrictionList->setColspecs(array('*','*','*','20px'));
196     $this->recipientRestrictionList->setHeader(array(_("Source"),_("Destination"),_("Filter")));
198     $this->senderRestrictionList = new sortableListing(array(),array(), TRUE);
199     $this->senderRestrictionList->setDeleteable(true);
200     $this->senderRestrictionList->setEditable(false);
201     $this->senderRestrictionList->setWidth("100%");
202     $this->senderRestrictionList->setHeight("100px");
203     $this->senderRestrictionList->setDefaultSortColumn(0);
204     $this->senderRestrictionList->setColspecs(array('*','*','*','20px'));
205     $this->senderRestrictionList->setHeader(array(_("Source"),_("Destination"),_("Filter")));
207     $this->protocolsList = new sortableListing(array(),array(), TRUE);
208     $this->protocolsList->setDeleteable(true);
209     $this->protocolsList->setEditable(false);
210     $this->protocolsList->setWidth("100%");
211     $this->protocolsList->setHeight("100px");
212     $this->protocolsList->setColspecs(array('*','*','*','20px'));
213     $this->protocolsList->setHeader(array(_("Source"),_("Destination"),_("Protocol")));
214     $this->protocolsList->setDefaultSortColumn(0);
216   }
218   function execute()
219   { 
220     $smarty   = get_smarty();
221     $smarty->assign("usePrototype", "true");
223     if($this->is_account && !$this->view_logged){
224       $this->view_logged = TRUE;
225       new log("view","server/".get_class($this),$this->dn);
226     }
228     $tmp = $this->plInfo();
229     foreach($tmp['plProvidedAcls'] as $name => $translation){
230       $smarty->assign($name."ACL",$this->getacl($name));
231     }
232      
234     /* Add delete my network entry */
235     if($this->acl_is_writeable("postfixMyNetworks")){
236         if((isset($_POST['AddpostfixMyNetworks'])) && (!empty($_POST['NewString_postfixMyNetworks']))){
237             $str = $_POST['NewString_postfixMyNetworks'];
238             $this->postfixMyNetworks[base64_encode($str)] = $str;
239         }
240         if((isset($_POST['DelpostfixMyNetworks'])) && 
241                 isset($_POST['Select_postfixMyNetworks']) && 
242                 (count($_POST['Select_postfixMyNetworks']))){
243             foreach($_POST['Select_postfixMyNetworks'] as $str ){
244                 unset($this->postfixMyNetworks[$str]);
245             }
246         }
247     }
250     /* Add delete my domain entry */
251     if($this->acl_is_writeable("postfixMyDestinations")){
252       if((isset($_POST['AddpostfixMyDestinations'])) && (!empty($_POST['NewString_postfixMyDestinations']))){
253         $str = $_POST['NewString_postfixMyDestinations'];
254         $this->postfixMyDestinations[base64_encode($str)] = $str;
255       }
257       if((isset($_POST['DelpostfixMyDestinations'])) && isset($_POST['Select_postfixMyDestinations']) &&(count($_POST['Select_postfixMyDestinations']))){
258         foreach($_POST['Select_postfixMyDestinations'] as $str ){
259           unset($this->postfixMyDestinations[$str]);
260         }
261       }
262     }
265     $this->senderRestrictionList->save_object();
266     $this->recipientRestrictionList->save_object();
267     $this->protocolsList->save_object();
268    
269     $action = $this->senderRestrictionList->getAction();
270     if($action['action'] == 'reorder'){
271         $this->postfixSenderRestrictions = $this->senderRestrictionList->getMaintainedData();
272     }
273     if($action['action'] == 'delete'){
274         $id = $this->senderRestrictionList->getKey($action['targets'][0]);
275         unset($this->postfixSenderRestrictions[$id]);
276     }
278     $action = $this->recipientRestrictionList->getAction();
279     if($action['action'] == 'reorder'){
280         $this->postfixRecipientRestrictions = $this->recipientRestrictionList->getMaintainedData();
281     }
282     if($action['action'] == 'delete'){
283         $id = $this->recipientRestrictionList->getKey($action['targets'][0]);
284         unset($this->postfixRecipientRestrictions[$id]);
285     }
287     $action = $this->protocolsList->getAction();
288     if($action['action'] == 'reorder'){
289         $this->postfixTransportTable = $this->protocolsList->getMaintainedData();
290     }
291     if($action['action'] == 'delete'){
292         $id = $this->protocolsList->getKey($action['targets'][0]);
293         unset($this->postfixTransportTable[$id]);
294     }
296     /* Add sender restriction */
297     if($this->acl_is_writeable("postfixSenderRestrictions")){
298       if(isset($_POST['AddpostfixSenderRestrictions'])){
299         $src      = $_POST['Source_postfixSenderRestrictions'];
300         $dst      = $_POST['Destination_postfixSenderRestrictions'];
301         $Filter   = $_POST['SenderRestrictionFilter'];
302         $tmp = array();
303         $tmp['src']     = $src;
304         $tmp['dst']     = $dst;
305         $tmp['filter']  = $Filter;
306         $this->postfixSenderRestrictions[] = $tmp;
307       }
308     }
311     /* Add sender restriction */
312     if($this->acl_is_writeable("postfixRecipientRestrictions")){
313       if(isset($_POST['AddpostfixRecipientRestrictions'])){
314         $src      = $_POST['Source_postfixRecipientRestrictions'];
315         $dst      = $_POST['Destination_postfixRecipientRestrictions'];
316         $Filter   = $_POST['RecipientRestrictionFilter'];
317         $tmp = array();
318         $tmp['src']     = $src;
319         $tmp['dst']     = $dst;
320         $tmp['filter']  = $Filter;
321         $this->postfixRecipientRestrictions[] = $tmp;
322       }
323     }
325     /* Handle transports */
326     if($this->acl_is_writeable("postfixTransportTable")){
327       if(isset($_POST['AddpostfixTransportTable'])){
328         $src = trim($_POST['Source_postfixTransportTable']);  
329         $dst = trim($_POST['Destination_postfixTransportTable']);    
330         $prt = trim($_POST['TransportProtocol']);
332         $tmp2 = array();
333         if((!empty($src)) && (!empty($dst))){
334           if(preg_match("/:/",$dst)){
335             $tmp = explode(":",$dst);
336             $port = trim($tmp[1]);
337             $ip   = trim($tmp[0]);
339             if((tests::is_ip($ip)) && (is_numeric($port))){
340               $dst = "[".$ip."]:".$port;
341             }
342           }
343           if(tests::is_ip($dst)){
344             $dst = "[".$dst."]";
345           }
346           $tmp2 ['src'] = $src;
347           $tmp2 ['dst'] = $dst;
348           $tmp2 ['prt'] = $prt;
350           $this->postfixTransportTable[] = $tmp2;  
351         } 
352       }
353     }
355     /* Set attributes */
356     foreach($this->attributes as $attr){
357       $smarty->assign($attr,$this->$attr);
358     }
361     /* Create list for translation tables */
362     $this->protocolsList->setAcl($this->getacl('postfixTransportTable'));
363     $lData = array();
364     foreach($this->postfixTransportTable as $key => $entry){
365       $lData[$key]=array('data' => array($entry['src'],$entry['dst'],$entry['prt']));
366     }
367     $this->protocolsList->setListData($this->postfixTransportTable, $lData);
368     $this->protocolsList->update();
369     $smarty->assign("postfixTransportTable" ,$this->protocolsList->render());
372     /* Create list for sender restrictions */
373     $this->senderRestrictionList->setAcl($this->getacl('postfixSenderRestrictions'));
374     $lData = array();
375     foreach($this->postfixSenderRestrictions as $key => $entry){
376       $lData[$key]=array('data' => array($entry['src'],$entry['dst'],$entry['filter']));
377     }
378     $this->senderRestrictionList->setListData($this->postfixSenderRestrictions, $lData);
379     $this->senderRestrictionList->update();
380     $smarty->assign("postfixSenderRestrictions" ,$this->senderRestrictionList->render());
383     /* Create list for translation tables */
384     $this->recipientRestrictionList->setAcl($this->getacl('postfixRecipientRestrictions'));
385     $lData = array();
386     foreach($this->postfixRecipientRestrictions as $key => $entry){
387       $lData[$key]=array('data' => array($entry['src'],$entry['dst'],$entry['filter']));
388     }
389     $this->recipientRestrictionList->setListData($this->postfixRecipientRestrictions, $lData);
390     $this->recipientRestrictionList->update();
391     $smarty->assign("postfixRecipientRestrictions" ,$this->recipientRestrictionList->render());
393     
394     /* set new status */
395     if(isset($_POST['ExecAction'])){
396       if(isset($this->Actions[$_POST['action']])){
397         $this->setStatus($_POST['action']);
398       }
399     }
402     $smarty->assign("is_new",                       $this->dn);
403     $smarty->assign("is_acc",                       $this->initially_was_account);
404     $smarty->assign("TransportProtocols",           $this->TransportProtocols);
405     $smarty->assign("Actions",                      $this->Actions);
406     $smarty->assign("RestrictionFilters",           $this->RestrictionFilters);
407     $smarty->assign("postfixTransportTable" ,       $this->getTransports());
408     $smarty->assign("postfixSenderRestrictions" ,   $this->getSenderRestrictions());
409     $smarty->assign("postfixRecipientRestrictions" ,$this->getRecipientRestrictions());
411     return($smarty->fetch(get_template_path("goMailServer.tpl",TRUE,dirname(__FILE__))));
412   }
414  
415   /* return transports formated for select box */ 
416   function getTransports()
417   {
418     $ret = array();
419     foreach($this->postfixTransportTable as $key => $vals){
420       $ret[$key] = $vals['src']." -> ".$vals['prt'].":".$vals['dst'];
421     }
422     return($ret);
423   }
426   /* return sender restriction formated for select box */ 
427   function getSenderRestrictions()
428   {
429     $ret = array();
430     foreach($this->postfixSenderRestrictions as $key => $vals){
431       $ret[$key] = $vals['src']." ".$vals['filter']." ".$vals['dst'];
432     }
433     return($ret);
434   }
437   /* return recipient restriction formated for select box */ 
438   function getRecipientRestrictions()
439   {
440     $ret = array();
441     foreach($this->postfixRecipientRestrictions as $key => $vals){
442       $ret[$key] = $vals['src']." ".$vals['filter']." ".$vals['dst'];
443     }
444     return($ret);
445   }
448   /* Return list entry */
449   function getListEntry()
450   {
451     $fields               = goService::getListEntry();
452     $fields['Message']    = _("Mail smtp service (Postfix)");
453     #$fields['AllowEdit']  = true;
454     return($fields);
455   }
458   function save()
459   {
460     $this->postfixMyDomain   = preg_replace("/^[^\.]+\./","",$this->postfixMyhostname);
461     $this->postfixMyhostname = preg_replace("/\..*$/","",$this->postfixMyhostname);
463     plugin::save();
465     /* Fix transport table*/
466     $i = 0 ; 
467     $this->attrs['postfixTransportTable'] = array();
468     foreach($this->postfixTransportTable as $key => $entry){
469       $this->attrs['postfixTransportTable'][] = $i.": ".$entry['src']." ".$entry['prt'].":".$entry['dst'];
470       $i ++;
471     }
474     /* Fix sender restrictions */
475     $i = 0;
476     $this->attrs['postfixSenderRestrictions'] =array();
477     foreach($this->postfixSenderRestrictions as $key => $entry){
478       $this->attrs['postfixSenderRestrictions'][] = $i.": ".$entry['src']." ".$entry['filter']." ".$entry['dst']; 
479       $i ++;  
480     }
481   
482   
483     /* Fix recipient restrictions */
484     $i = 0;
485     $this->attrs['postfixRecipientRestrictions'] =array();
486     foreach($this->postfixRecipientRestrictions as $key => $entry){
487       $this->attrs['postfixRecipientRestrictions'][] = $i.": ".$entry['src']." ".$entry['filter']." ".$entry['dst']; 
488       $i ++;  
489     }
492     /* Fix mydomains */
493     $this->attrs['postfixMyDestinations']  = array();
494     foreach($this->postfixMyDestinations as $entry){
495       $this->attrs['postfixMyDestinations'][] =$entry;
496     }
499     /* Fix mydomains */
500     if(count($this->postfixMyNetworks)){
501       $this->attrs['postfixMyNetworks']  = "";
502       foreach($this->postfixMyNetworks as $entry){
503         $this->attrs['postfixMyNetworks'] .=$entry.",";
504       }
505       $this->attrs['postfixMyNetworks'] = preg_replace("/,$/","",$this->attrs['postfixMyNetworks']);
506     }else{
507       $this->attrs['postfixMyNetworks']  = array();
508     }
510  
511     /* Check if this is a new entry ... add/modify */
512     $ldap = $this->config->get_ldap_link();
513     $ldap->cat($this->dn,array("objectClass"));
514     if($ldap->count()){
515       $ldap->cd($this->dn);
516       $ldap->modify($this->attrs);
517     }else{
518       $ldap->cd($this->dn);
519       $ldap->add($this->attrs);
520     }
521     if (!$ldap->success()){
522       msg_dialog::display(_("LDAP error"), msgPool::ldaperror($ldap->get_error(), $this->dn, 0, get_class()));
523     }
525     if($this->initially_was_account){
526       $this->handle_post_events("modify");
527       new log("modify","server/".get_class($this),$this->dn,array_keys($this->attrs),$ldap->get_error());  
528     }else{
529       $this->handle_post_events("add");
530       new log("create","server/".get_class($this),$this->dn,array_keys($this->attrs),$ldap->get_error());  
531     }
533   }
536   function check()
537   { 
538     $message =plugin::check();
539     if(!is_numeric($this->postfixHeaderSizeLimit)){
540       $message[] = msgPool::invalid(_("Header size limit",$this->postfixHeaderSizeLimit,"/[0-9]/"));
541     }
542     if(!is_numeric($this->postfixMailboxSizeLimit)){
543       $message[] = msgPool::invalid(_("Mailbox size limit",$this->postfixMailboxSizeLimit,"/[0-9]/"));
544     }
545     if(!is_numeric($this->postfixMessageSizeLimit)){
546       $message[] = msgPool::invalid(_("Message size limit",$this->postfixMessageSizeLimit,"/[0-9]/"));
547     }
548     return $message;
549   }
552   /* Combine new array */
553   function combineArrays($ar0,$ar1,$ar2)
554   {
555     $ret = array();
556     if(is_array($ar0))
557     foreach($ar0 as $ar => $a){
558         $ret[]=$a;
559     }
560     if(is_array($ar1))
561     foreach($ar1 as $ar => $a){
562         $ret[]=$a;
563     }
564     if(is_array($ar2))
565     foreach($ar2 as $ar => $a){
566         $ret[]=$a;
567     }
568     return($ret);
569   }
572   function getpos($atr,$attrs)
573   {
574     $i = 0;
575     foreach($attrs as $attr => $name)    {
576       $i++;
577       if($attr == $atr){
578         return($i);
579       }
580     }
582     return(-1);
583   }
586   /* TRansports the geiven Arraykey one position up*/
587   function ArrayUp($atr,$attrs)
588   {
589     $ret = $attrs;
590     $pos = $this->getpos($atr,$attrs) ;
591     $cn = count($attrs);
592     if(!(($pos == -1)||($pos == 1))){
593       $before = array_slice($attrs,0,($pos-2));
594       $mitte  = array_reverse(array_slice($attrs,($pos-2),2));
595       $unten  = array_slice($attrs,$pos);
596       $ret = array();
597       $ret = $this->combineArrays($before,$mitte,$unten);
598     }
599     return($ret);
600   }
603   /* TRansports the geiven Arraykey one position up*/
604   function ArrayDown($atr,$attrs)
605   {
606     $ret = $attrs;
607     $pos = $this->getpos($atr,$attrs) ;
608     $cn = count($attrs);
609     if(!(($pos == -1)||($pos == $cn))){
610       $before = array_slice($attrs,0,($pos-1));
611       $mitte  = array_reverse(array_slice($attrs,($pos-1),2));
612       $unten  = array_slice($attrs,($pos+1));
613       $ret = array();
614       $ret = $this->combineArrays($before,$mitte,$unten);
615     }
616     return($ret);
617   }
619   function save_object()
620   {
621     plugin::save_object();  
622   }
625   function PrepareForCopyPaste($source)
626   {
627     plugin::PrepareForCopyPaste($source);
629     $source_o = new goMailServer($this->config,$source['dn']);
630     foreach(array("postfixMyDomain","postfixMyhostname","postfixMyNetworks","postfixTransportTable","postfixSenderRestrictions","postfixRecipientRestrictions","postfixMyDestinations") as $attr){
631       $this->$attr = $source_o->$attr;
632     }
633   }
636   /* Return plugin informations for acl handling */
637   static function plInfo()
638   {
639     return (array(
640           "plShortName"   => _("Mail smtp (Postfix)"),
641           "plDescription" => _("Mail smtp - Postfix")." ("._("Services").")",
642           "plSelfModify"  => FALSE,
643           "plDepends"     => array(),
644           "plPriority"    => 98,
645           "plSection"     => array("administration"),
646           "plCategory"    => array("server"),
648           "plProvidedAcls"=> array(
650             "start"           => _("Start"),
651             "stop"            => _("Stop"),
652             "restart"         => _("Restart"),
653             "postfixMyhostname"           => _("Visible full qualified hostname"),
654             "description"                 => _("Description"), 
655             "postfixHeaderSizeLimit"      => _("Header size limit"), 
656             "postfixMailboxSizeLimit"     => _("Max mailbox size"), 
657             "postfixMessageSizeLimit"     => _("Max message size"), 
658             "postfixMyDestinations"       => _("Domains to accept mail for"), 
659             "postfixMyNetworks"           => _("Local networks"), 
660             "postfixRelayhost"            => _("Relay host"), 
661             "postfixTransportTable"       => _("Transport table"), 
662             "postfixSenderRestrictions"   => _("Restrictions for sender"), 
663             "postfixRecipientRestrictions"=> _("Restrictions for recipient"))
664             ));
665   }
667 // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
668 ?>