From 53e054457c8c2cfefb696ea575d260165916cfcb Mon Sep 17 00:00:00 2001 From: rswindell <> Date: Sat, 6 Oct 2018 22:36:03 +0000 Subject: [PATCH] Zero-initialize the subscan array. Lock the mail base while backing it up as part of the daily maintenance. --- src/sbbs3/main.cpp | 49 ++++++++++++++++++++++++++++++---------------- 1 file changed, 32 insertions(+), 17 deletions(-) diff --git a/src/sbbs3/main.cpp b/src/sbbs3/main.cpp index 42d9eeda29..d54ba01806 100644 --- a/src/sbbs3/main.cpp +++ b/src/sbbs3/main.cpp @@ -3620,7 +3620,7 @@ bool sbbs_t::init() } } if(cfg.total_subs) { - if((subscan=(subscan_t *)malloc(sizeof(subscan_t)*cfg.total_subs))==NULL) { + if((subscan=(subscan_t *)calloc(cfg.total_subs, sizeof(subscan_t)))==NULL) { errormsg(WHERE, ERR_ALLOC, "subscan", sizeof(subscan_t)*cfg.total_subs); return(false); } @@ -4633,22 +4633,37 @@ void sbbs_t::daily_maint(void) if(cfg.mail_backup_level) { lputs(LOG_INFO,"DAILY: Backing-up mail data..."); - SAFEPRINTF(str,"%smail.shd",cfg.data_dir); - backup(str,cfg.mail_backup_level,FALSE); - SAFEPRINTF(str,"%smail.sha",cfg.data_dir); - backup(str,cfg.mail_backup_level,FALSE); - SAFEPRINTF(str,"%smail.sdt",cfg.data_dir); - backup(str,cfg.mail_backup_level,FALSE); - SAFEPRINTF(str,"%smail.sda",cfg.data_dir); - backup(str,cfg.mail_backup_level,FALSE); - SAFEPRINTF(str,"%smail.sid",cfg.data_dir); - backup(str,cfg.mail_backup_level,FALSE); - SAFEPRINTF(str,"%smail.sch",cfg.data_dir); - backup(str,cfg.mail_backup_level,FALSE); - SAFEPRINTF(str,"%smail.hash",cfg.data_dir); - backup(str,cfg.mail_backup_level,FALSE); - SAFEPRINTF(str,"%smail.ini",cfg.data_dir); - backup(str,cfg.mail_backup_level,FALSE); + smb_t mail; + int result = smb_open_sub(&cfg, &mail, INVALID_SUB); + if(result != SMB_SUCCESS) + lprintf(LOG_ERR, "ERROR %d (%s) opening mail base", result, mail.last_error); + else { + result = smb_lock(&mail); + if(result != SMB_SUCCESS) + lprintf(LOG_ERR, "ERROR %d (%s) locking mail base", result, mail.last_error); + else { + SAFEPRINTF(str,"%smail.shd",cfg.data_dir); + backup(str,cfg.mail_backup_level,FALSE); + SAFEPRINTF(str,"%smail.sha",cfg.data_dir); + backup(str,cfg.mail_backup_level,FALSE); + SAFEPRINTF(str,"%smail.sdt",cfg.data_dir); + backup(str,cfg.mail_backup_level,FALSE); + SAFEPRINTF(str,"%smail.sda",cfg.data_dir); + backup(str,cfg.mail_backup_level,FALSE); + SAFEPRINTF(str,"%smail.sid",cfg.data_dir); + backup(str,cfg.mail_backup_level,FALSE); + SAFEPRINTF(str,"%smail.sch",cfg.data_dir); + backup(str,cfg.mail_backup_level,FALSE); + SAFEPRINTF(str,"%smail.hash",cfg.data_dir); + backup(str,cfg.mail_backup_level,FALSE); + SAFEPRINTF(str,"%smail.ini",cfg.data_dir); + backup(str,cfg.mail_backup_level,FALSE); + result = smb_unlock(&mail); + if(result != SMB_SUCCESS) + lprintf(LOG_ERR, "ERROR %d (%s) unlocking mail base", result, mail.last_error); + } + smb_close(&mail); + } } lputs(LOG_INFO, "DAILY: Checking for inactive/expired user records..."); -- GitLab