1 <?php
3 class goMailServer extends goService{
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 }
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 }
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);
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 }
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);
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 }
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();
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("postfixTransportTableList" ,$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("postfixSenderRestrictionsList" ,$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("postfixRecipientRestrictionsList" ,$this->recipientRestrictionList->render());
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 }
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 }
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 }
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 }
666 }
667 // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
668 ?>