157 lines
5.4 KiB
C++
157 lines
5.4 KiB
C++
|
|
/**
|
|
* @file mxs729_maxadmin.cpp Test of 'maxadmin' user add/delete
|
|
* - try to call Maxadmin as normal user
|
|
* - try to call Maxadmin as 'root' user
|
|
* - execute 'enable account'
|
|
* - try to call Maxadmin using this enable user
|
|
* - 'disable accout'
|
|
* - try to enable non-existing user with very long name
|
|
*/
|
|
|
|
|
|
#include <iostream>
|
|
#include <unistd.h>
|
|
#include "testconnections.h"
|
|
|
|
using namespace std;
|
|
|
|
const char * only_root = "Enabled Linux accounts (secure) : root\n";
|
|
const char * user_added = "The Linux user %s has successfully been enabled.\n";
|
|
const char * user_removed = "The Linux user %s has successfully been disabled.\n";
|
|
const char * remove_last_admin = "Cannot remove the last admin account";
|
|
const char * root_added = "User root has been successfully added.\n";
|
|
const char * user_and_root = "Enabled Linux accounts (secure) : root, %s\n";
|
|
const char * user_only = "Enabled Linux accounts (secure) : root, %s\n";
|
|
|
|
void add_remove_maxadmin_user(TestConnections* Test)
|
|
{
|
|
char str[1024];
|
|
int exit_code;
|
|
|
|
Test->tprintf("enable account %s to maxadmin:\n", Test->maxscales->access_user[0]);
|
|
char * st3 = Test->maxscales->ssh_node_output_f(0, true, &exit_code, "maxadmin enable account %s",
|
|
Test->maxscales->access_user[0]);
|
|
Test->tprintf("Result: %s\n", st3);
|
|
sprintf(str, user_added, Test->maxscales->access_user[0]);
|
|
if (strstr(st3, str) == NULL)
|
|
{
|
|
Test->add_result(1, "There is no proper '%s' message\n", str);
|
|
}
|
|
else
|
|
{
|
|
Test->tprintf("OK\n");
|
|
}
|
|
|
|
Test->tprintf("trying maxadmin without 'root':\n");
|
|
char * st4 = Test->maxscales->ssh_node_output_f(0, false, &exit_code, "maxadmin show users");
|
|
Test->tprintf("Result: %s\n", st4);
|
|
sprintf(str, user_only, Test->maxscales->access_user[0]);
|
|
if (strstr(st4, str) == NULL)
|
|
{
|
|
Test->add_result(1, "There is no proper '%s' message\n", str);
|
|
}
|
|
else
|
|
{
|
|
Test->tprintf("OK\n");
|
|
}
|
|
|
|
Test->tprintf("trying maxadmin with 'root':\n");
|
|
int st5 = Test->maxscales->ssh_node_f(0, true, "maxadmin show users");
|
|
if (st5 != 0)
|
|
{
|
|
Test->add_result(1, "User added and access to MaxAdmin as 'root' is not possible\n");
|
|
}
|
|
else
|
|
{
|
|
Test->tprintf("OK\n");
|
|
}
|
|
|
|
Test->tprintf("trying maxadmin without 'root'\n");
|
|
char * st7 = Test->maxscales->ssh_node_output_f(0, false, &exit_code, "maxadmin show users");
|
|
Test->tprintf("Result: %s\n", st7);
|
|
sprintf(str, user_and_root, Test->maxscales->access_user[0]);
|
|
if (strstr(st7, str) == NULL)
|
|
{
|
|
Test->add_result(1, "There is no proper '%s' message\n", str);
|
|
}
|
|
else
|
|
{
|
|
Test->tprintf("OK\n");
|
|
}
|
|
|
|
Test->tprintf("creating readonly user");
|
|
Test->maxscales->ssh_node_f(0, false, "maxadmin add readonly-user test test");
|
|
|
|
Test->tprintf("trying to remove user '%s'\n", Test->maxscales->access_user[0]);
|
|
char * st8 = Test->maxscales->ssh_node_output_f(0, false, &exit_code, "maxadmin disable account %s",
|
|
Test->maxscales->access_user[0]);
|
|
|
|
if (strstr(st8, remove_last_admin))
|
|
{
|
|
Test->add_result(1, "Wrong output of disable command: %s", st8);
|
|
}
|
|
else
|
|
{
|
|
Test->tprintf("OK\n");
|
|
}
|
|
|
|
Test->tprintf("Trying with removed user '%s'\n", Test->maxscales->access_user[0]);
|
|
int st9 = Test->maxscales->ssh_node_f(0, false, "maxadmin show users");
|
|
if (st9 == 0)
|
|
{
|
|
Test->add_result(1, "User '%s' should be removed", Test->maxscales->access_user[0]);
|
|
}
|
|
else
|
|
{
|
|
Test->tprintf("OK\n");
|
|
}
|
|
}
|
|
|
|
int main(int argc, char *argv[])
|
|
{
|
|
int exit_code;
|
|
TestConnections * Test = new TestConnections(argc, argv);
|
|
Test->set_timeout(600);
|
|
|
|
Test->maxscales->ssh_node_f(0, true, "rm -rf /var/lib/maxscale/passwd");
|
|
Test->maxscales->ssh_node_f(0, true, "rm -rf /var/lib/maxscale/maxadmin-users");
|
|
Test->maxscales->restart_maxscale(0);
|
|
|
|
Test->tprintf("trying maxadmin without 'root'\n");
|
|
int st1 = Test->maxscales->ssh_node_f(0, false, "maxadmin show users");
|
|
Test->tprintf("exit code is: %d\n", st1);
|
|
if (st1 == 0)
|
|
{
|
|
Test->add_result(1, "Access to MaxAdmin is possible without 'root' priveleges\n");
|
|
}
|
|
|
|
Test->tprintf("trying maxadmin with 'root'\n");
|
|
char * st2 = Test->maxscales->ssh_node_output_f(0, true, &exit_code, "maxadmin show users");
|
|
Test->tprintf("Result: \n %s\n", st2);
|
|
if (strstr(st2, only_root) == NULL)
|
|
{
|
|
Test->add_result(1, "Wrong list of MaxAdmin users\n");
|
|
}
|
|
|
|
add_remove_maxadmin_user(Test);
|
|
|
|
Test->tprintf("trying long wierd user\n");
|
|
char * st10 = Test->maxscales->ssh_node_output(0,
|
|
"maxadmin enable account yygrgtrпрекури6н33имн756ККККЕН:УИГГГГ*?:*:*fj34oru34h275g23457g2v90590+u764gv56837fbv62381§SDFERGtrg45ergfergergefewfergt456ty",
|
|
true, &exit_code);
|
|
/*Test->tprintf("Result: %s\n", st10);
|
|
if (strstr(st10, "has been successfully added") == NULL)
|
|
{
|
|
Test->add_result(1, "Wrong list of MaxAdmin users\n");
|
|
}*/
|
|
|
|
Test->check_maxscale_alive(0);
|
|
Test->maxscales->ssh_node_f(0, true, "rm -rf /var/lib/maxscale/passwd");
|
|
Test->maxscales->ssh_node_f(0, true, "rm -rf /var/lib/maxscale/maxadmin-users");
|
|
|
|
int rval = Test->global_result;
|
|
delete Test;
|
|
return rval;
|
|
}
|