[Samba] Strange problem with MS Office while saving

Gionatan Danti
Fri, 30 Oct 2015 08:42:09 -0000

Hi all,
anyone with some ideas?

Thanks.

On 28/10/15 19:18, Gionatan Danti wrote:
> 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