Commit 92502531 authored by benoit manager's avatar benoit manager

Merge branch '1.2-fixes' into 'master'

merge 1.2 fixes into master

See merge request fusiondirectory/fd!266
parents e2d13694 384ff14f
# Specify docker image
image: debian:stretch
# Define variable to disable SSL verification of GIT
- lint
- codestyle
- transifex
- tarballs
## Stage lint
# Perl lint
stage: lint
- branches
- apt-get update -qq
- apt-get install -y -qq libarchive-extract-perl libcrypt-cbc-perl libdigest-sha-perl libfile-copy-recursive-perl
- apt-get install -y -qq libnet-ldap-perl libpath-class-perl libterm-readkey-perl libxml-twig-perl
- perl -cW contrib/bin/fusiondirectory-setup contrib/bin/fusiondirectory-insert-schema
# PHP lint (jessie)
image: php:5.6.33-cli-jessie
stage: lint
- branches
- find . -type f -name '*.php' -o -name '*.inc' -print0 | xargs -0 -n1 php -l
# PHP lint (stretch)
image: php:cli-stretch
stage: lint
- branches
- find . -type f -name '*.php' -o -name '*.inc' -print0 | xargs -0 -n1 php -l
## Stage codestyle
# Generate perlcritic rapport
stage: codestyle
- branches
- apt-get update -qq
- apt-get install -y -qq libperl-critic-perl
- cp contrib/bin/fusiondirectory-setup contrib/bin/
- cp contrib/bin/fusiondirectory-insert-schema contrib/bin/
- perlcritic --quiet --verbose "%f~|~%s~|~%l~|~%c~|~%m~|~%e~|~%p~||~%n" contrib/bin
# PHP codesniffer
stage: codestyle
- branches
- apt-get update -qq
- apt-get install -y -qq git php-cli php-codesniffer
- git clone ../dev-tools
- find . -type f -name '*.php' -o -name '*.inc' -exec phpcs --standard=../dev-tools/php-codesniffer-rules/FDStandard/ruleset.xml "{}" \;
# generate man pages to test validity
stage: lint
- branches
- apt-get update -qq
- apt-get install -y -qq perl man-db
- pod2man -c "FusionDirectory Documentation" -r "FusionDirectory 1.3" contrib/bin/fusiondirectory-insert-schema contrib/man/fusiondirectory-insert-schema.1
- pod2man -c "FusionDirectory Documentation" -r "FusionDirectory 1.3" contrib/bin/fusiondirectory-setup contrib/man/fusiondirectory-setup.1
- pod2man -c "FusionDirectory Documentation" -r "FusionDirectory 1.3" contrib/man/fusiondirectory.conf.pod contrib/man/fusiondirectory.conf.5
- lexgrog contrib/man/fusiondirectory-insert-schema.1
- lexgrog contrib/man/fusiondirectory-setup.1
- lexgrog contrib/man/fusiondirectory.conf.5
# fusiondirectory-update-locale
image: php:cli-stretch
stage: transifex
- branches
- apt-get update -qq
- apt-get install -y -qq gettext git
- git clone ../dev-tools
- ../dev-tools/locale-scripts/fusiondirectory-update-locale -g
# Update transifex
image: php:cli-stretch
stage: transifex
- /^1.*$/
- apt-get update -qq
- apt-get install -y -qq gettext git transifex-client
- git clone ../dev-tools
- echo $'[]\nhostname =\nusername = '"$TRANSIFEX_USER"$'\npassword = '"$TRANSIFEX_PASSWORD"$'\ntoken = '"$TRANSIFEX_API_TOKEN"$'\n' > ~/.transifexrc
- tx pull -a -f
- ../dev-tools/locale-scripts/fusiondirectory-update-locale -g
- tx push -f -s -t --skip --no-interactive
stage: tarballs
- tar -cvzf fusiondirectory-core.tar.gz *
- fusiondirectory-core.tar.gz
expire_in: 1h
stage: tarballs
- tags
- tar -cvzf fusiondirectory-core-$(grep '%' | head -n1 | cut -d ' ' -f3 | tr -d '"').tar.gz *
- fusiondirectory-core-$(grep '%' | head -n1 | cut -d ' ' -f3 | tr -d '"').tar.gz
......@@ -2,7 +2,7 @@
host =
type = PO
file_filter = locale/<lang>/fusiondirectory.po
source_file = locale/en/fusiondirectory.po
source_lang = en
# Contributor Covenant Code of Conduct
## Our Pledge
In the interest of fostering an open and welcoming environment, we as
contributors and maintainers pledge to making participation in our project and
our community a harassment-free experience for everyone, regardless of age, body
size, disability, ethnicity, gender identity and expression, level of experience,
nationality, personal appearance, race, religion, or sexual identity and
## Our Standards
Examples of behavior that contributes to creating a positive environment
* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members
Examples of unacceptable behavior by participants include:
* The use of sexualized language or imagery and unwelcome sexual attention or
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic
address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
## Our Responsibilities
Project maintainers are responsible for clarifying the standards of acceptable
behavior and are expected to take appropriate and fair corrective action in
response to any instances of unacceptable behavior.
Project maintainers have the right and responsibility to remove, edit, or
reject comments, commits, code, wiki edits, issues, and other contributions
that are not aligned to this Code of Conduct, or to ban temporarily or
permanently any contributor for other behaviors that they deem inappropriate,
threatening, offensive, or harmful.
## Scope
This Code of Conduct applies both within project spaces and in public spaces
when an individual is representing the project or its community. Examples of
representing a project or community include using an official project e-mail
address, posting via an official social media account, or acting as an appointed
representative at an online or offline event. Representation of a project may be
further defined and clarified by project maintainers.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported by contacting the project team at <>. All
complaints will be reviewed and investigated and will result in a response that
is deemed necessary and appropriate to the circumstances. The project team is
obligated to maintain confidentiality with regard to the reporter of an incident.
Further details of specific enforcement policies may be posted separately.
Project maintainers who do not follow or enforce the Code of Conduct in good
faith may face temporary or permanent repercussions as determined by other
members of the project's leadership.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
available at [][version]
This diff is collapsed.
## %"FusionDirectory 1.2.1" - 2018-05-09
### Added
#### fusiondirectory-plugins
- fd-plugins#5548 Sort entries in ppolicy dashboard
#### fusiondirectory
- fd#5342 SimplePlugin should have a way to say a tab cannot be created for some reason
- fd#5694 Cannot add a group to "users and groups" field in sudo role
- fd#5703 Sort entries in users dashboard
- fd#5746 Using date modifier does not work for unix password expiration
### Changed
#### fusiondirectory-plugins
- fd-plugins#5685 supannRefId on Structure object is too small and mono valued
- fd-plugins#5688 Backport the DNS code from 1.3-dev for speed and usability reason
- fd-plugins#5713 Phones have wrong attribute order
- fd-plugins#5716 DNS Zone edition is too slow
- fd-plugins#5740 Dashboard tabs are in random order
#### fusiondirectory
- fd#5668 Password length on login page should have no limit
- fd#5692 Update the with correct forge information
- fd#5732 Listing objects should check ACL on attributes
- fd#5737 Dashboard tabs should be ordered
- fd#5808 multibyte functions should be used to truncate strings
### Fixed
#### fusiondirectory-plugins
- fd-plugins#4036 Webservice does not display ACL errors in some cases
- fd-plugins#4348 Fusion inventory should return an error if schema is missing
- fd-plugins#5629 Error message when removing some content from partage tab
- fd-plugins#5672 Mail plugin incompatible with PHP 7.1
- fd-plugins#5673 PHP error on login page when applications plugin is installed and applications in menu set to only allowed
- fd-plugins#5704 [webservice] User with admin ACL on department can ls objects at root base in WS
- fd-plugins#5707 posixAccount foreignKey is wrong
- fd-plugins#5708 software list and profile management error when using several OPSI Servers
- fd-plugins#5709 DNS Tab - record filtering is broken for new systems
- fd-plugins#5724 SOA serial is rewriten to each reverse even if no modification is made to any record related to these domains
- fd-plugins#5725 Crash when I remove IP from a workstation with a DNS record
- fd-plugins#5729 SOA is not updated in reverse zones if there is no record change
- fd-plugins#5745 PHP error in OPSI product properties
- fd-plugins#5747 Line number in CSV import error messages is incorrect
- fd-plugins#5754 Forward confirmation to manager does not work when extending the account expiration
- fd-plugins#5755 User reminder does not support accents in the message
- fd-plugins#5757 DHCP: Changing mac address in the system's system tab does not update the DHCP entries accordingly
- fd-plugins#5766 Crash when DHCP plugin is not installed when we use OPSI import
- fd-plugins#5768 Renaming DNS zones often results in an Exception being thrown
- fd-plugins#5796 Webservice does not return JSON encode error
- fd-plugins#5798 API returns no error when asking for non existing tab using method getfields()
- fd-plugins#5799 Calling getfields for 'supannAccount' triggers JSON encoding error
- fd-plugins#5813 When we try to put an Google+ id in the personal plugin we get a crash
- fd-plugins#5815 Audit plugin crashes when the author dn is not found in the LDAP
#### fusiondirectory
- fd#5348 LDIF import should support folded comments
- fd#5588 fusiondirectory-setup custom smarty directory forced to lowercase
- fd#5589 SASL missing from Password default hash field in setup wizard
- fd#5701 Management filter is broken when mainAttr is FALSE
- fd#5696 If tab objectClass contains top, tab gets activated by default
- fd#5700 Non-existing classes in pluglist::$info
- fd#5705 Correct contributing remove part about using the templates link
- fd#5707 core-fd.schema still has gosa in description of attributes
- fd#5711 ACL list have a PHP error when there are ACL on objects
- fd#5712 Error text is wrong is some cases
- fd#5724 Error before login on Centos 7
- fd#5726 Log to fd behind an lemonldap::ng portal show debug log instead of main page
- fd#5736 Display Attribute should not be interpreted by smarty
- fd#5741 Foreign keys are broken on ogroups dynamic tabs
- fd#5749 Webservice errors
- fd#5758 Error when renaming a object with single-value main attribute
- fd#5757 In case of LDAP errors during a deletion, a PHP error is triggered
- fd#5759 Unclear "Invalid objectType" errors
- fd#5795 Activating audit for action 'security' causes error at login
- fd#5796 gosaGroupObjects field is incorrect after a member is being moved
- fd#5800 Unclear LDAP errors when DN creation fails
- fd#5807 Attributes should refuse invalid values
### Security
#### fusiondirectory
- fd#5790 Locking fails with multiple SSH Keys
- fd#5794 ACL restrictions not applied when accessing through the JSONRPC API.
## %"FusionDirectory 1.2" - 2017-07-02
### Added
#### fusiondirectory
- fusiondirectory#5581 File renater-partage/admin/groups/renater-partage/ was added
#### fusiondirectory
- fd#5532 We should be able to put groups in groups
- fd#5587 ACL - System templates
- fd#5602 Add array modifiers
#### fusiondirectory-plugins
- fd-plugins#5504 We should be able to launch actions on group of systems
- fd-plugins#5529 Add "Partage" capabilities with SYMPA
- fd-plugins#5534 Add "Partage" capabilities with group
- fd-plugins#5582 Import groups using csv
- fd-plugins#5595 Grab the version of the opsi package in a software-list
### Changed
#### fusiondirectory
- fusiondirectory#5580 was renamed as
- fusiondirectory#5640 file ldapmanager/addons/ldapmanager/contentcsv.tpl has been removed
#### fusiondirectory
- fd#5545 Unicity is only tested upon the same objectType
- fd#5574 Groups RDN configuration is confusing
#### fusiondirectory-plugins
- fd-plugins#5315 mail methods code should be reviewed and cleaned
- fd-plugins#5341 DHCP tab should be able to load values from template
- fd-plugins#5573 Unicity is only tested upon the same objectType
- fd-plugins#5585 System templates - DNS Tab
### Fixed
#### fusiondirectory
- fd#2586 class_plugin should be reviewed
- fd#4236 FD and IPv6
- fd#5297 User tab / description as text area
- fd#5347 Template types needs their own icon somehow
- fd#5395 Import groups using csv
- fd#5542 Icon for waiting task is not showing
- fd#5568 I have always the browser language, same if I specify another language in FusionDirectory configuration
- fd#5593 Script for hook 'user postmodify' is not executed when password hash=sasl and only the password is changed.
#### fusiondirectory-plugins
- fd-plugins#5340 DHCP postLdapSave should lock the object modified
- fd-plugins#5506 Check that OPSI is fully working on groups
- fd-plugins#5512 Remove DNS tab or machine not remove the record associated
- fd-plugins#5519 template of workstations trigger the creation with the OPSI webservice
- fd-plugins#5520 Schedule action start directly
- fd-plugins#5540 Errors when trying to schedule actions
- fd-plugins#5547 Wrong expiration date shown in ppolicy dashboard
- fd-plugins#5556 %askme% dans les champs date
- fd-plugins#5560 The DNS plugin fails to find the primary server, if it's in another zone
- fd-plugins#5572 Samba home path fields are weirdly checked
- fd-plugins#5636 Slave ldap2zone config should enforce final dot in zone name
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
Copyright (C) 1989, 1991 Free Software Foundation, Inc., <>
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
......@@ -15,7 +15,7 @@ software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Library General Public License instead.) You can apply it to
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
......@@ -56,7 +56,6 @@ patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
......@@ -112,7 +111,6 @@ above, provided that you also meet all of these conditions:
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
......@@ -171,7 +169,6 @@ access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
......@@ -229,7 +226,6 @@ impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
Copyright (C) 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
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
{signature of Ty Coon}, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License.
......@@ -39,17 +39,40 @@ This question can be solved by creating:
* A plugin for its management in FusionDirectory with the simple plugin api
* An Argonaut module for the client installed on the server
## Installation and upgrade of FusionDirectory
The installation and upgrade information is available on [Install FusionDirectory][fusiondirectory-install]
## Migration to FusionDirectory
To migrate an existing LDAP tree, you've to do all steps [Install FusionDirectory][fusiondirectory-install],
plus some modifications:
* FusionDirectory only shows users that have the objectClass inetOrgPerson
* FusionDirectory only recognizes subtrees (or departments in FusionDirectory's view of things) that have the objectClass gosaDepartment.
You can hide subtrees from FusionDirectory by not putting this objectClass inside.
The FusionDirectory setup may be used to do these migrations, but it is not meant
to work in every possible circumstance. Please be carefull when using it on
productive system.
That should be all. Entries should be visible in FusionDirectory now.
Be aware that if your naming policy of user cn's differs from the way FusionDirectory handles it, the entries get rewritten to a FusionDirectory style dn.
## Get help
There are a couple ways you can try [to get help][get help].You can also join the `#fusiondirectory` IRC channel at
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
You can [register on our system][register] and enter issues [FusionDirectory][issues-core] for the core program, and
[FusionDirectory Plugins][issues-plugins] for plugins.
## 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.
......@@ -64,12 +87,14 @@ If you like [FusionDirectory][FusionDirectory] and would like to [donate][donate
[get help]:
This diff is collapsed.
......@@ -7,7 +7,7 @@
# Manipulate and insert the needed schema into the ldap server
# This code is part of FusionDirectory (
# Copyright (C) 2011-2017 FusionDirectory
# Copyright (C) 2011-2018 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
......@@ -121,7 +121,7 @@ but beware that you will not be able to see things like password prompts as the
=head1 BUGS
Please report any bugs, or post any suggestions, to the fusiondirectory mailing list fusiondirectory-users or to
=head1 AUTHOR
......@@ -133,7 +133,7 @@ This code is part of FusionDirectory <>
=over 1
=item Copyright (C) 2011-2017 FusionDirectory Project
=item Copyright (C) 2011-2018 FusionDirectory Project
......@@ -7,7 +7,7 @@
# Manage fusiondirectory installs from the command line
# This code is part of FusionDirectory (
# Copyright (C) 2011-2017 FusionDirectory
# Copyright (C) 2011-2018 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
......@@ -49,7 +49,7 @@ use Crypt::CBC;
use Archive::Extract;
# used to copy files
use File::Copy::Recursive qw(rcopy rmove);
use File::Copy::Recursive qw(rcopy);
#XML parser
use XML::Twig;
......@@ -1098,13 +1098,13 @@ sub check_id_numbers_generic {
# function that create a directory and move plugin files in it
sub create_and_move_plugin_dir {
# function that create a directory and copy plugin files in it
sub create_and_copy_plugin_dir {
my ($plugin_dir,$dest_dir) = @_;
if ( -e $plugin_dir ){
my $dir = dir ($dest_dir);
$dir->mkpath() or warn ("! Unable to make ".$dest_dir."\n") if ( !-e $dest_dir);
my $files_dirs_copied = rmove($plugin_dir."/*", $dest_dir);
my $files_dirs_copied = rcopy($plugin_dir."/*", $dest_dir);
......@@ -1133,42 +1133,42 @@ sub install_plugins {
chdir ($dir) or die ("! Unable to move to $dir\n");
foreach my $plugin_path (@plugins){
foreach my $plugin_path (@plugins) {
$plugin_path =~ /^$tmp_plugins_dir\/$name\/(.*)$/;
my $plugin = $1;
# copy addons into plugins
create_and_move_plugin_dir($plugin_path."/addons/", $vars{fd_home}."/plugins/addons/");
create_and_copy_plugin_dir($plugin_path."/addons/", $vars{fd_home}."/plugins/addons/");
# copy admin into plugins
create_and_move_plugin_dir($plugin_path."/admin/", $vars{fd_home}."/plugins/admin/");
create_and_copy_plugin_dir($plugin_path."/admin/", $vars{fd_home}."/plugins/admin/");
# copy personal into plugins
create_and_move_plugin_dir($plugin_path."/personal/", $vars{fd_home}."/plugins/personal/");
# copy extra theme templates
create_and_move_plugin_dir($plugin_path."/ihtml/", $vars{fd_home}."/ihtml/");
# copy config into plugins
create_and_copy_plugin_dir($plugin_path."/config/", $vars{fd_home}."/plugins/config/");
# copy extra theme icons
create_and_move_plugin_dir($plugin_path."/html/themes/", $vars{fd_home}."/html/themes/");
# copy personal into plugins
create_and_copy_plugin_dir($plugin_path."/personal/", $vars{fd_home}."/plugins/personal/");
# copy extra HTML and images
create_and_move_plugin_dir($plugin_path."/html/", $vars{fd_home}."/html/plugins/".$plugin);
create_and_copy_plugin_dir($plugin_path."/html/", $vars{fd_home}."/html/");
# copy contrib
create_and_move_plugin_dir($plugin_path."/contrib/", $vars{fd_home}."/doc/contrib/".$plugin);
# copy extra theme templates
create_and_copy_plugin_dir($plugin_path."/ihtml/", $vars{fd_home}."/ihtml/");
# copy config
create_and_move_plugin_dir($plugin_path."/config/", $vars{fd_home}."/plugins/config/");
# copy includes
create_and_copy_plugin_dir($plugin_path."/include/", $vars{fd_home}."/include/");
# copy ldap schema
create_and_move_plugin_dir($plugin_path."/contrib/openldap/", $vars{fd_home}."/contrib/openldap/");
create_and_copy_plugin_dir($plugin_path."/contrib/openldap/", $vars{fd_home}."/contrib/openldap/");
# copy includes
create_and_move_plugin_dir($plugin_path."/include/", $vars{fd_home}."/include/");
# copy etc files
create_and_copy_plugin_dir($plugin_path."/contrib/etc/", $vars{fd_config_dir}."/".$plugin."/");
# copy doc
create_and_copy_plugin_dir($plugin_path."/contrib/doc/", $vars{fd_home}."/contrib/doc/");
# copy the locales
create_and_move_plugin_dir($plugin_path."/locale/", $vars{fd_home}."/locale/plugins/".$plugin);
create_and_copy_plugin_dir($plugin_path."/locale/", $vars{fd_home}."/locale/plugins/".$plugin."/locale/");
#finally update FusionDirectory's class.cache and locales
......@@ -1862,9 +1862,9 @@ die ("! You have to run this script as root\n") if ($<!=0);
foreach my $arg ( @ARGV ) {
if (( lc($arg) =~ m/^--set-(.*)=(.*)$/ ) && (grep {$_ eq lc($1)} @vars_keys)) {
if (( $arg =~ m/^--set-(.*)=(.*)$/ ) && (grep {$_ eq lc($1)} @vars_keys)) {
$vars{lc($1)} = $2;
print "Setting $1 to $2\n";
print "Setting ".lc($1)." to $2\n";
} elsif ( $arg =~ m/^--set-config-(.*)=(.*)$/ ) {
set_config_var($1, $2);
......@@ -2045,7 +2045,7 @@ fd_home [/var/www/fusiondirectory]
=head1 BUGS