Author: phoudoin Date: 2011-04-22 23:33:43 +0200 (Fri, 22 Apr 2011) New Revision: 41274 Changeset: https://dev.haiku-os.org/changeset/41274 Ticket: https://dev.haiku-os.org/ticket/7475 Modified: haiku/trunk/src/servers/net/NetServer.cpp haiku/trunk/src/servers/net/Settings.cpp Log: Check node monitoring messages to handle them only when it make sense. Before, the "interfaces" settings file creation/removal notification was leading to a attempt to configure/remove an interface named "/boot/common/settings/network/interfaces"! Could help fixing issue #7475. Modified: haiku/trunk/src/servers/net/NetServer.cpp =================================================================== --- haiku/trunk/src/servers/net/NetServer.cpp 2011-04-22 20:45:34 UTC (rev 41273) +++ haiku/trunk/src/servers/net/NetServer.cpp 2011-04-22 21:33:43 UTC (rev 41274) @@ -81,7 +81,7 @@ BMessage* _missingDevice = NULL); void _BringUpInterfaces(); void _StartServices(); - void _HandleDeviceMonitor(BMessage* message); + status_t _HandleDeviceMonitor(BMessage* message); status_t _AutoJoinNetwork(const char* name); status_t _JoinNetwork(const BMessage& message, @@ -808,24 +808,27 @@ } -void +status_t NetServer::_HandleDeviceMonitor(BMessage* message) { int32 opcode; + const char* path; if (message->FindInt32("opcode", &opcode) != B_OK - || (opcode != B_ENTRY_CREATED && opcode != B_ENTRY_REMOVED)) - return; - - const char* path; - const char* watchedPath; - if (message->FindString("watched_path", &watchedPath) != B_OK + || (opcode != B_ENTRY_CREATED && opcode != B_ENTRY_REMOVED) || message->FindString("path", &path) != B_OK) - return; + return B_BAD_VALUE; + if (strncmp(path, "/dev/net", 9)) { + // not a device entry, ignore + return B_NAME_NOT_FOUND; + } + if (opcode == B_ENTRY_CREATED) _ConfigureDevice(path); else _RemoveInterface(path); + + return B_OK; } Modified: haiku/trunk/src/servers/net/Settings.cpp =================================================================== --- haiku/trunk/src/servers/net/Settings.cpp 2011-04-22 20:45:34 UTC (rev 41273) +++ haiku/trunk/src/servers/net/Settings.cpp 2011-04-22 21:33:43 UTC (rev 41274) @@ -356,6 +356,13 @@ || message->FindString("path", &pathName) < B_OK) return B_BAD_VALUE; + BPath settingsFolderPath; + _GetPath(NULL, settingsFolderPath); + if (strncmp(pathName, settingsFolderPath.Path(), + strlen(settingsFolderPath.Path()))) { + return B_NAME_NOT_FOUND; + } + if (message->FindBool("removed")) { // for now, we only consider existing settings files // (ie. deleting "services" won't stop any)