Fix up msgapi dir/path functions
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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");
|
||||
|
||||
+10
-12
@@ -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
|
||||
|
||||
+76
-88
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user