[haiku-commits] r41274 - haiku/trunk/src/servers/net

  • From: philippe.houdoin@xxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Fri, 22 Apr 2011 23:33:43 +0200 (CEST)

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)


Other related posts:

  • » [haiku-commits] r41274 - haiku/trunk/src/servers/net - philippe . houdoin