diff -Nur --no-dereference e-smith-qmail-2.6.0.old/createlinks e-smith-qmail-2.6.0/createlinks --- e-smith-qmail-2.6.0.old/createlinks 2022-04-05 23:12:26.684000000 -0400 +++ e-smith-qmail-2.6.0/createlinks 2022-04-06 00:15:28.727000000 -0400 @@ -82,6 +82,7 @@ #-------------------------------------------------- $event = "bootstrap-console-save"; +event_link("pseudonym-cleanup", $event, "03"); event_link("qmail-update-group", $event, "20"); event_link("qmail-update-user", $event, "55"); templates2events("/var/qmail/users/assign", $event); @@ -121,7 +122,8 @@ #-------------------------------------------------- $event = "email-update"; -event_link("qmail-update-user", $event, "20"); +event_link("qmail-update-user", $event, "03"); +event_link("pseudonym-cleanup", $event, "30"); # If qmail-send is running, it will receive the SIGHUP and ignore the # start command. If it is not running then the signal will be ignored @@ -136,21 +138,33 @@ #-------------------------------------------------- $event = "group-create"; +event_link("pseudonym-cleanup", $event, "03"); event_link("qmail-update-group", $event, "20"); +templates2events("/var/qmail/users/assign", $event); +safe_symlink("/var/qmail/bin/qmail-newu", "root/etc/e-smith/events/$event/S55email-assign"); +safe_symlink("sighup", "root/etc/e-smith/events/$event/services2adjust/qmail"); #-------------------------------------------------- # actions for group-delete event: #-------------------------------------------------- $event = "group-delete"; +event_link("pseudonym-cleanup", $event, "03"); event_link("qmail-delete-group", $event, "20"); +templates2events("/var/qmail/users/assign", $event); +safe_symlink("/var/qmail/bin/qmail-newu", "root/etc/e-smith/events/$event/S55email-assign"); +safe_symlink("sighup", "root/etc/e-smith/events/$event/services2adjust/qmail"); #-------------------------------------------------- # actions for group-modify event: #-------------------------------------------------- $event = "group-modify"; +event_link("pseudonym-cleanup", $event, "03"); event_link("qmail-update-group", $event, "20"); +templates2events("/var/qmail/users/assign", $event); +safe_symlink("/var/qmail/bin/qmail-newu", "root/etc/e-smith/events/$event/S55email-assign"); +safe_symlink("sighup", "root/etc/e-smith/events/$event/services2adjust/qmail"); #-------------------------------------------------- # actions for user-create event: @@ -204,6 +218,7 @@ safe_symlink("restart", "root/etc/e-smith/events/$event/services2adjust/qmail"); event_link("systemd-reload", $event, "89"); event_link("systemd-default", $event, "88"); +event_link("pseudonym-cleanup", $event, "03"); #-------------------------------------------------- # actions for pseudonym-{create,delete,modify} @@ -212,6 +227,7 @@ user-create user-modify user-delete )) { + event_link("pseudonym-cleanup", $event, "03"); templates2events("/var/qmail/control/virtualdomains", $event); templates2events("/var/qmail/users/assign", $event); safe_symlink("/var/qmail/bin/qmail-newu", "root/etc/e-smith/events/$event/S55email-assign"); diff -Nur --no-dereference e-smith-qmail-2.6.0.old/root/etc/e-smith/events/actions/pseudonym-cleanup e-smith-qmail-2.6.0/root/etc/e-smith/events/actions/pseudonym-cleanup --- e-smith-qmail-2.6.0.old/root/etc/e-smith/events/actions/pseudonym-cleanup 1969-12-31 19:00:00.000000000 -0500 +++ e-smith-qmail-2.6.0/root/etc/e-smith/events/actions/pseudonym-cleanup 2022-04-05 23:45:01.430000000 -0400 @@ -0,0 +1,22 @@ +#!/usr/bin/perl -w + +use strict; +use esmith::AccountsDB; +use esmith::event; + +my $accounts = esmith::AccountsDB->open() or + die "Unable to open accounts db: $!"; + +my ($self, $account) = @ARGV; + +# Find all "pseudonyms" entries in the e-smith accounts database and +# if the pseudonyms has an unexisting Account associated we change +# it to user "admin". + +foreach my $pseudo ( $accounts->pseudonyms ) { + unless ( $accounts->get($pseudo->prop('Account')) ) { + $pseudo->set_prop( 'Account', 'admin' ); + print "orphaned pseudonym " . $pseudo->key. " has been associated to admin account" + } +} + diff -Nur --no-dereference e-smith-qmail-2.6.0.old/root/etc/e-smith/templates/var/qmail/control/virtualdomains/90pseudonyms e-smith-qmail-2.6.0/root/etc/e-smith/templates/var/qmail/control/virtualdomains/90pseudonyms --- e-smith-qmail-2.6.0.old/root/etc/e-smith/templates/var/qmail/control/virtualdomains/90pseudonyms 2016-02-05 16:46:07.000000000 -0500 +++ e-smith-qmail-2.6.0/root/etc/e-smith/templates/var/qmail/control/virtualdomains/90pseudonyms 2022-04-05 23:45:01.922000000 -0400 @@ -13,7 +13,8 @@ { next unless ($pseudo->key =~ /@/); - my $account = $pseudo->prop("Account"); + my $account = $pseudo->prop("Account"); + $account = "admin" and warn $pseudo->prop("Account") . " is not a valid account, default to admin " unless $adb->get($account); my $acct = $adb->get($account); if ($acct->prop('type') eq "group") { diff -Nur --no-dereference e-smith-qmail-2.6.0.old/root/etc/e-smith/templates/var/qmail/users/assign/70pseudonyms e-smith-qmail-2.6.0/root/etc/e-smith/templates/var/qmail/users/assign/70pseudonyms --- e-smith-qmail-2.6.0.old/root/etc/e-smith/templates/var/qmail/users/assign/70pseudonyms 2006-01-11 02:04:56.000000000 -0500 +++ e-smith-qmail-2.6.0/root/etc/e-smith/templates/var/qmail/users/assign/70pseudonyms 2022-04-05 23:45:01.678000000 -0400 @@ -61,23 +61,32 @@ unless ($account) { my $key = $pseudonym->key; - warn "pseudonym $key has no account property"; - next; + warn "pseudonym $key has no account property, default to admin"; + $account = $adb->get('admin'); + #next; } + $account = $adb->get($pseudonym->prop('Account')); - unless ($account) - { - my $key = $pseudonym->key; - warn "pseudonym $key points to account which does not exist"; - next; - } + unless ($account) + { + my $key = $pseudonym->key; + warn "pseudonym $key points to account which does not exist, default to admin"; + $account = $adb->get('admin'); + #next; + } - $account = $adb->get($account->prop('Account')) if ($account->prop('type') eq "pseudonym"); - unless ($account) + my $i = 1; + while ( $account->prop('type') eq "pseudonym") { - my $key = $pseudonym->key; - warn "pseudonym $key points to pseudonym account which points to account which does not exist"; - next; + $account = $adb->get($account->prop('Account')); + unless ($account) + { + my $key = $pseudonym->key; + warn "pseudonym $key points to account which does not exist, default to admin"; + $account = $adb->get('admin'); + last; + } + $i ++; last if $i>10; } if ($account->prop('type') eq "pseudonym")