diff --git a/src/sbbs3/ftpsrvr.c b/src/sbbs3/ftpsrvr.c index c498457d5eaf93b8ed042540321416e713e06692..5077391baad853508caffcb8e331c6de81806fc0 100644 --- a/src/sbbs3/ftpsrvr.c +++ b/src/sbbs3/ftpsrvr.c @@ -6125,15 +6125,11 @@ void DLLCALL ftp_server(void* arg) SAFECOPY(scfg.temp_dir,"../temp"); prep_dir(scfg.ctrl_dir, scfg.temp_dir, sizeof(scfg.temp_dir)); if(!md(scfg.temp_dir)) { + lprintf(LOG_CRIT,"!ERROR %d (%s) creating directory: %s", errno, strerror(errno), scfg.temp_dir); cleanup(1,__LINE__); break; } lprintf(LOG_DEBUG,"Temporary file directory: %s", scfg.temp_dir); - if(!isdir(scfg.temp_dir)) { - lprintf(LOG_CRIT,"!Invalid temp directory: %s", scfg.temp_dir); - cleanup(1,__LINE__); - break; - } if(!startup->max_clients) { startup->max_clients=scfg.sys_nodes; diff --git a/src/sbbs3/load_cfg.c b/src/sbbs3/load_cfg.c index a55d1d66c61c6a2933b3f2eb2bba37da0f9acac8..1691863a88f61fddbb38d907ad00c859a05ca4f5 100644 --- a/src/sbbs3/load_cfg.c +++ b/src/sbbs3/load_cfg.c @@ -326,9 +326,10 @@ void DLLCALL free_text(char* text[]) /****************************************************************************/ /* If the directory 'path' doesn't exist, create it. */ /****************************************************************************/ -BOOL md(char *inpath) +BOOL md(const char* inpath) { char path[MAX_PATH+1]; + char* p; if(inpath[0]==0) return(FALSE); @@ -336,19 +337,18 @@ BOOL md(char *inpath) SAFECOPY(path,inpath); /* Remove trailing '.' if present */ - if(path[strlen(path)-1]=='.') - path[strlen(path)-1]=0; + p = lastchar(path); + if(*p=='.') + *p = '\0'; /* Remove trailing slash if present */ - if(path[strlen(path)-1]=='\\' || path[strlen(path)-1]=='/') - path[strlen(path)-1]=0; + p = lastchar(path); + if(*p == '\\' || *p == '/') + *p = '\0'; if(!isdir(path)) { - /* lprintf("Creating directory: %s",path); */ - if(mkpath(path)) { - lprintf(LOG_WARNING,"!ERROR %d (%s) creating directory: %s", errno, strerror(errno), path); - return(FALSE); - } + if(mkpath(path) != 0) + return FALSE; } return(TRUE); diff --git a/src/sbbs3/mailsrvr.c b/src/sbbs3/mailsrvr.c index ff6ae69c91ba2c385cb131e8a9e5bb6a1fa1924f..3a1ff9a983cc7605c37d72a4b5adcde2ebf1a5c2 100644 --- a/src/sbbs3/mailsrvr.c +++ b/src/sbbs3/mailsrvr.c @@ -6085,6 +6085,7 @@ void DLLCALL mail_server(void* arg) SAFECOPY(scfg.temp_dir,"../temp"); prep_dir(scfg.ctrl_dir, scfg.temp_dir, sizeof(scfg.temp_dir)); if(!md(scfg.temp_dir)) { + lprintf(LOG_CRIT, "!ERROR %d (%s) creating directory: %s", errno, strerror(errno), scfg.temp_dir); cleanup(1); return; } diff --git a/src/sbbs3/main.cpp b/src/sbbs3/main.cpp index 1556fea37b491148808539017c54cdb7e70d4ff4..d07f8e3f3920a2bedadbdf3389e5902e1793ad1b 100644 --- a/src/sbbs3/main.cpp +++ b/src/sbbs3/main.cpp @@ -3312,7 +3312,8 @@ sbbs_t::sbbs_t(ushort node_num, union xp_sockaddr *addr, size_t addr_len, const else SAFECOPY(cfg.temp_dir,"../temp"); prep_dir(cfg.ctrl_dir, cfg.temp_dir, sizeof(cfg.temp_dir)); - md(cfg.temp_dir); + if(!md(cfg.temp_dir)) + lprintf(LOG_CRIT,"!ERROR %d (%s) creating directory: %s", errno, strerror(errno), cfg.temp_dir); if(sd==INVALID_SOCKET) { /* events thread */ if(startup->first_node==1) SAFEPRINTF(path,"%sevent",cfg.temp_dir); @@ -3540,7 +3541,10 @@ bool sbbs_t::init() return(false); } - md(cfg.temp_dir); + if(!md(cfg.temp_dir)) { + lprintf(LOG_CRIT,"!ERROR %d (%s) creating directory: %s", errno, strerror(errno), cfg.temp_dir); + return false; + } /* Shared NODE files */ SAFEPRINTF2(str,"%s%s",cfg.ctrl_dir,"node.dab"); @@ -5119,8 +5123,13 @@ void DLLCALL bbs_thread(void* arg) /* Create missing node directories and dsts.dab files */ lprintf(LOG_INFO,"Verifying/creating node directories"); for(i=0;i<=scfg.sys_nodes;i++) { - if(i) - md(scfg.node_path[i-1]); + if(i) { + if(!md(scfg.node_path[i-1])) { + lprintf(LOG_CRIT,"!ERROR %d (%s) creating directory: %s", errno, strerror(errno), scfg.node_path[i-1]); + cleanup(1); + return; + } + } SAFEPRINTF(str,"%sdsts.dab",i ? scfg.node_path[i-1] : scfg.ctrl_dir); if(flength(str)<DSTSDABLEN) { if((file=sopen(str,O_WRONLY|O_CREAT|O_APPEND, SH_DENYNO, DEFFILEMODE))==-1) { diff --git a/src/sbbs3/sbbs.h b/src/sbbs3/sbbs.h index b4bf668eea866857092cdb727788f3a626111e28..ad52dda442783c221d6594ec0fad395b797dcd39 100644 --- a/src/sbbs3/sbbs.h +++ b/src/sbbs3/sbbs.h @@ -1259,6 +1259,8 @@ extern "C" { DLLEXPORT void DLLCALL free_text(char* text[]); DLLEXPORT ushort DLLCALL sys_timezone(scfg_t* cfg); DLLEXPORT char * DLLCALL prep_dir(const char* base, char* dir, size_t buflen); + DLLEXPORT BOOL DLLCALL md(const char *path); + /* scfgsave.c */ DLLEXPORT BOOL DLLCALL save_cfg(scfg_t* cfg, int backup_level); @@ -1502,7 +1504,6 @@ int pstrcmp(const char **str1, const char **str2); /* Compares pointers to poi int strsame(const char *str1, const char *str2); /* Compares number of same chars */ /* load_cfg.c */ -BOOL md(char *path); char* prep_code(char *str, const char* prefix); #ifdef SBBS /* These aren't exported */ diff --git a/src/sbbs3/services.c b/src/sbbs3/services.c index c7d2a77a78a8f176ed9872f541335a2ca8654ecd..d2346e18c276bb71792f54024ed17b7579583920 100644 --- a/src/sbbs3/services.c +++ b/src/sbbs3/services.c @@ -1838,6 +1838,7 @@ void DLLCALL services_thread(void* arg) SAFECOPY(scfg.temp_dir,"../temp"); prep_dir(scfg.ctrl_dir, scfg.temp_dir, sizeof(scfg.temp_dir)); if(!md(scfg.temp_dir)) { + lprintf(LOG_CRIT, "!ERROR %d (%s) creating directory: %s", errno, strerror(errno), scfg.temp_dir); cleanup(1); return; } diff --git a/src/sbbs3/websrvr.c b/src/sbbs3/websrvr.c index d2f7b1552565cc55d595aff4d5ae357ecfcd023c..d7a10d54b4a48a172d563ca43d36d223ecaca9d0 100644 --- a/src/sbbs3/websrvr.c +++ b/src/sbbs3/websrvr.c @@ -7034,6 +7034,7 @@ void DLLCALL web_server(void* arg) SAFECOPY(scfg.temp_dir,"../temp"); prep_dir(startup->ctrl_dir, scfg.temp_dir, sizeof(scfg.temp_dir)); if(!md(scfg.temp_dir)) { + lprintf(LOG_CRIT, "!ERROR %d (%s) creating directory: %s", errno, strerror(errno), scfg.temp_dir); cleanup(1); return; }