[Samba] Strange problem with MS Office while saving

Gionatan Danti
Wed, 28 Oct 2015 18:18:15 -0000

Hi all,
I sometime have a strange behavior when using MS Office and saving
files.

First things first:
- OS CentOS 6.7 x86_64
- SAMBA version 3.6.23, configured as member server (see [1] for full
configuration)
- inotifywait watching my shares to replicate them off-site
- about 100 W7/W8 clients with MS Office 2010

Using inotifywait, I tracked how MS Office file save function works.
Basically, when clicking on the "diskette" icon, Office do the
following
thing:
- create a temporary file with the new content (AAAAAAAA.tmp)
- rename the original file (text.xls) to a new temporary name
(BBBBBBBB.tmp)
- rename the first temporary file (AAAAAAAA.tmp) to the original
filename (test.xls)
- delete the second temporary file (BBBBBBBB.tmp)

The above renaming valzer works flawlessy 99.9% of times, but sometime
it "hang" at point n.3 - renaming the first temporary file to the
original filename. Using inotifywait, I see something similar:
- create a temporary file with the new content (AAAAAAAA.tmp)
- rename the original file (text.xls) to a new temporary name
(BBBBBBBB.tmp)
- <nothing>
- delete the second temporary file (BBBBBBBB.tmp)

The net results is that the user "lose" a file, because it can't
see any
file with the original filename and the on-disk temporary file tell it
nothing (its name being randomly generated).

Knowing that the inotify stack can lose events, I enabled samba log and
searched for something related. Sadly, samba logs perfectly mirror what
inotifywait shown: the first temporary file rename is never executed
(nor it reached the samba server).

Any ideas on what is happening here?
I searched the list, but found nothing related.

Thanks.

[1] testparm -vvv output:
Load smb config files from /etc/samba/smb.conf
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit
(16384)
Processing section "[DATI]"
Processing section "[EDP]"
Processing section "[UTILITY]"
Processing section "[ARCHIVE]"
Loaded services file OK.
Server role: ROLE_DOMAIN_MEMBER
Press enter to see a dump of your service definitions

[global]
         dos charset = CP850
         unix charset = UTF-8
         display charset = LOCALE
         workgroup = EXAMPLE
         realm = EXAMPLE
         netbios name = FSX
         netbios aliases          netbios scope          server string = Samba
Server Version %v
         interfaces          bind interfaces only = No
         security = ADS
         auth methods          encrypt passwords = Yes
         client schannel = Auto
         server schannel = Auto
         allow trusted domains = Yes
         map to guest = Never
         null passwords = No
         obey pam restrictions = No
         password server = *
         smb passwd file = /var/lib/samba/private/smbpasswd
         private dir = /var/lib/samba/private
         passdb backend = tdbsam
         algorithmic rid base = 1000
         root directory          guest account = nobody
         enable privileges = Yes
         pam password change = No
         passwd program          passwd chat = *new*password* %n\n
*new*password* %n\n *changed*
         passwd chat debug = No
         passwd chat timeout = 2
         check password script          username map          password level = 0
         username level = 0
         unix password sync = No
         restrict anonymous = 0
         lanman auth = No
         ntlm auth = Yes
         client NTLMv2 auth = Yes
         client lanman auth = No
         client plaintext auth = No
         client use spnego principal = No
         send spnego principal = No
         preload modules          dedicated keytab file          kerberos method
