The branch, v4-18-test has been updated via af9dc206043 smbd: also reset struct stat_ex.cached_dos_attributes in SET_STAT_INVALID() via 09ea170e3b4 smbd: zero intialize SMB_STRUCT_STAT in vfswrap_readdir() via 5865388ede8 CI: add a test that checks the dosmode of symlinks via 6dfa2252fd3 vfs_fruit: add fruit:convert_adouble parameter via 5c5ab78d93d vfs_fruit: just log failing AppleDouble conversion via 0db5f559d0e libadouble: allow FILE_SHARE_DELETE in ad_convert_xattr() via fe988c71379 vfs_fruit: never return AFP_Resource stream for directories via 051cd8f5915 vfs_fruit: return ENOENT instead of EISDIR when trying to open AFP_Resource for a directory via 976b4955570 CI: add a test for fruit AppleDouble conversion when deletion triggers conversion from a22173a745e rpc_server3: Pass winbind_env_set() state through to rpcd_*
https://git.samba.org/?p=samba.git;a=shortlog;h=v4-18-test - Log ----------------------------------------------------------------- commit af9dc206043809a706063019112a191e81456ed7 Author: Ralph Boehme <s...@samba.org> Date: Tue May 23 17:26:03 2023 +0200 smbd: also reset struct stat_ex.cached_dos_attributes in SET_STAT_INVALID() BUG: https://bugzilla.samba.org/show_bug.cgi?id=15375 Signed-off-by: Ralph Boehme <s...@samba.org> Reviewed-by: Jeremy Allison <j...@samba.org> Autobuild-User(master): Jeremy Allison <j...@samba.org> Autobuild-Date(master): Wed May 24 21:42:50 UTC 2023 on atb-devel-224 (cherry picked from commit 412373984db6d0c20ba38076d06d0a87631890d0) Autobuild-User(v4-18-test): Jule Anger <jan...@samba.org> Autobuild-Date(v4-18-test): Wed May 31 10:47:15 UTC 2023 on atb-devel-224 commit 09ea170e3b4a5c962e29b86d1eadf06a430bc9a6 Author: Ralph Boehme <s...@samba.org> Date: Tue May 23 17:23:28 2023 +0200 smbd: zero intialize SMB_STRUCT_STAT in vfswrap_readdir() Avoid returning an uninitialized st.cached_dos_attributes. BUG: https://bugzilla.samba.org/show_bug.cgi?id=15375 Signed-off-by: Ralph Boehme <s...@samba.org> Reviewed-by: Jeremy Allison <j...@samba.org> (cherry picked from commit 0391120079b032077c3914c10189b85e61dc8498) commit 5865388ede8b5d3d3b389be49261574dde7008d7 Author: Ralph Boehme <s...@samba.org> Date: Wed May 24 13:13:19 2023 +0200 CI: add a test that checks the dosmode of symlinks BUG: https://bugzilla.samba.org/show_bug.cgi?id=15375 Signed-off-by: Ralph Boehme <s...@samba.org> Reviewed-by: Jeremy Allison <j...@samba.org> (cherry picked from commit b4af281b2d7bfddbdb7289dadbed9db623bf0e84) commit 6dfa2252fd308ab7a60513d5a167305614a9e192 Author: Ralph Boehme <s...@samba.org> Date: Mon May 22 12:32:00 2023 +0200 vfs_fruit: add fruit:convert_adouble parameter https://bugzilla.samba.org/show_bug.cgi?id=15378 Signed-off-by: Ralph Boehme <s...@samba.org> Reviewed-by: Jeremy Allison <j...@samba.org> Autobuild-User(master): Jeremy Allison <j...@samba.org> Autobuild-Date(master): Fri May 26 00:52:29 UTC 2023 on atb-devel-224 (cherry picked from commit 035f6d914d133cf3248f15b1be06a9e1837238da) commit 5c5ab78d93def900a91954e30fdb25aa1d5a3cdb Author: Ralph Boehme <s...@samba.org> Date: Mon May 22 12:25:04 2023 +0200 vfs_fruit: just log failing AppleDouble conversion BUG: https://bugzilla.samba.org/show_bug.cgi?id=15378 Signed-off-by: Ralph Boehme <s...@samba.org> Reviewed-by: Jeremy Allison <j...@samba.org> (cherry picked from commit 3bf97f19c36d26b4178f7cb6202bbdd44de0c1aa) commit 0db5f559d0ef883c975177a705e82ae4d0951c72 Author: Ralph Boehme <s...@samba.org> Date: Tue May 23 17:28:33 2023 +0200 libadouble: allow FILE_SHARE_DELETE in ad_convert_xattr() Not specifying FILE_SHARE_DELETE wasn't done intentionally. Not setting the flag triggers the following problem: * client sends a CREATE with delete access * this triggers a call to open_streams_for_delete() where we check for conflicting opens on any of the streams of the file or directory * if the file (or directory) has a stream like ":com.apple.quarantine" the stream is opened with DELETE_ACCESS and kept open when the next step might: * if the file (or directory) has a Mac specific :AFP_AfpInfo stream, the ad_convert() routine in fruit_create_file() is triggered * ad_convert() checks if the file (or ...) has a sidecar ._ AppleDouble file, if it has: * in ad_convert_xattr() we unpack any set of xattrs encoded in the AppleDouble file and recreate them as streams with the VFS. Now, if any of these xattrs happens to be converted to a stream that we still have open in open_streams_for_delete() (see above) we get a NT_STATUS_SHARING_VIOLATION This error gets passed up the stack back to open_streams_for_delete() so the client CREATE request fails and the client is unhappy. BUG: https://bugzilla.samba.org/show_bug.cgi?id=15378 Signed-off-by: Ralph Boehme <s...@samba.org> Reviewed-by: Jeremy Allison <j...@samba.org> (cherry picked from commit 55bd10456486628cad2bd085618e873598401c3b) commit fe988c713798732b996de99684c73199ec68b70f Author: Ralph Boehme <s...@samba.org> Date: Mon May 22 19:37:17 2023 +0200 vfs_fruit: never return AFP_Resource stream for directories The macOS client creates ._ AppleDouble files for directories that do contain an (empty) resource fork AppleDouble entry. So when going from a Samba server config without streams module (or when migrating data from another server without streams support), to a Samba config with a streams module and vfs_fruit, fruit_streaminfo() will wrongly return the AFP_Resource from the AppleDouble file as stream to the client. To address this, just never return an AFP_Resource stream for directories when listing streams in fruit_streaminfo(). ad_convert(), when configured with fruit:delete_empty_adfiles = true fruit:wipe_intentionally_left_blank_rfork = true will happily discard the AFP_Resource from the AppleDouble file. BUG: https://bugzilla.samba.org/show_bug.cgi?id=15378 Signed-off-by: Ralph Boehme <s...@samba.org> Reviewed-by: Jeremy Allison <j...@samba.org> (cherry picked from commit 06f0c070a0b18313f48362aa326e3e7e6a096492) commit 051cd8f5915615bed9ff8756661afffb794e42b4 Author: Ralph Boehme <s...@samba.org> Date: Mon May 22 19:35:33 2023 +0200 vfs_fruit: return ENOENT instead of EISDIR when trying to open AFP_Resource for a directory Translates to NT_STATUS_OBJECT_NAME_NOT_FOUND which is the same error macOS returns in this case. BUG: https://bugzilla.samba.org/show_bug.cgi?id=15378 Signed-off-by: Ralph Boehme <s...@samba.org> Reviewed-by: Jeremy Allison <j...@samba.org> (cherry picked from commit 9b91a8bad2ff8da9eb56f1f9d640bcea294a5a0a) commit 976b4955570d34b8b013a7fd17f3551fbf105f83 Author: Ralph Boehme <s...@samba.org> Date: Wed May 24 21:28:48 2023 +0200 CI: add a test for fruit AppleDouble conversion when deletion triggers conversion BUG: https://bugzilla.samba.org/show_bug.cgi?id=15378 Signed-off-by: Ralph Boehme <s...@samba.org> Reviewed-by: Jeremy Allison <j...@samba.org> (cherry picked from commit 59eadfe21aca6d563f86ea656517216036421bca) ----------------------------------------------------------------------- Summary of changes: docs-xml/manpages/vfs_fruit.8.xml | 13 + source3/include/smb_macros.h | 5 +- source3/lib/adouble.c | 2 +- source3/modules/vfs_default.c | 2 +- source3/modules/vfs_fruit.c | 48 +- source3/script/tests/test_symlink_dosmode.sh | 74 +++ source3/selftest/tests.py | 4 + source4/torture/vfs/fruit.c | 954 +++++++++++++++++++++++++++ 8 files changed, 1082 insertions(+), 20 deletions(-) create mode 100755 source3/script/tests/test_symlink_dosmode.sh Changeset truncated at 500 lines: diff --git a/docs-xml/manpages/vfs_fruit.8.xml b/docs-xml/manpages/vfs_fruit.8.xml index 6950898a7d1..2215f031312 100644 --- a/docs-xml/manpages/vfs_fruit.8.xml +++ b/docs-xml/manpages/vfs_fruit.8.xml @@ -406,6 +406,19 @@ </listitem> </varlistentry> + <varlistentry> + <term>fruit:convert_adouble = yes | no</term> + <listitem> + <para>Whether an attempt shall be made to convert ._ AppleDouble + sidecar files to native streams (xattrs when using + vfs_streams_xattr). The main use case for this conversion is + transparent migration from a server config without streams support + where the macOS client created those AppleDouble sidecar + files.</para> + <para>The default is <emphasis>yes</emphasis>.</para> + </listitem> + </varlistentry> + </variablelist> </refsect1> diff --git a/source3/include/smb_macros.h b/source3/include/smb_macros.h index 0f44d1402a8..42ff9ffb0d4 100644 --- a/source3/include/smb_macros.h +++ b/source3/include/smb_macros.h @@ -108,7 +108,10 @@ #define VALID_STAT(st) ((st).st_ex_nlink != 0) #define VALID_STAT_OF_DIR(st) (VALID_STAT(st) && S_ISDIR((st).st_ex_mode)) -#define SET_STAT_INVALID(st) ((st).st_ex_nlink = 0) +#define SET_STAT_INVALID(st) { \ + (st).st_ex_nlink = 0; \ + (st).cached_dos_attributes = FILE_ATTRIBUTES_INVALID; \ +}; /* Macros to get at offsets within smb_lkrng and smb_unlkrng structures. We cannot define these as actual structures diff --git a/source3/lib/adouble.c b/source3/lib/adouble.c index 062c73ec758..15f8f0aa8a9 100644 --- a/source3/lib/adouble.c +++ b/source3/lib/adouble.c @@ -1222,7 +1222,7 @@ static bool ad_convert_xattr(vfs_handle_struct *handle, NULL, /* dirfsp */ stream_name, /* fname */ FILE_GENERIC_WRITE, /* access_mask */ - FILE_SHARE_READ | FILE_SHARE_WRITE, /* share_access */ + FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, /* share_access */ FILE_OPEN_IF, /* create_disposition */ 0, /* create_options */ 0, /* file_attributes */ diff --git a/source3/modules/vfs_default.c b/source3/modules/vfs_default.c index 000c23208f5..89eec1146d7 100644 --- a/source3/modules/vfs_default.c +++ b/source3/modules/vfs_default.c @@ -603,7 +603,7 @@ static struct dirent *vfswrap_readdir(vfs_handle_struct *handle, struct dirent *result; bool fake_ctime = lp_fake_directory_create_times(SNUM(handle->conn)); int flags = AT_SYMLINK_NOFOLLOW; - SMB_STRUCT_STAT st; + SMB_STRUCT_STAT st = {0}; int ret; START_PROFILE(syscall_readdir); diff --git a/source3/modules/vfs_fruit.c b/source3/modules/vfs_fruit.c index 4058d4834e7..c08238cb15f 100644 --- a/source3/modules/vfs_fruit.c +++ b/source3/modules/vfs_fruit.c @@ -131,6 +131,7 @@ struct fruit_config_data { const char *model; bool time_machine; off_t time_machine_max_size; + bool convert_adouble; bool wipe_intentionally_left_blank_rfork; bool delete_empty_adfiles; @@ -381,6 +382,10 @@ static int init_fruit_config(vfs_handle_struct *handle) config->time_machine_max_size = conv_str_size(tm_size_str); } + config->convert_adouble = lp_parm_bool( + SNUM(handle->conn), FRUIT_PARAM_TYPE_NAME, + "convert_adouble", true); + config->wipe_intentionally_left_blank_rfork = lp_parm_bool( SNUM(handle->conn), FRUIT_PARAM_TYPE_NAME, "wipe_intentionally_left_blank_rfork", false); @@ -1567,7 +1572,7 @@ static int fruit_open_rsrc_adouble(vfs_handle_struct *handle, S_ISDIR(fsp->base_fsp->fsp_name->st.st_ex_mode)) { /* sorry, but directories don't have a resource fork */ - errno = EISDIR; + errno = ENOENT; rc = -1; goto exit; } @@ -3959,6 +3964,10 @@ static NTSTATUS fruit_streaminfo_rsrc(vfs_handle_struct *handle, struct fruit_config_data *config = NULL; NTSTATUS status; + if (S_ISDIR(smb_fname->st.st_ex_mode)) { + return NT_STATUS_OK; + } + SMB_VFS_HANDLE_GET_DATA(handle, config, struct fruit_config_data, return NT_STATUS_INTERNAL_ERROR); @@ -4286,7 +4295,10 @@ static NTSTATUS fruit_create_file(vfs_handle_struct *handle, SMB_VFS_HANDLE_GET_DATA(handle, config, struct fruit_config_data, return NT_STATUS_UNSUCCESSFUL); - if (is_apple_stream(smb_fname->stream_name) && !internal_open) { + if (is_apple_stream(smb_fname->stream_name) && + !internal_open && + config->convert_adouble) + { uint32_t conv_flags = 0; if (config->wipe_intentionally_left_blank_rfork) { @@ -4301,8 +4313,8 @@ static NTSTATUS fruit_create_file(vfs_handle_struct *handle, macos_string_replace_map, conv_flags); if (ret != 0) { - DBG_ERR("ad_convert() failed\n"); - return NT_STATUS_UNSUCCESSFUL; + DBG_ERR("ad_convert(\"%s\") failed\n", + smb_fname_str_dbg(smb_fname)); } } @@ -4400,20 +4412,22 @@ static NTSTATUS fruit_freaddir_attr(struct vfs_handle_struct *handle, DBG_DEBUG("Path [%s]\n", fsp_str_dbg(fsp)); - if (config->wipe_intentionally_left_blank_rfork) { - conv_flags |= AD_CONV_WIPE_BLANK; - } - if (config->delete_empty_adfiles) { - conv_flags |= AD_CONV_DELETE; - } + if (config->convert_adouble) { + if (config->wipe_intentionally_left_blank_rfork) { + conv_flags |= AD_CONV_WIPE_BLANK; + } + if (config->delete_empty_adfiles) { + conv_flags |= AD_CONV_DELETE; + } - ret = ad_convert(handle, - fsp->fsp_name, - macos_string_replace_map, - conv_flags); - if (ret != 0) { - DBG_ERR("ad_convert() failed\n"); - return NT_STATUS_UNSUCCESSFUL; + ret = ad_convert(handle, + fsp->fsp_name, + macos_string_replace_map, + conv_flags); + if (ret != 0) { + DBG_ERR("ad_convert(\"%s\") failed\n", + fsp_str_dbg(fsp)); + } } *pattr_data = talloc_zero(mem_ctx, struct readdir_attr_data); diff --git a/source3/script/tests/test_symlink_dosmode.sh b/source3/script/tests/test_symlink_dosmode.sh new file mode 100755 index 00000000000..dd6cb6be472 --- /dev/null +++ b/source3/script/tests/test_symlink_dosmode.sh @@ -0,0 +1,74 @@ +#!/bin/sh + +if [ $# -lt 7 ]; then + cat <<EOF +Usage: test_symlink_dosmode.sh SERVER SERVER_IP USERNAME PASSWORD LOCAL_PATH PREFIX SMBCLIENT +EOF + exit 1 +fi + +SERVER="${1}" +SERVER_IP="${2}" +USERNAME="${3}" +PASSWORD="${4}" +LOCAL_PATH="${5}" +PREFIX="${6}" +SMBCLIENT="${7}" +SMBCLIENT="$VALGRIND ${SMBCLIENT}" +shift 6 + +incdir=$(dirname "$0")/../../../testprogs/blackbox +. "$incdir"/subunit.sh + +failed=0 + +# Do not let deprecated option warnings muck this up +SAMBA_DEPRECATED_SUPPRESS=1 +export SAMBA_DEPRECATED_SUPPRESS + +# Define the test environment/filenames. +# +share_test_dir="$LOCAL_PATH" + +rm -rf "$share_test_dir/testdir" + +mkdir -p "$share_test_dir/testdir/dir" +touch "$share_test_dir/testdir/file" +ln -s "../file" "$share_test_dir/testdir/dir/symlink" + +test_symlink_dosmode() +{ + tmpfile=$PREFIX/smbclient_interactive_prompt_commands + cat >"$tmpfile" <<EOF +ls testdir/dir/* +quit +EOF + cmd='CLI_FORCE_INTERACTIVE=yes $SMBCLIENT -U$USERNAME%$PASSWORD //$SERVER/local_symlinks -I$SERVER_IP < $tmpfile 2>&1' + eval echo "$cmd" + out=$(eval "$cmd") + ret=$? + rm -f "$tmpfile" + + if [ $ret != 0 ]; then + printf "%s\n" "$out" + printf "failed accessing local_symlinks with error %s\n" "$ret" + return 1 + fi + + mode=$(printf "%s" "$out" | awk '/symlink/ {print $2}') + echo "mode: $mode" + if [ x"$mode" != x"N" ] ; then + printf "Bad mode: '%s', expected 'N'\n" "$mode" + printf "%s\n" "$out" + return 1 + fi + return 0 +} + +testit "symlink_dosmode" \ + test_symlink_dosmode || + failed=$((failed + 1)) + +rm -rf "$share_test_dir/testdir" + +testok "$0" "$failed" diff --git a/source3/selftest/tests.py b/source3/selftest/tests.py index fc3227be9b5..f24f6779150 100755 --- a/source3/selftest/tests.py +++ b/source3/selftest/tests.py @@ -777,6 +777,10 @@ for env in ["fileserver"]: [os.path.join(samba3srcdir, "script/tests/test_stream_dir_rename.sh"), '$SERVER', '$USERNAME', '$PASSWORD', '$PREFIX', smbclient3]) + plantestsuite("samba3.blackbox.test_symlink_dosmode", env, + [os.path.join(samba3srcdir, "script/tests/test_symlink_dosmode.sh"), + '$SERVER', '$SERVER_IP', '$USERNAME', '$PASSWORD', '$LOCAL_PATH/local_symlinks', + '$PREFIX', smbclient3]) # # tar command tests # diff --git a/source4/torture/vfs/fruit.c b/source4/torture/vfs/fruit.c index 3621fec460c..99d63becbb4 100644 --- a/source4/torture/vfs/fruit.c +++ b/source4/torture/vfs/fruit.c @@ -7017,6 +7017,959 @@ done: return ret; } +/* +------------------------------------------------------------------------------- +MagicNumber: 00051607 : AppleDouble +Version : 00020000 : Version 2 +Filler : 4D 61 63 20 4F 53 20 58 20 20 20 20 20 20 20 20 : Mac OS X +Num. of ent: 0002 : 2 + +------------------------------------------------------------------------------- +Entry ID : 00000009 : Finder Info +Offset : 00000032 : 50 +Length : 00000EB0 : 3760 + +-DInfo-----: +Rect top : 0000 : 0 +Rect left : 0000 : 0 +Rect bottom: 0000 : 0 +Rect right : 0000 : 0 +isAlias : 0 +Invisible : 0 +hasBundle : 0 +nameLocked : 0 +Stationery : 0 +CustomIcon : 0 +Reserved : 0 +Inited : 1 +NoINITS : 0 +Shared : 0 +SwitchLaunc: 0 +Hidden Ext : 0 +color : 000 : none +isOnDesk : 0 +Location v : 0000 : 0 +Location h : 0000 : 0 +View : 0000 : .. + +-DXInfo----: +Scroll v : 0000 : 0 +Scroll h : 0000 : 0 +Rsvd|OpnChn: 00000000 : 0 +AreInvalid : 0 +unknown bit: 0 +unknown bit: 0 +unknown bit: 0 +unknown bit: 0 +unknown bit: 0 +unknown bit: 0 +CustomBadge: 0 +ObjctIsBusy: 0 +unknown bit: 0 +unknown bit: 0 +unknown bit: 0 +unknown bit: 0 +RoutingInfo: 0 +unknown bit: 0 +unknown bit: 0 +Comment : 0000 : .. +PutAway : 00000000 : 0 + +-EA--------: +pad : 0000 : .. +magic : 41545452 : ATTR +debug_tag : 0081714C : 8483148 +total_size : 00000EE2 : 3810 +data_start : 00000098 : 152 +data_length: 00000039 : 57 +reserved[0]: 00000000 : .... +reserved[1]: 00000000 : .... +reserved[2]: 00000000 : .... +flags : 0000 : .. +num_attrs : 0001 : 1 +-EA ENTRY--: +offset : 00000098 : 152 +length : 00000039 : 57 +flags : 0000 : .. +namelen : 15 : 21 +-EA NAME---: 0 1 2 3 4 5 6 7 8 9 A B C D E F : (ASCII) +00000000 : 63 6F 6D 2E 61 70 70 6C 65 2E 71 75 61 72 61 6E : com.apple.quaran +00000010 : 74 69 6E 65 00 : tine. +-EA VALUE--: 0 1 2 3 4 5 6 7 8 9 A B C D E F : (ASCII) +00000000 : 30 30 38 31 3B 36 32 65 61 33 37 66 64 3B 43 68 : 0081;62ea37fd;Ch +00000010 : 72 6F 6D 65 3B 42 35 39 46 42 39 45 44 2D 35 41 : rome;B59FB9ED-5A +00000020 : 32 39 2D 34 45 35 42 2D 38 35 36 43 2D 37 45 44 : 29-4E5B-856C-7ED +00000030 : 30 45 46 45 41 37 30 41 43 : 0EFEA70AC + +-RAW DUMP--: 0 1 2 3 4 5 6 7 8 9 A B C D E F : (ASCII) +00000000 : 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 : ................ +00000010 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000020 : 00 00 41 54 54 52 00 81 71 4C 00 00 0E E2 00 00 : ..ATTR..qL...... +00000030 : 00 98 00 00 00 39 00 00 00 00 00 00 00 00 00 00 : .....9.......... +00000040 : 00 00 00 00 00 01 00 00 00 98 00 00 00 39 00 00 : .............9.. +00000050 : 15 63 6F 6D 2E 61 70 70 6C 65 2E 71 75 61 72 61 : .com.apple.quara +00000060 : 6E 74 69 6E 65 00 30 30 38 31 3B 36 32 65 61 33 : ntine.0081;62ea3 +00000070 : 37 66 64 3B 43 68 72 6F 6D 65 3B 42 35 39 46 42 : 7fd;Chrome;B59FB +00000080 : 39 45 44 2D 35 41 32 39 2D 34 45 35 42 2D 38 35 : 9ED-5A29-4E5B-85 +00000090 : 36 43 2D 37 45 44 30 45 46 45 41 37 30 41 43 00 : 6C-7ED0EFEA70AC. +000000A0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000000B0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000000C0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000000D0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000000E0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000000F0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000100 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000110 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000120 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000130 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000140 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000150 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000160 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000170 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000180 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000190 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000001A0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000001B0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000001C0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000001D0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000001E0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000001F0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000200 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000210 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000220 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000230 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000240 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000250 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000260 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000270 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000280 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000290 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000002A0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000002B0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000002C0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000002D0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000002E0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000002F0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000300 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000310 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000320 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000330 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000340 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000350 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000360 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000370 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000380 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000390 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000003A0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000003B0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000003C0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000003D0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000003E0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000003F0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000400 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000410 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000420 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000430 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000440 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000450 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000460 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000470 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000480 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000490 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000004A0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000004B0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000004C0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000004D0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000004E0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000004F0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000500 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000510 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000520 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000530 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000540 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000550 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000560 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000570 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000580 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000590 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000005A0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000005B0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000005C0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000005D0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000005E0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000005F0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000600 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000610 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000620 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000630 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000640 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000650 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000660 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000670 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000680 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000690 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000006A0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000006B0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000006C0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000006D0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000006E0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000006F0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000700 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000710 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000720 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000730 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000740 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000750 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000760 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000770 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000780 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000790 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000007A0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000007B0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000007C0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000007D0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000007E0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000007F0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000800 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000810 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000820 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000830 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000840 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000850 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000860 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000870 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000880 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000890 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000008A0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000008B0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000008C0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000008D0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000008E0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000008F0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ -- Samba Shared Repository