Skip to content

Commit b2214f5

Browse files
author
Michele
committed
Added MLMMJ installer
1 parent e6e98bc commit b2214f5

File tree

7 files changed

+408
-0
lines changed

7 files changed

+408
-0
lines changed

install/dist/conf/debian40.conf.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,10 @@
120120
$conf['mailman']['config_dir'] = '/etc/mailman';
121121
$conf['mailman']['init_script'] = 'mailman';
122122

123+
//* mlmmj
124+
$conf['mlmmj']['installed'] = false; // will be detected automatically during installation
125+
$conf['mlmmj']['config_dir'] = '/etc/mlmmj';
126+
123127
//* Getmail
124128
$conf['getmail']['installed'] = false; // will be detected automatically during installation
125129
$conf['getmail']['config_dir'] = '/etc/getmail';

install/dist/conf/debian60.conf.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,10 @@
120120
$conf['mailman']['config_dir'] = '/etc/mailman';
121121
$conf['mailman']['init_script'] = 'mailman';
122122

123+
//* mlmmj
124+
$conf['mlmmj']['installed'] = false; // will be detected automatically during installation
125+
$conf['mlmmj']['config_dir'] = '/etc/mlmmj';
126+
123127
//* Getmail
124128
$conf['getmail']['installed'] = false; // will be detected automatically during installation
125129
$conf['getmail']['config_dir'] = '/etc/getmail';

install/install.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -335,6 +335,12 @@
335335
$inst->configure_mailman();
336336
}
337337

