public:
ocspdGlobals();
~ocspdGlobals();
- mach_port_t serverPort();
+ void resetServerPort();
+ mach_port_t serverPort();
private:
UnixPlusPlus::ForkMonitor mForkMonitor;
MachPlusPlus::Port mServerPort;
return mServerPort;
}
+void ocspdGlobals::resetServerPort()
+{
+ try {
+ mServerPort.deallocate();
+ } catch(...) {
+ }
+}
+
+
static ModuleNexus<ocspdGlobals> OcspdGlobals;
/*
}
krtn = ocsp_client_ocspdCacheFlushStale(serverPort);
if(krtn) {
+ if (krtn == MACH_SEND_INVALID_DEST)
+ OcspdGlobals().resetServerPort();
ocspdErrorLog("ocsp_client_ocspdCacheFlushStale: RPC returned %d\n", krtn);
return (CSSM_RETURN)krtn;
}
krtn = ocsp_client_certFetch(serverPort, certURL.Data, (mach_msg_type_number_t)certURL.Length,
(void **)&rtnData, &rtnLen);
if(krtn) {
+ if (krtn == MACH_SEND_INVALID_DEST)
+ OcspdGlobals().resetServerPort();
ocspdErrorLog("ocspdCertFetch: RPC returned %d\n", krtn);
return CSSMERR_APPLETP_NETWORK_FAILURE;
}
verifyTime, (mach_msg_type_number_t)strlen(verifyTime),
(void **)&rtnData, &rtnLen);
if(krtn) {
+ if (krtn == MACH_SEND_INVALID_DEST)
+ OcspdGlobals().resetServerPort();
ocspdErrorLog("ocspdCRLFetch: RPC returned %d\n", krtn);
return CSSMERR_APPLETP_NETWORK_FAILURE;
}
issuers.Data, (mach_msg_type_number_t)issuers.Length,
crlIssuer ? crlIssuer->Data : NULL, crlIssuer ? (mach_msg_type_number_t)crlIssuer->Length : 0,
crlURL ? crlURL->Data : NULL, crlURL ? (mach_msg_type_number_t)crlURL->Length : 0);
+ if (krtn == MACH_SEND_INVALID_DEST)
+ OcspdGlobals().resetServerPort();
return krtn;
}
krtn = ocsp_client_crlRefresh(serverPort, staleDays, expireOverlapSeconds,
purgeAll, fullCryptoVerify);
if(krtn) {
+ if (krtn == MACH_SEND_INVALID_DEST)
+ OcspdGlobals().resetServerPort();
ocspdErrorLog("ocspdCRLRefresh: RPC returned %d\n", krtn);
return CSSMERR_APPLETP_NETWORK_FAILURE;
}
krtn = ocsp_client_crlFlush(serverPort, crlURL.Data, (mach_msg_type_number_t)crlURL.Length);
if(krtn) {
+ if (krtn == MACH_SEND_INVALID_DEST)
+ OcspdGlobals().resetServerPort();
ocspdErrorLog("ocspdCRLFlush: RPC returned %d\n", krtn);
return CSSMERR_APPLETP_NETWORK_FAILURE;
}
krtn = ocsp_client_trustSettingsRead(serverPort, domain,
(void **)&rtnData, &rtnLen, &ortn);
if(krtn) {
+ if (krtn == MACH_SEND_INVALID_DEST)
+ OcspdGlobals().resetServerPort();
ocspdErrorLog("ocspdTrustSettingsRead: RPC returned %d\n", krtn);
return errSecNotAvailable;
}
trustSettings.Data, (mach_msg_type_number_t)trustSettings.Length,
&ortn);
if(krtn) {
+ if (krtn == MACH_SEND_INVALID_DEST)
+ OcspdGlobals().resetServerPort();
ocspdErrorLog("ocspdTrustSettingsWrite: RPC returned %d\n", krtn);
return errSecInternalComponent;
}