Skip to content

Commit e1a552a

Browse files
author
Till Brehm
committed
Merge branch 'master' into 'master'
Added MLMMJ installer I've tryed to implement the installer for mlmmj This is my first experience on merging with an external project. I hope all my work is correct. Anyway, I'm here and responsive to your comments After that, I'm working, by now on the ML web interface. I'll do another merge request when it will be ready. See merge request !432
2 parents e6e98bc + 86926a6 commit e1a552a

File tree

10 files changed

+432
-0
lines changed

10 files changed

+432
-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: 107 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;
@@ -313,6 +314,7 @@ public function add_database_server_record() {
313314
$tpl_ini_array['web']['php_ini_path_cgi'] = $conf['apache']['php_ini_path_cgi'];
314315
$tpl_ini_array['mail']['pop3_imap_daemon'] = ($conf['dovecot']['installed'] == true)?'dovecot':'courier';
315316
$tpl_ini_array['mail']['mail_filter_syntax'] = ($conf['dovecot']['installed'] == true)?'sieve':'maildrop';
317+
$tpl_ini_array['mail']['mailinglist'] = ($conf['mlmmj']['installed'] == true)?'mlmmj':'mailman';
316318
$tpl_ini_array['dns']['bind_user'] = $conf['bind']['bind_user'];
317319
$tpl_ini_array['dns']['bind_group'] = $conf['bind']['bind_group'];
318320
$tpl_ini_array['dns']['bind_zonefiles_dir'] = $conf['bind']['bind_zonefiles_dir'];
@@ -809,6 +811,111 @@ public function configure_mailman($status = 'insert') {
809811
exec('/usr/sbin/postmap /var/lib/mailman/data/transport-mailman');
810812
}
811813

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

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/tpl/server.ini.master

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ overquota_notify_client=y
5454
overquota_notify_freq=7
5555
overquota_notify_onok=n
5656
sendmail_path=/usr/sbin/sendmail
57+
mailinglist=mlmmj
5758

5859
[getmail]
5960
getmail_config_dir=/etc/getmail

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');

interface/web/admin/form/server_config.tform.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -608,6 +608,12 @@
608608
'default' => 'n',
609609
'value' => array(0 => 'n', 1 => 'y')
610610
),
611+
'mailinglist' => array(
612+
'datatype' => 'VARCHAR',
613+
'formtype' => 'SELECT',
614+
'default' => '20',
615+
'value' => array('mlmmj' => 'Mlmmj', 'mailman' => 'Mailman')
616+
),
611617
//#################################
612618
// ENDE Datatable fields
613619
//#################################

interface/web/admin/templates/server_config_mail_edit.htm

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,12 @@ <h1><tmpl_var name="list_head_txt"></h1>
117117
{tmpl_var name='overquota_notify_onok'}
118118
</div>
119119
</div>
120+
<div class="form-group">
121+
<label class="col-sm-3 control-label">{tmpl_var name='mailinglist_txt'}</label>
122+
<div class="col-sm-9"><select name="mailinglist" id="mailinglist" class="form-control">
123+
{tmpl_var name='mailinglist'}
124+
</select></div>
125+
</div>
120126

121127

122128
<input type="hidden" name="id" value="{tmpl_var name='id'}">

0 commit comments

Comments
 (0)