The branch, master has been updated
       via  ce975e6 s4:rpc_server/lsa_lookup fix a compile warning
       via  2e1ed2c s4:libcli fix compiler warnings
       via  7964a83 s4:kdc fix compiler warnings
       via  877fe25 s4:echo_server fix compiler warnings
       via  9c2951a s4:dsdb fix compiler warnings
       via  cad07c7 s4:dsdb fix compiler warnings
       via  2bd15d1 s4:dsdb fix compiler warnings
       via  fbc2dfd s4:dsdb fix compiler warnings
       via  f9e5cdf s4:dsdb fix compiler warnings
       via  e5cb10f s4:dsdb fix compiler warnings
       via  fa50656 s3:winbindd fix a compiler warning
       via  ca8353e s3:smbd/smb2 fix compiler warnings
       via  805515b s3:printing fix a compiler warning
       via  65868f2 s3:libsmb fix a compiler warning
       via  66e35a9 libcli: fix compiler warnings
       via  23fc48c lib/clap fix compiler warnings
       via  6d88bfc lib/tdb: fix compiler warnings
       via  35b4ba0 lib/ldb fix compiler warnings
       via  9784ed9 lib/ldb fix compiler warnings
       via  f1acab1 lib/ldb-samba: fix a compiler warning
       via  094747a lib/compression: fix a compiler warnings
       via  0275410 waf docs: build the new vfs worm man page
       via  8a1cda8 docs-man: add manual page for the new worm vfs module
       via  5b127a6 s3-waf: build new vfs_worm module
       via  2004317 s3-modules: add new vfs_worm module
       via  b2dfd57 lib-util: add functions to get elapsed from given timespec 
structs
      from  11f7445 docs: Add kill-client-ip to smbcontrol manpage

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit ce975e61b8de3e02e06aa19126c485c2b057a523
Author: Christian Ambach <[email protected]>
Date:   Tue Dec 10 20:31:21 2013 +0100

    s4:rpc_server/lsa_lookup fix a compile warning
    
    about a set, but unused variable
    
    Signed-off-by: Christian Ambach <[email protected]>
    Reviewed-by: Jeremy Allison <[email protected]>
    
    Autobuild-User(master): Jeremy Allison <[email protected]>
    Autobuild-Date(master): Fri Dec 13 01:49:50 CET 2013 on sn-devel-104

commit 2e1ed2c74b9a0209547a2f461cd4d8cf7de25582
Author: Christian Ambach <[email protected]>
Date:   Tue Dec 10 17:54:37 2013 +0100

    s4:libcli fix compiler warnings
    
    about potentially uninitialized variables
    
    Signed-off-by: Christian Ambach <[email protected]>
    Reviewed-by: Jeremy Allison <[email protected]>

commit 7964a8344787ffce332d98dcbc0f2f64222693b3
Author: Christian Ambach <[email protected]>
Date:   Tue Dec 10 17:54:05 2013 +0100

    s4:kdc fix compiler warnings
    
    about set but unused variables
    
    Signed-off-by: Christian Ambach <[email protected]>
    Reviewed-by: Jeremy Allison <[email protected]>

commit 877fe25a0194709993457354c9b43729d3b9d72e
Author: Christian Ambach <[email protected]>
Date:   Tue Dec 10 17:53:49 2013 +0100

    s4:echo_server fix compiler warnings
    
    about set but unused variables
    
    Signed-off-by: Christian Ambach <[email protected]>
    Reviewed-by: Jeremy Allison <[email protected]>

commit 9c2951a9ca8228c714a1c1c834392077d050b569
Author: Christian Ambach <[email protected]>
Date:   Tue Dec 10 17:53:15 2013 +0100

    s4:dsdb fix compiler warnings
    
    about potentially uninitialized variables
    
    Signed-off-by: Christian Ambach <[email protected]>
    Reviewed-by: Jeremy Allison <[email protected]>

commit cad07c76768a96cb3ae8027f653926f11ee545ff
Author: Christian Ambach <[email protected]>
Date:   Tue Dec 10 17:52:30 2013 +0100

    s4:dsdb fix compiler warnings
    
    about potentially uninitialized variables
    
    Signed-off-by: Christian Ambach <[email protected]>
    Reviewed-by: Jeremy Allison <[email protected]>

