mirror of
https://github.com/zerotier/ZeroTierOne.git
synced 2024-12-19 04:57:53 +00:00
Add shutdownIfUnreadable file feature: shut down if shutdownIfUnreadable in home folder is in fact existent but unreadable (e.g. broken link). This enables nifty shutdown on .app trashing feature for OSX.
This commit is contained in:
parent
74af234305
commit
b699bdefbd
@ -467,6 +467,7 @@ Node::ReasonForTermination Node::run()
|
||||
|
||||
// Core I/O loop
|
||||
try {
|
||||
std::string shutdownIfUnreadablePath(_r->homePath + ZT_PATH_SEPARATOR_S + "shutdownIfUnreadable");
|
||||
uint64_t lastNetworkAutoconfCheck = Utils::now() - 5000; // check autoconf again after 5s for startup
|
||||
uint64_t lastPingCheck = 0;
|
||||
uint64_t lastClean = Utils::now(); // don't need to do this immediately
|
||||
@ -476,6 +477,13 @@ Node::ReasonForTermination Node::run()
|
||||
long lastDelayDelta = 0;
|
||||
|
||||
while (impl->reasonForTermination == NODE_RUNNING) {
|
||||
if (Utils::fileExists(shutdownIfUnreadablePath.c_str(),false)) {
|
||||
FILE *tmpf = fopen(shutdownIfUnreadablePath.c_str(),"r");
|
||||
if (!tmpf)
|
||||
return impl->terminateBecause(Node::NODE_NORMAL_TERMINATION,"shutdownIfUnreadable was not readable");
|
||||
fclose(tmpf);
|
||||
}
|
||||
|
||||
uint64_t now = Utils::now();
|
||||
bool resynchronize = false;
|
||||
|
||||
|
@ -246,7 +246,7 @@ no getSecureRandom() implementation;
|
||||
|
||||
void Utils::lockDownFile(const char *path,bool isDir)
|
||||
{
|
||||
#if defined(__APPLE__) || defined(__linux__) || defined(linux) || defined(__LINUX__) || defined(__linux)
|
||||
#ifdef __UNIX_LIKE__
|
||||
chmod(path,isDir ? 0700 : 0600);
|
||||
#else
|
||||
#ifdef _WIN32
|
||||
@ -263,6 +263,16 @@ uint64_t Utils::getLastModified(const char *path)
|
||||
return (((uint64_t)s.st_mtime) * 1000ULL);
|
||||
}
|
||||
|
||||
bool Utils::fileExists(const char *path,bool followLinks)
|
||||
{
|
||||
struct stat s;
|
||||
#ifdef __UNIX_LIKE__
|
||||
if (!followLinks)
|
||||
return (lstat(path,&s) == 0);
|
||||
#endif
|
||||
return (stat(path,&s) == 0);
|
||||
}
|
||||
|
||||
int64_t Utils::getFileSize(const char *path)
|
||||
{
|
||||
struct stat s;
|
||||
|
@ -177,12 +177,10 @@ public:
|
||||
|
||||
/**
|
||||
* @param path Path to check
|
||||
* @param followLinks Follow links (on platforms with that concept)
|
||||
* @return True if file or directory exists at path location
|
||||
*/
|
||||
static inline bool fileExists(const char *path)
|
||||
{
|
||||
return (getLastModified(path) != 0);
|
||||
}
|
||||
static bool fileExists(const char *path,bool followLinks = true);
|
||||
|
||||
/**
|
||||
* @param path Path to file
|
||||
|
Loading…
Reference in New Issue
Block a user