1#!/usr/local/bin/perl 2# Update mail file options 3 4require './dovecot-lib.pl'; 5&ReadParse(); 6&error_setup($text{'mail_err'}); 7$conf = &get_config(); 8&lock_dovecot_files($conf); 9 10# Mail file location 11if ($in{'envmode'} == 4) { 12 $in{'other'} =~ /^\S+$/ || &error($text{'mail_eenv'}); 13 $env = $in{'other'}; 14 } 15else { 16 $env = $mail_envs[$in{'envmode'}]; 17 } 18 19# Add index file location 20$env || !$in{'indexmode'} || &error($text{'mail_eindexmode'}); 21$env || !$in{'controlmode'} || &error($text{'mail_econtrolmode'}); 22if ($in{'indexmode'} == 1) { 23 $env .= ":INDEX=MEMORY"; 24 } 25elsif ($in{'indexmode'} == 2) { 26 $in{'index'} =~ /^\/\S+$/ || &error($text{'mail_eindex'}); 27 $env .= ":INDEX=".$in{'index'}; 28 } 29if ($in{'controlmode'}) { 30 $in{'control'} =~ /^\/\S+$/ || &error($text{'mail_econtrol'}); 31 $env .= ":CONTROL=".$in{'control'}; 32 } 33 34if (&find("mail_location", $conf, 2)) { 35 &save_directive($conf, "mail_location", $env eq "" ? undef : $env); 36 } 37else { 38 &save_directive($conf, "default_mail_env", $env eq "" ? undef : $env); 39 } 40 41# Check and idle intervals 42$in{'check'} != 2 || $in{'checki'} =~ /^\d+$/ || &error($text{'mail_echeck'}); 43&save_directive($conf, "mailbox_check_interval", 44 $in{'check'} == 1 ? 0 : $in{'check'} == 2 ? $in{'checki'} : undef); 45$in{'idle'} != 2 || $in{'idlei'} =~ /^\d+$/ || &error($text{'mail_eidle'}); 46&save_directive($conf, "mailbox_idle_check_interval", 47 $in{'idle'} == 1 ? 0 : $in{'idle'} == 2 ? $in{'idlei'} : undef); 48 49# Yes/no options 50&save_directive($conf, "mail_full_filesystem_access", 51 $in{'full'} ? $in{'full'} : undef); 52&save_directive($conf, "mail_save_crlf", 53 $in{'crlf'} ? $in{'crlf'} : undef); 54if (&find("mbox_dirty_syncs", $conf, 2)) { 55 &save_directive($conf, "mbox_dirty_syncs", 56 $in{'change'} ? $in{'change'} : undef); 57 } 58else { 59 &save_directive($conf, "maildir_check_content_changes", 60 $in{'change'} ? $in{'change'} : undef); 61 } 62 63# Umask 64$in{'umask_def'} || $in{'umask'} =~ /^[0-7]{4}$/ ||&error($text{'mail_eumask'}); 65&save_directive($conf, "umask", 66 $in{'umask_def'} ? undef : $in{'umask'}); 67 68# UIDL format 69if (&find("pop3_uidl_format", $conf, 2)) { 70 $uidl = $in{'pop3_uidl_format'} eq '*' ? 71 $in{'pop3_uidl_format_other'} : $in{'pop3_uidl_format'}; 72 $uidl =~ /^\S+$/ || &error($text{'mail_euidl'}); 73 &save_directive($conf, "pop3_uidl_format", $uidl); 74 } 75 76# LAST command 77&save_directive($conf, "pop3_enable_last", 78 $in{'last'} ? $in{'last'} : undef); 79 80# Index lock method 81if (&find("lock_method", $conf, 2)) { 82 &save_directive($conf, "lock_method", 83 $in{'lock_method'} ? $in{'lock_method'} : undef); 84 } 85 86# Mailbox lock method 87foreach $l ("mbox_read_locks", "mbox_write_locks") { 88 next if (!&find($l, $conf, 2)); 89 if ($in{$l."_def"}) { 90 &save_directive($conf, $l, undef); 91 } 92 else { 93 @methods = ( ); 94 for(my $i=0; defined($m = $in{$l."_".$i}); $i++) { 95 push(@methods, $m) if ($m); 96 } 97 @methods || &error($text{'mail_e'.$l}); 98 &save_directive($conf, $l, join(" ", @methods)); 99 } 100 } 101 102&flush_file_lines(); 103&unlock_dovecot_files($conf); 104&webmin_log("mail"); 105&redirect(""); 106 107