commit 2bd15d1b830b177ea234aa29ff696379abbcd683
Author: Christian Ambach <[email protected]>
Date:   Tue Dec 10 17:52:29 2013 +0100

    s4:dsdb fix compiler warnings
    
    about potentially uninitialized variables
    
    Signed-off-by: Christian Ambach <[email protected]>
    Reviewed-by: Jeremy Allison <[email protected]>

commit fbc2dfddf46d26f9ded3531148764533bacf13ff
Author: Christian Ambach <[email protected]>
Date:   Tue Dec 10 17:52:29 2013 +0100

    s4:dsdb fix compiler warnings
    
    about potentially uninitialized variables
    
    Signed-off-by: Christian Ambach <[email protected]>
    Reviewed-by: Jeremy Allison <[email protected]>

commit f9e5cdfa3f8ae08eb72ab4693ad67a8c730c8479
Author: Christian Ambach <[email protected]>
Date:   Tue Dec 10 17:52:29 2013 +0100

    s4:dsdb fix compiler warnings
    
    about potentially uninitialized variables
    
    Signed-off-by: Christian Ambach <[email protected]>
    Reviewed-by: Jeremy Allison <[email protected]>

commit e5cb10f59122acc56a465c19885fe74a39985700
Author: Christian Ambach <[email protected]>
Date:   Tue Dec 10 17:52:29 2013 +0100

    s4:dsdb fix compiler warnings
    
    about potentially uninitialized variables
    
    Signed-off-by: Christian Ambach <[email protected]>
    Reviewed-by: Jeremy Allison <[email protected]>

commit fa506569913ec437f5a943eb0afd27df5358411f
Author: Christian Ambach <[email protected]>
Date:   Tue Dec 10 17:50:36 2013 +0100

    s3:winbindd fix a compiler warning
    
    about a potentially uninitialized variable
    
    Signed-off-by: Christian Ambach <[email protected]>
    Reviewed-by: Jeremy Allison <[email protected]>

commit ca8353efaa217b6384f2147f54ca347b0ae70bf3
Author: Christian Ambach <[email protected]>
Date:   Tue Dec 10 17:49:44 2013 +0100

    s3:smbd/smb2 fix compiler warnings
    
    about a potentially uninitialized variables
    
    Signed-off-by: Christian Ambach <[email protected]>
    Reviewed-by: Jeremy Allison <[email protected]>

commit 805515b83f02be29815654c4a0d09d324ba50abc
Author: Christian Ambach <[email protected]>
Date:   Tue Dec 10 17:49:18 2013 +0100

    s3:printing fix a compiler warning
    
    about a potentially uninitialized variable
    
    Signed-off-by: Christian Ambach <[email protected]>
    Reviewed-by: Jeremy Allison <[email protected]>

commit 65868f2025c3213d1e75dc87d92acdfbfbd6c11f
Author: Christian Ambach <[email protected]>
Date:   Tue Dec 10 17:48:59 2013 +0100

    s3:libsmb fix a compiler warning
    
    about a potentially uninitialized variable
    
    Signed-off-by: Christian Ambach <[email protected]>
    Reviewed-by: Jeremy Allison <[email protected]>

commit 66e35a93a5508feef0015c872237e639e771a351
Author: Christian Ambach <[email protected]>
Date:   Tue Dec 10 17:48:25 2013 +0100

    libcli: fix compiler warnings
    
    about missing prototypes
    
    Signed-off-by: Christian Ambach <[email protected]>
    Reviewed-by: Jeremy Allison <[email protected]>

commit 23fc48cfb194cec646f05d79dcfc23c2549d6ff8
Author: Christian Ambach <[email protected]>
Date:   Tue Dec 10 17:47:50 2013 +0100

    lib/clap fix compiler warnings
    
    about set but unused variable
    
    Signed-off-by: Christian Ambach <[email protected]>
    Reviewed-by: Jeremy Allison <[email protected]>

commit 6d88bfcab47abe55fb731b16d7f4fea47d5cd744
Author: Christian Ambach <[email protected]>
Date:   Tue Dec 10 17:47:05 2013 +0100

    lib/tdb: fix compiler warnings
    
    about a variable shadowing a global declaration
    
    Signed-off-by: Christian Ambach <[email protected]>
    Reviewed-by: Jeremy Allison <[email protected]>

commit 35b4ba0193d783d85283b07f520f0af8dc2c1260
Author: Christian Ambach <[email protected]>
Date:   Tue Dec 10 17:46:30 2013 +0100

    lib/ldb fix compiler warnings
    
    about potentially uninitialized variables
    
    Signed-off-by: Christian Ambach <[email protected]>
    Reviewed-by: Jeremy Allison <[email protected]>

