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 jalopeura, 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 =  
    66    HaikuUserguide
    77    HaikuWelcome
    88    MakefileEngine
     9    UserlandFS
     10    NetFS
    911    ;
    1012
    1113if $(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 ] {  
    184184
    185185# NetFS network file system
    186186if [ 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 ;
    214188}
    215189
    216190
    217191# UserlandFS
    218192if [ 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    }
    267204}
    268205
    269206
  • 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
    - +  
     1local netfsPackage = netfs.hpkg ;
     2HaikuPackage $(netfsPackage) ;
     3
     4# userlandfs module
     5AddFilesToPackage add-ons userlandfs : netfs ;
     6
     7# servers
     8AddFilesToPackage servers : netfs_server ;
     9AddFilesToPackage servers : authentication_server ;
     10
     11# tools
     12AddFilesToPackage bin : netfs_config ;
     13AddFilesToPackage bin : netfs_server_prefs ;
     14AddFilesToPackage bin
     15    : [ FDirName $(HAIKU_TOP) src add-ons kernel file_systems netfs netfs_mount ] ;
     16
     17# interface definition
     18AddFilesToPackage data userlandfs file_systems
     19    : [ FDirName $(HAIKU_TOP) src add-ons kernel file_systems netfs netfs-interface-definition ]
     20    : netfs ;
     21
     22# docs
     23AddFilesToPackage documentation add-ons :
     24    [ FDirName $(HAIKU_TOP) docs add-ons NetFS.html ] : NetFS.html ;
     25
     26BuildHaikuPackage $(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
    - +  
     1local arch = $(TARGET_ARCH) ;
     2local abi = gcc$(TARGET_GCC_VERSION_$(TARGET_PACKAGING_ARCH)[1]) ;
     3
     4#
     5# main package
     6#
     7
     8local userlandfsPackage = userlandfs.hpkg ;
     9HaikuPackage $(userlandfsPackage) ;
     10
     11# kernel module
     12AddFilesToPackage add-ons kernel file_systems  : userlandfs ;
     13
     14# server
     15AddFilesToPackage servers : userlandfs_server ;
     16
     17# libs
     18local userlandfsLibs =
     19    libuserlandfs_beos_kernel.so
     20    libuserlandfs_haiku_kernel.so
     21    libuserlandfs_fuse.so
     22;
     23AddFilesToPackage lib : $(userlandfsLibs) ;
     24
     25BuildHaikuPackage $(userlandfsPackage) : userlandfs ;
     26
     27#
     28# development package
     29#
     30
     31local userlandfsDevelPackage = userlandfs_devel.hpkg ;
     32HaikuPackage $(userlandfsDevelPackage) ;
     33
     34# library symlinks
     35local lib ;
     36for lib in $(userlandfsLibs) {
     37    AddSymlinkToPackage develop abi $(arch) $(abi) lib : /system/lib/$(lib:BS) ;
     38}
     39
     40# FUSE headers
     41local 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 ;
     50fuseHeaders = $(fuseHeaders:G=userlandfs!fuse) ;
     51SEARCH on $(fuseHeaders)
     52    = [ FDirName $(HAIKU_TOP) headers private userlandfs fuse ] ;
     53AddFilesToPackage develop headers userlandfs fuse : $(fuseHeaders) ;
     54
     55BuildHaikuPackage $(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 =  
    1515    haiku_userguide
    1616    haiku_welcome
    1717    makefile_engine
     18    userlandfs
     19    userlandfs_devel
     20    netfs
    1821
    1922    haiku_$(secondaryArchs)
    2023    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<!--
     2If you move this file, you must update the package rules file at
     3build/jam/packages/NetFS to reflect the new location. Otherwise the package will
     4not 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}
     17span.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
     38identified by host name. Inside the folder for each server are the shares on
     39that 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
     66possible 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
     73to create a user who can access those folders, optionally with a password.</p>
     74
     75<pre class="code">
     76$ netfs_server_prefs add user &lt;name&gt; [&lt;password&gt;]
     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 &lt;name&gt; &lt;path&gt;
     83$ netfs_server_prefs permissions &lt;user&gt; &lt;share&gt; <flags>
     84</pre>
     85
     86<p><span class="code">name</span> is the name that will appear to clients when
     87they 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
     89class="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
     98remove 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
     109damaged, the server will use a fallback settings file, which has a text-based
     110format. This file must be located at <span
     111class="code">/boot/home/config/settings/netfs/netfs_server_fallback</span>. (If
     112neither the main settings file nor the fallback settings file can be loaded, the
     113server 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
     119user bonefish {
     120    password    password
     121}
     122
     123# user without a password
     124user anonymous
     125
     126# shares
     127share ttttt {
     128    path /boot/home/Desktop/ttttt
     129    user bonefish {
     130        permissions mount query read write
     131    }
     132}
     133
     134share 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:  
    138138    ServerManager*      fServerManager;
    139139    ExtendedServerInfo* fOldServerInfo;
    140140    ExtendedServerInfo* fServerInfo;
    141     vint32              fFD;
     141    int32               fFD;
    142142    bool                fUpdate;
    143143    bool                fSuccess;
    144144};
  • 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:  
    4848            Locker              fLock;
    4949            ServerInfoMap*      fServerInfos;
    5050            thread_id           fBroadcastListener;
    51             vint32              fBroadcastListenerSocket;
     51            int32               fBroadcastListenerSocket;
    5252            Listener*           fListener;
    5353            volatile bool       fTerminating;
    5454};
  • 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:  
    2020            status_t            GetPeerAddress(NetAddress *address) const;
    2121
    2222private:
    23             vint32              fSocket;
     23            int32               fSocket;
    2424            bool                fClosed;
    2525};
    2626
  • 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:  
    6666            Resolver*           fResolver;
    6767
    6868    static  Resolver* volatile  sResolver;
    69     static  vint32              sLockCounter;
     69    static  int32               sLockCounter;
    7070};
    7171
    7272#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:  
    4141            bool                fOwnsRequestHandler;
    4242            DownStreamThread*   fThreads;
    4343            int32               fThreadCount;
    44             vint32              fTerminationCount;
     44            int32               fTerminationCount;
    4545};
    4646
    4747#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); }  
    2424*/
    2525static inline
    2626void
    27 safe_closesocket(vint32& socketVar)
     27safe_closesocket(int32& socketVar)
    2828{
    2929    int32 socket = atomic_or(&socketVar, -1);
    3030#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
     5file_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 &
     2mkdir /network
     3mount -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:  
    193193            thread_id           fNodeMonitoringProcessor;
    194194            Locker              fLock;
    195195            int32               fReferenceCount;
    196             vint32              fInitialized;
     196            int32               fInitialized;
    197197            bool                fClosed;
    198198            bool                fError;
    199199            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()  
    520520}
    521521
    522522// sNextVolumeID
    523 vint32 ClientVolume::sNextVolumeID = 0;
     523int32 ClientVolume::sNextVolumeID = 0;
    524524
    525525
    526526// #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:  
    109109            Permissions         fSharePermissions;
    110110            bool                fMounted;
    111111
    112     static  vint32              sNextVolumeID;
     112    static  int32               sNextVolumeID;
    113113};
    114114
    115115// 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:  
    2727                                    User** user);
    2828
    2929private:
    30             vint32              fSocket;
     30            int32               fSocket;
    3131};
    3232
    3333#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  
    4040#include "Utils.h"
    4141#include "VolumeManager.h"
    4242
    43 static const char* kSettingsDirName     = "netfs";
    44 static const char* kSettingsFileName    = "netfs_server";
     43static const char* kSettingsDirName             = "netfs";
     44static const char* kSettingsFileName            = "netfs_server";
     45static const char* kFallbackSettingsFileName    = "netfs_server_fallback";
    4546
    4647// usage
    4748static const char* kUsage =
    NetFSServer::_LoadSecurityContext(SecurityContext** _securityContext)  
    796797    }
    797798    ObjectDeleter<SecurityContext> securityContextDeleter(securityContext);
    798799
    799     // load from driver settings for the time being
     800    // load the fallback settings, if present
     801    BPath path;
    800802    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(&parameter);) {
    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(&parameter);) {
    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(&parameter);) {
     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);
    839821        }
    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(&parameter);) {
     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");
    851831                continue;
    852832            }
    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);
    857839                continue;
    858840            }
    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());
    875883                }
    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());
    882884            }
    883885        }
    884886    }
    NetFSServer::_LoadSettings()  
    929931
    930932    // if existing load the settings
    931933    BEntry bEntry;
    932     if (FDManager::SetEntry(&bEntry, filePath.Path()) == B_OK
    933         && bEntry.Exists()) {
     934    if (FDManager::SetEntry(&bEntry, filePath.Path()) != B_OK
     935        || !bEntry.Exists()) {
    934936        return B_ENTRY_NOT_FOUND;
    935937    }
    936938
  • 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:  
    8787            thread_id           fConnectionListenerThread;
    8888            thread_id           fConnectionDeleter;
    8989            thread_id           fBroadcaster;
    90             vint32              fBroadcastingSocket;
     90            int32               fBroadcastingSocket;
    9191            sem_id              fBroadcasterSemaphore;
    9292            thread_id           fServerInfoConnectionListener;
    93             vint32              fServerInfoConnectionListenerSocket;
    94             vint32              fServerInfoUpdated;
     93            int32               fServerInfoConnectionListenerSocket;
     94            int32               fServerInfoUpdated;
    9595            bool                fUseBroadcasting;
    9696            volatile bool       fTerminating;
    9797};
  • 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()  
    301301NetAddressResolver::Resolver* volatile NetAddressResolver::sResolver = NULL;
    302302
    303303// sLockCounter
    304 vint32 NetAddressResolver::sLockCounter = 0;
     304int32 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  
    44
    55#include <stdlib.h>
    66
     7#include <FindDirectory.h>
    78#include <driver_settings.h>
    89
    910#include "Debug.h"
     
    1314
    1415using std::nothrow;
    1516
    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
     21static 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};
     27static const char *kFSSubpath = "/userlandfs/file_systems/";
    1728
    1829// IOCtlInfoMap
    1930struct Settings::IOCtlInfoMap : public HashMap<HashKey32<int>, IOCtlInfo*> {
    Settings::SetTo(const char* fsName)  
    163174    fIOCtlInfos = new(nothrow) IOCtlInfoMap;
    164175    if (!fIOCtlInfos)
    165176        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;
    181219}
    182220
    183221// 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
    - +  
     1name            netfs
     2version         %HAIKU_VERSION%
     3architecture    %HAIKU_PACKAGING_ARCH%
     4summary         "NetFS"
     5
     6description     "The package contains the NetFS add-on and servers."
     7
     8packager        "The Haiku build system"
     9vendor          "Haiku Project"
     10
     11copyrights      "2001-2014 Haiku, Inc. et al"
     12licenses        "MIT"
     13
     14provides {
     15    netfs = %HAIKU_VERSION% compat >= R1~alpha1
     16}
     17
     18requires {
     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
    - +  
     1name            userlandfs
     2version         %HAIKU_VERSION%
     3architecture    %HAIKU_PACKAGING_ARCH%
     4summary         "UserlandFS"
     5
     6description     "The package contains the UserlandFS add-on and server."
     7
     8packager        "The Haiku build system"
     9vendor          "Haiku Project"
     10
     11copyrights      "2001-2014 Haiku, Inc. et al"
     12licenses        "MIT"
     13
     14provides {
     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
    - +  
     1name            userlandfs_devel
     2version         %HAIKU_VERSION%
     3architecture    %HAIKU_PACKAGING_ARCH%
     4summary         "UserlandFS development files"
     5
     6description     "The package contains all files associated with UserlandFS
     7needed for development, like static libraries, library symlinks,
     8header files, etc."
     9
     10packager        "The Haiku build system"
     11vendor          "Haiku Project"
     12
     13copyrights      "2001-2014 Haiku, Inc. et al"
     14licenses        "MIT"
     15
     16provides {
     17    userlandfs_devel = %HAIKU_VERSION% compat >= R1~alpha1
     18}
     19
     20requires {
     21    userlandfs == %HAIKU_VERSION% base
     22    haiku_devel
     23}