338+
//* Configure mlmmj
339+
if($conf['mlmmj']['installed'] == true) {
340+
swriteln('Configuring Mlmmj');
341+
$inst->configure_mlmmj(/*install*/);
342+
}
343+
338344
//* Check for Dovecot and Courier
339345
if(!$conf['dovecot']['installed'] && !$conf['courier']['installed']) {
340346
$conf['dovecot']['installed'] = $inst->force_configure_app('Dovecot', ($install_mode == 'expert'));

install/lib/installer_base.lib.php

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,7 @@ public function find_installed_apps() {
157157
if(is_installed('postfix')) $conf['postfix']['installed'] = true;
158158
if(is_installed('postgrey')) $conf['postgrey']['installed'] = true;
159159
if(is_installed('mailman') || is_installed('mmsitepass')) $conf['mailman']['installed'] = true;
160+
if(is_installed('mlmmj') || is_installed('mlmmj-make-ml')) $conf['mlmmj']['installed'] = true;
160161
if(is_installed('apache') || is_installed('apache2') || is_installed('httpd') || is_installed('httpd2')) $conf['apache']['installed'] = true;
161162
if(is_installed('getmail')) $conf['getmail']['installed'] = true;
162163
if(is_installed('courierlogger')) $conf['courier']['installed'] = true;
@@ -809,6 +810,111 @@ public function configure_mailman($status = 'insert') {
809810
exec('/usr/sbin/postmap /var/lib/mailman/data/transport-mailman');
810811
}
811812

813+
public function configure_mlmmj() {
814+
global $conf;
815+
816+
$configDir = $conf['mlmmj']['config_dir'];
817+
@mkdir($configDir, 0755, true);
818+
819+
$configFile = 'mlmmj.conf';
820+
821+
//* Backup exiting file
822+
if(is_file("$configDir/$configFile")) {
823+
copy("$configDir/$configFile", "$configDir/$configFile~");
824+
}
825+
826+
// load files
827+
if(is_file($conf['ispconfig_install_dir']."/server/conf-custom/install/$configFile.master")) {
828+
copy($conf['ispconfig_install_dir']."/server/conf-custom/install/$configFile.master", "$configDir/$configFile");
829+
} else {
830+
copy("tpl/$configFile.master", "$configDir/$configFile");
831+
}
832+
833+
$mlConfig = @parse_ini_file("$configDir/$configFile");
834+
// Force PHP7 to use # to mark comments
835+
if(PHP_MAJOR_VERSION >= 7)
836+
$mlConfig = array_filter($mlConfig, function($v){return(substr($v,0,1)!=='#');}, ARRAY_FILTER_USE_KEY);
837+
838+
$command = 'useradd --system mlmmj --home '.$mlConfig['spool_dir'].' --shell /usr/false';
839+
if(!is_user('mlmmj')) caselog("$command &> /dev/null", __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
840+
841+
@mkdir($mlConfig['spool_dir'], 0755, true);
842+
chown($mlConfig['spool_dir'], 'mlmmj');
843+
chgrp($mlConfig['spool_dir'], 'mlmmj');
844+
845+
// Make a backup copy of master.cf and main.cf files
846+
copy($conf['postfix']['config_dir'].'/main.cf', $conf['postfix']['config_dir'].'/main.cf~mlmmj');
847+
848+
//* Update postfix main.cf
849+
$content = rf($conf['postfix']['config_dir'].'/main.cf');
850+
851+
if(!preg_match("/^alias_maps = .*hash:\/etc\/mlmmj\/aliases.*/m", $content)) {
852+
$content = preg_replace("/^alias_maps = (.*)/m", "$0, hash:$configDir/aliases", $content);
853+
}
854+
855+
if(!preg_match("/^alias_database = .*hash:\/etc\/mlmmj\/aliases.*/m", $content)) {
856+
$content = preg_replace("/^alias_database = (.*)/m", "$0, hash:$configDir/aliases", $content);
857+
}
858+
859+
if(!preg_match("/^virtual_alias_maps = .*hash:\/etc\/mlmmj\/virtual.*/m", $content)) {
860+
$content = preg_replace("/^virtual_alias_maps = (.*)/m", "$0, hash:$configDir/virtual", $content);
861+
}
862+
863+
if(!preg_match("/^transport_maps = .*hash:\/etc\/mlmmj\/transport.*/m", $content)) {
864+
$content = preg_replace("/transport_maps = (.*)/m", "$0, hash:$configDir/transport", $content);
865+
}
866+
867+
if(!preg_match("/^mlmmj_destination_recipient_limit.*/m", $content)) {
868+
$content .= "\n# Only deliver one message to Mlmmj at a time\nmlmmj_destination_recipient_limit = 1\n";
869+
}
870+
871+
wf($conf['postfix']['config_dir'].'/main.cf', $content);
872+
873+
//* Update postfix master.cf
874+
$content = rf($conf['postfix']['config_dir'].'/master.cf');
875+
if(!preg_match('/^mlmmj\s+unix\s+-\s+n\s+n\s+-\s+-\s+pipe\s*$/m', $content)) {
876+
copy($conf['postfix']['config_dir'].'/master.cf', $conf['postfix']['config_dir'].'/master.cf~mlmmj');
877+
$content .= "\n# mlmmj mailing lists\n";
878+
$content .= "mlmmj unix - n n - - pipe\n";
879+
$content .= " flags=ORhu user=mlmmj argv=/usr/local/bin/mlmmj-receive -F -L /var/spool/mlmmj/\$nexthop\n\n";
880+
wf($conf['postfix']['config_dir'].'/master.cf', $content);
881+
}
882+
883+
//* Create aliasaes
884+
touch("$configDir/aliases");
885+
exec("nohup /usr/sbin/postalias $configDir/aliases >/dev/null 2>&1");
886+
touch("$configDir/virtual");
887+
exec("nohup /usr/sbin/postmap $configDir/virtual >/dev/null 2>&1");
888+
touch("$configDir/transport");
889+
exec("nohup /usr/sbin/postmap $configDir/transport >/dev/null 2>&1");
890+
891+
// ALTER TABLE `mail_mailinglist` ADD `closedlist` enum('n','y') NOT NULL DEFAULT 'y'
892+
// ALTER TABLE `mail_mailinglist` ADD `closedlistsub` enum('n','y') NOT NULL DEFAULT 'y'
893+
// ALTER TABLE `mail_mailinglist` ADD `moderated` enum('n','y') NOT NULL DEFAULT 'n'
894+
// ALTER TABLE `mail_mailinglist` ADD `tocc` enum('n','y') NOT NULL DEFAULT 'n'
895+
// ALTER TABLE `mail_mailinglist` ADD `subonlypost` enum('n','y') NOT NULL DEFAULT 'n'
896+
// ALTER TABLE `mail_mailinglist` ADD `modonlypost` enum('n','y') NOT NULL DEFAULT 'n'
897+
// ALTER TABLE `mail_mailinglist` ADD `modnonsubposts` enum('n','y') NOT NULL DEFAULT 'n'
898+
// ALTER TABLE `mail_mailinglist` ADD `addtohdr` enum('n','y') NOT NULL DEFAULT 'n'
899+
// ALTER TABLE `mail_mailinglist` ADD `notifysub` enum('n','y') NOT NULL DEFAULT 'n'
900+
// ALTER TABLE `mail_mailinglist` ADD `notifymod` enum('n','y') NOT NULL DEFAULT 'n'
901+
// ALTER TABLE `mail_mailinglist` ADD `noarchive` enum('n','y') NOT NULL DEFAULT 'n'
902+
// ALTER TABLE `mail_mailinglist` ADD `nosubconfirm` enum('n','y') NOT NULL DEFAULT 'n'
903+
// ALTER TABLE `mail_mailinglist` ADD `noget` enum('n','y') NOT NULL DEFAULT 'n'
904+
// ALTER TABLE `mail_mailinglist` ADD `notoccdenymails` enum('n','y') NOT NULL DEFAULT 'n'
905+
// ALTER TABLE `mail_mailinglist` ADD `noaccessdenymails` enum('n','y') NOT NULL DEFAULT 'n'
906+
// ALTER TABLE `mail_mailinglist` ADD `nosubonlydenymails` enum('n','y') NOT NULL DEFAULT 'n'
907+
// ALTER TABLE `mail_mailinglist` ADD `nomodonlydenymails` enum('n','y') NOT NULL DEFAULT 'n'
908+
// ALTER TABLE `mail_mailinglist` ADD `nosubmodmails` enum('n','y') NOT NULL DEFAULT 'n'
909+
// ALTER TABLE `mail_mailinglist` ADD `nodigesttext` enum('n','y') NOT NULL DEFAULT 'n'
910+
// ALTER TABLE `mail_mailinglist` ADD `nodigestsub` enum('n','y') NOT NULL DEFAULT 'n'
911+
// ALTER TABLE `mail_mailinglist` ADD `nonomailsub` enum('n','y') NOT NULL DEFAULT 'n'
912+
// ALTER TABLE `mail_mailinglist` ADD `nomaxmailsizedenymails` enum('n','y') NOT NULL DEFAULT 'n'
913+
// ALTER TABLE `mail_mailinglist` ADD `nolistsubsemail` enum('n','y') NOT NULL DEFAULT 'n'
914+
// ALTER TABLE `mail_mailinglist` ADD `ifmodsendonlymodmoderate` enum('n','y') NOT NULL DEFAULT 'n'
915+
// ALTER TABLE `mail_mailinglist` ADD `notmetoo` enum('n','y') NOT NULL DEFAULT 'n'
916+
}
917+
812918
public function get_postfix_service($service, $type) {
813919
global $conf;
814920

install/tpl/mlmmj.conf.master

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
# Path of the skeleton for mailing lists
2+
skel_dir = /usr/share/mlmmj/text.skel
3+
4+
# Where to store ML data and archive
5+
spool_dir = /var/spool/mlmmj

install/update.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -351,6 +351,12 @@
351351
$inst->configure_mailman('update');
352352
}
353353

354+
//* Configure mlmmj
355+
if($conf['mlmmj']['installed'] == true && $inst->reconfigure_app('Mlmmj', $reconfigure_services_answer)) ) {
356+
swriteln('Configuring Mlmmj');
357+
$inst->configure_mlmmj(/*update*/);
358+
}
359+
354360
//** Configure Spamasassin
355361
if($inst->reconfigure_app('Spamassassin', $reconfigure_services_answer)) {
356362
swriteln('Configuring Spamassassin');

0 commit comments

Comments
 (0)