X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=citadel%2Fmodules%2Fupgrade%2Fserv_upgrade.c;h=86e2947f440bf5e072a19756abc7a1569de49f2c;hb=f59e2e6772d87d323d065f09919ec0876bf2e0be;hp=59089d295fbfbfd738b801ab8bcde093fadb2748;hpb=9ffea7c3315046ddcea2589656c13da5f5e0c076;p=citadel.git diff --git a/citadel/modules/upgrade/serv_upgrade.c b/citadel/modules/upgrade/serv_upgrade.c index 59089d295..86e2947f4 100644 --- a/citadel/modules/upgrade/serv_upgrade.c +++ b/citadel/modules/upgrade/serv_upgrade.c @@ -4,7 +4,7 @@ * guesses about what kind of data format changes need to be applied, and * we apply them transparently. * - * Copyright (c) 1987-2019 by the citadel.org team + * Copyright (c) 1987-2020 by the citadel.org team * * This program is open source software; you can redistribute it and/or * modify it under the terms of the GNU General Public License version 3. @@ -63,21 +63,14 @@ int oldver = 0; /* - * Fix up the name for Citadel user 0 and try to remove any extra users with number 0 + * Try to remove any extra users with number 0 */ void fix_sys_user_name(void) { struct ctdluser usbuf; char usernamekey[USERNAME_SIZE]; - /** If we have a user called Citadel rename them to SYS_Citadel */ - if (CtdlGetUser(&usbuf, "Citadel") == 0) - { - rename_user("Citadel", "SYS_Citadel"); - } - - while (CtdlGetUserByNumber(&usbuf, 0) == 0) - { + while (CtdlGetUserByNumber(&usbuf, 0) == 0) { /* delete user with number 0 and no name */ if (IsEmptyStr(usbuf.fullname)) { cdb_delete(CDB_USERS, "", 0); @@ -89,18 +82,10 @@ void fix_sys_user_name(void) } } - /* Make sure user SYS_* is user 0 */ - while (CtdlGetUserByNumber(&usbuf, -1) == 0) - { - if (strncmp(usbuf.fullname, "SYS_", 4)) - { /* Delete any user 0 that doesn't start with SYS_ */ - makeuserkey(usernamekey, usbuf.fullname, cutusername(usbuf.fullname)); - cdb_delete(CDB_USERS, usernamekey, strlen(usernamekey)); - } - else { - usbuf.usernum = 0; - CtdlPutUser(&usbuf); - } + /* Delete any "user 0" accounts */ + while (CtdlGetUserByNumber(&usbuf, -1) == 0) { + makeuserkey(usernamekey, usbuf.fullname); + cdb_delete(CDB_USERS, usernamekey, strlen(usernamekey)); } } @@ -486,6 +471,21 @@ void move_inet_addrs_from_vcards_to_user_records(void) } +/* + * Create a default administrator account so we can log in to a new installation + */ +void create_default_admin_account(void) { + struct ctdluser usbuf; + + create_user(DEFAULT_ADMIN_USERNAME, CREATE_USER_DO_NOT_BECOME_USER, (-1)); + CtdlGetUser(&usbuf, DEFAULT_ADMIN_USERNAME); + safestrncpy(usbuf.password, DEFAULT_ADMIN_PASSWORD, sizeof(usbuf.password)); + usbuf.axlevel = AxAideU; + CtdlPutUser(&usbuf); + CtdlSetConfigStr("c_sysadm", DEFAULT_ADMIN_USERNAME); +} + + /* * Based on the server version number reported by the existing database, * run in-place data format upgrades until everything is up to date. @@ -551,6 +551,13 @@ void pre_startup_upgrades(void) { CtdlSetConfigInt("c_ep_mode", EXPIRE_MANUAL); CtdlSetConfigInt("c_ep_value", 0); } + + /* + * If this is the first run on an empty database, create a default administrator + */ + if (oldver == 0) { + create_default_admin_account(); + } } @@ -587,14 +594,13 @@ CTDL_MODULE_UPGRADE(upgrade) return "upgrade"; } + CTDL_MODULE_INIT(upgrade) { - if(!threading) - { - move_inet_addrs_from_vcards_to_user_records(); + if (!threading) { post_startup_upgrades(); } - + /* return our module name for the log */ return "upgrade"; }