commit 9784ed9fb75022fcd7eaef24108ed8c6acf7f86f
Author: Christian Ambach <[email protected]>
Date:   Tue Dec 10 17:45:58 2013 +0100

    lib/ldb fix compiler warnings
    
    about potentially uninitialized variables
    
    Signed-off-by: Christian Ambach <[email protected]>
    Reviewed-by: Jeremy Allison <[email protected]>

commit f1acab164338f1536c8e5793e967a00389d0ac70
Author: Christian Ambach <[email protected]>
Date:   Tue Dec 10 17:45:14 2013 +0100

    lib/ldb-samba: fix a compiler warning
    
    about macro redefinition
    
    Signed-off-by: Christian Ambach <[email protected]>
    Reviewed-by: Jeremy Allison <[email protected]>

commit 094747aaf35dab9886fd567b45b1213e7dbe76c0
Author: Christian Ambach <[email protected]>
Date:   Tue Dec 10 17:43:55 2013 +0100

    lib/compression: fix a compiler warnings
    
    about set but unused variable
    
    Signed-off-by: Christian Ambach <[email protected]>
    Reviewed-by: Jeremy Allison <[email protected]>

commit 0275410e02d9c8fd8c728b1d7811a3dfc05ab4e4
Author: Björn Baumbach <[email protected]>
Date:   Wed Nov 20 14:24:21 2013 +0100

    waf docs: build the new vfs worm man page
    
    Signed-off-by: Björn Baumbach <[email protected]>
    Reviewed-by: Stefan Metzmacher <[email protected]>
    Reviewed-by: Volker Lendecke <[email protected]>
    Reviewed-by: Jeremy Allison <[email protected]>

commit 8a1cda83fc0a63c20cc3212578ef9310cf7df12d
Author: Björn Baumbach <[email protected]>
Date:   Wed Nov 20 13:00:04 2013 +0100

    docs-man: add manual page for the new worm vfs module
    
    Signed-off-by: Björn Baumbach <[email protected]>
    Reviewed-by: Stefan Metzmacher <[email protected]>
    Reviewed-by: Volker Lendecke <[email protected]>
    Reviewed-by: Jeremy Allison <[email protected]>

commit 5b127a6f6be78174c46973bf3d9630528710b199
Author: Volker Lendecke <[email protected]>
Date:   Wed Nov 20 12:11:41 2013 +0100

    s3-waf: build new vfs_worm module
    
    Signed-off-by: Volker Lendecke <[email protected]>
    Reviewed-by: Stefan Metzmacher <[email protected]>
    Reviewed-by: Jeremy Allison <[email protected]>

commit 2004317c09d781a4ec1275aaa4a29289e798eff3
Author: Volker Lendecke <[email protected]>
Date:   Wed Nov 20 12:09:47 2013 +0100

    s3-modules: add new vfs_worm module
    
    VFS module to disallow writes for older files.
    
    Signed-off-by: Volker Lendecke <[email protected]>
    Reviewed-by: Stefan Metzmacher <[email protected]>
    Reviewed-by: Jeremy Allison <[email protected]>

commit b2dfd57669ba5835feb024b4ce1b3208a797d568
Author: Volker Lendecke <[email protected]>
Date:   Wed Nov 20 12:00:17 2013 +0100

    lib-util: add functions to get elapsed from given timespec structs
    
    Signed-off-by: Volker Lendecke <[email protected]>
    Reviewed-by: Stefan Metzmacher <[email protected]>
    Reviewed-by: Jeremy Allison <[email protected]>

-----------------------------------------------------------------------

