Code

Added requirement dependencies
[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(
56             array(
57                 "postfixRestrictionFilters"=>"RestrictionFilters",
58                 "postfixProtocols"        =>"TransportProtocols")
59             as $file => $var){
60         if($this->config->get_cfg_value("goMailServer",$file) != ""){
61             $file = $this->config->get_cfg_value("goMailServer",$file);
62             if((isset($file)) && is_readable($file)){
63                 $tmp = file_get_contents($file);
64           $tmp2= preg_split("/\n/",$tmp);
65           foreach($tmp2 as $entry){
66             if(empty($entry)) continue;
67             if(preg_match("/:/",$entry)){
68               $tmp3 = explode(":",$entry);
69               $r = $this->$var;
70               $r[$tmp3[0]]=$tmp3[1];
71               $this->$var = $r;
72             }else{
73               $r = $this->$var;
74               $r[$entry] =$entry;
75               $this->$var = $r;
76             }
77           }
78         }
79       }
80     }
83     /* Get postfix my networks */
84     $this->postfixMyNetworks = array();
85     $tmp = array();
86     if(isset($this->attrs['postfixMyNetworks'][0])){
87       $tmp = explode(",",$this->attrs['postfixMyNetworks'][0]);
88       foreach($tmp as $str){
89         if(!empty($str)){
90           $this->postfixMyNetworks[base64_encode($str)] = $str;
91         }
92       }
93     }
96     /* Create full name */
97     if(isset($this->attrs['postfixMyDomain'][0])){
98       $this->postfixMyhostname .= ".".$this->attrs['postfixMyDomain'][0];
99     }
100   
102     /* Get postfix my domains */
103     $this->postfixMyDestinations = array(); 
104     if(isset($this->attrs['postfixMyDestinations'][0])){
105       unset($this->attrs['postfixMyDestinations']['count']);
106       foreach($this->attrs['postfixMyDestinations'] as $str){
107         $this->postfixMyDestinations[base64_encode($str)] = $str;
108       }
109     }
112     /* Get transport tables */
113     $tmp = array();
114     $this->postfixTransportTable = array();
115     if(isset($this->attrs['postfixTransportTable'])){
116       $tmp = array();
117       unset($this->attrs['postfixTransportTable']['count']);
118       foreach($this->attrs['postfixTransportTable'] as $entry){
120         //0: offshore.vip.ms-europa.lhsystems.com smtp:172.28.0.2
122         $Number   = preg_replace('/^([^:]+):.*$/', '\\1', $entry);
123         $Rest     = trim(preg_replace("/^[0-9]*:/","",$entry));
125         $Protocol_Destination = preg_replace("/^.*\ /","",$Rest);
126         $Source               = preg_replace("/\ .*$/","",$Rest);
128         $Protocol     = preg_replace ('/^([^:]+):.*$/', '\\1' ,trim($Protocol_Destination));
129         $Destination  = preg_replace ('/^[^:]+:(.*)$/', '\\1'    ,trim($Protocol_Destination));
131         $Destination  = preg_replace ("/[\[\]]/","",$Destination);
133         $tmp[$Number]['src'] = $Source;
134         $tmp[$Number]['dst'] = $Destination;
135         $tmp[$Number]['prt'] = $Protocol;
136       }
137       ksort($tmp);
138       foreach($tmp as $entry){
139         $this->postfixTransportTable[] = $entry;
140       }
141     }
142    
144     /* Get sender restrictions */
145     $tmp = array();
146     $this->postfixSenderRestrictions = array();
147     if(isset($this->attrs['postfixSenderRestrictions'])){
148       unset($this->attrs['postfixSenderRestrictions']['count']);
149       foreach($this->attrs['postfixSenderRestrictions'] as $entry){
150         $nr  = preg_replace("/:.*$/","",$entry);
151         $rest= trim(preg_replace("/^[^:]+:/","",$entry));
152         $src = preg_replace("/ .*$/","",$rest);
153         $rest= preg_replace("/^[^ ]+ /","",$rest);
154         $dst = preg_replace("/^.* /","",$rest);
155         $prt = preg_replace("/ .*$/","",$rest);
156  
157         $tmp[$nr]['src'] = $src;
158         $tmp[$nr]['dst'] = $dst;
159         $tmp[$nr]['filter'] = $prt;
160       }
161       ksort($tmp);
162       foreach($tmp as $entry){
163         $this->postfixSenderRestrictions[] = $entry;
164       }
165     }
167  
168     /* Get sender restrictions */
169     $tmp = array();
170     $this->postfixRecipientRestrictions = array();
171     if(isset($this->attrs['postfixRecipientRestrictions'])){
172       unset($this->attrs['postfixRecipientRestrictions']['count']);
173       foreach($this->attrs['postfixRecipientRestrictions'] as $entry){
174         $nr  = preg_replace("/:.*$/","",$entry);
175         $rest= trim(preg_replace("/^[^:]+:/","",$entry));
176         $src = preg_replace("/ .*$/","",$rest);
177         $rest= preg_replace("/^[^ ]+ /","",$rest);
178         $dst = preg_replace("/^.* /","",$rest);
179         $prt = preg_replace("/ .*$/","",$rest);
180  
181         $tmp[$nr]['src'] = $src;
182         $tmp[$nr]['dst'] = $dst;
183         $tmp[$nr]['filter'] = $prt;
184       }
185       ksort($tmp);
186       foreach($tmp as $entry){
187         $this->postfixRecipientRestrictions[] = $entry;
188       }
189     }
191     // Prepare lists
192     $this->recipientRestrictionList = new sortableListing(array(),array(), TRUE);
193     $this->recipientRestrictionList->setDeleteable(true);
194     $this->recipientRestrictionList->setEditable(false);
195     $this->recipientRestrictionList->setWidth("100%");
196     $this->recipientRestrictionList->setHeight("100px");
197     $this->recipientRestrictionList->setDefaultSortColumn(0);
198     $this->recipientRestrictionList->setColspecs(array('*','*','*','20px'));
199     $this->recipientRestrictionList->setHeader(array(_("Source"),_("Destination"),_("Filter")));
201     $this->senderRestrictionList = new sortableListing(array(),array(), TRUE);
202     $this->senderRestrictionList->setDeleteable(true);
203     $this->senderRestrictionList->setEditable(false);
204     $this->senderRestrictionList->setWidth("100%");
205     $this->senderRestrictionList->setHeight("100px");
206     $this->senderRestrictionList->setDefaultSortColumn(0);
207     $this->senderRestrictionList->setColspecs(array('*','*','*','20px'));
208     $this->senderRestrictionList->setHeader(array(_("Source"),_("Destination"),_("Filter")));
210     $this->protocolsList = new sortableListing(array(),array(), TRUE);
211     $this->protocolsList->setDeleteable(true);
212     $this->protocolsList->setEditable(false);
213     $this->protocolsList->setWidth("100%");
214     $this->protocolsList->setHeight("100px");
215     $this->protocolsList->setColspecs(array('*','*','*','20px'));
216     $this->protocolsList->setHeader(array(_("Source"),_("Destination"),_("Protocol")));
217     $this->protocolsList->setDefaultSortColumn(0);
219   }
221   function execute()
222   { 
223     $smarty   = get_smarty();
226     if($this->is_account && !$this->view_logged){
227       $this->view_logged = TRUE;
228       new log("view","server/".get_class($this),$this->dn);
229     }
231     $tmp = $this->plInfo();
232     foreach($tmp['plProvidedAcls'] as $name => $translation){
233       $smarty->assign($name."ACL",$this->getacl($name));
234     }
235      
237     /* Add delete my network entry */
238     if($this->acl_is_writeable("postfixMyNetworks")){
239         if((isset($_POST['AddpostfixMyNetworks'])) && (!empty($_POST['NewString_postfixMyNetworks']))){
240             $str = $_POST['NewString_postfixMyNetworks'];
241             $this->postfixMyNetworks[base64_encode($str)] = $str;
242         }
243         if((isset($_POST['DelpostfixMyNetworks'])) && 
244                 isset($_POST['Select_postfixMyNetworks']) && 
245                 (count($_POST['Select_postfixMyNetworks']))){
246             foreach($_POST['Select_postfixMyNetworks'] as $str ){
247                 unset($this->postfixMyNetworks[$str]);
248             }
249         }
250     }
253     /* Add delete my domain entry */
254     if($this->acl_is_writeable("postfixMyDestinations")){
255       if((isset($_POST['AddpostfixMyDestinations'])) && (!empty($_POST['NewString_postfixMyDestinations']))){
256         $str = $_POST['NewString_postfixMyDestinations'];
257         $this->postfixMyDestinations[base64_encode($str)] = $str;
258       }
260       if((isset($_POST['DelpostfixMyDestinations'])) && isset($_POST['Select_postfixMyDestinations']) &&(count($_POST['Select_postfixMyDestinations']))){
261         foreach($_POST['Select_postfixMyDestinations'] as $str ){
262           unset($this->postfixMyDestinations[$str]);
263         }
264       }
265     }
268     $this->senderRestrictionList->save_object();
269     $this->recipientRestrictionList->save_object();
270     $this->protocolsList->save_object();
271    
272     $action = $this->senderRestrictionList->getAction();
273     if($action['action'] == 'reorder'){
274         $this->postfixSenderRestrictions = $this->senderRestrictionList->getMaintainedData();
275     }
276     if($action['action'] == 'delete'){
277         $id = $this->senderRestrictionList->getKey($action['targets'][0]);
278         unset($this->postfixSenderRestrictions[$id]);
279     }
281     $action = $this->recipientRestrictionList->getAction();
282     if($action['action'] == 'reorder'){
283         $this->postfixRecipientRestrictions = $this->recipientRestrictionList->getMaintainedData();
284     }
285     if($action['action'] == 'delete'){
286         $id = $this->recipientRestrictionList->getKey($action['targets'][0]);
287         unset($this->postfixRecipientRestrictions[$id]);
288     }
290     $action = $this->protocolsList->getAction();
291     if($action['action'] == 'reorder'){
292         $this->postfixTransportTable = $this->protocolsList->getMaintainedData();
293     }
294     if($action['action'] == 'delete'){
295         $id = $this->protocolsList->getKey($action['targets'][0]);
296         unset($this->postfixTransportTable[$id]);
297     }
299     /* Add sender restriction */
300     if($this->acl_is_writeable("postfixSenderRestrictions")){
301       if(isset($_POST['AddpostfixSenderRestrictions'])){
302         $src      = $_POST['Source_postfixSenderRestrictions'];
303         $dst      = $_POST['Destination_postfixSenderRestrictions'];
304         $Filter   = $_POST['SenderRestrictionFilter'];
305         $tmp = array();
306         $tmp['src']     = $src;
307         $tmp['dst']     = $dst;
308         $tmp['filter']  = $Filter;
309         $this->postfixSenderRestrictions[] = $tmp;
310       }
311     }
314     /* Add sender restriction */
315     if($this->acl_is_writeable("postfixRecipientRestrictions")){
316       if(isset($_POST['AddpostfixRecipientRestrictions'])){
317         $src      = $_POST['Source_postfixRecipientRestrictions'];
318         $dst      = $_POST['Destination_postfixRecipientRestrictions'];
319         $Filter   = $_POST['RecipientRestrictionFilter'];
320         $tmp = array();
321         $tmp['src']     = $src;
322         $tmp['dst']     = $dst;
323         $tmp['filter']  = $Filter;
324         $this->postfixRecipientRestrictions[] = $tmp;
325       }
326     }
328     /* Handle transports */
329     if($this->acl_is_writeable("postfixTransportTable")){
330       if(isset($_POST['AddpostfixTransportTable'])){
331         $src = trim($_POST['Source_postfixTransportTable']);  
332         $dst = trim($_POST['Destination_postfixTransportTable']);    
333         $prt = trim($_POST['TransportProtocol']);
335         $tmp2 = array();
336         if((!empty($src)) && (!empty($dst))){
337           if(preg_match("/:/",$dst)){
338             $tmp = explode(":",$dst);
339             $port = trim($tmp[1]);
340             $ip   = trim($tmp[0]);
342             if((tests::is_ip($ip)) && (is_numeric($port))){
343               $dst = "[".$ip."]:".$port;
344             }
345           }
346           if(tests::is_ip($dst)){
347             $dst = "[".$dst."]";
348           }
349           $tmp2 ['src'] = $src;
350           $tmp2 ['dst'] = $dst;
351           $tmp2 ['prt'] = $prt;
353           $this->postfixTransportTable[] = $tmp2;  
354         } 
355       }
356     }
358     /* Set attributes */
359     foreach($this->attributes as $attr){
360       $smarty->assign($attr,$this->$attr);
361     }
364     /* Create list for translation tables */
365     $this->protocolsList->setAcl($this->getacl('postfixTransportTable'));
366     $lData = array();
367     foreach($this->postfixTransportTable as $key => $entry){
368       $lData[$key]=array('data' => array($entry['src'],$entry['dst'],$entry['prt']));
369     }
370     $this->protocolsList->setListData($this->postfixTransportTable, $lData);
371     $this->protocolsList->update();
372     $smarty->assign("postfixTransportTableList" ,$this->protocolsList->render());
375     /* Create list for sender restrictions */
376     $this->senderRestrictionList->setAcl($this->getacl('postfixSenderRestrictions'));
377     $lData = array();
378     foreach($this->postfixSenderRestrictions as $key => $entry){
379       $lData[$key]=array('data' => array($entry['src'],$entry['dst'],$entry['filter']));
380     }
381     $this->senderRestrictionList->setListData($this->postfixSenderRestrictions, $lData);
382     $this->senderRestrictionList->update();
383     $smarty->assign("postfixSenderRestrictionsList" ,$this->senderRestrictionList->render());
386     /* Create list for translation tables */
387     $this->recipientRestrictionList->setAcl($this->getacl('postfixRecipientRestrictions'));
388     $lData = array();
389     foreach($this->postfixRecipientRestrictions as $key => $entry){
390       $lData[$key]=array('data' => array($entry['src'],$entry['dst'],$entry['filter']));
391     }
392     $this->recipientRestrictionList->setListData($this->postfixRecipientRestrictions, $lData);
393     $this->recipientRestrictionList->update();
394     $smarty->assign("postfixRecipientRestrictionsList" ,$this->recipientRestrictionList->render());
396     
397     /* set new status */
398     if(isset($_POST['ExecAction'])){
399       if(isset($this->Actions[$_POST['action']])){
400         $this->setStatus($_POST['action']);
401       }
402     }
405     $smarty->assign("is_new",                       $this->dn);
406     $smarty->assign("is_acc",                       $this->initially_was_account);
407     $smarty->assign("TransportProtocols",           $this->TransportProtocols);
408     $smarty->assign("Actions",                      $this->Actions);
409     $smarty->assign("RestrictionFilters",           $this->RestrictionFilters);
410     $smarty->assign("postfixTransportTable" ,       $this->getTransports());
411     $smarty->assign("postfixSenderRestrictions" ,   $this->getSenderRestrictions());
412     $smarty->assign("postfixRecipientRestrictions" ,$this->getRecipientRestrictions());
414     return($smarty->fetch(get_template_path("goMailServer.tpl",TRUE,dirname(__FILE__))));
415   }
417  
418   /* return transports formated for select box */ 
419   function getTransports()
420   {
421     $ret = array();
422     foreach($this->postfixTransportTable as $key => $vals){
423       $ret[$key] = $vals['src']." -> ".$vals['prt'].":".$vals['dst'];
424     }
425     return($ret);
426   }
429   /* return sender restriction formated for select box */ 
430   function getSenderRestrictions()
431   {
432     $ret = array();
433     foreach($this->postfixSenderRestrictions as $key => $vals){
434       $ret[$key] = $vals['src']." ".$vals['filter']." ".$vals['dst'];
435     }
436     return($ret);
437   }
440   /* return recipient restriction formated for select box */ 
441   function getRecipientRestrictions()
442   {
443     $ret = array();
444     foreach($this->postfixRecipientRestrictions as $key => $vals){
445       $ret[$key] = $vals['src']." ".$vals['filter']." ".$vals['dst'];
446     }
447     return($ret);
448   }
451   /* Return list entry */
452   function getListEntry()
453   {
454     $fields               = goService::getListEntry();
455     $fields['Message']    = _("Mail smtp service (Postfix)");
456     #$fields['AllowEdit']  = true;
457     return($fields);
458   }
461   function save()
462   {
463     $this->postfixMyDomain   = preg_replace("/^[^\.]+\./","",$this->postfixMyhostname);
464     $this->postfixMyhostname = preg_replace("/\..*$/","",$this->postfixMyhostname);
466     plugin::save();
468     /* Fix transport table*/
469     $i = 0 ; 
470     $this->attrs['postfixTransportTable'] = array();
471     foreach($this->postfixTransportTable as $key => $entry){
472       $this->attrs['postfixTransportTable'][] = $i.": ".$entry['src']." ".$entry['prt'].":".$entry['dst'];
473       $i ++;
474     }
477     /* Fix sender restrictions */
478     $i = 0;
479     $this->attrs['postfixSenderRestrictions'] =array();
480     foreach($this->postfixSenderRestrictions as $key => $entry){
481       $this->attrs['postfixSenderRestrictions'][] = $i.": ".$entry['src']." ".$entry['filter']." ".$entry['dst']; 
482       $i ++;  
483     }
484   
485   
486     /* Fix recipient restrictions */
487     $i = 0;
488     $this->attrs['postfixRecipientRestrictions'] =array();
489     foreach($this->postfixRecipientRestrictions as $key => $entry){
490       $this->attrs['postfixRecipientRestrictions'][] = $i.": ".$entry['src']." ".$entry['filter']." ".$entry['dst']; 
491       $i ++;  
492     }
495     /* Fix mydomains */
496     $this->attrs['postfixMyDestinations']  = array();
497     foreach($this->postfixMyDestinations as $entry){
498       $this->attrs['postfixMyDestinations'][] =$entry;
499     }
502     /* Fix mydomains */
503     if(count($this->postfixMyNetworks)){
504       $this->attrs['postfixMyNetworks']  = "";
505       foreach($this->postfixMyNetworks as $entry){
506         $this->attrs['postfixMyNetworks'] .=$entry.",";
507       }
508       $this->attrs['postfixMyNetworks'] = preg_replace("/,$/","",$this->attrs['postfixMyNetworks']);
509     }else{
510       $this->attrs['postfixMyNetworks']  = array();
511     }
513  
514     /* Check if this is a new entry ... add/modify */
515     $ldap = $this->config->get_ldap_link();
516     $ldap->cat($this->dn,array("objectClass"));
517     if($ldap->count()){
518       $ldap->cd($this->dn);
519       $ldap->modify($this->attrs);
520     }else{
521       $ldap->cd($this->dn);
522       $ldap->add($this->attrs);
523     }
524     if (!$ldap->success()){
525       msg_dialog::display(_("LDAP error"), msgPool::ldaperror($ldap->get_error(), $this->dn, 0, get_class()));
526     }
528     if($this->initially_was_account){
529       $this->handle_post_events("modify");
530       new log("modify","server/".get_class($this),$this->dn,array_keys($this->attrs),$ldap->get_error());  
531     }else{
532       $this->handle_post_events("add");
533       new log("create","server/".get_class($this),$this->dn,array_keys($this->attrs),$ldap->get_error());  
534     }
536   }
539   function check()
540   { 
541     $message =plugin::check();
542     if(!is_numeric($this->postfixHeaderSizeLimit)){
543       $message[] = msgPool::invalid(_("Header size limit",$this->postfixHeaderSizeLimit,"/[0-9]/"));
544     }
545     if(!is_numeric($this->postfixMailboxSizeLimit)){
546       $message[] = msgPool::invalid(_("Mailbox size limit",$this->postfixMailboxSizeLimit,"/[0-9]/"));
547     }
548     if(!is_numeric($this->postfixMessageSizeLimit)){
549       $message[] = msgPool::invalid(_("Message size limit",$this->postfixMessageSizeLimit,"/[0-9]/"));
550     }
551     return $message;
552   }
555   function save_object()
556   {
557     plugin::save_object();  
558   }
561   function PrepareForCopyPaste($source)
562   {
563     plugin::PrepareForCopyPaste($source);
565     $source_o = new goMailServer($this->config,$source['dn']);
566     foreach(array("postfixMyDomain","postfixMyhostname","postfixMyNetworks","postfixTransportTable","postfixSenderRestrictions","postfixRecipientRestrictions","postfixMyDestinations") as $attr){
567       $this->$attr = $source_o->$attr;
568     }
569   }
572   /* Return plugin informations for acl handling */
573   static function plInfo()
574   {
575     return (array(
576           "plShortName"   => _("Mail smtp (Postfix)"),
577           "plDescription" => _("Mail smtp - Postfix")." ("._("Services").")",
578           "plSelfModify"  => FALSE,
579           "plDepends"     => array(),
580           "plPriority"    => 98,
581           "plSection"     => array("administration"),
582           "plCategory"    => array("server"),
583           "plRequirements"=> array(
584               'ldapSchema' => array('goMailServer' => '>=2.7'),
585               'onFailureDisablePlugin' => array(get_class())
586               ),
588           "plProperties"  => array(
589               array(
590                   "name"          => "postfixProtocols",
591                   "type"          => "file",
592                   "default"       => "",
593                   "description"   => _("The 'postfixProtocols' statement defines a file to include for the postfix module in order to display user defined protocols.")."
595 File syntax:
596     name1:Description1
597     name2:Description2",
599                   "check"         => "gosaProperty::isReadableFile",
600                   "migrate"       => "",
601                   "group"         => "mail",
602                   "mandatory"     => FALSE),
603               array(
604                   "name"          => "postfixRestrictionFilters",
605                   "type"          => "file",
606                   "default"       => "",
607                   "description"   => _("The 'postfixRestrictionFilters' statement defines a file to include for the postfix module in order to display user defined restriction filters.")."
609 File syntax:
610     name1:Description1
611     name2:Description2",
612                   "check"         => "gosaProperty::isReadableFile",
613                   "migrate"       => "",
614                   "group"         => "mail",
615                   "mandatory"     => FALSE),
616               ),
618           "plProvidedAcls"=> array(
620             "start"           => _("Start"),
621             "stop"            => _("Stop"),
622             "restart"         => _("Restart"),
623             "postfixMyhostname"           => _("Visible full qualified hostname"),
624             "description"                 => _("Description"), 
625             "postfixHeaderSizeLimit"      => _("Header size limit"), 
626             "postfixMailboxSizeLimit"     => _("Max mailbox size"), 
627             "postfixMessageSizeLimit"     => _("Max message size"), 
628             "postfixMyDestinations"       => _("Domains to accept mail for"), 
629             "postfixMyNetworks"           => _("Local networks"), 
630             "postfixRelayhost"            => _("Relay host"), 
631             "postfixTransportTable"       => _("Transport table"), 
632             "postfixSenderRestrictions"   => _("Restrictions for sender"), 
633             "postfixRecipientRestrictions"=> _("Restrictions for recipient"))
634             ));
635   }
637 // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
638 ?>