The branch, master has been updated via 9788e92bf12 build: Ensure that SAMBA_GENERATOR() tasks fail on error via 6f96bb40e79 docs: Show current system path for smb.conf in &smb.conf entity via 45094bd8913 docs-xml: Use &pathconfig.WINBINDD_SOCKET_DIR; to avoid reference to old /tmp/.winbindd via f3de9f6c2e0 build: Allow &pathconfig XML entities to be used in all manpages, not just smb.conf from f68374aac54 lib:cmdline: Fix error handling of --client-protection=sign|encrypt|off
https://git.samba.org/?p=samba.git;a=shortlog;h=master - Log ----------------------------------------------------------------- commit 9788e92bf1251b4791ca84e83aa9437101e7d436 Author: Andrew Bartlett <abart...@samba.org> Date: Tue Jun 21 19:23:26 2022 +1200 build: Ensure that SAMBA_GENERATOR() tasks fail on error Previously the error from inside the shell was eaten. This showed up particularly as a failure to notice errors when running xsltproc to build the manpages. Signed-off-by: Andrew Bartlett <abart...@samba.org> Reviewed-by: Andreas Schneider <a...@samba.org> Autobuild-User(master): Andreas Schneider <a...@cryptomilk.org> Autobuild-Date(master): Wed Jun 22 16:43:30 UTC 2022 on sn-devel-184 commit 6f96bb40e79574af2cd5579557c196be07b5c9f2 Author: Andrew Bartlett <abart...@samba.org> Date: Tue Jun 21 11:44:04 2022 +1200 docs: Show current system path for smb.conf in &smb.conf entity Signed-off-by: Andrew Bartlett <abart...@samba.org> Reviewed-by: Andreas Schneider <a...@samba.org> commit 45094bd891318f650ac5f0a1bb88e9cbb08729fd Author: Andrew Bartlett <abart...@samba.org> Date: Mon Jun 20 14:35:19 2022 +1200 docs-xml: Use &pathconfig.WINBINDD_SOCKET_DIR; to avoid reference to old /tmp/.winbindd We can now write docs that follow how the software on this system was built, which is much less confusing for users. Also /tmp/.winbindd has not been used for a long time. BUG: https://bugzilla.samba.org/show_bug.cgi?id=15101 Signed-off-by: Andrew Bartlett <abart...@samba.org> Reviewed-by: Andreas Schneider <a...@samba.org> commit f3de9f6c2e004caab3c410b70c9a7424d5dc8627 Author: Andrew Bartlett <abart...@samba.org> Date: Mon Jun 20 14:34:05 2022 +1200 build: Allow &pathconfig XML entities to be used in all manpages, not just smb.conf BUG: https://bugzilla.samba.org/show_bug.cgi?id=15101 Signed-off-by: Andrew Bartlett <abart...@samba.org> Reviewed-by: Andreas Schneider <a...@samba.org> ----------------------------------------------------------------------- Summary of changes: buildtools/wafsamba/wafsamba.py | 13 ++++++-- docs-xml/Makefile | 10 ++++-- docs-xml/build/DTD/samba-doc | 5 +++ docs-xml/build/DTD/samba.entities | 2 +- ...-file-list.sh => generate-pathconf-entities.sh} | 24 +++------------ docs-xml/manpages/idmap_hash.8.xml | 2 +- docs-xml/manpages/idmap_ldap.8.xml | 2 +- docs-xml/manpages/idmap_script.8.xml | 2 +- docs-xml/manpages/libsmbclient.7.xml | 2 +- docs-xml/manpages/net.8.xml | 20 ++++++------ docs-xml/manpages/winbindd.8.xml | 35 +++++++++++++-------- docs-xml/smbdotconf/generate-file-list.sh | 24 +++------------ docs-xml/wscript_build | 36 +++++++++++++++++----- 13 files changed, 98 insertions(+), 79 deletions(-) copy docs-xml/{smbdotconf/generate-file-list.sh => generate-pathconf-entities.sh} (80%) Changeset truncated at 500 lines: diff --git a/buildtools/wafsamba/wafsamba.py b/buildtools/wafsamba/wafsamba.py index 79fe8b5e575..79f352878a8 100644 --- a/buildtools/wafsamba/wafsamba.py +++ b/buildtools/wafsamba/wafsamba.py @@ -913,12 +913,19 @@ def SAMBA_GENERATOR(bld, name, rule, source='', target='', dep_vars.append('ruledeps') dep_vars.append('SAMBA_GENERATOR_VARS') + shell=isinstance(rule, str) + + # This ensures that if the command (executed in the shell) fails + # (returns non-zero), the build fails + if shell: + rule = "set -e; " + rule + bld.SET_BUILD_GROUP(group) t = bld( rule=rule, source=bld.EXPAND_VARIABLES(source, vars=vars), + shell=shell, target=target, - shell=isinstance(rule, str), update_outputs=True, before='c', ext_out='.c', @@ -1180,10 +1187,10 @@ def SAMBAMANPAGES(bld, manpages, extra_source=None): source = [m + '.xml'] if extra_source is not None: source = [source, extra_source] - # ${SRC[1]} and ${SRC[2]} are not referenced in the + # ${SRC[1]}, ${SRC[2]} and ${SRC[3]} are not referenced in the # SAMBA_GENERATOR but trigger the dependency calculation so # ensures that manpages are rebuilt when these change. - source += ['build/DTD/samba.entities', 'build/DTD/samba.build.version'] + source += ['build/DTD/samba.build.pathconfig', 'build/DTD/samba.entities', 'build/DTD/samba.build.version'] bld.SAMBA_GENERATOR(m, source=source, target=m, diff --git a/docs-xml/Makefile b/docs-xml/Makefile index c614097f6c0..ae50b14d79a 100644 --- a/docs-xml/Makefile +++ b/docs-xml/Makefile @@ -17,7 +17,7 @@ DBLATEX_OPTIONS = -p xslt/latex.xsl -i xslt/latex DATETIME := $(shell date +%Y%m%d%H%M%S) -XSLTPROC_DEPS = build/catalog.xml build/DTD/samba.build.version +XSLTPROC_DEPS = build/catalog.xml build/DTD/samba.build.version build/DTD/samba.build.pathconfig ifeq ($(PROFILE), Y) XSLTPROC += --profile --load-trace --timing @@ -57,6 +57,7 @@ clean:: rm -f xslt/figures/*pdf rm -f $(SMBDOTCONFDOC)/parameters.*.xml rm -f build/catalog.xml + rm -f DTD/samba.build.pathconfig # Output format targets pdf:: $(patsubst %,$(PDFDIR)/%.pdf,$(MAIN_DOCS)) @@ -177,13 +178,18 @@ $(MANPAGEDIR)/smb.conf.5.xml: parameters # the parameters xml files. Otherwise, when parameters.*.xml does not exist # yet, the parameters are not generated when smb.conf.5.xml is newer than # any smbdotconf/*/*.xml file ... -.PHONY: parameters +.PHONY: parameters pathconf parameters: $(SMBDOTCONFDOC)/parameters.all.xml +pathconf: build/DTD/samba.build.pathconfig + $(SMBDOTCONFDOC)/parameters.all.xml: $(wildcard $(SMBDOTCONFDOC)/*/*.xml) $(SMBDOTCONFDOC)/generate-file-list.sh $(SMBDOTCONFDOC)/generate-file-list.sh $(SMBDOTCONFDOC) > $@ +build/DTD/samba.build.pathconfig: generate-pathconf-entities.sh + ./generate-pathconf-entities.sh > $@ + $(OUTPUTDIR): test -d $@ || mkdir $@ diff --git a/docs-xml/build/DTD/samba-doc b/docs-xml/build/DTD/samba-doc index 9873aa03458..e4a52789257 100644 --- a/docs-xml/build/DTD/samba-doc +++ b/docs-xml/build/DTD/samba-doc @@ -28,6 +28,11 @@ "http://www.samba.org/samba/LOCAL.BUILDDIR.DTD/samba.build.version"> %samba.build.version; +<!ENTITY % samba.build.pathconfig PUBLIC + "-//Samba-Team//VERSION Samba Build Version//EN" + "http://www.samba.org/samba/LOCAL.BUILDDIR.DTD/samba.build.pathconfig"> +%samba.build.pathconfig; + <!-- smb.conf options --> <!ELEMENT smbconfblock ((smbconfoption|smbconfsection|smbconfcomment)*)> diff --git a/docs-xml/build/DTD/samba.entities b/docs-xml/build/DTD/samba.entities index 15a5ba83fb9..bba0c2c396b 100644 --- a/docs-xml/build/DTD/samba.entities +++ b/docs-xml/build/DTD/samba.entities @@ -896,7 +896,7 @@ <!ENTITY smbd '<application>smbd</application>'> <!ENTITY nmbd '<application>nmbd</application>'> <!ENTITY testparm '<application>testparm</application>'> -<!ENTITY smb.conf '<filename>smb.conf</filename>'> +<!ENTITY smb.conf '<filename>&pathconfig.CONFIGFILE;</filename>'> <!ENTITY smbclient '<application>smbclient</application>'> <!ENTITY winbindd '<application>winbindd</application>'> <!ENTITY net '<application>net</application>'> diff --git a/docs-xml/smbdotconf/generate-file-list.sh b/docs-xml/generate-pathconf-entities.sh similarity index 80% copy from docs-xml/smbdotconf/generate-file-list.sh copy to docs-xml/generate-pathconf-entities.sh index 27c9c5b753e..6c0c31a3522 100755 --- a/docs-xml/smbdotconf/generate-file-list.sh +++ b/docs-xml/generate-pathconf-entities.sh @@ -1,10 +1,9 @@ -#!/bin/sh -# + # This is the fallback table for when we use the docs-xml build # system. When build as part of the main waf build, these are set to # the full correct path for the system. # -echo "<!DOCTYPE section [ +echo " <!ENTITY pathconfig.SCRIPTSBINDIR '\${prefix}/sbin'> <!ENTITY pathconfig.LOCKDIR '\${prefix}/var/lock'> <!ENTITY pathconfig.NCALRPCDIR '\${prefix}/var/run/ncalrpc'> @@ -18,20 +17,5 @@ echo "<!DOCTYPE section [ <!ENTITY pathconfig.NTP_SIGND_SOCKET_DIR '\${prefix}/var/lib/ntp_signd'> <!ENTITY pathconfig.MITKDCPATH '\${prefix}/sbin/krb5kdc'> <!ENTITY pathconfig.SAMBA_DATADIR '\${prefix}/var/samba'> -]>" - -DIR=. -if [ "x$1" != "x" ]; then - DIR="$1" -fi - -OLD=$(pwd) -cd $DIR - -echo "<section>" -for I in $(find . -mindepth 2 -type f -name '*.xml' | sort -t/ -k3 | xargs); do - cat $I -done -echo "</section>" - -cd $OLD +<!ENTITY pathconfig.CONFIGFILE '\${prefix}/etc/smb.conf'> +" diff --git a/docs-xml/manpages/idmap_hash.8.xml b/docs-xml/manpages/idmap_hash.8.xml index fd3a2d68240..03ff02a486b 100644 --- a/docs-xml/manpages/idmap_hash.8.xml +++ b/docs-xml/manpages/idmap_hash.8.xml @@ -25,7 +25,7 @@ This plugin also implements the nss_info API and can be used to support a local name mapping files if enabled via the "winbind normalize names" and "winbind nss info" - parameters in smb.conf. + parameters in &smb.conf;. The module divides the range into subranges for each domain that is being handled by the idmap config. diff --git a/docs-xml/manpages/idmap_ldap.8.xml b/docs-xml/manpages/idmap_ldap.8.xml index 0601f6164cc..80f272d3fa3 100644 --- a/docs-xml/manpages/idmap_ldap.8.xml +++ b/docs-xml/manpages/idmap_ldap.8.xml @@ -41,7 +41,7 @@ <listitem><para> Defines the directory base suffix to use for SID/uid/gid mapping entries. If not defined, idmap_ldap will default - to using the "ldap idmap suffix" option from smb.conf. + to using the "ldap idmap suffix" option from &smb.conf;. </para></listitem> </varlistentry> diff --git a/docs-xml/manpages/idmap_script.8.xml b/docs-xml/manpages/idmap_script.8.xml index 95afde18693..2e7f2be59fd 100644 --- a/docs-xml/manpages/idmap_script.8.xml +++ b/docs-xml/manpages/idmap_script.8.xml @@ -60,7 +60,7 @@ <para> The tdb2 idmap backend supports an external program for performing id mappings - through the smb.conf option <parameter>idmap config * : script</parameter> or + through the &smb.conf; option <parameter>idmap config * : script</parameter> or its deprecated legacy form <parameter>idmap : script</parameter>. </para> diff --git a/docs-xml/manpages/libsmbclient.7.xml b/docs-xml/manpages/libsmbclient.7.xml index 8dab4d06cba..a08a4ae95ce 100644 --- a/docs-xml/manpages/libsmbclient.7.xml +++ b/docs-xml/manpages/libsmbclient.7.xml @@ -93,7 +93,7 @@ When libsmbclient is invoked by an application it searches for a directory called <filename>.smb</filename> in the $HOME directory that is specified in the users shell environment. It then searches for a file called <filename>smb.conf</filename> which, - if present, will fully over-ride the system <filename>/etc/samba/smb.conf</filename> file. If + if present, will fully over-ride the system &smb.conf; file. If instead libsmbclient finds a file called <filename>~/.smb/smb.conf.append</filename>, it will read the system <filename>/etc/samba/smb.conf</filename> and then append the contents of the <filename>~/.smb/smb.conf.append</filename> to it. diff --git a/docs-xml/manpages/net.8.xml b/docs-xml/manpages/net.8.xml index 5a37119aa20..557cf0d0883 100644 --- a/docs-xml/manpages/net.8.xml +++ b/docs-xml/manpages/net.8.xml @@ -2111,7 +2111,7 @@ commands. </para> <para> -To set this up, first set up your smb.conf by adding to the [global] section: +To set this up, first set up your &smb.conf; by adding to the [global] section: usershare path = /usr/local/samba/lib/usershares @@ -2126,7 +2126,7 @@ which means that a file in that directory can be renamed or deleted only by the owner of the file). Finally, tell smbd how many usershares you will allow by adding to the [global] -section of smb.conf a line such as : +section of &smb.conf; a line such as : usershare max shares = 100. @@ -2154,7 +2154,7 @@ Add or replace a new user defined share, with name "sharename". <para> "path" specifies the absolute pathname on the system to be exported. -Restrictions may be put on this, see the global smb.conf parameters: +Restrictions may be put on this, see the global &smb.conf; parameters: "usershare owner only", "usershare prefix allow list", and "usershare prefix deny list". </para> @@ -2166,7 +2166,7 @@ on the share when browsed to by a client. <para>The optional "acl" field specifies which users have read and write access to the entire share. -Note that guest connections are not allowed unless the smb.conf parameter +Note that guest connections are not allowed unless the &smb.conf; parameter "usershare allow guests" has been set. The definition of a user defined share acl is: "user:permission", where user is a valid username on the system and permission can be "F", "R", or "D". @@ -2184,9 +2184,9 @@ authenticated user has read-only access. <para> The optional "guest_ok" has the same effect as the parameter of the -same name in smb.conf, in that it allows guest access to this user +same name in &smb.conf;, in that it allows guest access to this user defined share. This parameter is only allowed if the global parameter -"usershare allow guests" has been set to true in the smb.conf. +"usershare allow guests" has been set to true in the &smb.conf;. </para> There is no separate command to modify an existing user defined share, @@ -2268,7 +2268,7 @@ by enabling the RPC conf mode and specifying the address of the remote server. <para> The deployment of this configuration data can be activated in two levels from the -<emphasis>smb.conf</emphasis> file: Share definitions from registry are +<emphasis>&smb.conf;</emphasis> file: Share definitions from registry are activated by setting <parameter>registry shares</parameter> to <quote>yes</quote> in the [global] section and global configuration options are activated by setting <smbconfoption name="include">registry</smbconfoption> in @@ -2721,7 +2721,7 @@ win32 eventlog files (usually *.evt). evt files are used by the native Windows e <para> The import and export of evt files can only succeed when <parameter>eventlog list</parameter> is used in -<emphasis>smb.conf</emphasis> file. +<emphasis>&smb.conf;</emphasis> file. See the <citerefentry><refentrytitle>smb.conf</refentrytitle> <manvolnum>5</manvolnum></citerefentry> manpage for details. </para> @@ -2750,7 +2750,7 @@ Prints a eventlog *.evt file to standard output. Imports a eventlog *.evt file defined by <replaceable>filename</replaceable> into the samba internal tdb representation of eventlog defined by <replaceable>eventlog</replaceable>. <replaceable>eventlog</replaceable> needs to part of the <parameter>eventlog list</parameter> -defined in smb.conf. +defined in &smb.conf;. See the <citerefentry><refentrytitle>smb.conf</refentrytitle> <manvolnum>5</manvolnum></citerefentry> manpage for details. </para> @@ -2763,7 +2763,7 @@ See the <citerefentry><refentrytitle>smb.conf</refentrytitle> <manvolnum>5</manv Exports the samba internal tdb representation of eventlog defined by <replaceable>eventlog</replaceable> to a eventlog *.evt file defined by <replaceable>filename</replaceable>. <replaceable>eventlog</replaceable> needs to part of the <parameter>eventlog list</parameter> -defined in smb.conf. +defined in &smb.conf;. See the <citerefentry><refentrytitle>smb.conf</refentrytitle> <manvolnum>5</manvolnum></citerefentry> manpage for details. </para> diff --git a/docs-xml/manpages/winbindd.8.xml b/docs-xml/manpages/winbindd.8.xml index 7a643b8879c..e60bd655ec0 100644 --- a/docs-xml/manpages/winbindd.8.xml +++ b/docs-xml/manpages/winbindd.8.xml @@ -432,28 +432,36 @@ auth required /lib/security/pam_unix.so \ </varlistentry> <varlistentry> - <term>/tmp/.winbindd/pipe</term> + <term>&pathconfig.WINBINDD_SOCKET_DIR;/pipe</term> <listitem><para>The UNIX pipe over which clients communicate with the <command>winbindd</command> program. For security reasons, the winbind client will only attempt to connect to the winbindd daemon - if both the <filename>/tmp/.winbindd</filename> directory - and <filename>/tmp/.winbindd/pipe</filename> file are owned by - root. </para></listitem> + if both the <filename>&pathconfig.WINBINDD_SOCKET_DIR;</filename> directory + and <filename>&pathconfig.WINBINDD_SOCKET_DIR;/pipe</filename> file are owned by + root. </para> + + <para><smbconfoption name="winbindd socket directory"/> + overrides this default.</para> + + </listitem> </varlistentry> <varlistentry> - <term>$LOCKDIR/winbindd_privileged/pipe</term> + <term>$STATEDIR/winbindd_privileged/pipe</term> <listitem><para>The UNIX pipe over which 'privileged' clients communicate with the <command>winbindd</command> program. For security reasons, access to some winbindd functions - like those needed by the <command>ntlm_auth</command> utility - is restricted. By default, only users in the 'root' group will get this access, however the administrator - may change the group permissions on $LOCKDIR/winbindd_privileged to allow + may change the group permissions on $STATEDIR/winbindd_privileged to allow programs like 'squid' to use ntlm_auth. Note that the winbind client will only attempt to connect to the winbindd daemon - if both the <filename>$LOCKDIR/winbindd_privileged</filename> directory - and <filename>$LOCKDIR/winbindd_privileged/pipe</filename> file are owned by - root. </para></listitem> + if both the <filename>$STATEDIR/winbindd_privileged</filename> directory + and <filename>$STATEDIR/winbindd_privileged/pipe</filename> file are owned by + root. </para> + <para><smbconfoption name="state dir"/> controls what + $STATEDIR refers to.</para> + </listitem> </varlistentry> <varlistentry> @@ -463,11 +471,12 @@ auth required /lib/security/pam_unix.so \ </varlistentry> <varlistentry> - <term>$LOCKDIR/winbindd_idmap.tdb</term> + <term>$STATEDIR/winbindd_idmap.tdb</term> <listitem><para>Storage for the Windows NT rid to UNIX user/group - id mapping. The lock directory is specified when Samba is initially - compiled using the <parameter>--with-lockdir</parameter> option. - This directory is by default <filename>/usr/local/samba/var/locks + id mapping. The directory is specified when Samba is initially + compiled using the + <parameter>--with-statedir</parameter> option or <smbconfoption name="state dir"/>. + The default directory in this installation is <filename>&pathconfig.STATEDIR; </filename>. </para></listitem> </varlistentry> diff --git a/docs-xml/smbdotconf/generate-file-list.sh b/docs-xml/smbdotconf/generate-file-list.sh index 27c9c5b753e..dd981b3c472 100755 --- a/docs-xml/smbdotconf/generate-file-list.sh +++ b/docs-xml/smbdotconf/generate-file-list.sh @@ -1,24 +1,10 @@ #!/bin/sh # -# This is the fallback table for when we use the docs-xml build -# system. When build as part of the main waf build, these are set to -# the full correct path for the system. -# -echo "<!DOCTYPE section [ -<!ENTITY pathconfig.SCRIPTSBINDIR '\${prefix}/sbin'> -<!ENTITY pathconfig.LOCKDIR '\${prefix}/var/lock'> -<!ENTITY pathconfig.NCALRPCDIR '\${prefix}/var/run/ncalrpc'> -<!ENTITY pathconfig.PIDDIR '\${prefix}/var/run'> -<!ENTITY pathconfig.STATEDIR '\${prefix}/var/locks'> -<!ENTITY pathconfig.PRIVATE_DIR '\${prefix}/private'> -<!ENTITY pathconfig.BINDDNS_DIR '\${prefix}/bind-dns'> -<!ENTITY pathconfig.SMB_PASSWD_FILE '\${prefix}/private/smbpasswd'> -<!ENTITY pathconfig.WINBINDD_SOCKET_DIR '\${prefix}/var/run/winbindd'> -<!ENTITY pathconfig.CACHEDIR '\${prefix}/var/cache'> -<!ENTITY pathconfig.NTP_SIGND_SOCKET_DIR '\${prefix}/var/lib/ntp_signd'> -<!ENTITY pathconfig.MITKDCPATH '\${prefix}/sbin/krb5kdc'> -<!ENTITY pathconfig.SAMBA_DATADIR '\${prefix}/var/samba'> -]>" +set -e +echo "<!DOCTYPE section [" +$(dirname $0)/../generate-pathconf-entities.sh + +echo "]>" DIR=. if [ "x$1" != "x" ]; then diff --git a/docs-xml/wscript_build b/docs-xml/wscript_build index c8c4b68e514..40f55141ad8 100644 --- a/docs-xml/wscript_build +++ b/docs-xml/wscript_build @@ -116,10 +116,7 @@ vfs_module_manpages = ['vfs_acl_tdb', 'vfs_xattr_tdb', 'vfs_zfsacl' ] -def smbdotconf_generate_parameter_list(task): - parameter_all = task.outputs[0].bldpath(task.env) - articles = task.inputs - +def generate_path_entity_list(): entities = bld.pathconfig_entities() # We need this if we build with Heimdal as we can't easily make @@ -129,15 +126,24 @@ def smbdotconf_generate_parameter_list(task): if bld.CONFIG_SET('MIT_KDC_PATH'): mit_kdc_path = bld.CONFIG_GET('MIT_KDC_PATH') - t = "<!DOCTYPE section [\n" +\ - "\n".join(entities) +\ + t = "\n".join(entities) +\ "\n" +\ "<!ENTITY pathconfig.MITKDCPATH " + mit_kdc_path + ">\n" +\ + "\n" + return t + +def smbdotconf_generate_parameter_list_file(task): + parameter_all = task.outputs[0].bldpath(task.env) + articles = task.inputs + + t = "<!DOCTYPE section [\n" +\ + generate_path_entity_list() + \ "]>\n" +\ "<section>\n" +\ "".join(art.read() for art in articles) +\ "</section>\n" + save_file(parameter_all, t , create_dir=True) return 0 @@ -152,9 +158,25 @@ articles = " ".join(sorted([x.path_from(bld.path) for x in sources], bld.SAMBA_GENERATOR(parameter_all, source=articles, target=parameter_all, - rule=smbdotconf_generate_parameter_list, + rule=smbdotconf_generate_parameter_list_file) + +def generate_path_entity_file(task): + path_entities_file = task.outputs[0].bldpath(task.env) + + save_file(path_entities_file, + generate_path_entity_list(), + create_dir=True) + return 0 + +path_entities = 'build/DTD/samba.build.pathconfig' + +bld.SAMBA_GENERATOR(path_entities, + source=articles, + target=path_entities, + rule=generate_path_entity_file, dep_vars=bld.dynconfig_varnames()) + def SMBDOTCONF_MANPAGE(bld, target): ''' assemble and build smb.conf.5 manual page''' bld.SAMBAMANPAGES(target, parameter_all) -- Samba Shared Repository