Commit 4f959e02 authored by bmortier's avatar bmortier

Merge branch '1.1-fixes'

parents 8a571cb3 621893e8
FusionDirectory changelog
=========================
* FusionDirectory 1.1.1
[Fix] Bugs #5511: Error displayed when SASL user created
[Fix] Bugs #5528: PHP error and wrong display in ACL assignments in some cases
[Fix] Bugs #5538: Unable to migrate winstations from 1.0.20 to 1.1
[Fix] FusionDirectory plugins - Bugs #5550: Unsufficient rights for accessing type 'user'
[Fix] FusionDirectory plugins - Bugs #5551: Cannot add a POSIX group to a user
[Fix] FusionDirectory plugins - Bugs #5553: Crash error when we remove a posix group that we used in a template
[Fix] Bugs #5554: Trim the certificates path
[Fix] FusionDirectory plugins - Bugs #5557: Trim the certificates path
[Fix] Bugs #5562: Read rights on template let see the users in the root branch
[Fix] FusionDirectory plugins - Bugs #5564: Automatic primary group is created at the root and not in the branch of the user
[Feature] FusionDirectory plugins - Wishlist #5514: System - DHCP Tab - Preselect DHCP SUBNET according IP address or mask others
* FusionDirectory 1.1
[Fix] Bugs #946: class_plugin should be reviewed
......
[Donate to FusionDirectory on Liberapay](https://liberapay.com/fusiondirectory/donate)
# FusionDirectory
[FusionDirectory][FusionDirectory] provides a solution to daily management of data stored in an LDAP directory. Becoming the cornerstone of the information system, the corporate directory becomes more complex offering more data and managing more infrastructure services.
This interface is simple and can be used to delegate fully or partly the data management to non-specialists.
## Features
* Users, groups, mail, sudo, ssh, systems, services management, dhcp, dns
* Complex Roles Management :
* ACLs are only used by FusionDirectory and are not intrusive to other applications using the directory server.
* ACLs allow fine grained control to who can do what into FusionDirectory
* ACLs can be assigned to roles. We may have a role
* User : it can connect to FusionDirectory with his login / password to change is data only when permitted by the admin.
* Local administrator : this role will be able to manage users and groups and also a branch.
* global administrator : this role has the right to do everything.
* human resources : this role can only create users from template to optimize the flow of arrival of new people.
* Access to multiple LDAP trees
* FusionDirectory Triggers
* FusionDirectory incorporates a series of triggers that can launch a specific action based on a task FusionDirectory must run.
* These triggers are associated with a content type (LDAP user, group, server, password, service (etc. ..) and the triggering action (create, edit, delete, change password … )
* This system is very useful when certain actions should be followed on arrival or departure of a person in the company For example, when creating a user, a script generation form can be executed automatically with information from the LDAP server.
* This can be useful for generating badges with photo, a form of access to the canteen or sending an email to warn of the actual arrival of the person.
* This system is also convenient when we want to deploy the account of that person on an application does not support LDAP (FusionDirectory can also transmit the password) Another example is when a user leaves, you must:
* archive and delete his mailbox
* archive and remove its network space
* delete him from third party applications not connected to LDAP.
* All of this can be easily done by shell scripts (at least in UNIX environment) and run automatically after the suppression of the person by the administrator in FusionDirectory
* The interaction with non-LDAP applications
FusionDirectory stores information of a service or a server on an LDAP server.
How about when this service does not have the opportunity to interact with LDAP?
This question can be solved by creating:
* LDAP schema suitable for application to the LDAP server
* A plugin for its management in FusionDirectory with the simple plugin api
* An Argonaut module for the client installed on the server
## Get help
There are a couple ways you can try [to get help][get help].You can also join the `#fusiondirectory` IRC channel at freenode.net.
You can [register on our system][register] and enter your bug [on the forge][issues-forge] or [here at github][issues-github] even if the forge is the prefered way of dealing with bugs
## IRC Etiquette
* If we don't answer right away then just hang out in the channel. Someone will
eventually write back to you as it just means we are away from keyboard,
working on something else, or in a different timezone than you.
* You should treat IRC as what it is: asynchronous chat. Sure the messages can
be instant but in most channels people are in different time zones. At times
chat replies can be in excess of 24hrs.
## Donate
If you like [FusionDirectory][FusionDirectory] and would like to [donate][donate-liberapay] even a small amount you can go to our Liberapay account
## License
[FusionDirectory][FusionDirectory] is [GPL 2 License](COPYING).
[FusionDirectory]: https://www.fusiondirectory.org/
[get help]: https://www.fusiondirectory.org/contact-us/
[register]: https://register.fusiondirectory.org
[issues-forge]: https://forge.fusiondirectory.org/projects/fd/issues/new
[issues-github]: https://github.com/fusiondirectory/fusiondirectory/issues
[donate-liberapay]: https://liberapay.com/fusiondirectory/donate
......@@ -95,6 +95,7 @@ my $systemrdn = "ou=systems";
my $dnsrdn = "ou=dns";
my $dhcprdn = "ou=dhcp";
my $workstationrdn = "ou=workstations,ou=systems";
my $winstationrdn = "ou=computers,ou=systems";
#################################################################################################################################################
......@@ -959,8 +960,6 @@ sub branch_exists {
# function that check LDAP configuration
sub check_ldap {
read_ldap_config();
# initiate the LDAP connexion
my %hash_ldap_param = get_ldap_connexion();
......@@ -1051,8 +1050,6 @@ sub check_ldap {
# function that check for duplicated uid or gid numbers
sub check_id_numbers {
read_ldap_config();
# initiate the LDAP connexion
my %hash_ldap_param = get_ldap_connexion();
......@@ -1190,6 +1187,7 @@ sub migrate_users {
'(objectClass=person)'.
'(objectClass=OpenLDAPperson)'.
')'.
'(!(objectClass=ipHost))'.
'(!(objectClass=inetOrgPerson))'.
'(uid=*)'.
')',
......@@ -1464,7 +1462,7 @@ sub migrate_winstations
my $ldap = $hash_ldap_param{ldap};
my $mesg = $ldap->search(
filter => "(&(!(objectClass=fdWorkstation))(objectClass=sambaSamAccount))",
filter => "(&(!(objectClass=fdWorkstation))(!(objectClass=inetOrgPerson))(!(objectClass=posixGroup))(uid=*\$)(objectClass=sambaSamAccount))",
base => $base
);
$mesg->code && die $mesg->error;
......@@ -1485,8 +1483,16 @@ sub migrate_winstations
$entry->replace('cn' => $cn);
my $newrdn = "cn=".$cn;
my $dn_old = $entry->dn();
$dn_old =~ m/^[^,]+,.*$systemrdn,(.+)$/ or die "Could not parse dn ".$dn_old."\n";
my $entrybase = $1;
my $entrybase;
if ($dn_old =~ m/^[^,]+,$winstationrdn,(.+)$/) {
$entrybase = $1;
} elsif ($dn_old =~ m/^[^,]+,.*$systemrdn,(.+)$/) {
$entrybase = $1;
} elsif ($dn_old =~ m/^[^,]+,.*$winstationrdn,(.+)$/) {
$entrybase = $1;
} else {
die "Could not parse dn ".$dn_old."\n";
}
if (!branch_exists($ldap, "$workstationrdn,$entrybase")) {
if ($workstationrdn =~ m/^([^,]+),([^,]+)$/) {
if (!branch_exists($ldap, "$2,$entrybase")) {
......@@ -1736,6 +1742,9 @@ sub read_ldap_config {
if (($mesg->entries)[0]->exists('fdWorkstationRDN')) {
$workstationrdn = ($mesg->entries)[0]->get_value('fdWorkstationRDN');
}
if (($mesg->entries)[0]->exists('fdSambaMachineAccountRDN')) {
$winstationrdn = ($mesg->entries)[0]->get_value('fdSambaMachineAccountRDN');
}
}
return ($mesg->entries)[0];
......@@ -1817,18 +1826,19 @@ die ("! You have to run this script as root\n") if ($<!=0);
my @vars_keys = keys %vars;
# $commands{<cli-option>} = [<description>, <function>, <needs-ldap-config>];
my %commands = ();
$commands{"--update-cache"} = ["Updating class.cache", \&rescan_classes];
$commands{"--update-locales"} = ["Updating translations", \&rescan_i18n];
$commands{"--check-directories"} = ["Checking FusionDirectory's directories", \&check_directories];
$commands{"--check-config"} = ["Checking FusionDirectory's config file", \&check_config];
$commands{"--check-ldap"} = ["Checking your LDAP tree", \&check_ldap];
$commands{"--check-ids"} = ["Checking for duplicated uid or gid numbers", \&check_id_numbers];
$commands{"--migrate-users"} = ["Migrating your users", \&migrate_users];
$commands{"--migrate-phones"} = ["Migrating your phones from FD < 1.1", \&migrate_phones];
$commands{"--migrate-systems"} = ["Migrating your systems from FD < 1.1", \&migrate_systems];
$commands{"--migrate-winstations"} = ["Migrating your winstations from FD < 1.1", \&migrate_winstations];
$commands{"--migrate-dhcp"} = ["Migrating DHCP configurations for FD >= 1.0.17",\&migrate_dhcp];
$commands{"--check-ldap"} = ["Checking your LDAP tree", \&check_ldap, 1];
$commands{"--check-ids"} = ["Checking for duplicated uid or gid numbers", \&check_id_numbers, 1];
$commands{"--migrate-users"} = ["Migrating your users", \&migrate_users, 1];
$commands{"--migrate-phones"} = ["Migrating your phones from FD < 1.1", \&migrate_phones, 1];
$commands{"--migrate-systems"} = ["Migrating your systems from FD < 1.1", \&migrate_systems, 1];
$commands{"--migrate-winstations"} = ["Migrating your winstations from FD < 1.1", \&migrate_winstations, 1];
$commands{"--migrate-dhcp"} = ["Migrating DHCP configurations for FD >= 1.0.17",\&migrate_dhcp, 1];
$commands{"--delete-gosa-locks"} = ["Delete lock tokens using old gosaLockEntry class", \&delete_gosa_locks];
$commands{"--install-plugins"} = ["Installing FusionDirectory's plugins", \&install_plugins];
$commands{"--encrypt-passwords"} = ["Encrypt passwords in fusiondirectory.conf", \&encrypt_passwords];
......@@ -1855,6 +1865,9 @@ die ("! You have to run this script as root\n") if ($<!=0);
set_config_var($1, $2);
} elsif ( defined $commands { lc ( $arg ) } ) {
my @command = @{ $commands{ $arg } };
if ((defined $command[2]) && $command[2]) {
read_ldap_config();
}
print( $command[0]."\n" );
$command[1]();
} elsif ( ( lc($arg) eq "--help" ) || ( lc($arg) eq "-h" ) ) {
......
......@@ -2741,7 +2741,8 @@ apt-get remove fusiondirectory-plugin-kolab2
apt-get remove fusiondirectory-plugin-kolab2-schema
==== Upgrade schema2ldif ====
Upgrade schema2ldif
===================
For Jessie distribution add extra repository
......@@ -2753,7 +2754,8 @@ deb http://repos.fusiondirectory.org/debian-extra jessie main
apt-get update
apt-get install schema2ldif
==== Upgrade FusionDirectory first ====
Upgrade FusionDirectory first
=============================
- Upgrade FusionDirectory core package before other ones to avoid dependencies errors:
......@@ -2763,14 +2765,16 @@ apt-get install fusiondirectory
apt-get install fusiondirectory-schema
==== Upgrade of LDAP directory ====
Upgrade of LDAP directory
=========================
- Upgrade the core schemas
fusiondirectory-insert-schema -m /etc/ldap/schema/fusiondirectory/core-fd-conf.schema
fusiondirectory-insert-schema -m /etc/ldap/schema/fusiondirectory/core-fd.schema
==== Upgrade of LDAP directory ====
Upgrade of LDAP directory
=========================
- if you are using the argonaut plugin you have to update its schema
......@@ -2869,17 +2873,56 @@ If they are old objectClasses it will warn you and you will have to remove them
Please read it carefully before applying :!::!:
==== Checking your indexed attributes ====
Checking your indexed attributes
================================
Check that all you index still match with valid attributes present in your ldap directory
==== New format for repository service ====
New format for repository service
=================================
If you have a repository service.
Open and save it back so it will use the new format
Enjoy :)
Migrate FusionDirectory from 1.1 to 1.1.1
=========================================
New Depot Configuration
=======================
! The repositories have been cleaned and reorganized please update your configuration accordingly !
https://documentation.fusiondirectory.org/en/dl_install
Upgrade schema2ldif
===================
For Jessie distribution add extra repository
# fusiondirectory debian-extra repository
deb http://repos.fusiondirectory.org/debian-extra jessie main
- Update the package list and upgrade schema2ldif
apt-get update
apt-get install schema2ldif
Upgrade FusionDirectory first
=============================
- Upgrade FusionDirectory core package before other ones to avoid dependencies errors:
apt-get install fusiondirectory
- Upgrade FusionDirectory schema package too.
apt-get install fusiondirectory-schema
Enjoy :)
---
* Further information
......
......@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "FUSIONDIRECTORY-INSERT-SCHEMA 1"
.TH FUSIONDIRECTORY-INSERT-SCHEMA 1 "2017-04-26" "FusionDirectory 1.1" "FusionDirectory Documentation"
.TH FUSIONDIRECTORY-INSERT-SCHEMA 1 "2017-05-29" "FusionDirectory 1.1.1" "FusionDirectory Documentation"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
......
......@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "FUSIONDIRECTORY-SETUP 1"
.TH FUSIONDIRECTORY-SETUP 1 "2017-05-03" "FusionDirectory 1.1" "FusionDirectory Documentation"
.TH FUSIONDIRECTORY-SETUP 1 "2017-05-29" "FusionDirectory 1.1.1" "FusionDirectory Documentation"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
......
......@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "FUSIONDIRECTORY.CONF 1"
.TH FUSIONDIRECTORY.CONF 1 "2017-05-03" "FusionDirectory 1.1" "FusionDirectory Documentation"
.TH FUSIONDIRECTORY.CONF 1 "2017-05-29" "FusionDirectory 1.1.1" "FusionDirectory Documentation"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
......
......@@ -74,7 +74,7 @@ class filterLDAP
*
* \param boolean $checkAcl
*/
static function get_list($parent, $base, $filter, $attributes, $category, $objectStorage, $scope, $sizelimit = TRUE, $checkAcl = FALSE)
static function get_list($parent, $base, $filter, $attributes, $category, $objectStorage, $scope, $sizelimit = TRUE, $skipAcl = FALSE)
{
global $config, $ui;
......@@ -151,7 +151,7 @@ class filterLDAP
$dn = $attrs['dn'];
/* Skip ACL checks if we are forced to skip those checks */
if (!$checkAcl) {
if ($skipAcl) {
$result[] = $attrs;
} else {
// Check entry permission
......
<?php
/*
This code is part of FusionDirectory (http://www.fusiondirectory.org/)
Copyright (C) 2011-2016 FusionDirectory
Copyright (C) 2011-2017 FusionDirectory
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
......@@ -27,37 +27,43 @@
* \brief This class contains all the functions for sasl password methods
* \see passwordMethod
*/
class passwordMethodsasl extends passwordMethod {
class passwordMethodsasl extends passwordMethod
{
// uid, or exop specified field value
var $uid = "";
var $realm = "";
var $exop = "";
var $uid = '';
var $realm = '';
var $exop = '';
/*!
* \brief passwordMethodsasl Constructor
*
* \param string $dn The DN
* \param object $userTab The user main tab object
*/
function __construct($dn = "")
function __construct($dn = '', $userTab = NULL)
{
global $config;
$this->realm = trim($config->get_cfg_value('saslRealm', ''));
$this->exop = trim($config->get_cfg_value('saslExop', ''));
if ($dn == "" || $dn == "new") {
if ($dn == '' || $dn == 'new') {
return;
}
$attr = (empty($this->exop)?'uid':$this->exop);
$attr = (empty($this->exop) ? 'uid' : $this->exop);
$ldap = $config->get_ldap_link();
$ldap->cd($config->current['BASE']);
$ldap->cat($dn, array($attr));
if ($ldap->count() == 1) {
$attrs = $ldap->fetch();
$this->uid = $attrs[$attr][0];
if (($userTab !== NULL) && isset($userTab->$attr)) {
$this->uid = $userTab->$attr;
} else {
msg_dialog::display(_("Error"), sprintf(_("Cannot change password, unknown user '%s'"), $dn), ERROR_DIALOG);
$ldap = $config->get_ldap_link();
$ldap->cd($config->current['BASE']);
$ldap->cat($dn, array($attr));
if ($ldap->count() == 1) {
$attrs = $ldap->fetch();
$this->uid = $attrs[$attr][0];
} else {
msg_dialog::display(_('Error'), sprintf(_('Cannot change password, unknown user "%s"'), $dn), ERROR_DIALOG);
}
}
}
......
<?php
/*
This code is part of FusionDirectory (http://www.fusiondirectory.org/)
Copyright (C) 2003-2010 Cajus Pollmeier
Copyright (C) 2011-2016 FusionDirectory
Copyright (C) 2011-2017 FusionDirectory
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
......@@ -32,15 +31,16 @@ class passwordMethod
{
var $attrs = array();
var $display = FALSE;
var $hash = "";
var $hash = '';
var $lockable = TRUE;
/*!
* \brief Password method contructor
*
* \param string $dn The DN
* \param object $userTab The user main tab object
*/
function __construct($dn = "")
function __construct($dn = '', $userTab = NULL)
{
}
......@@ -127,9 +127,9 @@ class passwordMethod
}
/* Get current password hash */
$attrs = $this->attrs;
$pwd = "";
$ldap = $config->get_ldap_link();
$attrs = $this->attrs;
$pwd = '';
$ldap = $config->get_ldap_link();
$ldap->cd($config->current['BASE']);
if (!empty($dn)) {
$ldap->cat($dn);
......
......@@ -26,6 +26,7 @@ class StringAttribute extends Attribute
protected $pattern;
protected $example;
protected $autocomplete = NULL;
protected $trim = FALSE;
/*! \brief The constructor of StringAttribute
*
......@@ -105,6 +106,23 @@ class StringAttribute extends Attribute
{
return $this->autocomplete;
}
function setValue ($value)
{
if ($this->trim) {
return parent::setValue(trim($value));
} else {
return parent::setValue($value);
}
}
}
/*! \brief This class allow to handle easily a String LDAP attribute that appears as a text area
*
*/
class TrimmedStringAttribute extends StringAttribute
{
protected $trim = TRUE;
}
/*! \brief This class allow to handle easily a String LDAP attribute that appears as a text area
......
......@@ -23,6 +23,8 @@
*/
class MailAttribute extends StringAttribute
{
protected $trim = TRUE;
function validate ()
{
if (!tests::is_email($this->value)) {
......@@ -69,6 +71,8 @@ class UidAttribute extends TestValidateAttribute
*/
class PathAttribute extends TestValidateAttribute
{
protected $trim = TRUE;
protected $testFunc = 'is_path';
}
......@@ -77,6 +81,8 @@ class PathAttribute extends TestValidateAttribute
*/
class URLAttribute extends TestValidateAttribute
{
protected $trim = TRUE;
protected $testFunc = 'is_url';
}
......@@ -85,6 +91,8 @@ class URLAttribute extends TestValidateAttribute
*/
class PhoneNumberAttribute extends TestValidateAttribute
{
protected $trim = TRUE;
protected $testFunc = 'is_phone_nr';
}
......@@ -93,6 +101,8 @@ class PhoneNumberAttribute extends TestValidateAttribute
*/
class IPAttribute extends TestValidateAttribute
{
protected $trim = TRUE;
protected $testFunc = 'is_ip';
}
......@@ -101,6 +111,8 @@ class IPAttribute extends TestValidateAttribute
*/
class IPv4Attribute extends TestValidateAttribute
{
protected $trim = TRUE;
protected $testFunc = 'is_ipv4';
}
......@@ -109,6 +121,8 @@ class IPv4Attribute extends TestValidateAttribute
*/
class IPv6Attribute extends TestValidateAttribute
{
protected $trim = TRUE;
protected $testFunc = 'is_ipv6';
}
......@@ -117,6 +131,8 @@ class IPv6Attribute extends TestValidateAttribute
*/
class MacAddressAttribute extends StringAttribute
{
protected $trim = TRUE;
function setValue ($value)
{
return parent::setValue(strtolower($value));
......
......@@ -254,13 +254,13 @@ class simplePlugin
}
}
/* Save initial account state */
$this->initially_was_account = $this->is_account;
$this->loadAttributes();
$this->prepareSavedAttributes();
/* Save initial account state */
$this->initially_was_account = $this->is_account;
$this->orig_dn = $dn;
if ($this->mainTab) {
......@@ -533,16 +533,10 @@ class simplePlugin
$deps = array();
/* Is this a new object ? Or just an edited existing object */
if (!$this->initially_was_account && $this->is_account) {
$new = TRUE;
} else {
$new = FALSE;
}
foreach ($config->idepartments as $dn => $name) {
if ($new && $this->acl_is_createable($dn)) {
if (!$this->initially_was_account && $this->acl_is_createable($dn)) {
$deps[$dn] = $name;
} elseif (!$new && $this->acl_is_moveable($dn)) {
} elseif ($this->initially_was_account && $this->acl_is_moveable($dn)) {
$deps[$dn] = $name;
}
}
......
......@@ -63,7 +63,7 @@ define("FPDF_FONTPATH", "/usr/share/php/fpdf/font/"); /*! Define fpdf font path
/*!
* \brief FusionDirectory Version
*/
define ("FD_VERSION", "1.1"); /*! Define FusionDirectory version */
define ("FD_VERSION", "1.1.1"); /*! Define FusionDirectory version */
/*!
* \brief FusionDirectory config object RDN
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
......@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: FusionDirectory VERSION\n"
"Report-Msgid-Bugs-To: bugs@fusiondirectory.org\n"
"POT-Creation-Date: 2017-04-30 15:08+0200\n"
"POT-Creation-Date: 2017-06-01 10:23+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FusionDirectory project <contact@fusiondirectory.org>\n"
"Language-Team: English\n"
......@@ -533,7 +533,10 @@ msgstr ""
#: include/class_SnapshotHandler.inc:53 include/class_SnapshotHandler.inc:238
#: include/class_SnapshotHandler.inc:268 include/class_SnapshotHandler.inc:284
#: include/class_SnapshotHandler.inc:405 include/class_SnapshotHandler.inc:408
#: html/index.php:372 plugins/config/class_recoveryConfig.inc:137
#: html/index.php:372 plugins/addons/dashboard/class_dashBoardUsers.inc:73
#: plugins/addons/dashboard/class_dashBoard.inc:74
#: plugins/addons/dashboard/class_dashBoardPasswords.inc:62
#: plugins/config/class_recoveryConfig.inc:137
msgid "LDAP error"
msgstr ""
......@@ -735,8 +738,8 @@ msgid "Select all"
msgstr ""
#: include/class_listing.inc:528
#: include/password-methods/class_password-methods-sasl.inc:60
#: include/password-methods/class_password-methods-sasl.inc:86
#: include/password-methods/class_password-methods-sasl.inc:65
#: include/password-methods/class_password-methods-sasl.inc:92
#: include/class_msg_dialog.inc:136 include/class_msg_dialog.inc:172
#: include/class_config.inc:347 include/class_msgPool.inc:220
#: include/class_msgPool.inc:240 include/class_msgPool.inc:270
......@@ -825,12 +828,12 @@ msgstr ""
msgid "Create a new snapshot from this object"
msgstr ""
#: include/password-methods/class_password-methods-sasl.inc:60
#: include/password-methods/class_password-methods-sasl.inc:65
#, php-format
msgid "Cannot change password, unknown user '%s'"
msgid "Cannot change password, unknown user \"%s\""
msgstr ""
#: include/password-methods/class_password-methods-sasl.inc:86
#: include/password-methods/class_password-methods-sasl.inc:92
msgid ""
"You need to fill saslRealm or saslExop in the configuration screen in order "
"to use SASL"
......@@ -2052,39 +2055,39 @@ msgstr ""
msgid "Move from \"%s\" to \"%s\" failed"
msgstr ""
#: include/simpleplugin/class_helpersAttribute.inc:247
#: include/simpleplugin/class_helpersAttribute.inc:263
msgid "B"
msgstr ""
#: include/simpleplugin/class_helpersAttribute.inc:248
#: include/simpleplugin/class_helpersAttribute.inc:264
msgid "KiB"
msgstr ""
#: include/simpleplugin/class_helpersAttribute.inc:249
#: include/simpleplugin/class_helpersAttribute.inc:265
msgid "MiB"
msgstr ""
#: include/simpleplugin/class_helpersAttribute.inc:250
#: include/simpleplugin/class_helpersAttribute.inc:266
msgid "GiB"
msgstr ""
#: include/simpleplugin/class_helpersAttribute.inc:251
#: include/simpleplugin/class_helpersAttribute.inc:267
msgid "TiB"
msgstr ""
#: include/simpleplugin/class_helpersAttribute.inc:262
#: include/simpleplugin/class_helpersAttribute.inc:278
msgid "seconds"
msgstr ""
#: include/simpleplugin/class_helpersAttribute.inc:263
#: include/simpleplugin/class_helpersAttribute.inc:279
msgid "minutes"
msgstr ""
#: include/simpleplugin/class_helpersAttribute.inc:264
#: include/simpleplugin/class_helpersAttribute.inc:280
msgid "hours"
msgstr ""
#: include/simpleplugin/class_helpersAttribute.inc:265
#: include/simpleplugin/class_helpersAttribute.inc:281
msgid "days"
msgstr ""
......@@ -2898,6 +2901,13 @@ msgstr ""
msgid "Expired accounts"
msgstr ""
#: plugins/addons/dashboard/class_dashBoardUsers.inc:74
#, php-format
msgid ""
"Total user number could not be computed because of the following LDAP error: "