Fix up msgapi dir/path functions

This commit is contained in:
alexhudson
2007-09-01 12:35:36 +00:00
parent 88c2facbf4
commit 178e3b4d5e
15 changed files with 150 additions and 132 deletions
+32
View File
@@ -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);
+4 -2
View File
@@ -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) {
+4 -4
View File
@@ -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) {
+1 -1
View File
@@ -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;
+3 -3
View File
@@ -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) {
+1 -1
View File
@@ -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;
+6 -6
View File
@@ -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;
+1 -1
View File
@@ -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 */
+3 -3
View File
@@ -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);
+2 -2
View File
@@ -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);
+2 -1
View File
@@ -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);
}
+2 -6
View File
@@ -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
View File
@@ -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
View File
@@ -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);
}
+3 -2
View File
@@ -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);
}