Basic IPMI User Management Support

Squashed commit containing Basic User Management
implementation

Unit Test:
1. Verified both Host & NetIpmid works fine.
2. Verified user related command responses

commit b46b869c0a3958a572b976b3bbaf6b5f33673778
Author: Richard Marian Thomaiyar <richard.marian.thomaiyar@linux.intel.com>
Date:   Tue Aug 7 15:30:32 2018 +0530

    Fix static objects to directly link user layer

    User layer library has to be directly linked with netipmid
    in order to be used in RAKP commands. Hence user layer
    library should not initialize the static bus objects in file
    scope, as ipmid_get_sd_bus_connection() won't be available
    during this time. Hence moved it under function scope and
    initialize it later.

    Unit test:
    Made sure, with this change it is loaded perfectly under
    phosphor-ipmi-host & phosphor-ipmi-net and responding to
    all user commands

    Change-Id: Id3f2e06580ca41b0347176ca33e011bf7b048c6a
    Signed-off-by: Richard Marian Thomaiyar <richard.marian.thomaiyar@linux.intel.com>

commit dc60516c45234379a30ad8b03b1cbe53978faeae
Author: Richard Marian Thomaiyar <richard.marian.thomaiyar@linux.intel.com>
Date:   Tue Aug 7 15:22:37 2018 +0530

    Fix to use proper user index for set user name

    Fix to use proper user index, instead of bailing out
    on first empty index. If user creation is requested on
    random index with previous index empty, then signal
    handler updates the data in first empty index, instead of
    traversing the user list fully. Fix added to mark the first
    free index, and still search for match to skip if found.

    Unit Test:
    Verified that user added in random index shows in that index
    using ipmitool set user name command.

    Change-Id: I30d9b884a5bae98b243ccf8ba7da194ef81355e6
    Signed-off-by: Richard Marian Thomaiyar <richard.marian.thomaiyar@linux.intel.com>

commit 0b9a81a1261b08ea13ad8777d0d80dad937e9972
Author: Richard Marian Thomaiyar <richard.marian.thomaiyar@linux.intel.com>
Date:   Fri Jul 6 15:57:02 2018 +0530

    Converting json store to array for user config

    Addressed comments to convert to array instead of key
    value pair.

    Testing: Performed basic testing of user management commands
    in both host & netipmid, by repeatedly restarting the same.

    Change-Id: I2e51ded3e2299fa196d868213950d96c72886358
    Signed-off-by: Richard Marian Thomaiyar <richard.marian.thomaiyar@linux.intel.com>

commit 182c945657b29acaeb13fc44129e0ed929013e59
Author: Richard Marian Thomaiyar <richard.marian.thomaiyar@linux.intel.com>
Date:   Sat Jun 30 00:07:28 2018 +0530

    Fix D-Bus paths for user management

    Fix D-Bus path as per upstream code in user management

    Change-Id: Idb22bee4365520f3d58e70ff61b02d6f6512d707
    Signed-off-by: Richard Marian Thomaiyar <richard.marian.thomaiyar@linux.intel.com>

commit cd5e22b16f8805dda396311b06994a9e021e97e9
Author: Richard Marian Thomaiyar <richard.marian.thomaiyar@linux.intel.com>
Date:   Thu Jun 28 06:22:27 2018 +0530

    Json format to store user config & cleanup

    Code updated to use json format to store and read
    the user configuration data. Few basic cleanup's
    performed.

    Change-Id: I7005f4f2648ccb8214312982a755ddcc6c33e64d
    Signed-off-by: Richard Marian Thomaiyar <richard.marian.thomaiyar@linux.intel.com>

commit 95ca9a67a4b84df603db0eb6a7024e9e0e5ad342
Author: Richard Marian Thomaiyar <richard.marian.thomaiyar@linux.intel.com>
Date:   Wed May 30 15:16:47 2018 +0530

    Get & Set User Access command implementation

    Get & Set User access command implementation

    Change-Id: I4f7a86de95400387c47ae556127baa1f02a703b2
    Signed-off-by: Richard Marian Thomaiyar <richard.marian.thomaiyar@linux.intel.com>

