From 178e3b4d5eae48e008f1d33d9547ad08a92a20c8 Mon Sep 17 00:00:00 2001 From: alexhudson Date: Sat, 1 Sep 2007 12:35:36 +0000 Subject: [PATCH] Fix up msgapi dir/path functions --- include/msgapi.h | 32 +++++++ src/agents/antispam/antispam.c | 6 +- src/agents/avirus/avirus.c | 8 +- src/agents/calcmd/calcmdd.c | 2 +- src/agents/imap/imapd.c | 6 +- src/agents/itip/itip.c | 2 +- src/agents/pop/pop3.c | 12 +-- src/agents/queue/conf.c | 2 +- src/agents/queue/queue.c | 6 +- src/agents/smtp/smtpd.c | 4 +- src/agents/store/command.c | 3 +- src/agents/store/stored.c | 8 +- src/apps/config/config.c | 22 ++--- src/libs/msgapi/msgapi.c | 164 +++++++++++++++------------------ src/libs/nmap/nmap.c | 5 +- 15 files changed, 150 insertions(+), 132 deletions(-) diff --git a/include/msgapi.h b/include/msgapi.h index 770c012..9ac6c62 100644 --- a/include/msgapi.h +++ b/include/msgapi.h @@ -72,6 +72,38 @@ typedef struct _MsgSQLHandle { int lockTimeoutMs; } MsgSQLHandle; +typedef enum { + MSGAPI_DIR_START, + MSGAPI_DIR_BIN, + MSGAPI_DIR_CACHE, + MSGAPI_DIR_CERT, + MSGAPI_DIR_DATA, + MSGAPI_DIR_DBF, + MSGAPI_DIR_LIB, + MSGAPI_DIR_MAIL, + MSGAPI_DIR_SCMS, + MSGAPI_DIR_SPOOL, + MSGAPI_DIR_STATE, + MSGAPI_DIR_STORESYSTEM, + MSGAPI_DIR_WORK, + MSGAPI_DIR_END +} MsgApiDirectory; + +typedef enum { + MSGAPI_FILE_START, + MSGAPI_FILE_PUBKEY, + MSGAPI_FILE_PRIVKEY, + MSGAPI_FILE_DHPARAMS, + MSGAPI_FILE_RSAPARAMS, + MSGAPI_FILE_RANDSEED, + MSGAPI_FILE_END +} MsgApiFile; + +EXPORT const unsigned char * +MsgGetFile(MsgApiFile file, char *buffer, size_t buffer_size); +EXPORT const unsigned char * +MsgGetDir(MsgApiDirectory directory, char *buffer, size_t buffer_size); + #define MSGSQL_STMT_SLEEP_MS 250 MsgSQLHandle *MsgSQLOpen(char *path, BongoMemStack *memstack, int locktimeoutms); diff --git a/src/agents/antispam/antispam.c b/src/agents/antispam/antispam.c index 4881e51..80e1bbc 100644 --- a/src/agents/antispam/antispam.c +++ b/src/agents/antispam/antispam.c @@ -909,9 +909,11 @@ XplServiceMain(int argc, char *argv[]) } ASpam.nmap.ssl.enable = FALSE; - ASpam.nmap.ssl.config.certificate.file = MsgGetTLSCertPath(NULL); + + ASpam.nmap.ssl.config.certificate.file = MsgGetFile(MSGAPI_FILE_PUBKEY, NULL, 0); + ASpam.nmap.ssl.config.key.file = MsgGetFile(MSGAPI_FILE_PRIVKEY, NULL, 0); + ASpam.nmap.ssl.config.key.type = GNUTLS_X509_FMT_PEM; - ASpam.nmap.ssl.config.key.file = MsgGetTLSKeyPath(NULL); ASpam.nmap.ssl.context = ConnSSLContextAlloc(&(ASpam.nmap.ssl.config)); if (ASpam.nmap.ssl.context) { diff --git a/src/agents/avirus/avirus.c b/src/agents/avirus/avirus.c index b5f442d..7425232 100755 --- a/src/agents/avirus/avirus.c +++ b/src/agents/avirus/avirus.c @@ -1214,9 +1214,9 @@ ReadConfiguration(void) sizeof(AVirus.clam.addr.sin_addr.s_addr)); } - MsgGetWorkDir(AVirus.path.work); + snprintf(AVirus.path.work, XPL_MAX_PATH, "%s/avirus", + MsgGetDir(MSGAPI_DIR_WORK, NULL, 0)); - strcat(AVirus.path.work, "/avirus"); MsgMakePath(AVirus.path.work); dirEntry = XplOpenDir(AVirus.path.work); @@ -1435,9 +1435,9 @@ XplServiceMain(int argc, char *argv[]) } AVirus.nmap.ssl.enable = FALSE; - AVirus.nmap.ssl.config.certificate.file = MsgGetTLSCertPath(NULL); AVirus.nmap.ssl.config.key.type = GNUTLS_X509_FMT_PEM; - AVirus.nmap.ssl.config.key.file = MsgGetTLSKeyPath(NULL); + AVirus.nmap.ssl.config.certificate.file = MsgGetFile(MSGAPI_FILE_PUBKEY, NULL, 0); + AVirus.nmap.ssl.config.key.file = MsgGetFile(MSGAPI_FILE_PRIVKEY, NULL, 0); AVirus.nmap.ssl.context = ConnSSLContextAlloc(&(AVirus.nmap.ssl.config)); if (AVirus.nmap.ssl.context) { diff --git a/src/agents/calcmd/calcmdd.c b/src/agents/calcmd/calcmdd.c index b56df45..a371a61 100644 --- a/src/agents/calcmd/calcmdd.c +++ b/src/agents/calcmd/calcmdd.c @@ -517,7 +517,7 @@ XplServiceMain(int argc, char *argv[]) return -1; } - BongoCalInit(MsgGetDBFDir(NULL)); + BongoCalInit(MsgGetDir(MSGAPI_DIR_DBF, NULL, 0)); /* Set up socket for listening on an incoming queue */ CalCmdAgent.queueNumber = Q_FIVE; diff --git a/src/agents/imap/imapd.c b/src/agents/imap/imapd.c index 5edaeb9..8debdc2 100644 --- a/src/agents/imap/imapd.c +++ b/src/agents/imap/imapd.c @@ -3816,10 +3816,10 @@ XplServiceMain(int argc, char *argv[]) if (Imap.server.ssl.enable) { if (!ServerSocketSSLInit()) { - - Imap.server.ssl.config.certificate.file = MsgGetTLSCertPath(NULL); + Imap.server.ssl.config.certificate.file = MsgGetFile(MSGAPI_FILE_PUBKEY, NULL, 0); + Imap.server.ssl.config.key.file = MsgGetFile(MSGAPI_FILE_PRIVKEY, NULL, 0); + Imap.server.ssl.config.key.type = GNUTLS_X509_FMT_PEM; - Imap.server.ssl.config.key.file = MsgGetTLSKeyPath(NULL); Imap.server.ssl.context = ConnSSLContextAlloc(&(Imap.server.ssl.config)); if (Imap.server.ssl.context) { diff --git a/src/agents/itip/itip.c b/src/agents/itip/itip.c index f624604..bff28ef 100644 --- a/src/agents/itip/itip.c +++ b/src/agents/itip/itip.c @@ -429,7 +429,7 @@ XplServiceMain(int argc, char *argv[]) return -1; } - BongoCalInit(MsgGetDBFDir(NULL)); + BongoCalInit(MsgGetDir(MSGAPI_DIR_DBF, NULL, 0)); /* Set up socket for listening on an incoming queue */ ItipAgent.queueNumber = Q_FIVE; diff --git a/src/agents/pop/pop3.c b/src/agents/pop/pop3.c index ca4648a..2df2d0a 100644 --- a/src/agents/pop/pop3.c +++ b/src/agents/pop/pop3.c @@ -2149,9 +2149,9 @@ XplServiceMain(int argc, char *argv[]) if (!ServerSocketSSLInit()) { XPLCryptoLockInit(); - POP3.server.ssl.config.certificate.file = MsgGetTLSCertPath(NULL); + POP3.server.ssl.config.certificate.file = MsgGetFile(MSGAPI_FILE_PUBKEY, NULL, 0); + POP3.server.ssl.config.key.file = MsgGetFile(MSGAPI_FILE_PRIVKEY, NULL, 0); POP3.server.ssl.config.key.type = GNUTLS_X509_FMT_PEM; - POP3.server.ssl.config.key.file = MsgGetTLSKeyPath(NULL); POP3.server.ssl.context = ConnSSLContextAlloc(&(POP3.server.ssl.config)); if (POP3.server.ssl.context) { @@ -2164,17 +2164,17 @@ XplServiceMain(int argc, char *argv[]) } } - /* Done binding, drop privs permanentely */ + /* Done binding, drop privs permanently */ if (XplSetRealUser(MsgGetUnprivilegedUser()) < 0) { XplConsolePrintf("bongopop3: Could not drop to unprivileged user '%s', exiting.\n", MsgGetUnprivilegedUser()); return -1; } POP3.nmap.ssl.enable = FALSE; - POP3.nmap.ssl.config.certificate.file = MsgGetTLSCertPath(NULL); + POP3.nmap.ssl.config.certificate.file = MsgGetFile(MSGAPI_FILE_PUBKEY, NULL, 0); + POP3.nmap.ssl.config.key.file = MsgGetFile(MSGAPI_FILE_PRIVKEY, NULL, 0); POP3.nmap.ssl.config.key.type = GNUTLS_X509_FMT_PEM; - POP3.nmap.ssl.config.key.file = MsgGetTLSKeyPath(NULL); - + POP3.nmap.ssl.context = ConnSSLContextAlloc(&(POP3.nmap.ssl.config)); if (POP3.nmap.ssl.context) { POP3.nmap.ssl.enable = TRUE; diff --git a/src/agents/queue/conf.c b/src/agents/queue/conf.c index 7983f05..34e641f 100644 --- a/src/agents/queue/conf.c +++ b/src/agents/queue/conf.c @@ -153,7 +153,7 @@ ReadConfiguration (BOOL *recover) strcpy(Conf.spoolPath, XPL_DEFAULT_SPOOL_DIR); MsgMakePath(Conf.spoolPath); - sprintf(Conf.queueClientsPath, "%s/qclients", MsgGetDBFDir(NULL)); + sprintf(Conf.queueClientsPath, "%s/qclients", MsgGetDir(MSGAPI_DIR_DBF, NULL, 0)); Conf.bounceMaxBodySize = 0; /* Some sanity checking on the QLimit stuff to prevent running out of memory */ diff --git a/src/agents/queue/queue.c b/src/agents/queue/queue.c index 6cd8bac..43fbd86 100644 --- a/src/agents/queue/queue.c +++ b/src/agents/queue/queue.c @@ -2710,7 +2710,7 @@ CreateQueueThreads(BOOL failed) dirP = XplOpenDir(path); - sprintf(path, "%s/fragfile", MsgGetDBFDir(NULL)); + sprintf(path, "%s/fragfile", MsgGetDir(MSGAPI_DIR_DBF, NULL, 0)); killFile = fopen(path, "wb"); if (!killFile) { if (dirP) { @@ -2837,7 +2837,7 @@ CreateQueueThreads(BOOL failed) XplConsolePrintf("bongoqueue: Queue integrity check complete, now cleaning irrelevant entries.\r\n"); #endif - sprintf(path, "%s/fragfile", MsgGetDBFDir(NULL)); + sprintf(path, "%s/fragfile", MsgGetDir(MSGAPI_DIR_DBF, NULL, 0)); killFile=fopen(path, "rb"); if (!killFile) { XplConsolePrintf("bongoqueue: Could not re-open killfile.\r\n"); @@ -2855,7 +2855,7 @@ CreateQueueThreads(BOOL failed) fclose(killFile); } - sprintf(path, "%s/killfile", MsgGetDBFDir(NULL)); + sprintf(path, "%s/killfile", MsgGetDir(MSGAPI_DIR_DBF, NULL, 0)); UNLINK_CHECK(path); XplCloseDir(dirP); diff --git a/src/agents/smtp/smtpd.c b/src/agents/smtp/smtpd.c index 4cbd27e..8f8c2fb 100644 --- a/src/agents/smtp/smtpd.c +++ b/src/agents/smtp/smtpd.c @@ -4479,8 +4479,8 @@ int XplServiceMain (int argc, char *argv[]) if (SMTP.allow_client_ssl) { if (!ServerSocketSSLInit()) { ConnSSLConfiguration sslconfig; - sslconfig.certificate.file = MsgGetTLSCertPath(NULL); - sslconfig.key.file = MsgGetTLSKeyPath(NULL); + sslconfig.key.file = MsgGetFile(MSGAPI_FILE_PRIVKEY, NULL, 0); + sslconfig.certificate.file = MsgGetFile(MSGAPI_FILE_PUBKEY, NULL, 0); sslconfig.key.type = GNUTLS_X509_FMT_PEM; SSLContext = ConnSSLContextAlloc(&sslconfig); diff --git a/src/agents/store/command.c b/src/agents/store/command.c index b1e0ceb..aaac4b6 100644 --- a/src/agents/store/command.c +++ b/src/agents/store/command.c @@ -3134,7 +3134,8 @@ StoreCommandDELIVER(StoreClient *client, char *sender, char *authSender, if (bytes <= 0) { return ConnWriteStr(client->conn, MSG3017INTARGRANGE); } - msgfile = XplOpenTemp(MsgGetWorkDir(NULL), "w+b", tmpFile); + msgfile = XplOpenTemp(MsgGetDir(MSGAPI_DIR_WORK, NULL, 0), + "w+b", tmpFile); if (!msgfile) { return ConnWriteStr(client->conn, MSG5202TMPWRITEERR); } diff --git a/src/agents/store/stored.c b/src/agents/store/stored.c index ed73849..039a043 100644 --- a/src/agents/store/stored.c +++ b/src/agents/store/stored.c @@ -238,12 +238,8 @@ _XplServiceMain(int argc, char *argv[]) return -1; } - if (! StoreAgent.installMode) { - MsgInit(); - cal_success = BongoCalInit(MsgGetDBFDir(NULL)); - } else { - cal_success = BongoCalInit(XPL_DEFAULT_DBF_DIR); - } + MsgInit(); + cal_success = BongoCalInit(MsgGetDir(MSGAPI_DIR_DBF, NULL, 0)); if (! cal_success) { XplConsolePrintf(AGENT_NAME ": Couldn't initialize calendaring library. Exiting.\r\n"); diff --git a/src/apps/config/config.c b/src/apps/config/config.c index e1482b3..c7fd0da 100644 --- a/src/apps/config/config.c +++ b/src/apps/config/config.c @@ -60,26 +60,24 @@ RunAsRoot() } } -void -CreateSystemDir(const char *path) -{ - XplMakeDir(path); - // TODO: chown(path, -} - void InitializeDataArea(void) { + MsgApiDirectory dir; + XplConsolePrintf(_("Initializing user database...\n")); if (MsgAuthInitDB() != 0) { XplConsolePrintf(_("ERROR: Couldn't create user database\n")); exit(1); } - CreateSystemDir(XPL_DEFAULT_CONF_DIR); - CreateSystemDir(XPL_DEFAULT_STATE_DIR); - CreateSystemDir(XPL_DEFAULT_CACHE_DIR); - CreateSystemDir(XPL_DEFAULT_DBF_DIR); - CreateSystemDir(XPL_DEFAULT_WORK_DIR); + + for (dir = MSGAPI_DIR_START; dir < MSGAPI_DIR_END; dir++) { + char path[XPL_MAX_PATH]; + if (MsgGetDir(dir, path, XPL_MAX_PATH)) { + // TODO: chown ? + MsgMakePath(path); + } + } } void diff --git a/src/libs/msgapi/msgapi.c b/src/libs/msgapi/msgapi.c index 9ecb22c..c8a8fa7 100644 --- a/src/libs/msgapi/msgapi.c +++ b/src/libs/msgapi/msgapi.c @@ -90,17 +90,7 @@ struct { unsigned long connManager; XplRWLock configLock; - - struct { - unsigned char work[XPL_MAX_PATH + 1]; - unsigned char nls[XPL_MAX_PATH + 1]; - unsigned char dbf[XPL_MAX_PATH + 1]; - unsigned char bin[XPL_MAX_PATH + 1]; - unsigned char lib[XPL_MAX_PATH + 1]; - unsigned char certificate[XPL_MAX_PATH + 1]; - unsigned char key[XPL_MAX_PATH + 1]; - } paths; - + struct { unsigned long local; @@ -248,66 +238,86 @@ MsgMakePath(unsigned char *path) } EXPORT const unsigned char * -MsgGetDBFDir(char *directory) +MsgGetDir(MsgApiDirectory directory, char *buffer, size_t buffer_size) { - if (directory) { - strcpy(directory, MsgGlobal.paths.dbf); - } - return(MsgGlobal.paths.dbf); + const unsigned char *path; + switch(directory) { + case MSGAPI_DIR_BIN: + path = XPL_DEFAULT_BIN_DIR; + break; + case MSGAPI_DIR_CACHE: + path = XPL_DEFAULT_CACHE_DIR; + break; + case MSGAPI_DIR_CERT: + path = XPL_DEFAULT_DBF_DIR; + break; + case MSGAPI_DIR_DATA: + path = XPL_DEFAULT_DATA_DIR; + break; + case MSGAPI_DIR_DBF: + path = XPL_DEFAULT_DBF_DIR; + break; + case MSGAPI_DIR_LIB: + path = XPL_DEFAULT_LIB_DIR; + break; + case MSGAPI_DIR_MAIL: + path = XPL_DEFAULT_MAIL_DIR; + break; + case MSGAPI_DIR_SCMS: + path = XPL_DEFAULT_SCMS_DIR; + break; + case MSGAPI_DIR_SPOOL: + path = XPL_DEFAULT_SPOOL_DIR; + break; + case MSGAPI_DIR_STATE: + path = XPL_DEFAULT_STATE_DIR; + break; + case MSGAPI_DIR_STORESYSTEM: + path = XPL_DEFAULT_STORE_SYSTEM_DIR; + break; + case MSGAPI_DIR_WORK: + path = XPL_DEFAULT_WORK_DIR; + break; + default: + if (buffer && buffer_size) + buffer[0] = '\0'; + return NULL; + } + if (buffer) { + strncpy(buffer, path, buffer_size - 1); + } + return path; } EXPORT const unsigned char * -MsgGetWorkDir(char *directory) +MsgGetFile(MsgApiFile file, char *buffer, size_t buffer_size) { - if (directory) { - strcpy(directory, MsgGlobal.paths.work); - } - return(MsgGlobal.paths.work); -} - -EXPORT const unsigned char * -MsgGetNLSDir(char *directory) -{ - if (directory) { - strcpy(directory, MsgGlobal.paths.nls); - } - return(MsgGlobal.paths.nls); -} - -EXPORT const unsigned char * -MsgGetBinDir(char *directory) -{ - if (directory) { - strcpy(directory, MsgGlobal.paths.bin); - } - return(MsgGlobal.paths.bin); -} - -EXPORT const unsigned char * -MsgGetLibDir(char *directory) -{ - if (directory) { - strcpy(directory, MsgGlobal.paths.lib); - } - return(MsgGlobal.paths.bin); -} - -EXPORT const unsigned char * -MsgGetTLSCertPath(char *path) -{ - if (path) { - strcpy(path, MsgGlobal.paths.certificate); - } - return(MsgGlobal.paths.certificate); -} - -EXPORT const unsigned char * -MsgGetTLSKeyPath(char *path) -{ - if (path) { - strcpy(path, MsgGlobal.paths.key); - } - return(MsgGlobal.paths.key); + const unsigned char *path; + switch(file) { + case MSGAPI_FILE_PUBKEY: + path = XPL_DEFAULT_CERT_PATH; + break; + case MSGAPI_FILE_PRIVKEY: + path = XPL_DEFAULT_KEY_PATH; + break; + case MSGAPI_FILE_DHPARAMS: + path = XPL_DEFAULT_DHPARAMS_PATH; + break; + case MSGAPI_FILE_RSAPARAMS: + path = XPL_DEFAULT_RSAPARAMS_PATH; + break; + case MSGAPI_FILE_RANDSEED: + path = XPL_DEFAULT_RANDSEED_PATH; + break; + default: + if (buffer && buffer_size) + buffer[0] = '\0'; + return NULL; + } + if (buffer) { + strncpy(buffer, path, buffer_size - 1); + } + return path; } EXPORT unsigned long @@ -439,9 +449,6 @@ MsgLibraryStart(void) // 'BOUND' conflicts with 'CLUSTERED' ? // MsgGlobal.flags |= MSGAPI_FLAG_BOUND; - strcpy(MsgGlobal.paths.certificate, XPL_DEFAULT_CERT_PATH); - strcpy(MsgGlobal.paths.key, XPL_DEFAULT_KEY_PATH); - return(TRUE); } @@ -526,25 +533,6 @@ MsgReadConfiguration(void) MsgDateSetUTCOffset(tmp); } - /* Read operating parameters, this is so complicated because in version 2.5 - * we changed the configuration of directories - before 2.5 we would always - * append novonyx/mail to any given path, now we don't. The code tries to - * automatically detect pre2.5 installs and change the DS attribute... - */ - - strcpy(MsgGlobal.paths.dbf, XPL_DEFAULT_DBF_DIR); - MsgMakePath(MsgGlobal.paths.dbf); - strcpy(MsgGlobal.paths.bin, XPL_DEFAULT_BIN_DIR); - MsgMakePath(MsgGlobal.paths.bin); - strcpy(MsgGlobal.paths.lib, XPL_DEFAULT_LIB_DIR); - MsgMakePath(MsgGlobal.paths.lib); - strcpy(MsgGlobal.paths.work, XPL_DEFAULT_WORK_DIR); - MsgMakePath(MsgGlobal.paths.work); - strcpy(MsgGlobal.paths.nls, XPL_DEFAULT_NLS_DIR); - MsgMakePath(MsgGlobal.paths.nls); - strcpy(MsgGlobal.paths.work, XPL_DEFAULT_WORK_DIR); - MsgMakePath(MsgGlobal.paths.work); - return(TRUE); } diff --git a/src/libs/nmap/nmap.c b/src/libs/nmap/nmap.c index 235df26..a2a3267 100644 --- a/src/libs/nmap/nmap.c +++ b/src/libs/nmap/nmap.c @@ -1683,9 +1683,10 @@ NMAPSSLContextAlloc(void) { ConnSSLConfiguration config; - config.certificate.file = MsgGetTLSCertPath(NULL); + config.certificate.file = MsgGetFile(MSGAPI_FILE_PUBKEY, NULL, 0); + config.key.file = MsgGetFile(MSGAPI_FILE_PRIVKEY, NULL, 0); + config.key.type = GNUTLS_X509_FMT_PEM; - config.key.file = MsgGetTLSKeyPath(NULL); return ConnSSLContextAlloc(&config); }