built-in user "admin" renamed to "system"; "admin" user created on init as regular...
authorVictor Kirhenshtein <victor@netxms.org>
Fri, 26 Aug 2016 20:38:57 +0000 (23:38 +0300)
committerVictor Kirhenshtein <victor@netxms.org>
Fri, 26 Aug 2016 20:38:57 +0000 (23:38 +0300)
include/netxmsdb.h
sql/setup.in
src/server/core/userdb.cpp
src/server/core/userdb_objects.cpp
src/server/libnxsrv/messages.mc
src/server/tools/nxdbmgr/init.cpp
src/server/tools/nxdbmgr/nxdbmgr.cpp
src/server/tools/nxdbmgr/nxdbmgr.h
src/server/tools/nxdbmgr/resetadmin.cpp
src/server/tools/nxdbmgr/upgrade.cpp

index b128521..c5ebec6 100644 (file)
@@ -23,6 +23,6 @@
 #ifndef _netxmsdb_h
 #define _netxmsdb_h
 
-#define DB_FORMAT_VERSION   412
+#define DB_FORMAT_VERSION   413
 
 #endif
index fc9c53c..23a9c6b 100644 (file)
@@ -174,49 +174,60 @@ INSERT INTO config (var_name,var_value,is_visible,need_server_restart) VALUES ('
 INSERT INTO config (var_name,var_value,is_visible,need_server_restart) VALUES ('XMPPServer','localhost',1,1);
 
 /*
-** Default admin user
+** System user
 */
 INSERT INTO users (id,name,password,system_access,flags,full_name,
                    description,grace_logins,auth_method,guid,
                    cert_mapping_method,cert_mapping_data,
                    auth_failures,last_passwd_change,min_passwd_length,
                    disabled_until,last_login)
-   VALUES (0,'admin',
-           '3A445C0072CD69D9030CC6644020E5C4576051B1', // Default password: netxms
-           65535,8,'','Built-in system administrator account',5,0,
+   VALUES (0,'system',
+           '3A445C0072CD69D9030CC6644020E5C4576051B1', /* Default password: netxms */
+           274877906943,12,'','Built-in system account',5,0,  /* Flags: change password + disabled */
            '00000000-0000-0000-0000-000000000000',0,'',0,0,0,0,0
           );
 
+/*
+** Default admin user
+*/
+INSERT INTO users (id,name,password,system_access,flags,full_name,
+                   description,grace_logins,auth_method,guid,
+                   cert_mapping_method,cert_mapping_data,
+                   auth_failures,last_passwd_change,min_passwd_length,
+                   disabled_until,last_login)
+   VALUES (1,'admin',
+           '3A445C0072CD69D9030CC6644020E5C4576051B1', /* Default password: netxms */
+           0,8,'','Default administrator account',5,0,
+           '00000000-0000-0000-0000-000000000000',0,'',0,0,0,0,0
+          );
 
 /*
 ** Special "Everyone" user group
 */
-
 INSERT INTO user_groups (id,name,system_access,flags,description,guid)
    VALUES (-2147483648, 'Everyone', 16, 0, 'Built-in everyone group',
            '00000000-0000-0000-0000-000000000000'
           );
 
-
 /*
 ** Default "Admins" group
 */
-
 INSERT INTO user_groups (id,name,system_access,flags,description,guid)
-   VALUES (-2147483647, 'Admins', 65535, 0, 'Default administrative group',
+   VALUES (-2147483647, 'Admins', 274877906943, 0, 'Default administrative group',
            '00000000-0000-0000-0000-000000000000'
           );
 
-INSERT INTO acl (object_id,user_id,access_rights) VALUES (1,-2147483647,2047);
-INSERT INTO acl (object_id,user_id,access_rights) VALUES (2,-2147483647,2047);
-INSERT INTO acl (object_id,user_id,access_rights) VALUES (3,-2147483647,2047);
-INSERT INTO acl (object_id,user_id,access_rights) VALUES (4,-2147483647,2047);
-INSERT INTO acl (object_id,user_id,access_rights) VALUES (5,-2147483647,2047);
-INSERT INTO acl (object_id,user_id,access_rights) VALUES (6,-2147483647,2047);
-INSERT INTO acl (object_id,user_id,access_rights) VALUES (7,-2147483647,2047);
-INSERT INTO acl (object_id,user_id,access_rights) VALUES (8,-2147483647,2047);
-INSERT INTO acl (object_id,user_id,access_rights) VALUES (9,-2147483647,2047);
+INSERT INTO user_group_members (group_id,user_id) VALUES (-2147483647,1);
 
+INSERT INTO acl (object_id,user_id,access_rights) VALUES (1,-2147483647,32767);
+INSERT INTO acl (object_id,user_id,access_rights) VALUES (2,-2147483647,32767);
+INSERT INTO acl (object_id,user_id,access_rights) VALUES (3,-2147483647,32767);
+INSERT INTO acl (object_id,user_id,access_rights) VALUES (4,-2147483647,32767);
+INSERT INTO acl (object_id,user_id,access_rights) VALUES (5,-2147483647,32767);
+INSERT INTO acl (object_id,user_id,access_rights) VALUES (6,-2147483647,32767);
+INSERT INTO acl (object_id,user_id,access_rights) VALUES (7,-2147483647,32767);
+INSERT INTO acl (object_id,user_id,access_rights) VALUES (8,-2147483647,32767);
+INSERT INTO acl (object_id,user_id,access_rights) VALUES (9,-2147483647,32767);
 
 /*
 ** Default event groups
index 1ea8c49..318ebf2 100644 (file)
@@ -221,7 +221,7 @@ BOOL LoadUsers()
 
    DBFreeResult(hResult);
 
-   // Create superuser account if it doesn't exist
+   // Create system account if it doesn't exist
    if (!s_userDatabase.contains(0))
    {
                User *user = new User();
@@ -403,7 +403,7 @@ result:
                if (user->getFlags() & UF_CHANGE_PASSWORD)
                {
                   DbgPrintf(4, _T("Password for user \"%s\" need to be changed"), user->getName());
-                  if (user->getId() != 0)      // Do not check grace logins for built-in admin user
+                  if (user->getId() != 0)      // Do not check grace logins for built-in system user
                   {
                      if (user->getGraceLogins() <= 0)
                      {
@@ -427,7 +427,7 @@ result:
                       (time(NULL) > user->getPasswordChangeTime() + passwordExpirationTime * 86400))
                   {
                      DbgPrintf(4, _T("Password for user \"%s\" has expired"), user->getName());
-                     if (user->getId() != 0)   // Do not check grace logins for built-in admin user
+                     if (user->getId() != 0)   // Do not check grace logins for built-in system user
                      {
                         if (user->getGraceLogins() <= 0)
                         {
index bc7d722..d299c1d 100644 (file)
@@ -421,16 +421,16 @@ User::User(DB_HANDLE hdb, DB_RESULT hResult, int row) : UserDatabaseObject(hdb,
 }
 
 /**
- * Constructor for user object - create default superuser
+ * Constructor for user object - create default system user
  */
 User::User() : UserDatabaseObject()
 {
        m_id = 0;
-       _tcscpy(m_name, _T("admin"));
+       _tcscpy(m_name, _T("system"));
        m_flags = UF_MODIFIED | UF_CHANGE_PASSWORD;
        m_systemRights = SYSTEM_ACCESS_FULL;
        m_fullName[0] = 0;
-       _tcscpy(m_description, _T("Built-in system administrator account"));
+       _tcscpy(m_description, _T("Built-in system account"));
        CalculatePasswordHash(_T("netxms"), PWD_HASH_SHA256, &m_password);
        m_graceLogins = MAX_GRACE_LOGINS;
        m_authMethod = AUTH_NETXMS_PASSWORD;
@@ -442,7 +442,6 @@ User::User() : UserDatabaseObject()
        m_disabledUntil = 0;
        m_lastLogin = 0;
    m_xmppId[0] = 0;
-
 }
 
 /**
index 7762de0..4fa4859 100644 (file)
@@ -329,7 +329,7 @@ Call to if_nameindex() failed (%1)
 MessageId=
 SymbolicName=MSG_SUPERUSER_CREATED
 Language=English
-Superuser account created because it was not presented in database
+System account created because it was not presented in database
 .
 
 MessageId=
index 16fcfa1..327a0c7 100644 (file)
@@ -1,6 +1,6 @@
 /* 
 ** nxdbmgr - NetXMS database manager
-** Copyright (C) 2004-2012 Victor Kirhenshtein
+** Copyright (C) 2004-2016 Victor Kirhenshtein
 **
 ** 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
@@ -162,13 +162,20 @@ void InitDatabase(const char *pszInitFile)
    if (!ExecSQLBatch(pszInitFile))
       goto init_failed;
 
-   // Generate GUID for user "admin"
+   // Generate GUID for user "system"
    _uuid_generate(guid);
    _sntprintf(szQuery, 256, _T("UPDATE users SET guid='%s' WHERE id=0"),
               _uuid_to_string(guid, szGUID));
    if (!SQLQuery(szQuery))
       goto init_failed;
 
+   // Generate GUID for user "admin"
+   _uuid_generate(guid);
+   _sntprintf(szQuery, 256, _T("UPDATE users SET guid='%s' WHERE id=1"),
+              _uuid_to_string(guid, szGUID));
+   if (!SQLQuery(szQuery))
+      goto init_failed;
+
    // Generate GUID for "everyone" group
    _uuid_generate(guid);
    _sntprintf(szQuery, 256, _T("UPDATE user_groups SET guid='%s' WHERE id=%d"),
@@ -176,6 +183,13 @@ void InitDatabase(const char *pszInitFile)
    if (!SQLQuery(szQuery))
       goto init_failed;
 
+   // Generate GUID for "Admins" group
+   _uuid_generate(guid);
+   _sntprintf(szQuery, 256, _T("UPDATE user_groups SET guid='%s' WHERE id=-2147483647"),
+              _uuid_to_string(guid, szGUID), GROUP_EVERYONE);
+   if (!SQLQuery(szQuery))
+      goto init_failed;
+
    _tprintf(_T("Database initialized successfully\n"));
    return;
 
index ab38e16..43677d7 100644 (file)
@@ -1,6 +1,6 @@
 /*
 ** nxdbmgr - NetXMS database manager
-** Copyright (C) 2004-2015 Victor Kirhenshtein
+** Copyright (C) 2004-2016 Victor Kirhenshtein
 **
 ** 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
@@ -641,18 +641,18 @@ stop_search:
                           _tprintf(_T("NetXMS Database Manager Version ") NETXMS_VERSION_STRING _T(" Build ") NETXMS_VERSION_BUILD_STRING _T(" (") NETXMS_BUILD_TAG _T(")") IS_UNICODE_BUILD_STRING _T("\n\n"));
             _tprintf(_T("Usage: nxdbmgr [<options>] <command>\n")
                      _T("Valid commands are:\n")
-                                                  _T("   batch <file>       : Run SQL batch file\n")
-                     _T("   check              : Check database for errors\n")
-                     _T("   check-data-tables  : Check database for missing data tables\n")
-                     _T("   export <file>      : Export database to file\n")
-                     _T("   get <name>         : Get value of server configuration variable\n")
-                     _T("   import <file>      : Import database from file\n")
-                     _T("   init <file>        : Initialize database\n")
-                                        _T("   migrate <source>   : Migrate database from given source\n")
-                     _T("   resetadmin         : Unlock user \"admin\" and reset password to default (\"netxms\")\n")
-                     _T("   set <name> <value> : Set value of server configuration variable\n")
-                     _T("   unlock             : Forced database unlock\n")
-                     _T("   upgrade            : Upgrade database to new version\n")
+                                                  _T("   batch <file>         : Run SQL batch file\n")
+                     _T("   check                : Check database for errors\n")
+                     _T("   check-data-tables    : Check database for missing data tables\n")
+                     _T("   export <file>        : Export database to file\n")
+                     _T("   get <name>           : Get value of server configuration variable\n")
+                     _T("   import <file>        : Import database from file\n")
+                     _T("   init <file>          : Initialize database\n")
+                                        _T("   migrate <source>     : Migrate database from given source\n")
+                     _T("   reset-system-account : Unlock user \"system\" and reset it's password to default\n")
+                     _T("   set <name> <value>   : Set value of server configuration variable\n")
+                     _T("   unlock               : Forced database unlock\n")
+                     _T("   upgrade              : Upgrade database to new version\n")
                      _T("Valid options are:\n")
                      _T("   -c <config> : Use alternate configuration file. Default is %s\n")
                      _T("   -d          : Check collected data (may take very long time).\n")
@@ -760,7 +760,7 @@ stop_search:
        strcmp(argv[optind], "import") &&
        strcmp(argv[optind], "init") &&
        strcmp(argv[optind], "migrate") &&
-       strcmp(argv[optind], "resetadmin") &&
+       strcmp(argv[optind], "reset-system-account") &&
        strcmp(argv[optind], "set") &&
        strcmp(argv[optind], "unlock") &&
        strcmp(argv[optind], "upgrade"))
@@ -900,9 +900,9 @@ stop_search:
                        free(value);
 #endif
                }
-      else if (!strcmp(argv[optind], "resetadmin"))
+      else if (!strcmp(argv[optind], "reset-system-account"))
       {
-         ResetAdmin();
+         ResetSystemAccount();
       }
    }
 
index 4914093..52c487c 100644 (file)
@@ -88,7 +88,7 @@ BOOL CreateIDataTable(DWORD nodeId);
 BOOL CreateTDataTable(DWORD nodeId);
 BOOL CreateTDataTable_preV281(DWORD nodeId);
 
-void ResetAdmin();
+void ResetSystemAccount();
 
 //
 // Global variables
index 853cfdc..55281a7 100644 (file)
 
 #include "nxdbmgr.h"
 
-//
-// Reset password to default
-//
-
-void ResetAdmin()
+/**
+ * Reset "system" account password to default and unlock it
+ */
+void ResetSystemAccount()
 {
        WriteToTerminal(_T("\n\n\x1b[1mWARNING!!!\x1b[0m\n"));
-       if (!GetYesNo(_T("This operation will unlock admin user and change it password to default (\"netxms\").\nAre you sure?")))
+       if (!GetYesNo(_T("This operation will unlock \"system\" user and change it's password to default (\"netxms\").\nAre you sure?")))
    {
                return;
    }
index 9ef7945..e6d79ef 100644 (file)
@@ -161,20 +161,6 @@ bool CreateConfigParam(const TCHAR *name, const TCHAR *value, bool isVisible, bo
    return success;
 }
 
-/**
- * Set primary key constraint
- */
-static BOOL SetPrimaryKey(const TCHAR *table, const TCHAR *key)
-{
-       TCHAR query[4096];
-
-       if (g_dbSyntax == DB_SYNTAX_SQLITE)
-               return TRUE;    // SQLite does not support adding constraints
-
-       _sntprintf(query, 4096, _T("ALTER TABLE %s ADD PRIMARY KEY (%s)"), table, key);
-       return SQLQuery(query);
-}
-
 /**
  * Rename table
  */
@@ -735,6 +721,65 @@ static bool SetSchemaVersion(int version)
    return SQLQuery(query);
 }
 
+/**
+ * Upgrade from V412 to V413
+ */
+static BOOL H_UpgradeFromV412(int currVersion, int newVersion)
+{
+   CHK_EXEC(SQLQuery(_T("UPDATE users SET name='system',description='Built-in system account',full_name='',flags=12 WHERE id=0")));
+
+   TCHAR password[128];
+   DB_RESULT hResult = SQLSelect(_T("SELECT password FROM users WHERE id=0"));
+   if (hResult != NULL)
+   {
+      if (DBGetNumRows(hResult) > 0)
+         DBGetField(hResult, 0, 0, password, 128);
+      else
+         _tcscpy(password, _T("3A445C0072CD69D9030CC6644020E5C4576051B1")); // Use default password "netxms"
+      DBFreeResult(hResult);
+   }
+   else
+   {
+      if (!g_bIgnoreErrors)
+         return false;
+   }
+
+   UINT32 userId = 1;
+   hResult = SQLSelect(_T("SELECT max(id) FROM users"));
+   if (hResult != NULL)
+   {
+      if (DBGetNumRows(hResult) > 0)
+         userId = DBGetFieldULong(hResult, 0, 0) + 1;
+      DBFreeResult(hResult);
+   }
+   else
+   {
+      if (!g_bIgnoreErrors)
+         return false;
+   }
+
+   uuid guid = uuid::generate();
+   TCHAR query[1024];
+   _sntprintf(query, 1024,
+     _T("INSERT INTO users (id,name,password,system_access,flags,full_name,")
+     _T("   description,grace_logins,auth_method,guid,")
+     _T("   cert_mapping_method,cert_mapping_data,")
+     _T("   auth_failures,last_passwd_change,min_passwd_length,")
+     _T("   disabled_until,last_login) VALUES (%d,'admin','%s',274877906943,0,")
+     _T("   '','Default administrator account',5,0,'%s',0,'',0,0,0,0,0)"),
+     userId, password, (const TCHAR *)guid.toString());
+   CHK_EXEC(SQLQuery(query));
+
+   for(int i = 1; i < 10; i++)
+   {
+      _sntprintf(query, 256, _T("INSERT INTO acl (object_id,user_id,access_rights) VALUES (%d,%d,32767)"), i, userId);
+      CHK_EXEC(SQLQuery(query));
+   }
+
+   CHK_EXEC(SetSchemaVersion(413));
+   return TRUE;
+}
+
 /**
  * Upgrade from V411 to V412
  */
@@ -768,7 +813,7 @@ static BOOL H_UpgradeFromV411(int currVersion, int newVersion)
    }
    else
    {
-      if (g_bIgnoreErrors)
+      if (!g_bIgnoreErrors)
          return false;
    }
    CHK_EXEC(SetSchemaVersion(412));
@@ -10490,6 +10535,7 @@ static struct
    { 409, 410, H_UpgradeFromV409 },
    { 410, 411, H_UpgradeFromV410 },
    { 411, 412, H_UpgradeFromV411 },
+   { 412, 413, H_UpgradeFromV412 },
    { 0, 0, NULL }
 };