commit b2dea762362d06b70576dba5f45552d548792cb9
Author: Richard Marian Thomaiyar <richard.marian.thomaiyar@linux.intel.com>
Date:   Fri May 18 23:46:23 2018 +0530

    User layer separation.

    Separated out user commands from the implementation details,
    by creating user layers. App Handler library and netipmid
    will directly rely on this user_layer.so

    Change-Id: Ie7d4b3a5a934e32da73e066a25da4c27485c59c8
    Signed-off-by: Richard Marian Thomaiyar <richard.marian.thomaiyar@linux.intel.com>

commit 63e3113e522ecc7ce6e5aa1c85de4dc9b9a65a7b
Author: Richard Marian Thomaiyar <richard.marian.thomaiyar@linux.intel.com>
Date:   Mon May 7 12:00:06 2018 +0530

    Updated user management ipmi support

    1. Relying on Object Manager & D-Bus properties signal (except
    user rename, for which still relying on user rename signal)
    2. Minor clean-up.

    Change-Id: I594e7823a2c626bb7c88ec54a3ffa89a60b09c65
    Signed-off-by: Richard Marian Thomaiyar <richard.marian.thomaiyar@linux.intel.com>

commit 3e7b774c842917743369569790612d74387c755e
Author: AppaRao Puli <apparao.puli@intel.com>
Date:   Tue Apr 24 22:01:15 2018 +0530

    Synchronize user manager data during ipmi startup

    Synchronizing the user information by reading
    all managed user objects from dbus and checking
    ipmi user data for any update/delete/add users.

    Change-Id: I9e1a62ec9dd186a7276d083a57e679606d635e05
    Signed-off-by: AppaRao Puli <apparao.puli@intel.com>
    Signed-off-by: Richard Marian Thomaiyar <richard.marian.thomaiyar@linux.intel.com>

commit 92298ac0f591d167b0e26b977316a2b136127778
Author: Richard Marian Thomaiyar <richard.marian.thomaiyar@linux.intel.com>
Date:   Tue Apr 24 21:34:08 2018 +0530

    Minor fix: Read user enabled state in signals

    Fixed to read user enabled state in signal handlers.

    Change-Id: I0aa6c4687c16e08d8e304315e85cb65e9dbd346a
    Signed-off-by: Richard Marian Thomaiyar <richard.marian.thomaiyar@linux.intel.com>

commit 8646d2683fc247ce02a0460f9577276eb6e0a581
Author: Richard Marian Thomaiyar <richard.marian.thomaiyar@linux.intel.com>
Date:   Wed Apr 11 22:18:44 2018 +0530

    Signal handler update

    Support added to handle group, privilege
    user rename, enable / disable signal, and
    update the database accordingly.

    Change-Id: Ia33d063715a35814bbe1f9220e9609b800261e33
    Signed-off-by: Richard Marian Thomaiyar <richard.marian.thomaiyar@linux.intel.com>

commit fa411b2c4bbef50175b084889a4829206263ebdb
Author: Richard Marian Thomaiyar <richard.marian.thomaiyar@linux.intel.com>
Date:   Mon Mar 12 23:42:34 2018 +0530

    Add Basic user manager support - IPMI

    Add basic user manager support in IPMI
    Creates user through D-Bus user interface
    and sets password using pam_chauthok().
    Lock & File reload mechanism also implmeneted.
    UserUpdate signal handler support added to update
    user in IPMI, when users are updated through
    different interfaces.

    Change-Id: I1adc538562615109189d7c19dadae0b6a109f4a5
    Signed-off-by: Richard Marian Thomaiyar <richard.marian.thomaiyar@linux.intel.com>

Change-Id: I1adc538562615109189d7c19dadae0b6a109f4a5
Signed-off-by: Richard Marian Thomaiyar <richard.marian.thomaiyar@linux.intel.com>
diff --git a/Makefile.am b/Makefile.am
index 7be3bc9..5e03648 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -66,6 +66,7 @@
 libuserlayer_LTLIBRARIES = libuserlayer.la
 libuserlayer_la_SOURCES = \
         user_channel/user_layer.cpp \
+        user_channel/user_mgmt.cpp \
         user_channel/passwd_mgr.cpp
 
 libuserlayer_la_LDFLAGS = $(SYSTEMD_LIBS) $(libmapper_LIBS) \
@@ -97,6 +98,7 @@
 	ipmi_fru_info_area.cpp \
 	read_fru_data.cpp \
 	sensordatahandler.cpp \
+	user_channel/usercommands.cpp \
 	$(libipmi20_BUILT_LIST)
 
 @CODE_COVERAGE_RULES@