= secrets and keytab
         map untrusted to domain = No
         log level = 2
         syslog = 1
         syslog only = No
         log file = /var/log/samba/log.%m
         max log size = 5000
         debug timestamp = Yes
         debug prefix timestamp = No
         debug hires timestamp = Yes
         debug pid = No
         debug uid = No
         debug class = No
         enable core files = Yes
         smb ports = 445 139
         large readwrite = Yes
         max protocol = NT1
         min protocol = CORE
         min receivefile size = 0
         read raw = Yes
         write raw = Yes
         disable netbios = No
         reset on zero vc = No
         log writeable files on exit = No
         acl compatibility = auto
         defer sharing violations = Yes
         nt pipe support = Yes
         nt status support = Yes
         announce version = 4.9
         announce as = NT
         max mux = 50
         max xmit = 16644
         name resolve order = lmhosts wins host bcast
         max ttl = 259200
         max wins ttl = 518400
         min wins ttl = 21600
         time server = No
         unix extensions = No
         use spnego = Yes
         client signing = auto
         server signing = No
         client use spnego = Yes
         client ldap sasl wrapping = plain
         enable asu support = No
         svcctl list          deadtime = 10
         getwd cache = Yes
         keepalive = 300
         lpq cache time = 30
         max smbd processes = 0
         paranoid server security = Yes
         max disk size = 0
         max open files = 16384
         socket options = TCP_NODELAY SO_KEEPALIVE
         use mmap = Yes
         hostname lookups = No
         name cache timeout = 660
         ctdbd socket          cluster addresses          clustering = No
         ctdb timeout = 0
         ctdb locktime warn threshold = 0
         smb2 max read = 65536
         smb2 max write = 65536
         smb2 max trans = 65536
         smb2 max credits = 8192
         load printers = Yes
         printcap cache time = 750
         printcap name          cups server          cups encrypt = No
         cups connection timeout = 30
         iprint server          disable spoolss = No
         addport command          enumports command          addprinter command
deleteprinter command          show add printer wizard = Yes
         os2 driver map          mangling method = hash2
         mangle prefix = 1
         max stat cache size = 256
         stat cache = Yes
         machine password timeout = 604800
         add user script          rename user script          delete user script
add group script          delete group script          add user to group script
delete user from group script          set primary group script          add
machine script          shutdown script          abort shutdown script
username map script          username map cache time = 0
         logon script          logon path = \\%N\%U\profile
         logon drive          logon home = \\%N\%U
         domain logons = No
         init logon delayed hosts          init logon delay = 100
         os level = 20
         lm announce = Auto
         lm interval = 60
         preferred master = No
         local master = Yes
         domain master = Auto
         browse list = Yes
         enhanced browsing = Yes
         dns proxy = Yes
         wins proxy = No
         wins server          wins support = No
         wins hook          kernel oplocks = Yes
         lock spin time = 200
         oplock break wait time = 0
         ldap admin dn          ldap delete dn = No
         ldap group suffix          ldap idmap suffix          ldap machine
suffix          ldap passwd sync = no
         ldap replication sleep = 1000
         ldap suffix          ldap ssl = start tls
         ldap ssl ads = No
         ldap deref = auto
         ldap follow referral = Auto
         ldap timeout = 15
         ldap connection timeout = 2
         ldap page size = 1024
         ldap user suffix          ldap debug level = 0
         ldap debug threshold = 10
         eventlog list          add share command          change share command
delete share command          preload          lock directory = /var/lib/samba
         state directory = /var/lib/samba
         cache directory = /var/lib/samba
         pid directory = /var/run
         utmp directory          wtmp directory          utmp = No
         default service          message command          get quota command
set quota command          remote announce          remote browse sync
socket address = 0.0.0.0
         nmbd bind explicit broadcast = Yes
         homedir map = auto.home
         afs username map          afs token lifetime = 604800
         log nt token command          time offset = 0
         NIS homedir = No
         registry shares = No
         usershare allow guests = No
         usershare max shares = 0
         usershare owner only = Yes
         usershare path = /var/lib/samba/usershares
         usershare prefix allow list          usershare prefix deny list
