Ticket #10191: 0001-Converted-UserlandFS-and-NetFS-to-hpkg-and-made-nece.patch
File 0001-Converted-UserlandFS-and-NetFS-to-hpkg-and-made-nece.patch, 31.9 KB (added by , 10 years ago) |
---|
-
build/jam/HaikuPackages
From 9003a9ce1801b281143a8dbcc32dfd39abdf7ca7 Mon Sep 17 00:00:00 2001 From: Sean Healy <jalopeura@hotmail.com> Date: Sat, 6 Sep 2014 05:43:04 -0700 Subject: [PATCH] Converted UserlandFS and NetFS to hpkg and made necessary updates to the code --- build/jam/HaikuPackages | 2 + build/jam/OptionalPackages | 87 ++--------- build/jam/packages/NetFS | 26 ++++ build/jam/packages/UserlandFS | 55 +++++++ build/jam/repositories/Haiku | 3 + docs/add-ons/NetFS.html | 145 ++++++++++++++++++ .../file_systems/netfs/client/ServerManager.cpp | 2 +- .../file_systems/netfs/client/ServerManager.h | 2 +- .../netfs/headers/shared/InsecureChannel.h | 2 +- .../file_systems/netfs/headers/shared/NetAddress.h | 2 +- .../netfs/headers/shared/RequestConnection.h | 2 +- .../file_systems/netfs/headers/shared/Utils.h | 2 +- .../file_systems/netfs/netfs-interface-definition | 19 +++ src/add-ons/kernel/file_systems/netfs/netfs_mount | 3 + .../file_systems/netfs/server/ClientConnection.h | 2 +- .../file_systems/netfs/server/ClientVolume.cpp | 2 +- .../file_systems/netfs/server/ClientVolume.h | 2 +- .../netfs/server/InsecureConnectionListener.h | 2 +- .../file_systems/netfs/server/NetFSServer.cpp | 162 +++++++++++---------- .../kernel/file_systems/netfs/server/NetFSServer.h | 6 +- .../file_systems/netfs/shared/NetAddress.cpp | 2 +- .../userlandfs/kernel_add_on/Settings.cpp | 70 +++++++-- src/data/package_infos/generic/netfs | 20 +++ src/data/package_infos/generic/userlandfs | 16 ++ src/data/package_infos/generic/userlandfs_devel | 23 +++ 25 files changed, 474 insertions(+), 185 deletions(-) create mode 100644 build/jam/packages/NetFS create mode 100644 build/jam/packages/UserlandFS create mode 100644 docs/add-ons/NetFS.html create mode 100644 src/add-ons/kernel/file_systems/netfs/netfs-interface-definition create mode 100755 src/add-ons/kernel/file_systems/netfs/netfs_mount create mode 100644 src/data/package_infos/generic/netfs create mode 100644 src/data/package_infos/generic/userlandfs create mode 100644 src/data/package_infos/generic/userlandfs_devel diff --git a/build/jam/HaikuPackages b/build/jam/HaikuPackages index 279efab..88068fc 100644
a b local packages = 6 6 HaikuUserguide 7 7 HaikuWelcome 8 8 MakefileEngine 9 UserlandFS 10 NetFS 9 11 ; 10 12 11 13 if $(HAIKU_BUILD_TYPE) = bootstrap { -
build/jam/OptionalPackages
diff --git a/build/jam/OptionalPackages b/build/jam/OptionalPackages index 826341e..bd14936 100644
a b if [ IsOptionalHaikuImagePackageAdded Git ] { 184 184 185 185 # NetFS network file system 186 186 if [ IsOptionalHaikuImagePackageAdded NetFS ] { 187 # TODO: Make this an actual package! 188 # # userlandfs module 189 # AddFilesToHaikuImage home config add-ons userlandfs 190 # : netfs ; 191 # 192 # # servers 193 # AddFilesToHaikuImage system servers : netfs_server ; 194 # AddFilesToHaikuImage system servers 195 # : authentication_server ; 196 # 197 # # tools 198 # AddFilesToHaikuImage system bin : netfs_config ; 199 # AddFilesToHaikuImage system bin : netfs_server_prefs ; 200 # 201 # #example settings for netfs_server 202 # local netfsServerSettingsFiles = <driver-settings>netfs-server ; 203 # SEARCH on $(netfsServerSettingsFiles) 204 # = [ FDirName $(HAIKU_TOP) src add-ons kernel file_systems netfs ] ; 205 # AddFilesToHaikuImage home config settings kernel drivers 206 # : $(netfsServerSettingsFiles) ; 207 # 208 # #userlandfs settings are needed for netfs_config to work (ioctls) 209 # local userlandfsServerSettingsFiles = <driver-settings>userlandfs ; 210 # SEARCH on $(userlandfsServerSettingsFiles) 211 # = [ FDirName $(HAIKU_TOP) src add-ons kernel file_systems userlandfs ] ; 212 # AddFilesToHaikuImage home config settings kernel drivers 213 # : $(userlandfsServerSettingsFiles) ; 187 AddPackageFilesToHaikuImage system : netfs.hpkg ; 214 188 } 215 189 216 190 217 191 # UserlandFS 218 192 if [ IsOptionalHaikuImagePackageAdded UserlandFS ] { 219 # TODO: Make this an actual package! 220 # local arch = $(TARGET_ARCH) ; 221 # local abi = gcc$(TARGET_GCC_VERSION_$(TARGET_PACKAGING_ARCH)[1]) ; 222 # 223 # # kernel module 224 # AddFilesToHaikuImage system add-ons kernel file_systems 225 # : userlandfs ; 226 # 227 # # server 228 # AddFilesToHaikuImage system servers : userlandfs_server ; 229 # 230 # # libs 231 # local userlandfsLibs = 232 # libuserlandfs_beos_kernel.so 233 # libuserlandfs_haiku_kernel.so 234 # libuserlandfs_fuse.so 235 # ; 236 # AddFilesToHaikuImage system lib : $(userlandfsLibs) ; 237 # 238 # # development goodies 239 # if [ IsOptionalHaikuImagePackageAdded DevelopmentMin ] { 240 # if ! ( $(TARGET_GCC_VERSION_$(TARGET_PACKAGING_ARCH)[1]) in 2 4 ) { 241 # Exit "Optional package UserlandFS: Unsupported GCC version:" 242 # $(TARGET_GCC_VERSION_$(TARGET_PACKAGING_ARCH)[1]) ; 243 # } 244 # 245 # # library symlinks 246 # local lib ; 247 # for lib in $(userlandfsLibs) { 248 # AddSymlinkToHaikuImage develop abi $(arch) $(abi) lib 249 # : /system/lib/$(lib:BS) ; 250 # } 251 # 252 # # FUSE headers 253 # local fuseHeaders = 254 # fuse_common_compat.h 255 # fuse_common.h 256 # fuse_compat.h 257 # fuse.h 258 # fuse_lowlevel_compat.h 259 # fuse_lowlevel.h 260 # fuse_opt.h 261 # ; 262 # fuseHeaders = $(fuseHeaders:G=userlandfs!fuse) ; 263 # SEARCH on $(fuseHeaders) 264 # = [ FDirName $(HAIKU_TOP) headers private userlandfs fuse ] ; 265 # AddFilesToHaikuImage develop headers userlandfs fuse : $(fuseHeaders) ; 266 # } 193 AddPackageFilesToHaikuImage system : userlandfs.hpkg ; 194 195 # development package 196 if [ IsOptionalHaikuImagePackageAdded DevelopmentMin ] { 197 if ! ( $(TARGET_GCC_VERSION_$(TARGET_PACKAGING_ARCH)[1]) in 2 4 ) { 198 Exit "Optional package UserlandFS: Unsupported GCC version:" 199 $(TARGET_GCC_VERSION_$(TARGET_PACKAGING_ARCH)[1]) ; 200 } 201 202 AddPackageFilesToHaikuImage system : userlandfs_devel.hpkg ; 203 } 267 204 } 268 205 269 206 -
new file uild/jam/packages/NetFS
diff --git a/build/jam/packages/NetFS b/build/jam/packages/NetFS new file mode 100644 index 0000000..dc2b9f6
- + 1 local netfsPackage = netfs.hpkg ; 2 HaikuPackage $(netfsPackage) ; 3 4 # userlandfs module 5 AddFilesToPackage add-ons userlandfs : netfs ; 6 7 # servers 8 AddFilesToPackage servers : netfs_server ; 9 AddFilesToPackage servers : authentication_server ; 10 11 # tools 12 AddFilesToPackage bin : netfs_config ; 13 AddFilesToPackage bin : netfs_server_prefs ; 14 AddFilesToPackage bin 15 : [ FDirName $(HAIKU_TOP) src add-ons kernel file_systems netfs netfs_mount ] ; 16 17 # interface definition 18 AddFilesToPackage data userlandfs file_systems 19 : [ FDirName $(HAIKU_TOP) src add-ons kernel file_systems netfs netfs-interface-definition ] 20 : netfs ; 21 22 # docs 23 AddFilesToPackage documentation add-ons : 24 [ FDirName $(HAIKU_TOP) docs add-ons NetFS.html ] : NetFS.html ; 25 26 BuildHaikuPackage $(netfsPackage) : netfs ; -
new file uild/jam/packages/UserlandFS
diff --git a/build/jam/packages/UserlandFS b/build/jam/packages/UserlandFS new file mode 100644 index 0000000..7963e6f
- + 1 local arch = $(TARGET_ARCH) ; 2 local abi = gcc$(TARGET_GCC_VERSION_$(TARGET_PACKAGING_ARCH)[1]) ; 3 4 # 5 # main package 6 # 7 8 local userlandfsPackage = userlandfs.hpkg ; 9 HaikuPackage $(userlandfsPackage) ; 10 11 # kernel module 12 AddFilesToPackage add-ons kernel file_systems : userlandfs ; 13 14 # server 15 AddFilesToPackage servers : userlandfs_server ; 16 17 # libs 18 local userlandfsLibs = 19 libuserlandfs_beos_kernel.so 20 libuserlandfs_haiku_kernel.so 21 libuserlandfs_fuse.so 22 ; 23 AddFilesToPackage lib : $(userlandfsLibs) ; 24 25 BuildHaikuPackage $(userlandfsPackage) : userlandfs ; 26 27 # 28 # development package 29 # 30 31 local userlandfsDevelPackage = userlandfs_devel.hpkg ; 32 HaikuPackage $(userlandfsDevelPackage) ; 33 34 # library symlinks 35 local lib ; 36 for lib in $(userlandfsLibs) { 37 AddSymlinkToPackage develop abi $(arch) $(abi) lib : /system/lib/$(lib:BS) ; 38 } 39 40 # FUSE headers 41 local fuseHeaders = 42 fuse_common_compat.h 43 fuse_common.h 44 fuse_compat.h 45 fuse.h 46 fuse_lowlevel_compat.h 47 fuse_lowlevel.h 48 fuse_opt.h 49 ; 50 fuseHeaders = $(fuseHeaders:G=userlandfs!fuse) ; 51 SEARCH on $(fuseHeaders) 52 = [ FDirName $(HAIKU_TOP) headers private userlandfs fuse ] ; 53 AddFilesToPackage develop headers userlandfs fuse : $(fuseHeaders) ; 54 55 BuildHaikuPackage $(userlandfsDevelPackage) : userlandfs_devel ; -
build/jam/repositories/Haiku
diff --git a/build/jam/repositories/Haiku b/build/jam/repositories/Haiku index 32efd45..4a63db2 100644
a b local packages = 15 15 haiku_userguide 16 16 haiku_welcome 17 17 makefile_engine 18 userlandfs 19 userlandfs_devel 20 netfs 18 21 19 22 haiku_$(secondaryArchs) 20 23 haiku_$(secondaryArchs)_devel -
new file docs/add-ons/NetFS.html
diff --git a/docs/add-ons/NetFS.html b/docs/add-ons/NetFS.html new file mode 100644 index 0000000..067228e
- + 1 <!-- 2 If you move this file, you must update the package rules file at 3 build/jam/packages/NetFS to reflect the new location. Otherwise the package will 4 not build. 5 --> 6 <html> 7 <head> 8 <title>NetFS</title> 9 <style> 10 .code { 11 font-family: monospace; 12 background: #eee; 13 border: 1px solid black; 14 whitespace: pre; 15 padding: 1em; 16 } 17 span.code { 18 padding: 0; 19 border: 0; 20 } 21 </style> 22 </head> 23 <body> 24 25 <h1 align="center">NetFS</h1> 26 27 <hr /> 28 29 <h2 align="center">Client</h2> 30 31 <p>To run the client, execute the following at the command line:</p> 32 33 <pre class="code"> 34 $ netfs_mount 35 </pre> 36 37 <p>A "Network" icon will appear on your desktop, containing remote servers 38 identified by host name. Inside the folder for each server are the shares on 39 that server.</p> 40 41 <p>You can also run the steps individually:</p> 42 43 <pre class="code"> 44 $ /system/servers/authentication_server & 45 $ mkdir /network 46 $ mount -t userlandfs -p "netfs" /network 47 </pre> 48 49 <hr /> 50 51 <h2 align="center">Server</h2> 52 53 <p>To run the server:</p> 54 55 <pre class="code"> 56 $ netfs_server_prefs launch 57 </pre> 58 59 <p>You can also start the server directly if you prefer.</p> 60 61 <pre class="code"> 62 $ /system/servers/netfs_server & 63 </pre> 64 65 <p>The server will then run until you shut down your computer, but it is also 66 possible to stop it manually.</p> 67 68 <pre class="code"> 69 $ netfs_server_prefs terminate 70 </pre> 71 72 <p>Once the server is running, you can define shared folders. The first step is 73 to create a user who can access those folders, optionally with a password.</p> 74 75 <pre class="code"> 76 $ netfs_server_prefs add user <name> [<password>] 77 </pre> 78 79 <p>Next create a shared folder and assign a user some permissions on it.</p> 80 81 <pre class="code"> 82 $ netfs_server_prefs add share <name> <path> 83 $ netfs_server_prefs permissions <user> <share> <flags> 84 </pre> 85 86 <p><span class="code">name</span> is the name that will appear to clients when 87 they connect to your server. <span class="code">flags</span> is one or more of: 88 <span class="code">m</span> = mount, <span class="code">r</span> = read, <span 89 class="code">w</span> = write, <span class="code">q</span> = query.</p> 90 91 <p>Don't forget to save your settings.</p> 92 93 <pre class="code"> 94 $ netfs_server_prefs save 95 </pre> 96 97 <p>The <span class="code">netfs_server_prefs</span> tool can also list and 98 remove users and shares. See the help for details.</p> 99 100 <pre class="code"> 101 $ netfs_server_prefs --help 102 </pre> 103 104 <hr /> 105 106 <h2 align="center">Fallback Settings File</h2> 107 108 <p>The settings file is stored in a binary format, but if it is missing or 109 damaged, the server will use a fallback settings file, which has a text-based 110 format. This file must be located at <span 111 class="code">/boot/home/config/settings/netfs/netfs_server_fallback</span>. (If 112 neither the main settings file nor the fallback settings file can be loaded, the 113 server will have no users or shares defined.) 114 115 <p>Here is an example of a fallback settings file.</p> 116 117 <pre class="code"> 118 # users 119 user bonefish { 120 password password 121 } 122 123 # user without a password 124 user anonymous 125 126 # shares 127 share ttttt { 128 path /boot/home/Desktop/ttttt 129 user bonefish { 130 permissions mount query read write 131 } 132 } 133 134 share sub-ttttt { 135 path /boot/home/Desktop/ttttt/rmessage 136 user bonefish { 137 permissions mount query read write 138 } 139 user anonymous { 140 permissions mount query read 141 } 142 } 143 </pre> 144 145 </body> -
src/add-ons/kernel/file_systems/netfs/client/ServerManager.cpp
diff --git a/src/add-ons/kernel/file_systems/netfs/client/ServerManager.cpp b/src/add-ons/kernel/file_systems/netfs/client/ServerManager.cpp index eff50b4..5f4073c 100644
a b private: 138 138 ServerManager* fServerManager; 139 139 ExtendedServerInfo* fOldServerInfo; 140 140 ExtendedServerInfo* fServerInfo; 141 vint32 fFD;141 int32 fFD; 142 142 bool fUpdate; 143 143 bool fSuccess; 144 144 }; -
src/add-ons/kernel/file_systems/netfs/client/ServerManager.h
diff --git a/src/add-ons/kernel/file_systems/netfs/client/ServerManager.h b/src/add-ons/kernel/file_systems/netfs/client/ServerManager.h index 00a2fb1..7aae5d5 100644
a b private: 48 48 Locker fLock; 49 49 ServerInfoMap* fServerInfos; 50 50 thread_id fBroadcastListener; 51 vint32 fBroadcastListenerSocket;51 int32 fBroadcastListenerSocket; 52 52 Listener* fListener; 53 53 volatile bool fTerminating; 54 54 }; -
src/add-ons/kernel/file_systems/netfs/headers/shared/InsecureChannel.h
diff --git a/src/add-ons/kernel/file_systems/netfs/headers/shared/InsecureChannel.h b/src/add-ons/kernel/file_systems/netfs/headers/shared/InsecureChannel.h index c8d0a68..3402d2c 100644
a b public: 20 20 status_t GetPeerAddress(NetAddress *address) const; 21 21 22 22 private: 23 vint32 fSocket;23 int32 fSocket; 24 24 bool fClosed; 25 25 }; 26 26 -
src/add-ons/kernel/file_systems/netfs/headers/shared/NetAddress.h
diff --git a/src/add-ons/kernel/file_systems/netfs/headers/shared/NetAddress.h b/src/add-ons/kernel/file_systems/netfs/headers/shared/NetAddress.h index fb5c57b..0fd8994 100644
a b private: 66 66 Resolver* fResolver; 67 67 68 68 static Resolver* volatile sResolver; 69 static vint32 sLockCounter;69 static int32 sLockCounter; 70 70 }; 71 71 72 72 #endif // NET_FS_NET_ADDRESS_H -
src/add-ons/kernel/file_systems/netfs/headers/shared/RequestConnection.h
diff --git a/src/add-ons/kernel/file_systems/netfs/headers/shared/RequestConnection.h b/src/add-ons/kernel/file_systems/netfs/headers/shared/RequestConnection.h index 9819f54..253fba3c 100644
a b private: 41 41 bool fOwnsRequestHandler; 42 42 DownStreamThread* fThreads; 43 43 int32 fThreadCount; 44 vint32 fTerminationCount;44 int32 fTerminationCount; 45 45 }; 46 46 47 47 #endif // NET_FS_REQUEST_CONNECTION_H -
src/add-ons/kernel/file_systems/netfs/headers/shared/Utils.h
diff --git a/src/add-ons/kernel/file_systems/netfs/headers/shared/Utils.h b/src/add-ons/kernel/file_systems/netfs/headers/shared/Utils.h index 7fb05f9..f2536b5 100644
a b template<typename T> T min(const T& a, const T& b) { return (a < b ? a : b); } 24 24 */ 25 25 static inline 26 26 void 27 safe_closesocket( vint32& socketVar)27 safe_closesocket(int32& socketVar) 28 28 { 29 29 int32 socket = atomic_or(&socketVar, -1); 30 30 #ifdef __HAIKU__ -
new file src/add-ons/kernel/file_systems/netfs/netfs-interface-definition
diff --git a/src/add-ons/kernel/file_systems/netfs/netfs-interface-definition b/src/add-ons/kernel/file_systems/netfs/netfs-interface-definition new file mode 100644 index 0000000..3407fbb
- + 1 # NetFS interface definition for UserlandFS 2 # 3 # Lives in PACKAGE/data/userlandfs/file_systems 4 5 file_system netfs { 6 # NET_FS_IOCTL_ADD_SERVER 7 ioctl 11000 { 8 buffer_size 256 9 write_buffer_size 0 10 is_buffer true 11 } 12 13 # NET_FS_IOCTL_REMOVE_SERVER 14 ioctl 11001 { 15 buffer_size 256 16 write_buffer_size 0 17 is_buffer true 18 } 19 } -
new file src/add-ons/kernel/file_systems/netfs/netfs_mount
diff --git a/src/add-ons/kernel/file_systems/netfs/netfs_mount b/src/add-ons/kernel/file_systems/netfs/netfs_mount new file mode 100755 index 0000000..85d25a6
- + 1 /system/servers/authentication_server & 2 mkdir /network 3 mount -t userlandfs -p "netfs" /network -
src/add-ons/kernel/file_systems/netfs/server/ClientConnection.h
diff --git a/src/add-ons/kernel/file_systems/netfs/server/ClientConnection.h b/src/add-ons/kernel/file_systems/netfs/server/ClientConnection.h index 9a36a16..5d329f7 100644
a b private: 193 193 thread_id fNodeMonitoringProcessor; 194 194 Locker fLock; 195 195 int32 fReferenceCount; 196 vint32 fInitialized;196 int32 fInitialized; 197 197 bool fClosed; 198 198 bool fError; 199 199 bool fInverseClientEndianess; -
src/add-ons/kernel/file_systems/netfs/server/ClientVolume.cpp
diff --git a/src/add-ons/kernel/file_systems/netfs/server/ClientVolume.cpp b/src/add-ons/kernel/file_systems/netfs/server/ClientVolume.cpp index f6af50a..8874b7d 100644
a b ClientVolume::_NextVolumeID() 520 520 } 521 521 522 522 // sNextVolumeID 523 vint32 ClientVolume::sNextVolumeID = 0;523 int32 ClientVolume::sNextVolumeID = 0; 524 524 525 525 526 526 // #pragma - -
src/add-ons/kernel/file_systems/netfs/server/ClientVolume.h
diff --git a/src/add-ons/kernel/file_systems/netfs/server/ClientVolume.h b/src/add-ons/kernel/file_systems/netfs/server/ClientVolume.h index 44b609f..ec97dae 100644
a b private: 109 109 Permissions fSharePermissions; 110 110 bool fMounted; 111 111 112 static vint32 sNextVolumeID;112 static int32 sNextVolumeID; 113 113 }; 114 114 115 115 // NodeMonitoringProcessor -
src/add-ons/kernel/file_systems/netfs/server/InsecureConnectionListener.h
diff --git a/src/add-ons/kernel/file_systems/netfs/server/InsecureConnectionListener.h b/src/add-ons/kernel/file_systems/netfs/server/InsecureConnectionListener.h index e4e4471..738ab2d 100644
a b public: 27 27 User** user); 28 28 29 29 private: 30 vint32 fSocket;30 int32 fSocket; 31 31 }; 32 32 33 33 #endif // NET_FS_INSECURE_CONNECTION_LISTENER_H -
src/add-ons/kernel/file_systems/netfs/server/NetFSServer.cpp
diff --git a/src/add-ons/kernel/file_systems/netfs/server/NetFSServer.cpp b/src/add-ons/kernel/file_systems/netfs/server/NetFSServer.cpp index 4b067eb..8c8611b 100644
a b 40 40 #include "Utils.h" 41 41 #include "VolumeManager.h" 42 42 43 static const char* kSettingsDirName = "netfs"; 44 static const char* kSettingsFileName = "netfs_server"; 43 static const char* kSettingsDirName = "netfs"; 44 static const char* kSettingsFileName = "netfs_server"; 45 static const char* kFallbackSettingsFileName = "netfs_server_fallback"; 45 46 46 47 // usage 47 48 static const char* kUsage = … … NetFSServer::_LoadSecurityContext(SecurityContext** _securityContext) 796 797 } 797 798 ObjectDeleter<SecurityContext> securityContextDeleter(securityContext); 798 799 799 // load from driver settings for the time being 800 // load the fallback settings, if present 801 BPath path; 800 802 DriverSettings settings; 801 error = settings.Load("netfs-server"); 802 if (error != B_OK) 803 return error; 804 805 // load users 806 DriverParameter parameter; 807 for (DriverParameterIterator it = settings.GetParameterIterator("user"); 808 it.GetNext(¶meter);) { 809 const char* userName = parameter.ValueAt(0); 810 const char* password = parameter.GetParameterValue("password"); 811 if (!userName) { 812 WARN("Skipping nameless user settings entry.\n"); 813 continue; 814 } 815 // PRINT(("user: %s, password: %s\n", parameter.ValueAt(0), 816 // parameter.GetParameterValue("password"))); 817 error = securityContext->AddUser(userName, password); 818 if (error != B_OK) 819 ERROR("ERROR: Failed to add user `%s'\n", userName); 820 } 821 822 // load shares 823 for (DriverParameterIterator it = settings.GetParameterIterator("share"); 824 it.GetNext(¶meter);) { 825 const char* shareName = parameter.ValueAt(0); 826 const char* path = parameter.GetParameterValue("path"); 827 if (!shareName || !path) { 828 WARN("settings: Skipping invalid share settings entry (no name" 829 " or no path).\n"); 830 continue; 831 } 832 // PRINT(("share: %s, path: %s\n", parameter.ValueAt(0), 833 // parameter.GetParameterValue("path"))); 834 Share* share; 835 error = securityContext->AddShare(shareName, path, &share); 836 if (error != B_OK) { 837 ERROR("ERROR: Failed to add share `%s'\n", shareName); 838 continue; 803 if (_GetSettingsDirPath(&path, false) == B_OK 804 && path.Append(kFallbackSettingsFileName) == B_OK 805 && settings.Load(path.Path()) == B_OK) { 806 // load users 807 DriverParameter parameter; 808 for (DriverParameterIterator it = settings.GetParameterIterator("user"); 809 it.GetNext(¶meter);) { 810 const char* userName = parameter.ValueAt(0); 811 const char* password = parameter.GetParameterValue("password"); 812 if (!userName) { 813 WARN("Skipping nameless user settings entry.\n"); 814 continue; 815 } 816 // PRINT(("user: %s, password: %s\n", parameter.ValueAt(0), 817 // parameter.GetParameterValue("password"))); 818 error = securityContext->AddUser(userName, password); 819 if (error != B_OK) 820 ERROR("ERROR: Failed to add user `%s'\n", userName); 839 821 } 840 BReference<Share> shareReference(share, true); 841 DriverParameter userParameter; 842 // iterate through the share users 843 for (DriverParameterIterator userIt 844 = parameter.GetParameterIterator("user"); 845 userIt.GetNext(&userParameter);) { 846 const char* userName = userParameter.ValueAt(0); 847 // PRINT((" user: %s\n", userName)); 848 User* user = securityContext->FindUser(userName); 849 if (!user) { 850 ERROR("ERROR: Undefined user `%s'.\n", userName); 822 823 // load shares 824 for (DriverParameterIterator it = settings.GetParameterIterator("share"); 825 it.GetNext(¶meter);) { 826 const char* shareName = parameter.ValueAt(0); 827 const char* path = parameter.GetParameterValue("path"); 828 if (!shareName || !path) { 829 WARN("settings: Skipping invalid share settings entry (no name" 830 " or no path).\n"); 851 831 continue; 852 832 } 853 BReference<User> userReference(user, true); 854 DriverParameter permissionsParameter; 855 if (!userParameter.FindParameter("permissions", 856 &permissionsParameter)) { 833 // PRINT(("share: %s, path: %s\n", parameter.ValueAt(0), 834 // parameter.GetParameterValue("path"))); 835 Share* share; 836 error = securityContext->AddShare(shareName, path, &share); 837 if (error != B_OK) { 838 ERROR("ERROR: Failed to add share `%s'\n", shareName); 857 839 continue; 858 840 } 859 Permissions permissions; 860 for (int32 i = 0; i < permissionsParameter.CountValues(); i++) { 861 const char* permission = permissionsParameter.ValueAt(i); 862 // PRINT((" permission: %s\n", permission)); 863 if (strcmp(permission, "mount") == 0) { 864 permissions.AddPermissions(MOUNT_SHARE_PERMISSION); 865 } else if (strcmp(permission, "query") == 0) { 866 permissions.AddPermissions(QUERY_SHARE_PERMISSION); 867 } else if (strcmp(permission, "read") == 0) { 868 permissions.AddPermissions(READ_PERMISSION 869 | READ_DIR_PERMISSION | RESOLVE_DIR_ENTRY_PERMISSION); 870 } else if (strcmp(permission, "write") == 0) { 871 permissions.AddPermissions(WRITE_PERMISSION 872 | WRITE_DIR_PERMISSION); 873 } else if (strcmp(permission, "all") == 0) { 874 permissions.AddPermissions(ALL_PERMISSIONS); 841 BReference<Share> shareReference(share, true); 842 DriverParameter userParameter; 843 // iterate through the share users 844 for (DriverParameterIterator userIt 845 = parameter.GetParameterIterator("user"); 846 userIt.GetNext(&userParameter);) { 847 const char* userName = userParameter.ValueAt(0); 848 // PRINT((" user: %s\n", userName)); 849 User* user = securityContext->FindUser(userName); 850 if (!user) { 851 ERROR("ERROR: Undefined user `%s'.\n", userName); 852 continue; 853 } 854 BReference<User> userReference(user, true); 855 DriverParameter permissionsParameter; 856 if (!userParameter.FindParameter("permissions", 857 &permissionsParameter)) { 858 continue; 859 } 860 Permissions permissions; 861 for (int32 i = 0; i < permissionsParameter.CountValues(); i++) { 862 const char* permission = permissionsParameter.ValueAt(i); 863 // PRINT((" permission: %s\n", permission)); 864 if (strcmp(permission, "mount") == 0) { 865 permissions.AddPermissions(MOUNT_SHARE_PERMISSION); 866 } else if (strcmp(permission, "query") == 0) { 867 permissions.AddPermissions(QUERY_SHARE_PERMISSION); 868 } else if (strcmp(permission, "read") == 0) { 869 permissions.AddPermissions(READ_PERMISSION 870 | READ_DIR_PERMISSION | RESOLVE_DIR_ENTRY_PERMISSION); 871 } else if (strcmp(permission, "write") == 0) { 872 permissions.AddPermissions(WRITE_PERMISSION 873 | WRITE_DIR_PERMISSION); 874 } else if (strcmp(permission, "all") == 0) { 875 permissions.AddPermissions(ALL_PERMISSIONS); 876 } 877 } 878 error = securityContext->SetNodePermissions(share->GetPath(), user, 879 permissions); 880 if (error != B_OK) { 881 ERROR("ERROR: Failed to set permissions for share `%s'\n", 882 share->GetName()); 875 883 } 876 }877 error = securityContext->SetNodePermissions(share->GetPath(), user,878 permissions);879 if (error != B_OK) {880 ERROR("ERROR: Failed to set permissions for share `%s'\n",881 share->GetName());882 884 } 883 885 } 884 886 } … … NetFSServer::_LoadSettings() 929 931 930 932 // if existing load the settings 931 933 BEntry bEntry; 932 if (FDManager::SetEntry(&bEntry, filePath.Path()) == B_OK933 &&bEntry.Exists()) {934 if (FDManager::SetEntry(&bEntry, filePath.Path()) != B_OK 935 || !bEntry.Exists()) { 934 936 return B_ENTRY_NOT_FOUND; 935 937 } 936 938 -
src/add-ons/kernel/file_systems/netfs/server/NetFSServer.h
diff --git a/src/add-ons/kernel/file_systems/netfs/server/NetFSServer.h b/src/add-ons/kernel/file_systems/netfs/server/NetFSServer.h index 5348bc4..c90b36c 100644
a b private: 87 87 thread_id fConnectionListenerThread; 88 88 thread_id fConnectionDeleter; 89 89 thread_id fBroadcaster; 90 vint32 fBroadcastingSocket;90 int32 fBroadcastingSocket; 91 91 sem_id fBroadcasterSemaphore; 92 92 thread_id fServerInfoConnectionListener; 93 vint32 fServerInfoConnectionListenerSocket;94 vint32 fServerInfoUpdated;93 int32 fServerInfoConnectionListenerSocket; 94 int32 fServerInfoUpdated; 95 95 bool fUseBroadcasting; 96 96 volatile bool fTerminating; 97 97 }; -
src/add-ons/kernel/file_systems/netfs/shared/NetAddress.cpp
diff --git a/src/add-ons/kernel/file_systems/netfs/shared/NetAddress.cpp b/src/add-ons/kernel/file_systems/netfs/shared/NetAddress.cpp index 33d8d53..d68bea0 100644
a b NetAddressResolver::_Unlock() 301 301 NetAddressResolver::Resolver* volatile NetAddressResolver::sResolver = NULL; 302 302 303 303 // sLockCounter 304 vint32 NetAddressResolver::sLockCounter = 0;304 int32 NetAddressResolver::sLockCounter = 0; -
src/add-ons/kernel/file_systems/userlandfs/kernel_add_on/Settings.cpp
diff --git a/src/add-ons/kernel/file_systems/userlandfs/kernel_add_on/Settings.cpp b/src/add-ons/kernel/file_systems/userlandfs/kernel_add_on/Settings.cpp index 7f675ad..b49f289 100644
a b 4 4 5 5 #include <stdlib.h> 6 6 7 #include <FindDirectory.h> 7 8 #include <driver_settings.h> 8 9 9 10 #include "Debug.h" … … 13 14 14 15 using std::nothrow; 15 16 16 static const char *kFSName = "userlandfs"; 17 #include <stdio.h> 18 // since only one instance of each fs wil be installed 19 // (under ordinary conditions, anyway) 20 // it probably doesn't matter what order we search in 21 static const directory_which kDirectories[] = { 22 B_USER_NONPACKAGED_DATA_DIRECTORY, 23 B_USER_DATA_DIRECTORY, 24 B_SYSTEM_NONPACKAGED_DATA_DIRECTORY, 25 B_SYSTEM_DATA_DIRECTORY 26 }; 27 static const char *kFSSubpath = "/userlandfs/file_systems/"; 17 28 18 29 // IOCtlInfoMap 19 30 struct Settings::IOCtlInfoMap : public HashMap<HashKey32<int>, IOCtlInfo*> { … … Settings::SetTo(const char* fsName) 163 174 fIOCtlInfos = new(nothrow) IOCtlInfoMap; 164 175 if (!fIOCtlInfos) 165 176 RETURN_ERROR(B_NO_MEMORY); 166 // load the driver settings and find the entry for the FS 167 void *settings = load_driver_settings(kFSName); 168 const driver_parameter *fsParameter = NULL; 169 const driver_settings *ds = get_driver_settings(settings); 170 if (!ds) 171 RETURN_ERROR(B_ENTRY_NOT_FOUND); 172 fsParameter = _FindFSParameter(ds, fsName); 173 // init the object and unload the settings 174 status_t error = B_OK; 175 if (fsParameter) 176 _Init(ds, fsParameter); 177 else 178 error = B_ENTRY_NOT_FOUND; 179 unload_driver_settings(settings); 180 return B_OK; 177 178 // load the driver settings for the FS 179 char path[B_PATH_NAME_LENGTH]; 180 for (size_t i = 0; i < sizeof(kDirectories) / sizeof(kDirectories[0]); 181 i++) { 182 if (find_directory(kDirectories[i], -1, false, (char*)&path, 183 B_PATH_NAME_LENGTH) != B_OK) { 184 continue; 185 } 186 187 // construct the path within the directory 188 strcpy((char*)&path + strlen((char*)&path), kFSSubpath); 189 strcpy((char*)&path + strlen((char*)&path), fsName); 190 191 // load the file at the constructed path 192 void *settings = load_driver_settings((char*)&path); 193 if (!settings) 194 continue; 195 196 // get the settings from the loaded file 197 const driver_settings *ds = get_driver_settings(settings); 198 if (!ds) { 199 unload_driver_settings(settings); 200 continue; 201 } 202 203 // get the parameter from the settings 204 const driver_parameter *fsParameter = NULL; 205 fsParameter = _FindFSParameter(ds, fsName); 206 207 // init the object and unload the settings 208 if (fsParameter) 209 _Init(ds, fsParameter); 210 unload_driver_settings(settings); 211 212 // if we found the parameter, we're done 213 if (fsParameter) 214 return B_OK; 215 } 216 217 // if we get here, we did not find the parameter 218 return B_ENTRY_NOT_FOUND; 181 219 } 182 220 183 221 // Unset -
new file src/data/package_infos/generic/netfs
diff --git a/src/data/package_infos/generic/netfs b/src/data/package_infos/generic/netfs new file mode 100644 index 0000000..eba3b7a
- + 1 name netfs 2 version %HAIKU_VERSION% 3 architecture %HAIKU_PACKAGING_ARCH% 4 summary "NetFS" 5 6 description "The package contains the NetFS add-on and servers." 7 8 packager "The Haiku build system" 9 vendor "Haiku Project" 10 11 copyrights "2001-2014 Haiku, Inc. et al" 12 licenses "MIT" 13 14 provides { 15 netfs = %HAIKU_VERSION% compat >= R1~alpha1 16 } 17 18 requires { 19 userlandfs 20 } -
new file src/data/package_infos/generic/userlandfs
diff --git a/src/data/package_infos/generic/userlandfs b/src/data/package_infos/generic/userlandfs new file mode 100644 index 0000000..5f7e0ff
- + 1 name userlandfs 2 version %HAIKU_VERSION% 3 architecture %HAIKU_PACKAGING_ARCH% 4 summary "UserlandFS" 5 6 description "The package contains the UserlandFS add-on and server." 7 8 packager "The Haiku build system" 9 vendor "Haiku Project" 10 11 copyrights "2001-2014 Haiku, Inc. et al" 12 licenses "MIT" 13 14 provides { 15 userlandfs = %HAIKU_VERSION% compat >= R1~alpha1 16 } -
new file src/data/package_infos/generic/userlandfs_devel
diff --git a/src/data/package_infos/generic/userlandfs_devel b/src/data/package_infos/generic/userlandfs_devel new file mode 100644 index 0000000..0587dda
- + 1 name userlandfs_devel 2 version %HAIKU_VERSION% 3 architecture %HAIKU_PACKAGING_ARCH% 4 summary "UserlandFS development files" 5 6 description "The package contains all files associated with UserlandFS 7 needed for development, like static libraries, library symlinks, 8 header files, etc." 9 10 packager "The Haiku build system" 11 vendor "Haiku Project" 12 13 copyrights "2001-2014 Haiku, Inc. et al" 14 licenses "MIT" 15 16 provides { 17 userlandfs_devel = %HAIKU_VERSION% compat >= R1~alpha1 18 } 19 20 requires { 21 userlandfs == %HAIKU_VERSION% base 22 haiku_devel 23 }