Browse Source

Silence kextload/kextunload output, error handling improvements.

Adam Ierymenko 11 years ago
parent
commit
37341048a9
2 changed files with 12 additions and 1 deletions
  1. 8 1
      main.cpp
  2. 4 0
      osnet/OSXEthernetTapFactory.cpp

+ 8 - 1
main.cpp

@@ -707,6 +707,7 @@ int main(int argc,char **argv)
 		RoutingTable *routingTable = ZTCreatePlatformRoutingTable;
 
 		node = new Node(homeDir,tapFactory,routingTable,udpPort,tcpPort,needsReset);
+
 		switch(node->run()) {
 #ifdef __WINDOWS__
 			case Node::NODE_RESTART_FOR_UPGRADE: {
@@ -739,18 +740,24 @@ int main(int argc,char **argv)
 				fprintf(stderr,"%s: abnormal termination: unable to execute update at %s\n",argv[0],(upgPath) ? upgPath : "(unknown path)");
 			}	break;
 #endif // __WINDOWS__ / __UNIX_LIKE__
+
 			case Node::NODE_UNRECOVERABLE_ERROR: {
 				exitCode = 3;
 				const char *termReason = node->reasonForTermination();
 				fprintf(stderr,"%s: abnormal termination: %s\n",argv[0],(termReason) ? termReason : "(unknown reason)");
 			}	break;
+
 			default:
 				break;
 		}
+
 		delete node;
 		node = (Node *)0;
+	} catch ( std::exception &exc ) {
+		fprintf(stderr,"%s: unexpected exception: %s"ZT_EOL_S,argv[0],exc.what());
+		exitCode = 3;
 	} catch ( ... ) {
-		fprintf(stderr,"%s: unexpected exception!"ZT_EOL_S,argv[0]);
+		fprintf(stderr,"%s: unexpected exception: unknown exception"ZT_EOL_S,argv[0]);
 		exitCode = 3;
 	}
 

+ 4 - 0
osnet/OSXEthernetTapFactory.cpp

@@ -34,6 +34,8 @@
 #include "OSXEthernetTapFactory.hpp"
 #include "OSXEthernetTap.hpp"
 
+#include "../node/Utils.hpp"
+
 namespace ZeroTier {
 
 OSXEthernetTapFactory::OSXEthernetTapFactory(const char *pathToTapKext,const char *tapKextName) :
@@ -47,6 +49,7 @@ OSXEthernetTapFactory::OSXEthernetTapFactory(const char *pathToTapKext,const cha
 			long kextpid = (long)vfork();
 			if (kextpid == 0) {
 				::chdir(_pathToTapKext.c_str());
+				Utils::redirectUnixOutputs("/dev/null",(const char *)0);
 				::execl("/sbin/kextload","/sbin/kextload","-q","-repository",_pathToTapKext.c_str(),_tapKextName.c_str(),(const char *)0);
 				::_exit(-1);
 			} else if (kextpid > 0) {
@@ -76,6 +79,7 @@ OSXEthernetTapFactory::~OSXEthernetTapFactory()
 		sprintf(tmp,"%s/%s",_pathToTapKext.c_str(),_tapKextName.c_str());
 		long kextpid = (long)vfork();
 		if (kextpid == 0) {
+			Utils::redirectUnixOutputs("/dev/null",(const char *)0);
 			::execl("/sbin/kextunload","/sbin/kextunload",tmp,(const char *)0);
 			::_exit(-1);
 		} else if (kextpid > 0) {