--- CTRLClient.cpp +++ CTRLClient.cpp @@ -25,8 +25,10 @@ #include "SvrDefines.h" #include "ShBlocks.h" #include "BuffSock.h" +#ifdef WITH_SSL #include "SSLBind.h" #include "SSLConfig.h" +#endif #include "MiscUtils.h" #include "StrUtils.h" #include "MD5.h" @@ -46,7 +48,9 @@ #define CCLN_CHF_USESSL (1 << 2) struct CClnChannelCfg { +#ifdef WITH_SSL SslServerBind SSLB; +#endif unsigned long ulFlags; }; @@ -184,6 +188,7 @@ return 0; } +#ifdef WITH_SSL static int CClnSslEnvCB(void *pPrivate, int iID, void const *pData) { SslBindEnv *pSslE = (SslBindEnv *) pPrivate; @@ -207,6 +212,7 @@ return 0; } +#endif BSOCK_HANDLE CClnConnectServer(char const *pszServer, int iPortNo, char const *pszUsername, char const *pszPassword, @@ -239,11 +245,13 @@ int iErrorCode = 0; char szRTXBuffer[2048] = ""; +#ifdef WITH_SSL if ((pChCfg->ulFlags & CCLN_CHF_USESSL) && CClnSslBind(pChCfg, hBSock) < 0) { BSckDetach(hBSock, 1); return INVALID_BSOCK_HANDLE; } +#endif /* Read welcome message */ if (CClnGetResponse(hBSock, szRTXBuffer, sizeof(szRTXBuffer), &iErrorCode, iTimeout) < 0) { @@ -256,6 +264,7 @@ return INVALID_BSOCK_HANDLE; } +#ifdef WITH_SSL /* * Do we need to switch to SSL? */ @@ -276,6 +285,7 @@ return INVALID_BSOCK_HANDLE; } } +#endif /* Prepare login */ char szTimeStamp[256] = ""; @@ -357,12 +367,14 @@ " -p pass = set password\n" " -t timeout = set timeout [%d]\n" " -f filename = set I/O filename [stdin/stdout]\n" +#ifdef WITH_SSL " -S = enable SSL link negotiation\n" " -L = use native SSL link\n" " -K filename = set the SSL private key file\n" " -C filename = set the SSL certificate file\n" " -X filename = set the SSL certificate-list file\n" " -H dir = set the SSL certificate-store directory\n" +#endif " -c = disable MD5 authentication\n" " -D = enable debug\n", pszProgName, STD_CTRL_PORT, STD_CTRL_TIMEOUT); @@ -381,10 +393,12 @@ ZeroData(ChCfg); ChCfg.ulFlags = CCLN_CHF_USEMD5; +#ifdef WITH_SSL ChCfg.SSLB.pszKeyFile = SysGetEnv("CTRL_KEY_FILE"); ChCfg.SSLB.pszCertFile = SysGetEnv("CTRL_CERT_FILE"); ChCfg.SSLB.pszCAFile = SysGetEnv("CTRL_CA_FILE"); ChCfg.SSLB.pszCAPath = SysGetEnv("CTRL_CA_PATH"); +#endif for (i = 1; i < iArgCount; i++) { if (pszArgs[i][0] != '-') @@ -425,6 +439,7 @@ ChCfg.ulFlags &= ~CCLN_CHF_USEMD5; break; +#ifdef WITH_SSL case ('S'): ChCfg.ulFlags &= ~CCLN_CHF_USESSL; ChCfg.ulFlags |= CCLN_CHF_SSLSWITCH; @@ -462,6 +477,7 @@ ChCfg.SSLB.pszCAPath = SysStrDup(pszArgs[i]); } break; +#endif case ('D'): bServerDebug = true; @@ -473,15 +489,19 @@ } if (strlen(szServer) == 0 || strlen(szUsername) == 0 || strlen(szPassword) == 0 || i == iArgCount) { +#ifdef WITH_SSL SysFree(ChCfg.SSLB.pszKeyFile); SysFree(ChCfg.SSLB.pszCertFile); +#endif return CCLN_ERR_BAD_USAGE; } +#ifdef WITH_SSL if ((ChCfg.SSLB.pszKeyFile != NULL) != (ChCfg.SSLB.pszCertFile != NULL)) { SysFree(ChCfg.SSLB.pszKeyFile); SysFree(ChCfg.SSLB.pszCertFile); return CCLN_ERR_SSL_KEYCERT; } +#endif int iFirstParam = i, iCmdLength = 0; @@ -503,10 +523,12 @@ BSOCK_HANDLE hBSock = CClnConnectServer(szServer, iPortNo, szUsername, szPassword, &ChCfg, iTimeout); +#ifdef WITH_SSL SysFree(ChCfg.SSLB.pszKeyFile); SysFree(ChCfg.SSLB.pszCertFile); SysFree(ChCfg.SSLB.pszCAFile); SysFree(ChCfg.SSLB.pszCAPath); +#endif if (hBSock == INVALID_BSOCK_HANDLE) { ErrorPush(); SysFree(pszCommand); @@ -537,26 +559,34 @@ CClnLogError(ErrGetErrorCode()); return 1; } +#ifdef WITH_SSL if (BSslInit() < 0) { CClnLogError(ErrGetErrorCode()); SysCleanupLibrary(); return 2; } +#endif int iExecResult = CClnExec(iArgCount, pszArgs); if (iExecResult == CCLN_ERR_BAD_USAGE) { CClnShowUsage(pszArgs[0]); +#ifdef WITH_SSL BSslCleanup(); +#endif SysCleanupLibrary(); return 3; } else if (iExecResult < 0) { CClnLogError(iExecResult); +#ifdef WITH_SSL BSslCleanup(); +#endif SysCleanupLibrary(); return 4; } +#ifdef WITH_SSL BSslCleanup(); +#endif SysCleanupLibrary(); return 0; --- CTRLSvr.cpp +++ CTRLSvr.cpp @@ -26,8 +26,10 @@ #include "ShBlocks.h" #include "SList.h" #include "BuffSock.h" +#ifdef WITH_SSL #include "SSLBind.h" #include "SSLConfig.h" +#endif #include "ResLocks.h" #include "MiscUtils.h" #include "MD5.h" @@ -300,6 +302,7 @@ return ERR_BAD_CTRL_LOGIN; } +#ifdef WITH_SSL static int CTRLSslEnvCB(void *pPrivate, int iID, void const *pData) { SslBindEnv *pSslE = (SslBindEnv *) pPrivate; @@ -311,6 +314,7 @@ return 0; } +#endif static int CTRLLogin(CTRLConfig *pCTRLCfg, BSOCK_HANDLE hBSock, char const *pszTimeStamp, SYS_INET_ADDR const &PeerInfo) @@ -321,6 +325,7 @@ MscCmdStringCheck(szLogin) < 0) return ErrGetErrorCode(); +#ifdef WITH_SSL if (strcmp(szLogin, CTRL_TLS_INIT_STR) == 0) { int iError; SslServerBind SSLB; @@ -357,6 +362,7 @@ MscCmdStringCheck(szLogin) < 0) return ErrGetErrorCode(); } +#endif char **ppszTokens = StrGetTabLineStrings(szLogin); @@ -2513,6 +2519,7 @@ return ErrorPop(); } +#ifdef WITH_SSL /* * Do we need to switch to TLS? */ @@ -2545,6 +2552,7 @@ SysFree(SslE.pszIssuer); SysFree(SslE.pszSubject); } +#endif /* Check IP permission */ if (CTRLCheckPeerIP(pThCtx->SockFD) < 0) { ErrorPush(); --- FINGSvr.cpp +++ FINGSvr.cpp @@ -26,8 +26,10 @@ #include "ShBlocks.h" #include "SList.h" #include "BuffSock.h" +#ifdef WITH_SSL #include "SSLBind.h" #include "SSLConfig.h" +#endif #include "StrUtils.h" #include "ResLocks.h" #include "MiscUtils.h" @@ -368,6 +370,7 @@ return ErrorPop(); } +#ifdef WITH_SSL /* * Do we need to switch to TLS? */ @@ -400,6 +403,7 @@ SysFree(SslE.pszIssuer); SysFree(SslE.pszSubject); } +#endif /* Increase threads count */ FINGConfig *pFINGCfg = (FINGConfig *) ShbLock(pThCtx->pThCfg->hThShb); --- MailSvr.cpp +++ MailSvr.cpp @@ -29,7 +29,9 @@ #include "BuffSock.h" #include "MailConfig.h" #include "MiscUtils.h" +#ifdef WITH_SSL #include "SSLBind.h" +#endif #include "ResLocks.h" #include "POP3Svr.h" #include "SMTPSvr.h" @@ -85,15 +87,19 @@ enum SvrServices { SVC_SMAIL = 0, SVC_CTRL, +#ifdef WITH_SSL SVC_CRTLS, +#endif SVC_POP3, SVC_SMTP, SVC_FING, SVC_LMAIL, SVC_PSYNC, +#ifdef WITH_SSL SVC_SMTPS, SVC_POP3S, SVC_CTRLS, +#endif SVC_MAX }; @@ -137,18 +143,24 @@ static int iNumLMAILThreads; static SYS_THREAD hCTRLThread; static ThreadConfig ThCfgCTRL; +#ifdef WITH_SSL static SYS_THREAD hCTRLSThread; static ThreadConfig ThCfgCTRLS; +#endif static SYS_THREAD hFINGThread; static ThreadConfig ThCfgFING; static SYS_THREAD hPOP3Thread; static ThreadConfig ThCfgPOP3; +#ifdef WITH_SSL static SYS_THREAD hPOP3SThread; static ThreadConfig ThCfgPOP3S; +#endif static SYS_THREAD hSMTPThread; static ThreadConfig ThCfgSMTP; +#ifdef WITH_SSL static SYS_THREAD hSMTPSThread; static ThreadConfig ThCfgSMTPS; +#endif static SYS_THREAD hSMAILThreads[MAX_SMAIL_THREADS]; static SYS_THREAD hLMAILThreads[MAX_LMAIL_THREADS]; static SYS_THREAD hPSYNCThread; @@ -355,6 +367,7 @@ return 0; } +#ifdef WITH_SSL static int SvrSetupCTRLS(int iArgCount, char *pszArgs[]) { int iPort = STD_CTRLS_PORT, iFamily = AF_INET; @@ -426,6 +439,7 @@ for (; ThCfgCTRLS.iNumSockFDs > 0; ThCfgCTRLS.iNumSockFDs--) SysCloseSocket(ThCfgCTRLS.SockFDs[ThCfgCTRLS.iNumSockFDs - 1]); } +#endif static long SvrThreadCntFING(ThreadConfig const *pThCfg) { @@ -685,6 +699,7 @@ return 0; } +#ifdef WITH_SSL static int SvrSetupPOP3S(int iArgCount, char *pszArgs[]) { int iPort = STD_POP3S_PORT, iFamily = AF_INET; @@ -757,6 +772,7 @@ for (; ThCfgPOP3S.iNumSockFDs > 0; ThCfgPOP3S.iNumSockFDs--) SysCloseSocket(ThCfgPOP3S.SockFDs[ThCfgPOP3S.iNumSockFDs - 1]); } +#endif static long SvrThreadCntSMTP(ThreadConfig const *pThCfg) { @@ -901,6 +917,7 @@ return 0; } +#ifdef WITH_SSL static int SvrSetupSMTPS(int iArgCount, char *pszArgs[]) { int iPort = STD_SMTPS_PORT, iFamily = AF_INET; @@ -973,6 +990,7 @@ for (; ThCfgSMTPS.iNumSockFDs > 0; ThCfgSMTPS.iNumSockFDs--) SysCloseSocket(ThCfgSMTPS.SockFDs[ThCfgSMTPS.iNumSockFDs - 1]); } +#endif static void SvrShutdown__SMAIL(void *pPrivate) { @@ -1411,8 +1429,12 @@ return ErrorPop(); } /* Initialize DNS cache */ - if (CDNS_Initialize(iDnsCacheDirs) < 0 || - BSslInit() < 0) { + if (CDNS_Initialize(iDnsCacheDirs) < 0 +#ifdef WITH_SSL + || + BSslInit() < 0 +#endif + ) { ErrorPush(); RLckCleanupLockers(); @@ -1424,7 +1446,9 @@ static void SvrCleanup(void) { +#ifdef WITH_SSL BSslCleanup(); +#endif RLckCleanupLockers(); SvrShutdownCleanup(); } @@ -1490,11 +1514,17 @@ ArrayInit(iSvcI, -1); if ((iSvcI[SVC_SMAIL] = SvrSetupSMAIL(iMergeArgsCount, ppszMergeArgs)) < 0 || (iSvcI[SVC_CTRL] = SvrSetupCTRL(iMergeArgsCount, ppszMergeArgs)) < 0 || +#ifdef WITH_SSL (iSvcI[SVC_CTRLS] = SvrSetupCTRLS(iMergeArgsCount, ppszMergeArgs)) < 0 || +#endif (iSvcI[SVC_POP3] = SvrSetupPOP3(iMergeArgsCount, ppszMergeArgs)) < 0 || +#ifdef WITH_SSL (iSvcI[SVC_POP3S] = SvrSetupPOP3S(iMergeArgsCount, ppszMergeArgs)) < 0 || +#endif (iSvcI[SVC_SMTP] = SvrSetupSMTP(iMergeArgsCount, ppszMergeArgs)) < 0 || +#ifdef WITH_SSL (iSvcI[SVC_SMTPS] = SvrSetupSMTPS(iMergeArgsCount, ppszMergeArgs)) < 0 || +#endif (iSvcI[SVC_PSYNC] = SvrSetupPSYNC(iMergeArgsCount, ppszMergeArgs)) < 0 || (iSvcI[SVC_FING] = SvrSetupFING(iMergeArgsCount, ppszMergeArgs)) < 0 || (iSvcI[SVC_LMAIL] = SvrSetupLMAIL(iMergeArgsCount, ppszMergeArgs)) < 0) { @@ -1530,16 +1560,22 @@ SvrCleanupFING(); if (iSvcI[SVC_PSYNC] == 0) SvrCleanupPSYNC(); +#ifdef WITH_SSL if (iSvcI[SVC_SMTPS] == 0) SvrCleanupSMTPS(); +#endif if (iSvcI[SVC_SMTP] == 0) SvrCleanupSMTP(); +#ifdef WITH_SSL if (iSvcI[SVC_POP3S] == 0) SvrCleanupPOP3S(); +#endif if (iSvcI[SVC_POP3] == 0) SvrCleanupPOP3(); +#ifdef WITH_SSL if (iSvcI[SVC_CTRLS] == 0) SvrCleanupCTRLS(); +#endif if (iSvcI[SVC_CTRL] == 0) SvrCleanupCTRL(); if (iSvcI[SVC_SMAIL] == 0) --- MiscUtils.cpp +++ MiscUtils.cpp @@ -30,12 +30,16 @@ #include "MD5.h" #include "Base64Enc.h" #include "BuffSock.h" +#ifdef WITH_SSL #include "SSLBind.h" +#endif #include "MailConfig.h" #include "UsrUtils.h" #include "SvrUtils.h" #include "MessQueue.h" +#ifdef WITH_SSL #include "SSLMisc.h" +#endif #include "MailSvr.h" #include "MiscUtils.h" @@ -130,6 +134,7 @@ void MscSafeGetTmpFile(char *pszPath, int iMaxPath) { +#ifdef WITH_SSL time_t tmNow; unsigned long ulID; SYS_INT64 MsTime; @@ -155,6 +160,11 @@ md5_update(&MCtx, RndBytes, sizeof(RndBytes)); md5_final(&MCtx); md5_hex(MCtx.digest, szMD5); +#else + char szTempDir[SYS_MAX_PATH], szMD5[12]; + strcpy(szMD5, "xmailXXXXXX"); + mktemp(szMD5); +#endif SysGetTempDir(szTempDir, sizeof(szTempDir)); SysSNPrintf(pszPath, iMaxPath, "%s%s.xtmp", szTempDir, szMD5); @@ -1520,12 +1530,14 @@ return 0; } +#ifdef WITH_SSL int MscSslEnvCB(void *pPrivate, int iID, void const *pData) { SslBindEnv *pSslE = (SslBindEnv *) pPrivate; return 0; } +#endif int MscParseOptions(char const *pszOpts, int (*pfAssign)(void *, char const *, char const *), void *pPrivate) --- POP3Svr.cpp +++ POP3Svr.cpp @@ -26,12 +26,16 @@ #include "ShBlocks.h" #include "SList.h" #include "BuffSock.h" +#ifdef WITH_SSL #include "SSLBind.h" +#endif #include "ResLocks.h" #include "MiscUtils.h" #include "StrUtils.h" #include "MD5.h" +#ifdef WITH_SSL #include "SSLConfig.h" +#endif #include "SvrUtils.h" #include "UsrUtils.h" #include "UsrAuth.h" @@ -525,9 +529,11 @@ { char const *pszSTLS = ""; +#ifdef WITH_SSL if (SvrTestConfigFlag("EnablePOP3-TLS", true, POP3S.hSvrConfig) && strcmp(BSckBioName(hBSock), BSSL_BIO_NAME) != 0) pszSTLS = "STLS\r\n"; +#endif BSckVSendString(hBSock, POP3S.pPOP3Cfg->iTimeout, "+OK Capability list follows\r\n" @@ -542,6 +548,7 @@ return 0; } +#ifdef WITH_SSL static int POP3SslEnvCB(void *pPrivate, int iID, void const *pData) { POP3Session *pPOP3S = (POP3Session *) pPrivate; @@ -553,7 +560,9 @@ return 0; } +#endif +#ifdef WITH_SSL static int POP3HandleCmd_STLS(char const *pszCommand, BSOCK_HANDLE hBSock, POP3Session &POP3S) { @@ -610,6 +619,7 @@ return 0; } +#endif static int POP3HandleCmd_STAT(char const *pszCommand, BSOCK_HANDLE hBSock, POP3Session &POP3S) @@ -863,8 +873,10 @@ iCmdResult = POP3HandleCmd_APOP(pszCommand, hBSock, POP3S); else if (StrCmdMatch(pszCommand, "CAPA")) iCmdResult = POP3HandleCmd_CAPA(pszCommand, hBSock, POP3S); +#ifdef WITH_SSL else if (StrCmdMatch(pszCommand, "STLS")) iCmdResult = POP3HandleCmd_STLS(pszCommand, hBSock, POP3S); +#endif else if (StrCmdMatch(pszCommand, "STAT")) iCmdResult = POP3HandleCmd_STAT(pszCommand, hBSock, POP3S); else if (StrCmdMatch(pszCommand, "LIST")) @@ -955,6 +967,7 @@ return ErrorPop(); } +#ifdef WITH_SSL /* * Do we need to switch to TLS? */ @@ -987,6 +1000,7 @@ SysFree(SslE.pszIssuer); SysFree(SslE.pszSubject); } +#endif /* Check IP permission */ if (POP3CheckPeerIP(pThCtx->SockFD) < 0) { --- POP3Utils.cpp +++ POP3Utils.cpp @@ -29,8 +29,10 @@ #include "SList.h" #include "BuffSock.h" #include "Hash.h" +#ifdef WITH_SSL #include "SSLBind.h" #include "SSLConfig.h" +#endif #include "MD5.h" #include "MailConfig.h" #include "UsrUtils.h" @@ -840,6 +842,7 @@ return 0; } +#ifdef WITH_SSL static int UPopSwitchToTLS(BSOCK_HANDLE hBSock, char const *pszServer, POP3ChannelCfg const *pChCfg) { @@ -874,6 +877,7 @@ return UPopSwitchToTLS(hBSock, pszServer, pChCfg); } +#endif static BSOCK_HANDLE UPopCreateChannel(char const *pszServer, char const *pszUsername, char const *pszPassword, POP3ChannelCfg const *pChCfg) @@ -908,6 +912,7 @@ SysCloseSocket(SockFD); return INVALID_BSOCK_HANDLE; } +#ifdef WITH_SSL /* * Is this a full POP3S connection? */ @@ -916,6 +921,7 @@ SysCloseSocket(SockFD); return INVALID_BSOCK_HANDLE; } +#endif /* Read welcome message */ char szRTXBuffer[2048]; @@ -925,6 +931,7 @@ UPopCloseChannel(hBSock); return INVALID_BSOCK_HANDLE; } +#ifdef WITH_SSL /* * Non TLS mode active and STLS required? */ @@ -935,6 +942,7 @@ UPopCloseChannel(hBSock); return INVALID_BSOCK_HANDLE; } +#endif /* Extract TimeStamp from server respose (if any) */ char szTimeStamp[256] = ""; @@ -1075,12 +1083,14 @@ pChCfg->ulFlags |= POPCHF_USE_APOP; else if (strcmp(pszName, "FAPOP") == 0) pChCfg->ulFlags |= POPCHF_USE_APOP | POPCHF_FORCE_APOP; +#ifdef WITH_SSL else if (strcmp(pszName, "STLS") == 0) pChCfg->ulFlags |= POPCHF_USE_STLS; else if (strcmp(pszName, "FSTLS") == 0) pChCfg->ulFlags |= POPCHF_USE_STLS | POPCHF_FORCE_STLS; else if (strcmp(pszName, "POP3S") == 0) pChCfg->ulFlags |= POPCHF_USE_POP3S; +#endif else if (strcmp(pszName, "Leave") == 0) { if (pszValue == NULL || atoi(pszValue) > 0) pChCfg->ulFlags |= POPCHF_LEAVE_MSGS; --- SMTPSvr.cpp +++ SMTPSvr.cpp @@ -26,7 +26,9 @@ #include "SList.h" #include "ShBlocks.h" #include "BuffSock.h" +#ifdef WITH_SSL #include "SSLBind.h" +#endif #include "ResLocks.h" #include "StrUtils.h" #include "UsrUtils.h" @@ -35,7 +37,9 @@ #include "SMAILUtils.h" #include "QueueUtils.h" #include "MiscUtils.h" +#ifdef WITH_SSL #include "SSLConfig.h" +#endif #include "Base64Enc.h" #include "MD5.h" #include "UsrMailList.h" @@ -278,9 +282,11 @@ } else if (strcmp(pszName, "SenderDomainCheck") == 0) { if (pszVal != NULL && !atoi(pszVal)) pSMTPS->ulFlags |= SMTPF_SNDRCHECK_BYPASS; +#ifdef WITH_SSL } else if (strcmp(pszName, "EaseTLS") == 0) { if (pszVal == NULL || atoi(pszVal)) pSMTPS->ulSetupFlags &= ~SMTPF_WANT_TLS; +#endif } else if (strcmp(pszName, "EnableVRFY") == 0) { if (pszVal == NULL || atoi(pszVal)) pSMTPS->ulFlags |= SMTPF_VRFY_ENABLED; @@ -492,9 +498,11 @@ strcmp(pszName, "MailAuth") == 0) { if (pszValue == NULL || atoi(pszValue)) pSMTPS->ulSetupFlags |= SMTPF_MAIL_LOCKED; +#ifdef WITH_SSL } else if (strcmp(pszName, "WantTLS") == 0) { if (pszValue == NULL || atoi(pszValue)) pSMTPS->ulSetupFlags |= SMTPF_WANT_TLS; +#endif } return 0; @@ -529,9 +537,11 @@ SMTPS.ulMaxMsgSize = 0; break; +#ifdef WITH_SSL case 'S': SMTPS.ulFlags |= SMTPF_EASE_TLS; break; +#endif } } @@ -977,6 +987,7 @@ ErrSetErrorCode(ERR_SMTP_BAD_CMD_SEQUENCE); return ERR_SMTP_BAD_CMD_SEQUENCE; } +#ifdef WITH_SSL /* Do we need to be in TLS mode for this session? */ if ((SMTPS.ulFlags & SMTPF_WANT_TLS) && !(SMTPS.ulFlags & SMTPF_EASE_TLS) && strcmp(BSckBioName(hBSock), BSSL_BIO_NAME) != 0) { @@ -987,6 +998,7 @@ ErrSetErrorCode(ERR_TLS_MODE_REQUIRED); return ERR_TLS_MODE_REQUIRED; } +#endif /* Split the RETURN PATH */ char **ppszRetDomains = USmtpGetPathStrings(pszCommand); @@ -2253,7 +2265,11 @@ SysFree(pszDomain); /* Emit extended SMTP command and internal auths */ +#ifdef WITH_SSL int iLinkSSL = strcmp(BSckBioName(hBSock), BSSL_BIO_NAME) == 0; +#else + int iLinkSSL = 0; +#endif StrDynAdd(&DynS, "250 VRFY\r\n" @@ -2269,8 +2285,10 @@ StrDynPrint(&DynS, "250 SIZE %lu\r\n", SMTPS.ulMaxMsgSize); else StrDynAdd(&DynS, "250 SIZE\r\n"); +#ifdef WITH_SSL if (!iLinkSSL && SvrTestConfigFlag("EnableSMTP-TLS", true, SMTPS.hSvrConfig)) StrDynAdd(&DynS, "250 STARTTLS\r\n"); +#endif /* Send EHLO response file */ if (SMTPSendMultilineResponse(hBSock, SMTPS.pSMTPCfg->iTimeout, @@ -2291,6 +2309,7 @@ return 0; } +#ifdef WITH_SSL static int SMTPSslEnvCB(void *pPrivate, int iID, void const *pData) { SMTPSession *pSMTPS = (SMTPSession *) pPrivate; @@ -2302,7 +2321,9 @@ return 0; } +#endif +#ifdef WITH_SSL static int SMTPHandleCmd_STARTTLS(char const *pszCommand, BSOCK_HANDLE hBSock, SMTPSession &SMTPS) { @@ -2362,6 +2383,7 @@ return 0; } +#endif static char *SMTPExtAuthMacroLkupProc(void *pPrivate, char const *pszName, int iSize) { @@ -2931,6 +2953,7 @@ StrSNCpy(szAuthParam, ppszTokens[2]); StrFreeStrings(ppszTokens); +#ifdef WITH_SSL /* * Check if the client sent an AUTH type that is not allowed in non-TLS * mode. @@ -2942,6 +2965,7 @@ ErrSetErrorCode(ERR_UNKNOWN_SMTP_AUTH); return ERR_UNKNOWN_SMTP_AUTH; } +#endif /* Handle authentication methods */ if (stricmp(szAuthType, "PLAIN") == 0) { @@ -3000,9 +3024,11 @@ { char const *pszSTLS = ""; +#ifdef WITH_SSL if (strcmp(BSckBioName(hBSock), BSSL_BIO_NAME) != 0 && SvrTestConfigFlag("EnableSMTP-TLS", true, SMTPS.hSvrConfig)) pszSTLS = " STARTTLS"; +#endif BSckVSendString(hBSock, SMTPS.pSMTPCfg->iTimeout, "214-HELO EHLO MAIL RCPT DATA AUTH%s\r\n" @@ -3140,8 +3166,10 @@ iError = SMTPHandleCmd_HELO(pszCommand, hBSock, SMTPS); else if (StrCmdMatch(pszCommand, "EHLO")) iError = SMTPHandleCmd_EHLO(pszCommand, hBSock, SMTPS); +#ifdef WITH_SSL else if (StrCmdMatch(pszCommand, "STARTTLS")) iError = SMTPHandleCmd_STARTTLS(pszCommand, hBSock, SMTPS); +#endif else if (StrCmdMatch(pszCommand, "AUTH")) iError = SMTPHandleCmd_AUTH(pszCommand, hBSock, SMTPS); else if (StrCmdMatch(pszCommand, "RSET")) @@ -3235,6 +3263,7 @@ return ErrorPop(); } +#ifdef WITH_SSL /* * Do we need to switch to TLS? */ @@ -3267,6 +3296,7 @@ SysFree(SslE.pszIssuer); SysFree(SslE.pszSubject); } +#endif /* Increase threads count */ if (SMTPThreadCountAdd(+1, pThCtx->pThCfg->hThShb) < 0) { --- SMTPUtils.cpp +++ SMTPUtils.cpp @@ -28,8 +28,10 @@ #include "StrUtils.h" #include "SList.h" #include "BuffSock.h" +#ifdef WITH_SSL #include "SSLBind.h" #include "SSLConfig.h" +#endif #include "MailConfig.h" #include "UsrUtils.h" #include "UsrAuth.h" @@ -161,6 +163,7 @@ { SMTPGateway *pGw = (SMTPGateway *) pPrivate; +#ifdef WITH_SSL if (strcmp(pszName, "NeedTLS") == 0) { if (pszValue != NULL) { int iNeedTLS = atoi(pszValue); @@ -172,6 +175,9 @@ pGw->ulFlags |= SMTP_GWF_FORCE_TLS; } } else if (strcmp(pszName, "OutBind") == 0) { +#else + if (strcmp(pszName, "OutBind") == 0) { +#endif if (pszValue != NULL) { SysFree(pGw->pszIFace); pGw->pszIFace = SysStrDup(pszValue); @@ -1116,14 +1122,17 @@ if (pszLine[4] == ' ' && isdigit(pszLine[5])) pSmtpCh->ulMaxMsgSize = (unsigned long) atol(pszLine + 5); +#ifdef WITH_SSL } else if (StrCmdMatch(pszLine, "STARTTLS")) { pSmtpCh->ulFlags |= SMTPCH_SUPPORT_TLS; +#endif } } return 0; } +#ifdef WITH_SSL static int USmtpSslEnvCB(void *pPrivate, int iID, void const *pData) { SslBindEnv *pSslE = (SslBindEnv *) pPrivate; @@ -1186,6 +1195,7 @@ return iError; } +#endif static void USmtpCleanEHLO(SmtpChannel *pSmtpCh) { @@ -1321,6 +1331,7 @@ return INVALID_SMTPCH_HANDLE; } } +#ifdef WITH_SSL /* * Do we need SSL? */ @@ -1339,6 +1350,7 @@ goto SendHELO; } } +#endif /* Check if We need authentication */ if (USmtpServerAuthenticate(pSmtpCh, szAddress, pSMTPE) < 0) { --- SSLBind.cpp +++ SSLBind.cpp @@ -19,6 +19,7 @@ * Davide Libenzi * */ +#ifdef WITH_SSL #include "SysInclude.h" #include "SysDep.h" @@ -565,4 +566,5 @@ return 0; } +#endif --- SSLConfig.cpp +++ SSLConfig.cpp @@ -19,6 +19,7 @@ * Davide Libenzi * */ +#ifdef WITH_SSL #include "SysInclude.h" #include "SysDep.h" @@ -91,4 +92,5 @@ SysFree(pSSLB->pszCAFile); SysFree(pSSLB->pszCAPath); } +#endif --- SSLMisc.cpp +++ SSLMisc.cpp @@ -19,6 +19,7 @@ * Davide Libenzi * */ +#ifdef WITH_SSL #include "SysInclude.h" #include "SysDep.h" @@ -50,3 +51,5 @@ return 0; } +#endif +