commit
c485f53762
12 changed files with 415 additions and 0 deletions
@ -0,0 +1,41 @@ |
||||
# SOME DESCRIPTIVE TITLE. |
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER |
||||
# This file is distributed under the same license as the PACKAGE package. |
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. |
||||
# |
||||
#, fuzzy |
||||
msgid "" |
||||
msgstr "" |
||||
"Project-Id-Version: PACKAGE VERSION\n" |
||||
"Report-Msgid-Bugs-To: \n" |
||||
"POT-Creation-Date: 2016-01-14 16:35+0100\n" |
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" |
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" |
||||
"Language-Team: LANGUAGE <LL@li.org>\n" |
||||
"Language: \n" |
||||
"MIME-Version: 1.0\n" |
||||
"Content-Type: text/plain; charset=utf-8\n" |
||||
"Content-Transfer-Encoding: 8bit\n" |
||||
|
||||
#: root/etc/e-smith/templates/usr/lib/smeserver-expire-accounts/adminNotifNextExpirations.tmpl:11 |
||||
msgid "System Administrator" |
||||
msgstr "" |
||||
|
||||
#: root/etc/e-smith/templates/usr/lib/smeserver-expire-accounts/adminNotifNextExpirations.tmpl:13 |
||||
msgid "Account Expiration Notifier" |
||||
msgstr "" |
||||
|
||||
#: root/etc/e-smith/templates/usr/lib/smeserver-expire-accounts/adminNotifNextExpirations.tmpl:16 |
||||
msgid "One or more user accounts will expire soon" |
||||
msgstr "" |
||||
|
||||
#: root/etc/e-smith/templates/usr/lib/smeserver-expire-accounts/adminNotifNextExpirations.tmpl:19 |
||||
msgid "" |
||||
"The following user accounts will expire soon:\n" |
||||
"\n" |
||||
msgstr "" |
||||
|
||||
#: root/etc/e-smith/templates/usr/lib/smeserver-expire-accounts/adminNotifNextExpirations.tmpl:22 |
||||
#, perl-format |
||||
msgid "%s will expire in %d days" |
||||
msgstr "" |
@ -0,0 +1,35 @@ |
||||
# SOME DESCRIPTIVE TITLE. |
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER |
||||
# This file is distributed under the same license as the PACKAGE package. |
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. |
||||
# |
||||
#, fuzzy |
||||
msgid "" |
||||
msgstr "" |
||||
"Project-Id-Version: PACKAGE VERSION\n" |
||||
"Report-Msgid-Bugs-To: \n" |
||||
"POT-Creation-Date: 2016-01-14 16:35+0100\n" |
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" |
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" |
||||
"Language-Team: LANGUAGE <LL@li.org>\n" |
||||
"Language: \n" |
||||
"MIME-Version: 1.0\n" |
||||
"Content-Type: text/plain; charset=utf-8\n" |
||||
"Content-Transfer-Encoding: 8bit\n" |
||||
|
||||
#: root/etc/e-smith/templates/usr/lib/smeserver-expire-accounts/userNotifAccountExpiration.tmpl:13 |
||||
msgid "Account Expiration Notifier" |
||||
msgstr "" |
||||
|
||||
#: root/etc/e-smith/templates/usr/lib/smeserver-expire-accounts/userNotifAccountExpiration.tmpl:16 |
||||
msgid "Your user account will expire soon" |
||||
msgstr "" |
||||
|
||||
#: root/etc/e-smith/templates/usr/lib/smeserver-expire-accounts/userNotifAccountExpiration.tmpl:19 |
||||
#, perl-format |
||||
msgid "Your user account will expire in %d days, after what it will be locked" |
||||
msgstr "" |
||||
|
||||
#: root/etc/e-smith/templates/usr/lib/smeserver-expire-accounts/userNotifAccountExpiration.tmpl:20 |
||||
msgid "Please contact your network administrator for more details." |
||||
msgstr "" |
@ -0,0 +1,43 @@ |
||||
# SOME DESCRIPTIVE TITLE. |
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER |
||||
# This file is distributed under the same license as the PACKAGE package. |
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. |
||||
# |
||||
#, fuzzy |
||||
msgid "" |
||||
msgstr "" |
||||
"Project-Id-Version: PACKAGE VERSION\n" |
||||
"Report-Msgid-Bugs-To: \n" |
||||
"POT-Creation-Date: 2016-01-14 16:33+0100\n" |
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" |
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" |
||||
"Language-Team: LANGUAGE <LL@li.org>\n" |
||||
"Language: \n" |
||||
"MIME-Version: 1.0\n" |
||||
"Content-Type: text/plain; charset=utf-8\n" |
||||
"Content-Transfer-Encoding: 8bit\n" |
||||
|
||||
#: root/etc/e-smith/templates/usr/lib/smeserver-expire-accounts/adminNotifNextExpirations.tmpl:11 |
||||
msgid "System Administrator" |
||||
msgstr "Administrateur Système" |
||||
|
||||
#: root/etc/e-smith/templates/usr/lib/smeserver-expire-accounts/adminNotifNextExpirations.tmpl:13 |
||||
msgid "Account Expiration Notifier" |
||||
msgstr "Notification d'expiration des comptes" |
||||
|
||||
#: root/etc/e-smith/templates/usr/lib/smeserver-expire-accounts/adminNotifNextExpirations.tmpl:16 |
||||
msgid "One or more user accounts will expire soon" |
||||
msgstr "Un ou plusieurs comptes utilisateur est sur le point d'expirer" |
||||
|
||||
#: root/etc/e-smith/templates/usr/lib/smeserver-expire-accounts/adminNotifNextExpirations.tmpl:19 |
||||
msgid "" |
||||
"The following user accounts will expire soon:\n" |
||||
"\n" |
||||
msgstr "" |
||||
"Les comptes utilisateurs suivants sont sur le point d'expirer:\n" |
||||
"\n" |
||||
|
||||
#: root/etc/e-smith/templates/usr/lib/smeserver-expire-accounts/adminNotifNextExpirations.tmpl:22 |
||||
#, perl-format |
||||
msgid "%s will expire in %d days" |
||||
msgstr "%s expire dans %d jours" |
@ -0,0 +1,35 @@ |
||||
# SOME DESCRIPTIVE TITLE. |
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER |
||||
# This file is distributed under the same license as the PACKAGE package. |
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. |
||||
# |
||||
#, fuzzy |
||||
msgid "" |
||||
msgstr "" |
||||
"Project-Id-Version: PACKAGE VERSION\n" |
||||
"Report-Msgid-Bugs-To: \n" |
||||
"POT-Creation-Date: 2016-01-14 16:35+0100\n" |
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" |
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" |
||||
"Language-Team: LANGUAGE <LL@li.org>\n" |
||||
"Language: \n" |
||||
"MIME-Version: 1.0\n" |
||||
"Content-Type: text/plain; charset=utf-8\n" |
||||
"Content-Transfer-Encoding: 8bit\n" |
||||
|
||||
#: root/etc/e-smith/templates/usr/lib/smeserver-expire-accounts/userNotifAccountExpiration.tmpl:13 |
||||
msgid "Account Expiration Notifier" |
||||
msgstr "Notification d'expiration des comptes" |
||||
|
||||
#: root/etc/e-smith/templates/usr/lib/smeserver-expire-accounts/userNotifAccountExpiration.tmpl:16 |
||||
msgid "Your user account will expire soon" |
||||
msgstr "Votre compte utilisateur expire prochainement" |
||||
|
||||
#: root/etc/e-smith/templates/usr/lib/smeserver-expire-accounts/userNotifAccountExpiration.tmpl:19 |
||||
#, perl-format |
||||
msgid "Your user account will expire in %d days, after what it will be locked" |
||||
msgstr "Votre compte utilisateur expire dans %d jours, après quoi il sera vérouillé" |
||||
|
||||
#: root/etc/e-smith/templates/usr/lib/smeserver-expire-accounts/userNotifAccountExpiration.tmpl:20 |
||||
msgid "Please contact your network administrator for more details." |
||||
msgstr "Veuillez contacter votre administrateur réseau pour plus de renseignements." |
@ -0,0 +1 @@ |
||||
enabled |
@ -0,0 +1 @@ |
||||
service |
@ -0,0 +1,8 @@ |
||||
{ |
||||
if (($ExpireAccounts{'status'} || 'disabled) ne 'enabled'){ |
||||
$OUT .= "# Account expiration is disabled\n"; |
||||
} |
||||
else{ |
||||
$OUT .= "1 0 * * * root /sbin/e-smith/expire-accounts\n"; |
||||
} |
||||
} |
@ -0,0 +1,26 @@ |
||||
{ |
||||
use esmith::I18N; |
||||
use Locale::gettext; |
||||
|
||||
my $i18n = new esmith::I18N; |
||||
$i18n->setLocale('adminNotifNextExpirations.tmpl'); |
||||
|
||||
my $domain = $conf->get_value("DomainName") || "localhost"; |
||||
my $systemName = $conf->get_value("SystemName") || "SME Server"; |
||||
|
||||
$OUT .= "To: ".gettext("System Administrator")." <admin\@${domain}>\n"; |
||||
$OUT .= "From: \"". |
||||
gettext("Account Expiration Notifier"). |
||||
"\" <do-not-reply\@${domain}>\n"; |
||||
$OUT .= "Subject: ". |
||||
gettext("One or more user accounts will expire soon"). |
||||
"\n"; |
||||
$OUT .= "Content-Type: text/plain; charset='utf-8'\n"; |
||||
$OUT .= "Content-Transfer-Encoding: 8bit\n"; |
||||
|
||||
$OUT .= gettext("The following user accounts will expire soon:\n\n"); |
||||
|
||||
foreach my $u (sort keys %$users){ |
||||
$OUT .= " * " . sprintf(gettext("%s will expire in %d days"), "$users->{$u}->{name} ($u)", $users->{$u}->{remaining}) . "\n"; |
||||
} |
||||
} |
@ -0,0 +1,23 @@ |
||||
{ |
||||
use esmith::I18N; |
||||
use Locale::gettext; |
||||
|
||||
my $i18n = new esmith::I18N; |
||||
$i18n->setLocale('userNotifAccountExpiration.tmpl'); |
||||
|
||||
my $domain = $conf->get_value("DomainName") || "localhost"; |
||||
my $systemName = $conf->get_value("SystemName") || "SME Server"; |
||||
|
||||
$OUT .= "To: <${user}\@${domain}>\n"; |
||||
$OUT .= "From: \"". |
||||
gettext("Account Expiration Notifier"). |
||||
"\" <do-not-reply\@${domain}>\n"; |
||||
$OUT .= "Subject: ". |
||||
gettext("Your user account will expire soon"). |
||||
"\n"; |
||||
$OUT .= "Content-Type: text/plain; charset='utf-8'\n"; |
||||
$OUT .= "Content-Transfer-Encoding: 8bit\n"; |
||||
|
||||
$OUT .= sprintf gettext("Your user account will expire in %d days, after what it will be locked"), $days; |
||||
$OUT .= "\n\n" . gettext("Please contact your network administrator for more details."); |
||||
} |
@ -0,0 +1,139 @@ |
||||
#!/usr/bin/perl -w |
||||
|
||||
use esmith::AccountsDB; |
||||
use esmith::ConfigDB; |
||||
use esmith::event; |
||||
use Text::Template; |
||||
use DateTime; |
||||
use Getopt::Long; |
||||
|
||||
my $a = esmith::AccountsDB->open || die "Couldn't open the AccountsDB"; |
||||
my $c = esmith::ConfigDB->open || die "Couldn't open the ConfigDB"; |
||||
my $domain = $c->get_value('DomainName'); |
||||
|
||||
my $debug = 0; |
||||
|
||||
GetOptions( |
||||
debug => \$debug, |
||||
); |
||||
|
||||
|
||||
my $service = $c->get('ExpireAccounts') || |
||||
$c->new_record('ExpireAccounts', |
||||
{ |
||||
type => 'service', |
||||
status => 'enabled' |
||||
} |
||||
); |
||||
|
||||
my $warn_delay = $service->prop('WarningDelay') || '30'; |
||||
my $warn_users = $service->prop('WarnUsers') || 'no'; |
||||
my $recipient = $service->prop('WarningRecipient') || 'root'; |
||||
my $days_between_warn = $service->prop('DaysBetweenWarnings') || '5'; |
||||
|
||||
my $rem = {}; |
||||
my @lock = (); |
||||
|
||||
my $now = DateTime->now; |
||||
|
||||
foreach my $user ($a->users){ |
||||
my $date = $user->prop('ExpiresOn') || 'never'; |
||||
if ($date eq 'never'){ |
||||
print $user->key . ": No expiration date set\n" if $debug; |
||||
next; |
||||
} |
||||
elsif ($date !~ m/^(\d{4})\-(\d{1,2})\-(\d{1,2})/){ |
||||
print $user->key . ": Invalide expiration date ($date)\n" if $debug; |
||||
next; |
||||
} |
||||
my $exp = DateTime->new( |
||||
year => $1, |
||||
month => $2, |
||||
day => $3, |
||||
); |
||||
|
||||
if ($exp < $now){ |
||||
print $user->key . ": Expiration date is passed, account must be locked\n" if $debug; |
||||
push @lock, $user->key; |
||||
} |
||||
else{ |
||||
my $remaining = ($exp - $now)->in_units('days'); |
||||
print $user->key . ": Account will expire on $date ($remaining days)\n" if $debug; |
||||
$rem->{$user->key} = $remaining if $remaining < $warn_delay; |
||||
} |
||||
} |
||||
|
||||
# Lock accounts which need to be locked now |
||||
foreach my $u (@lock){ |
||||
event_signal('user-lock', $u); |
||||
$a->del_prop($u, 'ExpiresOn'); |
||||
$a->del_prop($u, 'ExpirationLastNotified'); |
||||
} |
||||
|
||||
# Send a warning for accounts which will be locked soon |
||||
my $send_warn_for = {}; |
||||
foreach my $user (keys %$rem){ |
||||
my $rec = $a->get($user) || next; |
||||
my $last_notif = $rec->prop('ExpirationLastNotified') || 'never'; |
||||
if ($last_notif =~ m/^(\d{4})\-(\d{1,2})\-(\d{1,2})/){ |
||||
$last_notif = DateTime->new( |
||||
year => $1, |
||||
month => $2, |
||||
day => $3, |
||||
); |
||||
if (($last_notif - $now)->in_units('days') < $days_between_warn){ |
||||
next; |
||||
} |
||||
} |
||||
|
||||
my $templates = '/etc/e-smith/templates'; |
||||
my $source = '/usr/lib/smeserver-expire-accounts/userNotifAccountExpiration.tmpl'; |
||||
# Use templates-custom version by preference if it exists |
||||
-f "${templates}-custom${source}" and $templates .= "-custom"; |
||||
|
||||
if ($warn_users){ |
||||
my $t = new Text::Template(TYPE => 'FILE', |
||||
SOURCE => "${templates}${source}"); |
||||
|
||||
open(QMAIL, "|/var/qmail/bin/qmail-inject -fdo-not-reply\@$domain $user") |
||||
|| die "Could not send mail via qmail-inject!\n"; |
||||
|
||||
print QMAIL $t->fill_in( HASH => { |
||||
conf => \$c, |
||||
user => $user, |
||||
days => $rem->{$user} |
||||
}); |
||||
|
||||
close QMAIL; |
||||
} |
||||
|
||||
$rec->set_prop('ExpirationLastNotified', $now->ymd); |
||||
# This one will be notified to the admin |
||||
$send_warn_for->{$user} = { |
||||
remaining => $rem->{$user}, |
||||
name => $rec->prop('FirstName') . ' ' . $rec->prop('LastName') |
||||
}; |
||||
} |
||||
|
||||
if (keys %$send_warn_for > 0){ |
||||
$templates = '/etc/e-smith/templates'; |
||||
$source = '/usr/lib/smeserver-expire-accounts/adminNotifNextExpirations.tmpl'; |
||||
|
||||
# Use templates-custom version by preference if it exists |
||||
-f "${templates}-custom${source}" and $templates .= "-custom"; |
||||
|
||||
my $t = new Text::Template(TYPE => 'FILE', |
||||
SOURCE => "${templates}${source}"); |
||||
|
||||
open(QMAIL, "|/var/qmail/bin/qmail-inject -fdo-not-reply\@$domain $recipient") |
||||
|| die "Could not send mail via qmail-inject!\n"; |
||||
|
||||
print QMAIL $t->fill_in( HASH => { |
||||
conf => \$c, |
||||
users => \$send_warn_for |
||||
}); |
||||
|
||||
close QMAIL; |
||||
} |
||||
|
||||
exit 0; |
@ -0,0 +1,54 @@ |
||||
%define version 0.0.1 |
||||
%define release 0.beta4 |
||||
%define name smeserver-expire-accounts |
||||
|
||||
|
||||
Summary: Second qmail instance |
||||
Name: %{name} |
||||
Version: %{version} |
||||
Release: %{release}%{?dist} |
||||
License: GPL |
||||
Group: Networking/Daemons |
||||
Source: %{name}-%{version}.tar.gz |
||||
|
||||
BuildRoot: /var/tmp/%{name}-%{version}-%{release}-buildroot |
||||
BuildArchitectures: noarch |
||||
BuildRequires: e-smith-devtools |
||||
BuildRequires: gettext |
||||
|
||||
Requires: e-smith-base >= 5.2.0 |
||||
Requires: qmail |
||||
|
||||
%description |
||||
With this, you can set an expiration date for user accounts |
||||
|
||||
%changelog |
||||
* Thu Jan 14 2016 Daniel Berteaud <daniel@firewall-services.com> - 0.1.0-1.sme |
||||
- Initial release |
||||
|
||||
%prep |
||||
%setup -q -n %{name}-%{version} |
||||
|
||||
%build |
||||
#perl createlinks |
||||
/sbin/e-smith/generate-lexicons |
||||
|
||||
%install |
||||
/bin/rm -rf $RPM_BUILD_ROOT |
||||
(cd root; /usr/bin/find . -depth -print | /bin/cpio -dump $RPM_BUILD_ROOT) |
||||
/bin/rm -f %{name}-%{version}-filelist |
||||
/sbin/e-smith/genfilelist $RPM_BUILD_ROOT \ |
||||
> %{name}-%{version}-filelist |
||||
|
||||
%files -f %{name}-%{version}-filelist |
||||
%defattr(-,root,root) |
||||
|
||||
%clean |
||||
rm -rf $RPM_BUILD_ROOT |
||||
|
||||
%pre |
||||
|
||||
%post |
||||
|
||||
%preun |
||||
|
@ -0,0 +1,9 @@ |
||||
#!/bin/sh |
||||
|
||||
for L in en_US fr_FR; do |
||||
mkdir -p po/$L |
||||
for F in adminNotifNextExpirations userNotifAccountExpiration; do |
||||
xgettext -j -L Perl -o po/$L/$F.tmpl.po \ |
||||
root/etc/e-smith/templates/usr/lib/smeserver-expire-accounts/$F.tmpl |
||||
done |
||||
done |
Loading…
Reference in new issue