From 03d4a4d6628f627651dadc943d08cc0c8188dc8d Mon Sep 17 00:00:00 2001 From: Bogomil Vasilev Date: Sat, 3 Sep 2016 22:43:51 +0300 Subject: [PATCH] DB init scripts --- Makefile | 10 +- db_scripts/{readme => README} | 0 db_scripts/init_rmps_db.sh | 27 +++++ db_scripts/init_rmps_db.sql | 183 ++++++++++++++++++++++++++++++++++ rmps.c | 2 +- 5 files changed, 216 insertions(+), 6 deletions(-) rename db_scripts/{readme => README} (100%) create mode 100755 db_scripts/init_rmps_db.sh create mode 100644 db_scripts/init_rmps_db.sql diff --git a/Makefile b/Makefile index 706c3aa..3fd5882 100644 --- a/Makefile +++ b/Makefile @@ -1,10 +1,10 @@ CC ?= cc CCFLAGS ?= -O2 -CCFLAGS += -Wall \ - -Wextra \ - -pipe \ - -Wmissing-declarations \ - -pedantic \ +CCFLAGS += -Wall \ + -Wextra \ + -pipe \ + -Wmissing-declarations \ + -pedantic \ -fstack-protector-strong LDFLAGS = -O1 -lcrypto -lssl -lpthread diff --git a/db_scripts/readme b/db_scripts/README similarity index 100% rename from db_scripts/readme rename to db_scripts/README diff --git a/db_scripts/init_rmps_db.sh b/db_scripts/init_rmps_db.sh new file mode 100755 index 0000000..74773a2 --- /dev/null +++ b/db_scripts/init_rmps_db.sh @@ -0,0 +1,27 @@ +#!/bin/bash + +printf "Password for 'rmps' DB user: " +read -s dbpass +printf "\nEnter the first RMPS username: " +read username +printf "Full name for the new user '$username': " +read fullname +printf "Password for RMPS user '$username': " +read -s newuser_pass +printf "\nEnter e-mail for the new user: " +read email +printf "Initializing DB... " +salt=`head -c 32 /dev/urandom|sha1sum|head -c 32` +pass_hash=`printf ${newuser_pass}${salt}|sha512sum|head -c 128` + +#printf "\nSalt = $salt" +#printf "\nHash = $pass_hash\n" + +mysql -u rmps --password="$dbpass" -e "set @loginName=\"$adminpass\";\ + set @loginName=\"$username\";\ + set @fullName=\"$fullname\";\ + set @eMail=\"$email\";\ + set @passHash=\"$pass_hash\";\ + set @passSalt=\"$salt\";\ + `cat init_rmps_db.sql`" +printf 'Done!\n' diff --git a/db_scripts/init_rmps_db.sql b/db_scripts/init_rmps_db.sql new file mode 100644 index 0000000..523307f --- /dev/null +++ b/db_scripts/init_rmps_db.sql @@ -0,0 +1,183 @@ +/* Drop all the tables before creating */ +DROP TABLE IF EXISTS `rmps`.`script_logs`; +DROP TABLE IF EXISTS `rmps`.`scripts`; +DROP TABLE IF EXISTS `rmps`.`script_types`; +DROP TABLE IF EXISTS `rmps`.`jobs`; +DROP TABLE IF EXISTS `rmps`.`job_types`; +DROP TABLE IF EXISTS `rmps`.`static_groups`; +DROP TABLE IF EXISTS `rmps`.`dynamic_groups`; +DROP TABLE IF EXISTS `rmps`.`agents`; +DROP TABLE IF EXISTS `rmps`.`users`; + +CREATE TABLE `rmps`.`users` ( + `id` INT (11) NOT NULL AUTO_INCREMENT COMMENT 'User ID', + `username` VARCHAR (255) NOT NULL COMMENT 'Login name', + `name` VARCHAR (255) NOT NULL COMMENT 'Full name', + `pass_hash` VARCHAR (255) NOT NULL COMMENT 'User pass - hash(pass+salt)', + `pass_salt` VARCHAR (32) NOT NULL COMMENT 'User pass salt (/dev/urandom)', + `added` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Registration timestamp', + `status` TINYINT (1) DEFAULT 1 COMMENT 'User active status', + `last_log` TIMESTAMP DEFAULT 0 COMMENT 'Last login timestamp', + `last_out` TIMESTAMP DEFAULT 0 COMMENT 'Last logout timestamp', + `email` VARCHAR (255) NOT NULL COMMENT 'User e-mail', + `comment` VARCHAR (255) DEFAULT NULL COMMENT 'User additional info', + PRIMARY KEY (`id`) +); + +CREATE TABLE `rmps`.`static_groups` ( + `id` INT (11) NOT NULL AUTO_INCREMENT COMMENT 'Static group ID', + `name` VARCHAR (255) NOT NULL DEFAULT 'New Static Group' COMMENT 'Name of the Static group', + `created` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Creation timestamp', + `owner` INT (11) NOT NULL COMMENT 'User ID of the creator (FK)', + `last_mod_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Last modification timestmap', + `last_mod_user` INT (11) NOT NULL COMMENT 'User ID of last modifier', + `comment` VARCHAR (255) DEFAULT NULL COMMENT 'Static group additional info', + PRIMARY KEY (`id`), + CONSTRAINT FOREIGN KEY (`owner`) REFERENCES `rmps`.`users`(`id`) +); + +CREATE TABLE `rmps`.`dynamic_groups` ( + `id` INT (11) NOT NULL AUTO_INCREMENT COMMENT 'Dynamic group ID', + PRIMARY KEY (`id`) +); + +CREATE TABLE `rmps`.`agents` ( + `id` INT (11) NOT NULL AUTO_INCREMENT COMMENT 'Managed server ID or agent ID', + `name` VARCHAR (255) NOT NULL DEFAULT 'New agent' COMMENT 'Custom name for the agent', + `ip` INT (11) UNSIGNED NOT NULL COMMENT 'IP of the agent stored with INET_ATON(x)', + `mac` VARCHAR (12) NOT NULL COMMENT 'MAC address of the agent', + `fqdn` VARCHAR (255) NOT NULL COMMENT 'FQDN of the agent', + `os` VARCHAR (100) NOT NULL COMMENT 'OS of the agent', + `added` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Agent registration timestamp', + `active` TINYINT (1) NOT NULL DEFAULT 1 COMMENT 'Agent status (if online or not)', + `comment` VARCHAR (255) DEFAULT NULL COMMENT 'Agent additional info', + PRIMARY KEY (`id`) +); + +CREATE TABLE `rmps`.`script_types` ( + `id` INT (4) NOT NULL AUTO_INCREMENT COMMENT 'Script type ID', + `descr` VARCHAR (30) NOT NULL COMMENT 'Script type description', + PRIMARY KEY (`id`) +); + +CREATE TABLE `rmps`.`scripts` ( + `id` INT (4) NOT NULL AUTO_INCREMENT COMMENT 'Script ID', + `name` VARCHAR (100) NOT NULL DEFAULT 'New script' COMMENT 'Script custom name', + `typeID` INT (4) NOT NULL COMMENT 'Script type ID (FK)', + `created` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Script creation timestamp', + `owner` INT (11) NOT NULL COMMENT 'User ID of the creator', + `last_mod_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Last modification timestamp', + `content` TEXT DEFAULT NULL COMMENT 'Script content', + `comment` VARCHAR (255) DEFAULT NULL COMMENT 'Script additional info', + PRIMARY KEY (`id`), + CONSTRAINT FOREIGN KEY (`typeID`) REFERENCES `rmps`.`script_types`(`id`) +); + +CREATE TABLE `rmps`.`script_logs` ( + `id` INT (11) NOT NULL AUTO_INCREMENT COMMENT 'Log ID', + `jobID` INT (11) NOT NULL COMMENT 'Job ID', + `started` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Script start timestamp', + `ended` TIMESTAMP DEFAULT 0 COMMENT 'Script finish timestamp', + `stdout` TEXT DEFAULT NULL COMMENT 'Script stdout', + `stderr` TEXT DEFAULT NULL COMMENT 'Script stderr', + `exit_code` INT (2) DEFAULT NULL COMMENT 'Script exit code ($?)', + PRIMARY KEY (`id`) +); + +CREATE TABLE `rmps`.`job_types` ( + `id` INT (11) NOT NULL AUTO_INCREMENT COMMENT 'Job type ID', + `descr` VARCHAR (30) NOT NULL COMMENT 'Job type description', + PRIMARY KEY (`id`) +); + +CREATE TABLE `rmps`.`jobs` ( + `id` INT (11) NOT NULL AUTO_INCREMENT COMMENT 'Job ID', + `typeID` INT (4) NOT NULL COMMENT 'Job type ID (FK)', + `owner` INT (11) NOT NULL COMMENT 'User ID of the job creator (FK)', + `started` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Job start time', + `ended` TIMESTAMP DEFAULT 0 COMMENT 'Job finish time', + `status` TINYINT(1) DEFAULT NULL COMMENT 'Job finish status', + PRIMARY KEY (`id`), + CONSTRAINT FOREIGN KEY (`typeID`) REFERENCES `rmps`.`job_types`(`id`), + CONSTRAINT FOREIGN KEY (`owner`) REFERENCES `rmps`.`users`(`id`) +); + +/* Fill the job types */ +INSERT INTO `rmps`.`job_types` (`descr`) VALUES ('UNIX Script'); +INSERT INTO `rmps`.`job_types` (`descr`) VALUES ('Install a package'); +INSERT INTO `rmps`.`job_types` (`descr`) VALUES ('Query a package'); +INSERT INTO `rmps`.`job_types` (`descr`) VALUES ('Delete a package'); +INSERT INTO `rmps`.`job_types` (`descr`) VALUES ('List all packages'); +INSERT INTO `rmps`.`job_types` (`descr`) VALUES ('Update a package'); +INSERT INTO `rmps`.`job_types` (`descr`) VALUES ('Update all packages'); +INSERT INTO `rmps`.`job_types` (`descr`) VALUES ('Detect OS'); +INSERT INTO `rmps`.`job_types` (`descr`) VALUES ('Detect UNIX kernel'); +INSERT INTO `rmps`.`job_types` (`descr`) VALUES ('Get memory status'); + +/* Setup the admin user */ + +/* Define the procedures */ +DELIMITER $$ + +USE `rmps` $$ + +DROP PROCEDURE IF EXISTS `rmps`.`addUser` $$ + +CREATE DEFINER=`rmps`@`localhost` PROCEDURE `addUser` ( + IN loginName VARCHAR (255), + IN fullName VARCHAR (255), + IN eMail VARCHAR (255), + IN passHash VARCHAR (128), + IN passSalt VARCHAR (32), + IN more VARCHAR (255), + OUT output TINYINT (1) +) +BEGIN + DECLARE tmp TINYINT (1); + + SELECT `status` INTO tmp + FROM + `rmps`.`users` + WHERE + `username` = loginName + AND + `status` = 1 + LIMIT 1; + + IF tmp IS NULL THEN + INSERT INTO `rmps`.`users` + (`username`, `name`, `email`, `pass_hash`, `pass_salt`, `comment`) + VALUES + (loginName, fullName, eMail, passHash, passSalt, more); + SET output = 0; + ELSE + SET output = 1; + END IF; +END $$ +call addUser(@loginName, @fullName, @eMail, @passHash, @passSalt, 0, @output); + +DROP PROCEDURE IF EXISTS `rmps`.`deactivateUser` $$ + +CREATE DEFINER=`rmps`@`localhost` PROCEDURE `deactivateUser` ( + IN loginName VARCHAR (255) +) +BEGIN + DECLARE tmp TINYINT (1); + + SELECT `id` INTO tmp + FROM + `rmps`.`users` + WHERE + `username` = loginName + AND + `status` = 1 + LIMIT 1; + + IF tmp IS NOT NULL THEN + UPDATE `rmps`.`users` SET `status` = 0 WHERE `id` = tmp; + END IF; +END $$ + +DELIMITER ; + + diff --git a/rmps.c b/rmps.c index e4f8589..c1df41b 100644 --- a/rmps.c +++ b/rmps.c @@ -214,7 +214,7 @@ static SSL_CTX* init_server_ctx(const char *cipherlist) SSL_VERIFY_CLIENT_ONCE | SSL_VERIFY_FAIL_IF_NO_PEER_CERT, NULL); - + ciphers[0] = 0; strcat(ciphers, "-ALL"); /* Disable any ciphers we have by default */ strcat(ciphers, cipherlist);