]> git.saurik.com Git - apple/security.git/blobdiff - OSX/libsecurity_utilities/lib/errors.cpp
Security-59306.120.7.tar.gz
[apple/security.git] / OSX / libsecurity_utilities / lib / errors.cpp
index 7384c990429dd5384919f9534e2e2fe4fe7a6cb8..e715b11d3e93756c5903ddc5702c96319a2b034b 100644 (file)
 //
 #include <security_utilities/errors.h>
 #include <security_utilities/debugging.h>
 //
 #include <security_utilities/errors.h>
 #include <security_utilities/debugging.h>
+#include <security_utilities/utility_config.h>
+#include <security_utilities/debugging_internal.h>
 #include <typeinfo>
 #include <stdio.h>
 #include <Security/SecBase.h>
 #include <typeinfo>
 #include <stdio.h>
 #include <Security/SecBase.h>
+#include <Security/CSCommon.h>
 #include <execinfo.h>
 #include <cxxabi.h>
 
 #include <execinfo.h>
 #include <cxxabi.h>
 
@@ -121,13 +124,15 @@ UnixError::UnixError() : error(errno)
     LogBacktrace();
 }
 
     LogBacktrace();
 }
 
-UnixError::UnixError(int err) : error(err)
+UnixError::UnixError(int err, bool suppresslogging) : error(err)
 {
     SECURITY_EXCEPTION_THROW_UNIX(this, err);
 
 {
     SECURITY_EXCEPTION_THROW_UNIX(this, err);
 
-    snprintf(whatBuffer, whatBufferSize, "UNIX error exception: %d", this->error);
-    secnotice("security_exception", "%s", what());
-    LogBacktrace();
+    if(!suppresslogging || secinfoenabled("security_exception")) {
+        snprintf(whatBuffer, whatBufferSize, "UNIX error exception: %d", this->error);
+        secnotice("security_exception", "%s", what());
+        LogBacktrace();
+    }
 }
 
 const char *UnixError::what() const throw ()
 }
 
 const char *UnixError::what() const throw ()
@@ -144,10 +149,12 @@ OSStatus UnixError::osStatus() const
 int UnixError::unixError() const
 { return error; }
 
 int UnixError::unixError() const
 { return error; }
 
-void UnixError::throwMe(int err) { throw UnixError(err); }
+void UnixError::throwMe(int err) { throw UnixError(err, false); }
+void UnixError::throwMeNoLogging(int err) { throw UnixError(err, true); }
+
 
 // @@@ This is a hack for the Network protocol state machine
 
 // @@@ This is a hack for the Network protocol state machine
-UnixError UnixError::make(int err) { return UnixError(err); }
+UnixError UnixError::make(int err) { return UnixError(err, false); }
 
 
 //
 
 
 //
@@ -158,8 +165,14 @@ MacOSError::MacOSError(int err) : error(err)
     SECURITY_EXCEPTION_THROW_OSSTATUS(this, err);
 
     snprintf(whatBuffer, whatBufferSize, "MacOS error: %d", this->error);
     SECURITY_EXCEPTION_THROW_OSSTATUS(this, err);
 
     snprintf(whatBuffer, whatBufferSize, "MacOS error: %d", this->error);
-    secnotice("security_exception", "%s", what());
-    LogBacktrace();
+    switch (err) {
+        case errSecCSReqFailed:
+            // This 'error' isn't an actual error and doesn't warrant being logged.
+            break;
+        default:
+            secnotice("security_exception", "%s", what());
+            LogBacktrace();
+    }
 }
 
 const char *MacOSError::what() const throw ()
 }
 
 const char *MacOSError::what() const throw ()
@@ -186,6 +199,12 @@ int MacOSError::unixError() const
 void MacOSError::throwMe(int error)
 { throw MacOSError(error); }
 
 void MacOSError::throwMe(int error)
 { throw MacOSError(error); }
 
+void MacOSError::throwMe(int error, char const *message, ...)
+{
+    // Ignoring the message for now, will do something with it later.
+    throw MacOSError(error);
+}
+
 MacOSError MacOSError::make(int error)
 { return MacOSError(error); }
 
 MacOSError MacOSError::make(int error)
 { return MacOSError(error); }