usershare template share          allow insecure wide links = No
         async smb echo handler = No
         multicast dns register = Yes
         panic action          perfcount module          host msdfs = Yes
         passdb expand explicit = No
         idmap backend = tdb
         idmap cache time = 604800
         idmap negative cache time = 120
         idmap uid          idmap gid          template homedir = /home/%D/%U
         template shell = /bin/false
         winbind separator = \
         winbind cache time = 300
         winbind reconnect delay = 30
         winbind max clients = 200
         winbind enum users = Yes
         winbind enum groups = Yes
         winbind use default domain = No
         winbind trusted domains only = No
         winbind nested groups = Yes
         winbind expand groups = 1
         winbind nss info = template
         winbind refresh tickets = No
         winbind offline logon = No
         winbind normalize names = No
         winbind rpc only = No
         create krb5 conf = Yes
         ncalrpc dir = /var/ncalrpc
         winbind max domain connections = 1
         idmap config EXAMPLE : range = 2000000-2999999
         idmap config EXAMPLE : backend = rid
         idmap config * : range = 10544-10554
         idmap config * : backend = tdb
         comment          path          username          invalid users
valid users          admin users          read list          write list
printer admin          force user          force group          read only = Yes
         acl check permissions = Yes
         acl group control = No
         acl map full control = Yes
         create mask = 0744
         force create mode = 00
         security mask = 0777
         force security mode = 00
         directory mask = 0755
         force directory mode = 00
         directory security mask = 0777
         force directory security mode = 00
         force unknown acl user = No
         inherit permissions = No
         inherit acls = No
         inherit owner = No
         guest only = No
         administrative share = No
         guest ok = No
         only user = No
         hosts allow          hosts deny          allocation roundup size =
1048576
         aio read size = 0
         aio write size = 0
         aio write behind          ea support = No
         nt acl support = Yes
         profile acls = No
         map acl inherit = Yes
         afs share = No
         smb encrypt = auto
         block size = 1024
         change notify = Yes
         directory name cache size = 100
         kernel change notify = Yes
         max connections = 0
         min print space = 0
         strict allocate = No
         strict sync = No
         sync always = No
         use sendfile = No
         write cache size = 0
         max reported print jobs = 0
         max print jobs = 1000
         printable = No
         print notify backchannel = Yes
         print ok = No
         printing = cups
         cups options = raw
         print command          lpq command = %p
         lprm command          lppause command          lpresume command
queuepause command          queueresume command          printer name
use client driver = No
         default devmode = Yes
         force printername = No
         printjob username = %U
         default case = lower
         case sensitive = Auto
         preserve case = Yes
         short preserve case = Yes
         mangling char = ~
         hide dot files = Yes
         hide special files = No
         hide unreadable = No
         hide unwriteable files = No
         delete veto files = Yes
         veto files = /____archive____/Thumbs.db/
         hide files          veto oplock files          map archive = Yes
         map hidden = No
         map system = No
         map readonly = yes
         mangled names = Yes
         store dos attributes = Yes
         dmapi support = No
         browseable = Yes
         access based share enum = No
         blocking locks = Yes
         csc policy = manual
         fake oplocks = No
         locking = Yes
         oplocks = Yes
         level2 oplocks = Yes
         oplock contention limit = 2
         posix locking = Yes
         strict locking = Auto
         share modes = Yes
         dfree cache time = 0
         dfree command          copy          preexec          preexec close =
No
         postexec          root preexec          root preexec close = No
         root postexec          available = Yes
         volume          fstype = NTFS
         set directory = No
         wide links = No
         follow symlinks = Yes
         dont descend          magic script          magic output
delete readonly = No
         dos filemode = No
         dos filetimes = Yes
         dos filetime resolution = No
         fake directory create times = No
         vfs objects = acl_xattr
         msdfs root = No
         msdfs proxy
[DATI]
         comment = DATI
         path = /opt/fileserver/shares/DATI
         read only = No

[EDP]
         comment = EDP
         path = /opt/fileserver/shares/EDP
         read only = No

[UTILITY]
         comment = UTILITY
         path = /opt/fileserver/shares/UTILITY
         read only = No

[ARCHIVE]
         comment = ARCHIVE
         path = /opt/fileserver/archive/kvm-white.target1
         valid users = "@EXAMPLE\domain admins"


--
Danti Gionatan
Supporto Tecnico
Assyoma S.r.l. - www.assyoma.it
email: g.danti at assyoma.it - info at assyoma.it
GPG public key ID: FF5F32A8