Summary of changes:
 docs-xml/manpages/vfs_worm.8.xml               |   93 +++++++++++++++++++++++
 docs-xml/wscript_build                         |    1 +
 lib/compression/testsuite.c                    |    2 -
 lib/ldb-samba/ldb_wrap.c                       |    1 +
 lib/ldb/common/ldb_dn.c                        |    4 +-
 lib/ldb/ldb_map/ldb_map_inbound.c              |    4 +-
 lib/tdb/common/summary.c                       |   10 +-
 lib/tdb/test/run-3G-file.c                     |    6 +-
 lib/util/time.c                                |   18 +++++
 lib/util/time.h                                |   10 +++
 libcli/cldap/cldap.c                           |    3 +-
 libcli/nbt/nbtname.c                           |    1 +
 source3/libsmb/cliconnect.c                    |    2 +-
 source3/modules/vfs_worm.c                     |   97 ++++++++++++++++++++++++
 source3/modules/wscript_build                  |    8 ++
 source3/printing/spoolssd.c                    |    2 +-
 source3/smbd/smb2_close.c                      |   16 ++--
 source3/smbd/smb2_sesssetup.c                  |    4 +-
 source3/winbindd/wb_group_members.c            |    4 +-
 source3/wscript                                |    1 +
 source4/dsdb/samdb/ldb_modules/descriptor.c    |    2 +-
 source4/dsdb/samdb/ldb_modules/dirsync.c       |    2 +-
 source4/dsdb/samdb/ldb_modules/password_hash.c |    4 +-
 source4/dsdb/samdb/ldb_modules/samba_dsdb.c    |    2 +-
 source4/dsdb/samdb/ldb_modules/samldb.c        |    2 +-
 source4/dsdb/samdb/ldb_modules/update_keytab.c |    2 +-
 source4/echo_server/echo_server.c              |    3 +-
 source4/kdc/kdc.c                              |    3 +-
 source4/libcli/clilist.c                       |    4 +-
 source4/rpc_server/lsa/lsa_lookup.c            |    2 +-
 30 files changed, 268 insertions(+), 45 deletions(-)
 create mode 100644 docs-xml/manpages/vfs_worm.8.xml
 create mode 100644 source3/modules/vfs_worm.c


Changeset truncated at 500 lines:

diff --git a/docs-xml/manpages/vfs_worm.8.xml b/docs-xml/manpages/vfs_worm.8.xml
new file mode 100644
index 0000000..9758cac
--- /dev/null
+++ b/docs-xml/manpages/vfs_worm.8.xml
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE refentry PUBLIC "-//Samba-Team//DTD DocBook V4.2-Based Variant 
V1.0//EN" "http://www.samba.org/samba/DTD/samba-doc";>
+<refentry id="vfs_worm.8">
+
+<refmeta>
+       <refentrytitle>vfs_worm</refentrytitle>
+       <manvolnum>8</manvolnum>
+       <refmiscinfo class="source">Samba</refmiscinfo>
+       <refmiscinfo class="manual">System Administration tools</refmiscinfo>
+       <refmiscinfo class="version">4.1</refmiscinfo>
+</refmeta>
+
+
+<refnamediv>
+       <refname>vfs_worm</refname>
+       <refpurpose>disallows writes for older file</refpurpose>
+</refnamediv>
+
+<refsynopsisdiv>
+       <cmdsynopsis>
+               <command>vfs objects = worm</command>
+       </cmdsynopsis>
+</refsynopsisdiv>
+
+<refsect1>
+       <title>DESCRIPTION</title>
+
+       <para>This VFS module is part of the
+       <citerefentry><refentrytitle>samba</refentrytitle>
+       <manvolnum>7</manvolnum></citerefentry> suite.</para>
+
+       <para>The <command>vfs_worm</command> module controls the writability
+       of files and folders depending on their change time and a
+       adjustable grace period.</para>
+
+       <para>If the change time of a file or directory is older than
+       the specified grace period, the write access will be denied,
+       independent of further access controls (e.g. by the filesystem).</para>
+
+       <para>In the case that the grace period is not exceed, the worm
+       module will not impact any access controls.</para>
+</refsect1>
+
+<refsect1>
+       <title>OPTIONS</title>
+
+       <variablelist>
+
+               <varlistentry>
+               <term>worm:grace_period = SECONDS</term>
+               <listitem>
+               <para>Period in seconds which defines the time how long the
+               write access should be handled by the normal access controls.
+               After this grace period the file or directory becomes read
+               only.</para>
+               </listitem>
+               </varlistentry>
+
+       </variablelist>
+</refsect1>
+
+<refsect1>
+       <title>EXAMPLES</title>
+
+       <para>Deny the write access to files and folders, which are older
+       than five minutes (300 seconds):</para>
+
+<programlisting>
+       <smbconfsection name="[wormshare]"/>
+       <smbconfoption name="vfs objects">worm</smbconfoption>
+       <smbconfoption name="worm:grace_period">300</smbconfoption>
+</programlisting>
+
+</refsect1>
+
+<refsect1>
+       <title>VERSION</title>
+
+       <para>This man page is correct for version 4.2 of the Samba suite.
+       </para>
+</refsect1>
+
+<refsect1>
+       <title>AUTHOR</title>
+
+       <para>The original Samba software and related utilities
+       were created by Andrew Tridgell. Samba is now developed
+       by the Samba Team as an Open Source project similar
+       to the way the Linux kernel is developed.</para>
+
+</refsect1>
+
+</refentry>
diff --git a/docs-xml/wscript_build b/docs-xml/wscript_build
index 9c6042f..a752758 100644
--- a/docs-xml/wscript_build
+++ b/docs-xml/wscript_build
@@ -80,6 +80,7 @@ manpages='''
          manpages/vfs_syncops.8
          manpages/vfs_time_audit.8
          manpages/vfs_tsmsm.8
+         manpages/vfs_worm.8
          manpages/vfs_xattr_tdb.8
          manpages/vfstest.1
          manpages/wbinfo.1
diff --git a/lib/compression/testsuite.c b/lib/compression/testsuite.c
index 5758891..d897c88 100644
--- a/lib/compression/testsuite.c
+++ b/lib/compression/testsuite.c
@@ -29,7 +29,6 @@
 static bool test_lzxpress(struct torture_context *test)
 {
        TALLOC_CTX *tmp_ctx = talloc_new(test);
-       uint8_t *data;
        const char *fixed_data = "this is a test. and this is a test too";
        const uint8_t fixed_out[] = { 0x00, 0x20, 0x00, 0x04, 0x74, 0x68, 0x69, 
0x73,
                                      0x20, 0x10, 0x00, 0x61, 0x20, 0x74, 0x65, 
0x73,
@@ -39,7 +38,6 @@ static bool test_lzxpress(struct torture_context *test)
        ssize_t c_size;
        uint8_t *out, *out2;
 
-       data = talloc_size(tmp_ctx, 1023);
        out  = talloc_size(tmp_ctx, 2048);
        memset(out, 0x42, talloc_get_size(out));
 
diff --git a/lib/ldb-samba/ldb_wrap.c b/lib/ldb-samba/ldb_wrap.c
index 65956ef..05d0451 100644
--- a/lib/ldb-samba/ldb_wrap.c
+++ b/lib/ldb-samba/ldb_wrap.c
@@ -37,6 +37,7 @@
 #include "../lib/util/dlinklist.h"
 #include <tdb.h>
 
+#undef DBGC_CLASS
 #define DBGC_CLASS DBGC_LDB
 
 /*
diff --git a/lib/ldb/common/ldb_dn.c b/lib/ldb/common/ldb_dn.c
index 14596f6..6b6f90c 100644
--- a/lib/ldb/common/ldb_dn.c
+++ b/lib/ldb/common/ldb_dn.c
@@ -287,7 +287,7 @@ char *ldb_dn_escape_value(TALLOC_CTX *mem_ctx, struct 
ldb_val value)
 */
 static bool ldb_dn_explode(struct ldb_dn *dn)
 {
-       char *p, *ex_name, *ex_value, *data, *d, *dt, *t;
+       char *p, *ex_name = NULL, *ex_value = NULL, *data, *d, *dt, *t;
        bool trim = true;
        bool in_extended = true;
        bool in_ex_name = false;
@@ -298,7 +298,7 @@ static bool ldb_dn_explode(struct ldb_dn *dn)
        bool is_oid = false;
        bool escape = false;
        unsigned int x;
-       size_t l;
+       size_t l = 0;
        int ret;
        char *parse_dn;
        bool is_index;
diff --git a/lib/ldb/ldb_map/ldb_map_inbound.c 
b/lib/ldb/ldb_map/ldb_map_inbound.c
index 06d52aa..461e681 100644
--- a/lib/ldb/ldb_map/ldb_map_inbound.c
+++ b/lib/ldb/ldb_map/ldb_map_inbound.c
@@ -476,7 +476,7 @@ static int map_add_do_local(struct map_context *ac)
 int ldb_map_modify(struct ldb_module *module, struct ldb_request *req)
 {
        const struct ldb_message *msg = req->op.mod.message;
-       struct ldb_request *search_req;
+       struct ldb_request *search_req = NULL;
        struct ldb_message *remote_msg;
        struct ldb_context *ldb;
        struct map_context *ac;
@@ -699,7 +699,7 @@ static int map_delete_do_local(struct map_context *ac)
 /* Rename a record. */
 int ldb_map_rename(struct ldb_module *module, struct ldb_request *req)
 {
-       struct ldb_request *search_req;
+       struct ldb_request *search_req = NULL;
        struct ldb_context *ldb;
        struct map_context *ac;
        int ret;
diff --git a/lib/tdb/common/summary.c b/lib/tdb/common/summary.c
index 3c6f755..a22c17d 100644
--- a/lib/tdb/common/summary.c
+++ b/lib/tdb/common/summary.c
@@ -88,7 +88,7 @@ static size_t get_hash_length(struct tdb_context *tdb, 
unsigned int i)
 _PUBLIC_ char *tdb_summary(struct tdb_context *tdb)
 {
        tdb_off_t off, rec_off;
-       struct tally freet, keys, data, dead, extra, hash, uncoal;
+       struct tally freet, keys, data, dead, extra, hashval, uncoal;
        struct tdb_record rec;
        char *ret = NULL;
        bool locked;
@@ -114,7 +114,7 @@ _PUBLIC_ char *tdb_summary(struct tdb_context *tdb)
        tally_init(&data);
        tally_init(&dead);
        tally_init(&extra);
-       tally_init(&hash);
+       tally_init(&hashval);
        tally_init(&uncoal);
 
        for (off = TDB_DATA_START(tdb->hash_size);
@@ -161,7 +161,7 @@ _PUBLIC_ char *tdb_summary(struct tdb_context *tdb)
                tally_add(&uncoal, unc - 1);
 
        for (off = 0; off < tdb->hash_size; off++)
-               tally_add(&hash, get_hash_length(tdb, off));
+               tally_add(&hashval, get_hash_length(tdb, off));
 
        /* 20 is max length of a %zu. */
        len = strlen(SUMMARY_FORMAT) + 35*20 + 1;
@@ -180,8 +180,8 @@ _PUBLIC_ char *tdb_summary(struct tdb_context *tdb)
                 dead.min, tally_mean(&dead), dead.max,
                 freet.num,
                 freet.min, tally_mean(&freet), freet.max,
-                hash.num,
-                hash.min, tally_mean(&hash), hash.max,
+                hashval.num,
+                hashval.min, tally_mean(&hashval), hashval.max,
                 uncoal.total,
                 uncoal.min, tally_mean(&uncoal), uncoal.max,
                 keys.total * 100.0 / tdb->map_size,
diff --git a/lib/tdb/test/run-3G-file.c b/lib/tdb/test/run-3G-file.c
index 3ee9de1..f21544a 100644
--- a/lib/tdb/test/run-3G-file.c
+++ b/lib/tdb/test/run-3G-file.c
@@ -66,7 +66,7 @@ int main(int argc, char *argv[])
 {
        struct tdb_context *tdb;
        TDB_DATA key, orig_data, data;
-       uint32_t hash;
+       uint32_t hashval;
        tdb_off_t rec_ptr;
        struct tdb_record rec;
        int ret;
@@ -113,8 +113,8 @@ int main(int argc, char *argv[])
        free(data.dptr);
 
        /* That currently fills at the end, make sure that's true. */
-       hash = tdb->hash_fn(&key);
-       rec_ptr = tdb_find_lock_hash(tdb, key, hash, F_RDLCK, &rec);
+       hashval = tdb->hash_fn(&key);
+       rec_ptr = tdb_find_lock_hash(tdb, key, hashval, F_RDLCK, &rec);
        ok1(rec_ptr);
        ok1(rec_ptr > 2U*1024*1024*1024);
        tdb_unlock(tdb, BUCKET(rec.full_hash), F_RDLCK);
diff --git a/lib/util/time.c b/lib/util/time.c
index 05251dd..a09490a 100644
--- a/lib/util/time.c
+++ b/lib/util/time.c
@@ -652,6 +652,24 @@ _PUBLIC_ double timeval_elapsed(const struct timeval *tv)
        struct timeval tv2 = timeval_current();
        return timeval_elapsed2(tv, &tv2);
 }
+/**
+ *   return the number of seconds elapsed between two times
+ **/
+_PUBLIC_ double timespec_elapsed2(const struct timespec *ts1,
+                               const struct timespec *ts2)
+{
+       return (ts2->tv_sec - ts1->tv_sec) +
+              (ts2->tv_nsec - ts1->tv_nsec)*1.0e-9;
+}
+
+/**
+ *   return the number of seconds elapsed since a given time
+ */
+_PUBLIC_ double timespec_elapsed(const struct timespec *ts)
+{
+       struct timespec ts2 = timespec_current();
+       return timespec_elapsed2(ts, &ts2);
+}
 
 /**
   return the lesser of two timevals
diff --git a/lib/util/time.h b/lib/util/time.h
index 69ba783..b5302f8 100644
--- a/lib/util/time.h
+++ b/lib/util/time.h
@@ -247,6 +247,16 @@ double timeval_elapsed2(const struct timeval *tv1, const 
struct timeval *tv2);
 double timeval_elapsed(const struct timeval *tv);
 
 /**
+  return the number of seconds elapsed between two times
+*/
+double timespec_elapsed2(const struct timespec *ts1,
+                        const struct timespec *ts2);
+/**
+  return the number of seconds elapsed since a given time
+*/
+double timespec_elapsed(const struct timespec *ts);
+
+/**
   return the lesser of two timevals
 */
 struct timeval timeval_min(const struct timeval *tv1,
diff --git a/libcli/cldap/cldap.c b/libcli/cldap/cldap.c
index e543091..eb4f102 100644
--- a/libcli/cldap/cldap.c
+++ b/libcli/cldap/cldap.c
@@ -930,8 +930,7 @@ char *cldap_netlogon_create_filter(TALLOC_CTX *mem_ctx,
        }
        if (io->in.domain_guid) {
                struct GUID guid;
-               NTSTATUS status;
-               status = GUID_from_string(io->in.domain_guid, &guid);
+               GUID_from_string(io->in.domain_guid, &guid);
                if (filter == NULL) {
                        return NULL;
                }
diff --git a/libcli/nbt/nbtname.c b/libcli/nbt/nbtname.c
index fd49334..5be7830 100644
--- a/libcli/nbt/nbtname.c
+++ b/libcli/nbt/nbtname.c
@@ -28,6 +28,7 @@
 #include "librpc/gen_ndr/ndr_misc.h"
 #include "system/locale.h"
 #include "lib/util/util_net.h"
+#include "libcli/nbt/libnbt.h"
 
 /*
   decompress a 'compressed' name component
diff --git a/source3/libsmb/cliconnect.c b/source3/libsmb/cliconnect.c
index 3c9d03a..964d5fd 100644
--- a/source3/libsmb/cliconnect.c
+++ b/source3/libsmb/cliconnect.c
@@ -3029,7 +3029,7 @@ static void cli_connect_nb_done(struct tevent_req *subreq)
        struct cli_connect_nb_state *state = tevent_req_data(
                req, struct cli_connect_nb_state);
        NTSTATUS status;
-       int fd;
+       int fd = 0;
        uint16_t port;
 
        status = cli_connect_sock_recv(subreq, &fd, &port);
diff --git a/source3/modules/vfs_worm.c b/source3/modules/vfs_worm.c
new file mode 100644
index 0000000..77a18ca
--- /dev/null
+++ b/source3/modules/vfs_worm.c
@@ -0,0 +1,97 @@
+/*
+ * VFS module to disallow writes for older files
+ *
+ * Copyright (C) 2013, Volker Lendecke
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "includes.h"
+#include "smbd/smbd.h"
+#include "system/filesys.h"
+#include "libcli/security/security.h"
+
+static NTSTATUS vfs_worm_create_file(vfs_handle_struct *handle,
+                                    struct smb_request *req,
+                                    uint16_t root_dir_fid,
+                                    struct smb_filename *smb_fname,
+                                    uint32_t access_mask,
+                                    uint32_t share_access,
+                                    uint32_t create_disposition,
+                                    uint32_t create_options,
+                                    uint32_t file_attributes,
+                                    uint32_t oplock_request,
+                                    uint64_t allocation_size,
+                                    uint32_t private_flags,
+                                    struct security_descriptor *sd,
+                                    struct ea_list *ea_list,
+                                    files_struct **result,
+                                    int *pinfo)
+{
+       bool readonly = false;
+       const uint32_t write_access_flags =
+               FILE_WRITE_DATA | FILE_APPEND_DATA |
+               FILE_WRITE_ATTRIBUTES | DELETE_ACCESS |
+               WRITE_DAC_ACCESS | WRITE_OWNER_ACCESS;
+       NTSTATUS status;
+
+       if (VALID_STAT(smb_fname->st)) {
+               double age;
+               age = timespec_elapsed(&smb_fname->st.st_ex_ctime);
+               if (age > lp_parm_int(SNUM(handle->conn), "worm",
+                                     "grace_period", 3600)) {
+                       readonly = true;
+               }
+       }
+
+       if (readonly && (access_mask & write_access_flags)) {
+               return NT_STATUS_ACCESS_DENIED;
+       }
+
+       status = SMB_VFS_NEXT_CREATE_FILE(
+               handle, req, root_dir_fid, smb_fname, access_mask,
+               share_access, create_disposition, create_options,
+               file_attributes, oplock_request, allocation_size,
+               private_flags, sd, ea_list, result, pinfo);
+       if (!NT_STATUS_IS_OK(status)) {
+               return status;
+       }
+
+       /*
+        * Access via MAXIMUM_ALLOWED_ACCESS?
+        */
+       if (readonly && ((*result)->access_mask & write_access_flags)) {
+               close_file(req, *result, NORMAL_CLOSE);
+               return NT_STATUS_ACCESS_DENIED;
+       }
+       return NT_STATUS_OK;
+}
+
+static struct vfs_fn_pointers vfs_worm_fns = {
+       .create_file_fn = vfs_worm_create_file,
+};
+
+NTSTATUS vfs_worm_init(void);
+NTSTATUS vfs_worm_init(void)
+{
+       NTSTATUS ret;
+
+       ret = smb_register_vfs(SMB_VFS_INTERFACE_VERSION, "worm",
+                              &vfs_worm_fns);
+       if (!NT_STATUS_IS_OK(ret)) {
+               return ret;
+       }
+
+       return ret;
+}
diff --git a/source3/modules/wscript_build b/source3/modules/wscript_build
index 32e541f..25c9d5b 100644
--- a/source3/modules/wscript_build
+++ b/source3/modules/wscript_build
@@ -474,3 +474,11 @@ bld.SAMBA3_MODULE('vfs_glusterfs',
                   internal_module=bld.SAMBA3_IS_STATIC_MODULE('vfs_glusterfs'),
                   enabled=bld.SAMBA3_IS_ENABLED_MODULE('vfs_glusterfs'),
                   allow_undefined_symbols=False)
+
+bld.SAMBA3_MODULE('vfs_worm',
+                  subsystem='vfs',
+                  source='vfs_worm.c',
+                  deps='samba-util',
+                  init_function='',
+                  internal_module=bld.SAMBA3_IS_STATIC_MODULE('vfs_worm'),
+                  enabled=bld.SAMBA3_IS_ENABLED_MODULE('vfs_worm'))
diff --git a/source3/printing/spoolssd.c b/source3/printing/spoolssd.c
index 8f182f8..0b6980a 100644
--- a/source3/printing/spoolssd.c
+++ b/source3/printing/spoolssd.c
@@ -372,7 +372,7 @@ static int spoolss_children_main(struct tevent_context 
*ev_ctx,
 {
        struct spoolss_children_data *data;
        bool ok;
-       int ret;
+       int ret = 0;
 
        ok = spoolss_child_init(ev_ctx, child_id, pf);
        if (!ok) {
diff --git a/source3/smbd/smb2_close.c b/source3/smbd/smb2_close.c
index c4f0f19..dce8cac 100644
--- a/source3/smbd/smb2_close.c
+++ b/source3/smbd/smb2_close.c
@@ -83,14 +83,14 @@ static void smbd_smb2_request_close_done(struct tevent_req 
*subreq)
                tevent_req_callback_data(subreq,
                struct smbd_smb2_request);
        DATA_BLOB outbody;
-       uint16_t out_flags;
-       NTTIME out_creation_time;
-       NTTIME out_last_access_time;
-       NTTIME out_last_write_time;
-       NTTIME out_change_time;
-       uint64_t out_allocation_size;
-       uint64_t out_end_of_file;
-       uint32_t out_file_attributes;
+       uint16_t out_flags = 0;
+       NTTIME out_creation_time = 0;
+       NTTIME out_last_access_time = 0;
+       NTTIME out_last_write_time = 0;
+       NTTIME out_change_time = 0;
+       uint64_t out_allocation_size = 0;
+       uint64_t out_end_of_file = 0;
+       uint32_t out_file_attributes = 0;
        NTSTATUS status;
        NTSTATUS error;


-- 
Samba Shared Repository

Reply via email to