diff --git a/.gitignore b/.gitignore
index 01e1081..6cf3170 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,2 @@
-SOURCES/tdb-1.4.3.tar.gz
+SOURCES/tdb-1.4.4.tar.gz
+SOURCES/tdb.keyring
diff --git a/.libtdb.metadata b/.libtdb.metadata
index 3a43be5..fe07811 100644
--- a/.libtdb.metadata
+++ b/.libtdb.metadata
@@ -1 +1,2 @@
-a8b7de5efceb288d4ad3174866111452ef5bf21b SOURCES/tdb-1.4.3.tar.gz
+1bd096a049e8bd85934e4e3f4005fb192f010bbb SOURCES/tdb-1.4.4.tar.gz
+41c0b3a84123968a0df75d416c57fe2879205585 SOURCES/tdb.keyring
diff --git a/SOURCES/0003-wafsamba-Fix-few-SyntaxWarnings-caused-by-regular-ex.patch b/SOURCES/0003-wafsamba-Fix-few-SyntaxWarnings-caused-by-regular-ex.patch
new file mode 100644
index 0000000..7fdf0c1
--- /dev/null
+++ b/SOURCES/0003-wafsamba-Fix-few-SyntaxWarnings-caused-by-regular-ex.patch
@@ -0,0 +1,195 @@
+From 87dfb0ce329447625050771fd83dae1841ece1b8 Mon Sep 17 00:00:00 2001
+From: Lukas Slebodnik <lslebodn@fedoraproject.org>
+Date: Wed, 12 Jun 2019 13:38:17 +0200
+Subject: [PATCH] wafsamba: Fix few SyntaxWarnings caused by regular
+ expressions
+
+./buildtools/wafsamba/samba_utils.py:258: SyntaxWarning: invalid escape sequence \$
+  lst = re.split('(\$\{\w+\})', string)
+./buildtools/wafsamba/samba_utils.py:261: SyntaxWarning: invalid escape sequence \$
+  if re.match('\$\{\w+\}', v):
+./buildtools/wafsamba/samba_cross.py:80: SyntaxWarning: invalid escape sequence \(
+  m = re.match('\(\s*(-?\d+)\s*,\s*\"(.*)\"\s*\)', ans)
+./buildtools/wafsamba/samba_conftests.py:400: SyntaxWarning: invalid escape sequence \s
+  m = re.search('MAN%sEXT\s+=\s+(\w+)' % section, man)
+./buildtools/wafsamba/samba_abi.py:24: SyntaxWarning: invalid escape sequence \$
+  sig = re.sub('^\$[0-9]+\s=\s\{(.+)\}$', r'\1', sig)
+./buildtools/wafsamba/samba_abi.py:25: SyntaxWarning: invalid escape sequence \$
+  sig = re.sub('^\$[0-9]+\s=\s\{(.+)\}(\s0x[0-9a-f]+\s<\w+>)+$', r'\1', sig)
+./buildtools/wafsamba/samba_abi.py:26: SyntaxWarning: invalid escape sequence \$
+  sig = re.sub('^\$[0-9]+\s=\s(0x[0-9a-f]+)\s?(<\w+>)?$', r'\1', sig)
+./buildtools/wafsamba/samba_abi.py:33: SyntaxWarning: invalid escape sequence \*
+  m = m.replace('*', '\*')
+./buildtools/wafsamba/samba_abi.py:44: SyntaxWarning: invalid escape sequence \s
+  sig = re.sub(',\s\.\.\.', '', sig)
+./buildtools/wafsamba/samba_headers.py:22: SyntaxWarning: invalid escape sequence \s
+  re_header = re.compile('^\s*#\s*include[ \t]*"([^"]+)"', re.I | re.M)
+./buildtools/wafsamba/symbols.py:122: SyntaxWarning: invalid escape sequence \[
+  re_sharedlib = re.compile(b'Shared library: \[(.*)\]')
+./buildtools/wafsamba/symbols.py:124: SyntaxWarning: invalid escape sequence \[
+  re_rpath     = re.compile(b'Library (rpath|runpath): \[(.*)\]')
+./buildtools/wafsamba/pkgconfig.py:12: SyntaxWarning: invalid escape sequence \w
+  a = re.split('(@\w+@)', s)
+./buildtools/wafsamba/pkgconfig.py:17: SyntaxWarning: invalid escape sequence \w
+  if re.match('@\w+@', v):
+./buildtools/wafsamba/configure_file.py:16: SyntaxWarning: invalid escape sequence \w
+  a = re.split('(@\w+@)', s)
+./buildtools/wafsamba/configure_file.py:19: SyntaxWarning: invalid escape sequence \w
+  if re.match('@\w+@', v):
+---
+ buildtools/wafsamba/configure_file.py  |  4 ++--
+ buildtools/wafsamba/pkgconfig.py       |  4 ++--
+ buildtools/wafsamba/samba_abi.py       | 12 ++++++------
+ buildtools/wafsamba/samba_conftests.py |  2 +-
+ buildtools/wafsamba/samba_cross.py     |  2 +-
+ buildtools/wafsamba/samba_headers.py   |  2 +-
+ buildtools/wafsamba/samba_utils.py     |  4 ++--
+ buildtools/wafsamba/symbols.py         |  4 ++--
+ 8 files changed, 17 insertions(+), 17 deletions(-)
+
+diff --git a/buildtools/wafsamba/configure_file.py b/buildtools/wafsamba/configure_file.py
+index 6ad43546249fba7b4c0a037035e8574e7a9d2753..98a58a4604513e3633317e73299c1c9280c250d2 100644
+--- a/buildtools/wafsamba/configure_file.py
++++ b/buildtools/wafsamba/configure_file.py
+@@ -13,10 +13,10 @@ def subst_at_vars(task):
+     s = task.inputs[0].read()
+ 
+     # split on the vars
+-    a = re.split('(@\w+@)', s)
++    a = re.split(r'(@\w+@)', s)
+     out = []
+     for v in a:
+-        if re.match('@\w+@', v):
++        if re.match(r'@\w+@', v):
+             vname = v[1:-1]
+             if not vname in task.env and vname.upper() in task.env:
+                 vname = vname.upper()
+diff --git a/buildtools/wafsamba/pkgconfig.py b/buildtools/wafsamba/pkgconfig.py
+index b83d5f382a58352bb3318b594aa2b45fc02d87d5..b77bd618c8903789c7ba9e64a6972a4e080f1821 100644
+--- a/buildtools/wafsamba/pkgconfig.py
++++ b/buildtools/wafsamba/pkgconfig.py
+@@ -9,12 +9,12 @@ def subst_at_vars(task):
+ 
+     s = task.inputs[0].read()
+     # split on the vars
+-    a = re.split('(@\w+@)', s)
++    a = re.split(r'(@\w+@)', s)
+     out = []
+     done_var = {}
+     back_sub = [ ('PREFIX', '${prefix}'), ('EXEC_PREFIX', '${exec_prefix}')]
+     for v in a:
+-        if re.match('@\w+@', v):
++        if re.match(r'@\w+@', v):
+             vname = v[1:-1]
+             if not vname in task.env and vname.upper() in task.env:
+                 vname = vname.upper()
+diff --git a/buildtools/wafsamba/samba_abi.py b/buildtools/wafsamba/samba_abi.py
+index 5e7686da3d68b1ebcd842b8a319a5997fa9cf600..761667fcfe1f3937be22c8261b45dcb3979ae4cd 100644
+--- a/buildtools/wafsamba/samba_abi.py
++++ b/buildtools/wafsamba/samba_abi.py
+@@ -21,16 +21,16 @@ version_key = lambda x: list(map(int, x.split(".")))
+ def normalise_signature(sig):
+     '''normalise a signature from gdb'''
+     sig = sig.strip()
+-    sig = re.sub('^\$[0-9]+\s=\s\{(.+)\}$', r'\1', sig)
+-    sig = re.sub('^\$[0-9]+\s=\s\{(.+)\}(\s0x[0-9a-f]+\s<\w+>)+$', r'\1', sig)
+-    sig = re.sub('^\$[0-9]+\s=\s(0x[0-9a-f]+)\s?(<\w+>)?$', r'\1', sig)
+-    sig = re.sub('0x[0-9a-f]+', '0xXXXX', sig)
++    sig = re.sub(r'^\$[0-9]+\s=\s\{(.+)\}$', r'\1', sig)
++    sig = re.sub(r'^\$[0-9]+\s=\s\{(.+)\}(\s0x[0-9a-f]+\s<\w+>)+$', r'\1', sig)
++    sig = re.sub(r'^\$[0-9]+\s=\s(0x[0-9a-f]+)\s?(<\w+>)?$', r'\1', sig)
++    sig = re.sub(r'0x[0-9a-f]+', '0xXXXX', sig)
+     sig = re.sub('", <incomplete sequence (\\\\[a-z0-9]+)>', r'\1"', sig)
+ 
+     for t in abi_type_maps:
+         # we need to cope with non-word characters in mapped types
+         m = t
+-        m = m.replace('*', '\*')
++        m = m.replace('*', r'\*')
+         if m[-1].isalnum() or m[-1] == '_':
+             m += '\\b'
+         if m[0].isalnum() or m[0] == '_':
+@@ -41,7 +41,7 @@ def normalise_signature(sig):
+ 
+ def normalise_varargs(sig):
+     '''cope with older versions of gdb'''
+-    sig = re.sub(',\s\.\.\.', '', sig)
++    sig = re.sub(r',\s\.\.\.', '', sig)
+     return sig
+ 
+ 
+diff --git a/buildtools/wafsamba/samba_conftests.py b/buildtools/wafsamba/samba_conftests.py
+index ef632ba903369e4211991f17a3b204bcd96c3a2f..63e50567860ff890b00b0ce6c7607c917b7329d1 100644
+--- a/buildtools/wafsamba/samba_conftests.py
++++ b/buildtools/wafsamba/samba_conftests.py
+@@ -397,7 +397,7 @@ WriteMakefile(
+ 
+     if section:
+         man = Utils.readf(os.path.join(bdir,'Makefile'))
+-        m = re.search('MAN%sEXT\s+=\s+(\w+)' % section, man)
++        m = re.search(r'MAN%sEXT\s+=\s+(\w+)' % section, man)
+         if not m:
+             conf.end_msg('not found', color='YELLOW')
+             return
+diff --git a/buildtools/wafsamba/samba_cross.py b/buildtools/wafsamba/samba_cross.py
+index 8863c2c53e7d7dd9317c9233f0085ffd0eea6b2f..34793902fba884cf2d8358bf4315dc98027266b6 100644
+--- a/buildtools/wafsamba/samba_cross.py
++++ b/buildtools/wafsamba/samba_cross.py
+@@ -77,7 +77,7 @@ def cross_answer(ca_file, msg):
+                 f.close()
+                 return (0, ans.strip("'"))
+             else:
+-                m = re.match('\(\s*(-?\d+)\s*,\s*\"(.*)\"\s*\)', ans)
++                m = re.match(r'\(\s*(-?\d+)\s*,\s*\"(.*)\"\s*\)', ans)
+                 if m:
+                     f.close()
+                     return (int(m.group(1)), m.group(2))
+diff --git a/buildtools/wafsamba/samba_headers.py b/buildtools/wafsamba/samba_headers.py
+index a268c011c5d8e406e0d763554c55668cfb5388bc..c8bee19010978a04460b0637fcc8fd484a699ea8 100644
+--- a/buildtools/wafsamba/samba_headers.py
++++ b/buildtools/wafsamba/samba_headers.py
+@@ -19,7 +19,7 @@ def header_install_path(header, header_path):
+     return ''
+ 
+ 
+-re_header = re.compile('^\s*#\s*include[ \t]*"([^"]+)"', re.I | re.M)
++re_header = re.compile(r'^\s*#\s*include[ \t]*"([^"]+)"', re.I | re.M)
+ 
+ # a dictionary mapping source header paths to public header paths
+ header_map = {}
+diff --git a/buildtools/wafsamba/samba_utils.py b/buildtools/wafsamba/samba_utils.py
+index ad97de1859ba24c4afd5106b4f9694b0dc855643..75c9794ec40f327ef8ccf9aa33fafd6ed6181e3b 100644
+--- a/buildtools/wafsamba/samba_utils.py
++++ b/buildtools/wafsamba/samba_utils.py
+@@ -255,10 +255,10 @@ def TO_LIST(str, delimiter=None):
+ 
+ def subst_vars_error(string, env):
+     '''substitute vars, throw an error if a variable is not defined'''
+-    lst = re.split('(\$\{\w+\})', string)
++    lst = re.split(r'(\$\{\w+\})', string)
+     out = []
+     for v in lst:
+-        if re.match('\$\{\w+\}', v):
++        if re.match(r'\$\{\w+\}', v):
+             vname = v[2:-1]
+             if not vname in env:
+                 raise KeyError("Failed to find variable %s in %s in env %s <%s>" % (vname, string, env.__class__, str(env)))
+diff --git a/buildtools/wafsamba/symbols.py b/buildtools/wafsamba/symbols.py
+index 3eca3d46bd71cf0780b3c8e36a26b96bd3aa3b83..73e8ca8ce53ef5d956ac58e14a2403dd49f01109 100644
+--- a/buildtools/wafsamba/symbols.py
++++ b/buildtools/wafsamba/symbols.py
+@@ -119,9 +119,9 @@ def find_ldd_path(bld, libname, binary):
+ 
+ 
+ # some regular expressions for parsing readelf output
+-re_sharedlib = re.compile(b'Shared library: \[(.*)\]')
++re_sharedlib = re.compile(r'Shared library: \[(.*)\]')
+ # output from readelf could be `Library rpath` or `Libray runpath`
+-re_rpath     = re.compile(b'Library (rpath|runpath): \[(.*)\]')
++re_rpath     = re.compile(r'Library (rpath|runpath): \[(.*)\]')
+ 
+ def get_libs(bld, binname):
+     '''find the list of linked libraries for any binary or library
+-- 
+2.22.0
+
diff --git a/SOURCES/libtdb-revert-breaking-tdb.h.patch b/SOURCES/libtdb-revert-breaking-tdb.h.patch
new file mode 100644
index 0000000..ef08d97
--- /dev/null
+++ b/SOURCES/libtdb-revert-breaking-tdb.h.patch
@@ -0,0 +1,567 @@
+From 7880e098039ca3e42fa43a055d6812f7b3ef9c0a Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?G=C3=BCnther=20Deschner?= <gd@samba.org>
+Date: Fri, 16 Jul 2021 16:56:49 +0200
+Subject: [PATCH] Revert "tdb: fix studio compiler build"
+
+This reverts commit 3c1013caf4b57c6af5a5d210df232c08a1227a17.
+---
+ lib/tdb/common/lock.c |   6 +-
+ lib/tdb/include/tdb.h | 138 +++++++++++++++++++++---------------------
+ 2 files changed, 71 insertions(+), 73 deletions(-)
+
+diff --git a/lib/tdb/common/lock.c b/lib/tdb/common/lock.c
+index c4e276f84d6..5fba02f9b12 100644
+--- tdb/common/lock.c
++++ tdb/common/lock.c
+@@ -506,7 +506,6 @@ int tdb_lock(struct tdb_context *tdb, int list, int ltype)
+ }
+ 
+ /* lock a list in the database. list -1 is the alloc list. non-blocking lock */
+-_PUBLIC_ int tdb_lock_nonblock(struct tdb_context *tdb, int list, int ltype);
+ _PUBLIC_ int tdb_lock_nonblock(struct tdb_context *tdb, int list, int ltype)
+ {
+ 	return tdb_lock_list(tdb, list, ltype, TDB_LOCK_NOWAIT);
+@@ -568,7 +567,6 @@ int tdb_nest_unlock(struct tdb_context *tdb, uint32_t offset, int ltype,
+ 	return ret;
+ }
+ 
+-_PUBLIC_ int tdb_unlock(struct tdb_context *tdb, int list, int ltype);
+ _PUBLIC_ int tdb_unlock(struct tdb_context *tdb, int list, int ltype)
+ {
+ 	/* a global lock allows us to avoid per chain locks */
+@@ -1019,14 +1017,14 @@ void tdb_release_transaction_locks(struct tdb_context *tdb)
+ /* Following functions are added specifically to support CTDB. */
+ 
+ /* Don't do actual fcntl locking, just mark tdb locked */
+-_PUBLIC_ int tdb_transaction_write_lock_mark(struct tdb_context *tdb);
++int tdb_transaction_write_lock_mark(struct tdb_context *tdb);
+ _PUBLIC_ int tdb_transaction_write_lock_mark(struct tdb_context *tdb)
+ {
+ 	return tdb_transaction_lock(tdb, F_WRLCK, TDB_LOCK_MARK_ONLY);
+ }
+ 
+ /* Don't do actual fcntl unlocking, just mark tdb unlocked */
+-_PUBLIC_ int tdb_transaction_write_lock_unmark(struct tdb_context *tdb);
++int tdb_transaction_write_lock_unmark(struct tdb_context *tdb);
+ _PUBLIC_ int tdb_transaction_write_lock_unmark(struct tdb_context *tdb)
+ {
+ 	return tdb_nest_unlock(tdb, TRANSACTION_LOCK, F_WRLCK, true);
+diff --git a/lib/tdb/include/tdb.h b/lib/tdb/include/tdb.h
+index 696547c8cd9..9d63a96b4ac 100644
+--- tdb/include/tdb.h
++++ tdb/include/tdb.h
+@@ -159,7 +159,7 @@ struct tdb_logging_context {
+  *
+  * @return              A tdb context structure, NULL on error.
+  */
+-_PUBLIC_ struct tdb_context *tdb_open(const char *name, int hash_size, int tdb_flags,
++struct tdb_context *tdb_open(const char *name, int hash_size, int tdb_flags,
+ 		      int open_flags, mode_t mode);
+ 
+ /**
+@@ -206,7 +206,7 @@ _PUBLIC_ struct tdb_context *tdb_open(const char *name, int hash_size, int tdb_f
+  *
+  * @see tdb_open()
+  */
+-_PUBLIC_ struct tdb_context *tdb_open_ex(const char *name, int hash_size, int tdb_flags,
++struct tdb_context *tdb_open_ex(const char *name, int hash_size, int tdb_flags,
+ 			 int open_flags, mode_t mode,
+ 			 const struct tdb_logging_context *log_ctx,
+ 			 tdb_hash_func hash_fn);
+@@ -218,7 +218,7 @@ _PUBLIC_ struct tdb_context *tdb_open_ex(const char *name, int hash_size, int td
+  *
+  * @param[in]  max_dead The maximum number of dead records per hash chain.
+  */
+-_PUBLIC_ void tdb_set_max_dead(struct tdb_context *tdb, int max_dead);
++void tdb_set_max_dead(struct tdb_context *tdb, int max_dead);
+ 
+ /**
+  * @brief Reopen a tdb.
+@@ -233,7 +233,7 @@ _PUBLIC_ void tdb_set_max_dead(struct tdb_context *tdb, int max_dead);
+  * @note Don't call tdb_error() after this function cause the tdb context will
+  *       be freed on error.
+  */
+-_PUBLIC_ int tdb_reopen(struct tdb_context *tdb);
++int tdb_reopen(struct tdb_context *tdb);
+ 
+ /**
+  * @brief Reopen all tdb's
+@@ -248,7 +248,7 @@ _PUBLIC_ int tdb_reopen(struct tdb_context *tdb);
+  *
+  * @return              0 on success, -1 on error.
+  */
+-_PUBLIC_ int tdb_reopen_all(int parent_longlived);
++int tdb_reopen_all(int parent_longlived);
+ 
+ /**
+  * @brief Set a different tdb logging function.
+@@ -257,7 +257,7 @@ _PUBLIC_ int tdb_reopen_all(int parent_longlived);
+  *
+  * @param[in]  log_ctx  The logging function to set.
+  */
+-_PUBLIC_ void tdb_set_logging_function(struct tdb_context *tdb, const struct tdb_logging_context *log_ctx);
++void tdb_set_logging_function(struct tdb_context *tdb, const struct tdb_logging_context *log_ctx);
+ 
+ /**
+  * @brief Get the tdb last error code.
+@@ -268,7 +268,7 @@ _PUBLIC_ void tdb_set_logging_function(struct tdb_context *tdb, const struct tdb
+  *
+  * @see TDB_ERROR
+  */
+-_PUBLIC_ enum TDB_ERROR tdb_error(struct tdb_context *tdb);
++enum TDB_ERROR tdb_error(struct tdb_context *tdb);
+ 
+ /**
+  * @brief Get a error string for the last tdb error
+@@ -277,7 +277,7 @@ _PUBLIC_ enum TDB_ERROR tdb_error(struct tdb_context *tdb);
+  *
+  * @return              An error string.
+  */
+-_PUBLIC_ const char *tdb_errorstr(struct tdb_context *tdb);
++const char *tdb_errorstr(struct tdb_context *tdb);
+ 
+ /**
+  * @brief Fetch an entry in the database given a key.
+@@ -294,7 +294,7 @@ _PUBLIC_ const char *tdb_errorstr(struct tdb_context *tdb);
+  * @see tdb_error()
+  * @see tdb_errorstr()
+  */
+-_PUBLIC_ TDB_DATA tdb_fetch(struct tdb_context *tdb, TDB_DATA key);
++TDB_DATA tdb_fetch(struct tdb_context *tdb, TDB_DATA key);
+ 
+ /**
+  * @brief Hand a record to a parser function without allocating it.
+@@ -319,7 +319,7 @@ _PUBLIC_ TDB_DATA tdb_fetch(struct tdb_context *tdb, TDB_DATA key);
+  * @return              -1 if the record was not found. If the record was found,
+  *                      the return value of "parser" is passed up to the caller.
+  */
+-_PUBLIC_ int tdb_parse_record(struct tdb_context *tdb, TDB_DATA key,
++int tdb_parse_record(struct tdb_context *tdb, TDB_DATA key,
+ 			      int (*parser)(TDB_DATA key, TDB_DATA data,
+ 					    void *private_data),
+ 			      void *private_data);
+@@ -333,7 +333,7 @@ _PUBLIC_ int tdb_parse_record(struct tdb_context *tdb, TDB_DATA key,
+  *
+  * @return              0 on success, -1 if the key doesn't exist.
+  */
+-_PUBLIC_ int tdb_delete(struct tdb_context *tdb, TDB_DATA key);
++int tdb_delete(struct tdb_context *tdb, TDB_DATA key);
+ 
+ /**
+  * @brief Store an element in the database.
+@@ -355,7 +355,7 @@ _PUBLIC_ int tdb_delete(struct tdb_context *tdb, TDB_DATA key);
+  * @see tdb_error()
+  * @see tdb_errorstr()
+  */
+-_PUBLIC_ int tdb_store(struct tdb_context *tdb, TDB_DATA key, TDB_DATA dbuf, int flag);
++int tdb_store(struct tdb_context *tdb, TDB_DATA key, TDB_DATA dbuf, int flag);
+ 
+ 
+ /**
+@@ -380,7 +380,7 @@ _PUBLIC_ int tdb_store(struct tdb_context *tdb, TDB_DATA key, TDB_DATA dbuf, int
+  * @see tdb_error()
+  * @see tdb_errorstr()
+  */
+-_PUBLIC_ int tdb_storev(struct tdb_context *tdb, TDB_DATA key,
++int tdb_storev(struct tdb_context *tdb, TDB_DATA key,
+ 	       const TDB_DATA *dbufs, int num_dbufs, int flag);
+ 
+ /**
+@@ -399,7 +399,7 @@ _PUBLIC_ int tdb_storev(struct tdb_context *tdb, TDB_DATA key,
+  * @see tdb_error()
+  * @see tdb_errorstr()
+  */
+-_PUBLIC_ int tdb_append(struct tdb_context *tdb, TDB_DATA key, TDB_DATA new_dbuf);
++int tdb_append(struct tdb_context *tdb, TDB_DATA key, TDB_DATA new_dbuf);
+ 
+ /**
+  * @brief Close a database.
+@@ -411,7 +411,7 @@ _PUBLIC_ int tdb_append(struct tdb_context *tdb, TDB_DATA key, TDB_DATA new_dbuf
+  * @note Don't call tdb_error() after this function cause the tdb context will
+  *       be freed on error.
+  */
+-_PUBLIC_ int tdb_close(struct tdb_context *tdb);
++int tdb_close(struct tdb_context *tdb);
+ 
+ /**
+  * @brief Find the first entry in the database and return its key.
+@@ -423,7 +423,7 @@ _PUBLIC_ int tdb_close(struct tdb_context *tdb);
+  * @return              The first entry of the database, an empty TDB_DATA entry
+  *                      if the database is empty.
+  */
+-_PUBLIC_ TDB_DATA tdb_firstkey(struct tdb_context *tdb);
++TDB_DATA tdb_firstkey(struct tdb_context *tdb);
+ 
+ /**
+  * @brief Find the next entry in the database, returning its key.
+@@ -437,7 +437,7 @@ _PUBLIC_ TDB_DATA tdb_firstkey(struct tdb_context *tdb);
+  * @return              The next entry of the current key, an empty TDB_DATA
+  *                      entry if there is no entry.
+  */
+-_PUBLIC_ TDB_DATA tdb_nextkey(struct tdb_context *tdb, TDB_DATA key);
++TDB_DATA tdb_nextkey(struct tdb_context *tdb, TDB_DATA key);
+ 
+ /**
+  * @brief Traverse the entire database.
+@@ -459,7 +459,7 @@ _PUBLIC_ TDB_DATA tdb_nextkey(struct tdb_context *tdb, TDB_DATA key);
+  *
+  * @return              The record count traversed, -1 on error.
+  */
+-_PUBLIC_ int tdb_traverse(struct tdb_context *tdb, tdb_traverse_func fn, void *private_data);
++int tdb_traverse(struct tdb_context *tdb, tdb_traverse_func fn, void *private_data);
+ 
+ /**
+  * @brief Traverse the entire database.
+@@ -478,7 +478,7 @@ _PUBLIC_ int tdb_traverse(struct tdb_context *tdb, tdb_traverse_func fn, void *p
+  *
+  * @return              The record count traversed, -1 on error.
+  */
+-_PUBLIC_ int tdb_traverse_read(struct tdb_context *tdb, tdb_traverse_func fn, void *private_data);
++int tdb_traverse_read(struct tdb_context *tdb, tdb_traverse_func fn, void *private_data);
+ 
+ /**
+  * @brief Traverse a single hash chain
+@@ -511,7 +511,7 @@ _PUBLIC_ int tdb_traverse_read(struct tdb_context *tdb, tdb_traverse_func fn, vo
+  * @return              The record count traversed, -1 on error.
+  */
+ 
+-_PUBLIC_ int tdb_traverse_chain(struct tdb_context *tdb,
++int tdb_traverse_chain(struct tdb_context *tdb,
+ 		       unsigned chain,
+ 		       tdb_traverse_func fn,
+ 		       void *private_data);
+@@ -543,7 +543,7 @@ _PUBLIC_ int tdb_traverse_chain(struct tdb_context *tdb,
+  * @return              The record count traversed, -1 on error.
+  */
+ 
+-_PUBLIC_ int tdb_traverse_key_chain(struct tdb_context *tdb,
++int tdb_traverse_key_chain(struct tdb_context *tdb,
+ 			   TDB_DATA key,
+ 			   tdb_traverse_func fn,
+ 			   void *private_data);
+@@ -560,7 +560,7 @@ _PUBLIC_ int tdb_traverse_key_chain(struct tdb_context *tdb,
+  *
+  * @return              1 if the key is found, 0 if not.
+  */
+-_PUBLIC_ int tdb_exists(struct tdb_context *tdb, TDB_DATA key);
++int tdb_exists(struct tdb_context *tdb, TDB_DATA key);
+ 
+ /**
+  * @brief Lock entire database with a write lock.
+@@ -572,7 +572,7 @@ _PUBLIC_ int tdb_exists(struct tdb_context *tdb, TDB_DATA key);
+  * @see tdb_error()
+  * @see tdb_errorstr()
+  */
+-_PUBLIC_ int tdb_lockall(struct tdb_context *tdb);
++int tdb_lockall(struct tdb_context *tdb);
+ 
+ /**
+  * @brief Lock entire database with a write lock.
+@@ -587,7 +587,7 @@ _PUBLIC_ int tdb_lockall(struct tdb_context *tdb);
+  * @see tdb_error()
+  * @see tdb_errorstr()
+  */
+-_PUBLIC_ int tdb_lockall_nonblock(struct tdb_context *tdb);
++int tdb_lockall_nonblock(struct tdb_context *tdb);
+ 
+ /**
+  * @brief Unlock entire database with write lock.
+@@ -600,7 +600,7 @@ _PUBLIC_ int tdb_lockall_nonblock(struct tdb_context *tdb);
+  * @see tdb_error()
+  * @see tdb_errorstr()
+  */
+-_PUBLIC_ int tdb_unlockall(struct tdb_context *tdb);
++int tdb_unlockall(struct tdb_context *tdb);
+ 
+ /**
+  * @brief Lock entire database with a read lock.
+@@ -612,7 +612,7 @@ _PUBLIC_ int tdb_unlockall(struct tdb_context *tdb);
+  * @see tdb_error()
+  * @see tdb_errorstr()
+  */
+-_PUBLIC_ int tdb_lockall_read(struct tdb_context *tdb);
++int tdb_lockall_read(struct tdb_context *tdb);
+ 
+ /**
+  * @brief Lock entire database with a read lock.
+@@ -627,7 +627,7 @@ _PUBLIC_ int tdb_lockall_read(struct tdb_context *tdb);
+  * @see tdb_error()
+  * @see tdb_errorstr()
+  */
+-_PUBLIC_ int tdb_lockall_read_nonblock(struct tdb_context *tdb);
++int tdb_lockall_read_nonblock(struct tdb_context *tdb);
+ 
+ /**
+  * @brief Unlock entire database with read lock.
+@@ -640,7 +640,7 @@ _PUBLIC_ int tdb_lockall_read_nonblock(struct tdb_context *tdb);
+  * @see tdb_error()
+  * @see tdb_errorstr()
+  */
+-_PUBLIC_ int tdb_unlockall_read(struct tdb_context *tdb);
++int tdb_unlockall_read(struct tdb_context *tdb);
+ 
+ /**
+  * @brief Lock entire database with write lock - mark only.
+@@ -654,7 +654,7 @@ _PUBLIC_ int tdb_unlockall_read(struct tdb_context *tdb);
+  * @see tdb_error()
+  * @see tdb_errorstr()
+  */
+-_PUBLIC_ int tdb_lockall_mark(struct tdb_context *tdb);
++int tdb_lockall_mark(struct tdb_context *tdb);
+ 
+ /**
+  * @brief Lock entire database with write lock - unmark only.
+@@ -668,7 +668,7 @@ _PUBLIC_ int tdb_lockall_mark(struct tdb_context *tdb);
+  * @see tdb_error()
+  * @see tdb_errorstr()
+  */
+-_PUBLIC_ int tdb_lockall_unmark(struct tdb_context *tdb);
++int tdb_lockall_unmark(struct tdb_context *tdb);
+ 
+ /**
+  * @brief Get the name of the current tdb file.
+@@ -679,7 +679,7 @@ _PUBLIC_ int tdb_lockall_unmark(struct tdb_context *tdb);
+  *
+  * @return              The name of the database.
+  */
+-_PUBLIC_ const char *tdb_name(struct tdb_context *tdb);
++const char *tdb_name(struct tdb_context *tdb);
+ 
+ /**
+  * @brief Get the underlying file descriptor being used by tdb.
+@@ -691,7 +691,7 @@ _PUBLIC_ const char *tdb_name(struct tdb_context *tdb);
+  *
+  * @return              The file descriptor or -1.
+  */
+-_PUBLIC_ int tdb_fd(struct tdb_context *tdb);
++int tdb_fd(struct tdb_context *tdb);
+ 
+ /**
+  * @brief Get the current logging function.
+@@ -704,7 +704,7 @@ _PUBLIC_ int tdb_fd(struct tdb_context *tdb);
+  *
+  * @see tdb_get_logging_private()
+  */
+-_PUBLIC_ tdb_log_func tdb_log_fn(struct tdb_context *tdb);
++tdb_log_func tdb_log_fn(struct tdb_context *tdb);
+ 
+ /**
+  * @brief Get the private data of the logging function.
+@@ -715,7 +715,7 @@ _PUBLIC_ tdb_log_func tdb_log_fn(struct tdb_context *tdb);
+  *
+  * @see tdb_log_fn()
+  */
+-_PUBLIC_ void *tdb_get_logging_private(struct tdb_context *tdb);
++void *tdb_get_logging_private(struct tdb_context *tdb);
+ 
+ /**
+  * @brief Is a transaction active?
+@@ -733,7 +733,7 @@ _PUBLIC_ void *tdb_get_logging_private(struct tdb_context *tdb);
+  * @see tdb_transaction_commit()
+  * @see tdb_transaction_cancel()
+  */
+-_PUBLIC_ bool tdb_transaction_active(struct tdb_context *tdb);
++bool tdb_transaction_active(struct tdb_context *tdb);
+ 
+ /**
+  * @brief Start a transaction.
+@@ -766,7 +766,7 @@ _PUBLIC_ bool tdb_transaction_active(struct tdb_context *tdb);
+  * @see tdb_error()
+  * @see tdb_errorstr()
+  */
+-_PUBLIC_ int tdb_transaction_start(struct tdb_context *tdb);
++int tdb_transaction_start(struct tdb_context *tdb);
+ 
+ /**
+  * @brief Start a transaction, non-blocking.
+@@ -779,7 +779,7 @@ _PUBLIC_ int tdb_transaction_start(struct tdb_context *tdb);
+  * @see tdb_errorstr()
+  * @see tdb_transaction_start()
+  */
+-_PUBLIC_ int tdb_transaction_start_nonblock(struct tdb_context *tdb);
++int tdb_transaction_start_nonblock(struct tdb_context *tdb);
+ 
+ /**
+  * @brief Prepare to commit a current transaction, for two-phase commits.
+@@ -796,7 +796,7 @@ _PUBLIC_ int tdb_transaction_start_nonblock(struct tdb_context *tdb);
+  * @see tdb_error()
+  * @see tdb_errorstr()
+  */
+-_PUBLIC_ int tdb_transaction_prepare_commit(struct tdb_context *tdb);
++int tdb_transaction_prepare_commit(struct tdb_context *tdb);
+ 
+ /**
+  * @brief Commit a current transaction.
+@@ -810,7 +810,7 @@ _PUBLIC_ int tdb_transaction_prepare_commit(struct tdb_context *tdb);
+  * @see tdb_error()
+  * @see tdb_errorstr()
+  */
+-_PUBLIC_ int tdb_transaction_commit(struct tdb_context *tdb);
++int tdb_transaction_commit(struct tdb_context *tdb);
+ 
+ /**
+  * @brief Cancel a current transaction.
+@@ -825,7 +825,7 @@ _PUBLIC_ int tdb_transaction_commit(struct tdb_context *tdb);
+  * @see tdb_error()
+  * @see tdb_errorstr()
+  */
+-_PUBLIC_ int tdb_transaction_cancel(struct tdb_context *tdb);
++int tdb_transaction_cancel(struct tdb_context *tdb);
+ 
+ /**
+  * @brief Get the tdb sequence number.
+@@ -845,7 +845,7 @@ _PUBLIC_ int tdb_transaction_cancel(struct tdb_context *tdb);
+  * @see tdb_open()
+  * @see tdb_enable_seqnum()
+  */
+-_PUBLIC_ int tdb_get_seqnum(struct tdb_context *tdb);
++int tdb_get_seqnum(struct tdb_context *tdb);
+ 
+ /**
+  * @brief Get the hash size.
+@@ -854,7 +854,7 @@ _PUBLIC_ int tdb_get_seqnum(struct tdb_context *tdb);
+  *
+  * @return              The hash size.
+  */
+-_PUBLIC_ int tdb_hash_size(struct tdb_context *tdb);
++int tdb_hash_size(struct tdb_context *tdb);
+ 
+ /**
+  * @brief Get the map size.
+@@ -863,7 +863,7 @@ _PUBLIC_ int tdb_hash_size(struct tdb_context *tdb);
+  *
+  * @return             The map size.
+  */
+-_PUBLIC_ size_t tdb_map_size(struct tdb_context *tdb);
++size_t tdb_map_size(struct tdb_context *tdb);
+ 
+ /**
+  * @brief Get the tdb flags set during open.
+@@ -872,7 +872,7 @@ _PUBLIC_ size_t tdb_map_size(struct tdb_context *tdb);
+  *
+  * @return              The flags set to on the database.
+  */
+-_PUBLIC_ int tdb_get_flags(struct tdb_context *tdb);
++int tdb_get_flags(struct tdb_context *tdb);
+ 
+ /**
+  * @brief Add flags to the database.
+@@ -881,7 +881,7 @@ _PUBLIC_ int tdb_get_flags(struct tdb_context *tdb);
+  *
+  * @param[in]  flag     The tdb flags to add.
+  */
+-_PUBLIC_ void tdb_add_flags(struct tdb_context *tdb, unsigned flag);
++void tdb_add_flags(struct tdb_context *tdb, unsigned flag);
+ 
+ /**
+  * @brief Remove flags from the database.
+@@ -890,7 +890,7 @@ _PUBLIC_ void tdb_add_flags(struct tdb_context *tdb, unsigned flag);
+  *
+  * @param[in]  flag     The tdb flags to remove.
+  */
+-_PUBLIC_ void tdb_remove_flags(struct tdb_context *tdb, unsigned flag);
++void tdb_remove_flags(struct tdb_context *tdb, unsigned flag);
+ 
+ /**
+  * @brief Enable sequence number handling on an open tdb.
+@@ -899,7 +899,7 @@ _PUBLIC_ void tdb_remove_flags(struct tdb_context *tdb, unsigned flag);
+  *
+  * @see tdb_get_seqnum()
+  */
+-_PUBLIC_ void tdb_enable_seqnum(struct tdb_context *tdb);
++void tdb_enable_seqnum(struct tdb_context *tdb);
+ 
+ /**
+  * @brief Increment the tdb sequence number.
+@@ -912,7 +912,7 @@ _PUBLIC_ void tdb_enable_seqnum(struct tdb_context *tdb);
+  * @see tdb_enable_seqnum()
+  * @see tdb_get_seqnum()
+  */
+-_PUBLIC_ void tdb_increment_seqnum_nonblock(struct tdb_context *tdb);
++void tdb_increment_seqnum_nonblock(struct tdb_context *tdb);
+ 
+ /**
+  * @brief Create a hash of the key.
+@@ -921,7 +921,7 @@ _PUBLIC_ void tdb_increment_seqnum_nonblock(struct tdb_context *tdb);
+  *
+  * @return              The hash.
+  */
+-_PUBLIC_ unsigned int tdb_jenkins_hash(TDB_DATA *key);
++unsigned int tdb_jenkins_hash(TDB_DATA *key);
+ 
+ /**
+  * @brief Check the consistency of the database.
+@@ -944,7 +944,7 @@ _PUBLIC_ unsigned int tdb_jenkins_hash(TDB_DATA *key);
+  * @see tdb_error()
+  * @see tdb_errorstr()
+  */
+-_PUBLIC_ int tdb_check(struct tdb_context *tdb,
++int tdb_check(struct tdb_context *tdb,
+ 	      int (*check) (TDB_DATA key, TDB_DATA data, void *private_data),
+ 	      void *private_data);
+ 
+@@ -966,7 +966,7 @@ _PUBLIC_ int tdb_check(struct tdb_context *tdb,
+  * @see tdb_error()
+  * @see tdb_errorstr()
+  */
+-_PUBLIC_ int tdb_rescue(struct tdb_context *tdb,
++int tdb_rescue(struct tdb_context *tdb,
+ 	       void (*walk) (TDB_DATA key, TDB_DATA data, void *private_data),
+ 	       void *private_data);
+ 
+@@ -989,34 +989,34 @@ _PUBLIC_ int tdb_rescue(struct tdb_context *tdb,
+  *
+  * @see TDB_MUTEX_LOCKING
+  */
+-_PUBLIC_ bool tdb_runtime_check_for_robust_mutexes(void);
++bool tdb_runtime_check_for_robust_mutexes(void);
+ 
+ /* @} ******************************************************************/
+ 
+ /* Low level locking functions: use with care */
+-_PUBLIC_ int tdb_chainlock(struct tdb_context *tdb, TDB_DATA key);
+-_PUBLIC_ int tdb_chainlock_nonblock(struct tdb_context *tdb, TDB_DATA key);
+-_PUBLIC_ int tdb_chainunlock(struct tdb_context *tdb, TDB_DATA key);
+-_PUBLIC_ int tdb_chainlock_read(struct tdb_context *tdb, TDB_DATA key);
+-_PUBLIC_ int tdb_chainlock_read_nonblock(struct tdb_context *tdb, TDB_DATA key);
+-_PUBLIC_ int tdb_chainunlock_read(struct tdb_context *tdb, TDB_DATA key);
+-_PUBLIC_ int tdb_chainlock_mark(struct tdb_context *tdb, TDB_DATA key);
+-_PUBLIC_ int tdb_chainlock_unmark(struct tdb_context *tdb, TDB_DATA key);
++int tdb_chainlock(struct tdb_context *tdb, TDB_DATA key);
++int tdb_chainlock_nonblock(struct tdb_context *tdb, TDB_DATA key);
++int tdb_chainunlock(struct tdb_context *tdb, TDB_DATA key);
++int tdb_chainlock_read(struct tdb_context *tdb, TDB_DATA key);
++int tdb_chainlock_read_nonblock(struct tdb_context *tdb, TDB_DATA key);
++int tdb_chainunlock_read(struct tdb_context *tdb, TDB_DATA key);
++int tdb_chainlock_mark(struct tdb_context *tdb, TDB_DATA key);
++int tdb_chainlock_unmark(struct tdb_context *tdb, TDB_DATA key);
+ 
+-_PUBLIC_ void tdb_setalarm_sigptr(struct tdb_context *tdb, volatile sig_atomic_t *sigptr);
++void tdb_setalarm_sigptr(struct tdb_context *tdb, volatile sig_atomic_t *sigptr);
+ 
+ /* wipe and repack */
+-_PUBLIC_ int tdb_wipe_all(struct tdb_context *tdb);
+-_PUBLIC_ int tdb_repack(struct tdb_context *tdb);
++int tdb_wipe_all(struct tdb_context *tdb);
++int tdb_repack(struct tdb_context *tdb);
+ 
+ /* Debug functions. Not used in production. */
+-_PUBLIC_ void tdb_dump_all(struct tdb_context *tdb);
+-_PUBLIC_ int tdb_printfreelist(struct tdb_context *tdb);
+-_PUBLIC_ int tdb_validate_freelist(struct tdb_context *tdb, int *pnum_entries);
+-_PUBLIC_ int tdb_freelist_size(struct tdb_context *tdb);
+-_PUBLIC_ char *tdb_summary(struct tdb_context *tdb);
++void tdb_dump_all(struct tdb_context *tdb);
++int tdb_printfreelist(struct tdb_context *tdb);
++int tdb_validate_freelist(struct tdb_context *tdb, int *pnum_entries);
++int tdb_freelist_size(struct tdb_context *tdb);
++char *tdb_summary(struct tdb_context *tdb);
+ 
+-_PUBLIC_ extern TDB_DATA tdb_null;
++extern TDB_DATA tdb_null;
+ 
+ #ifdef  __cplusplus
+ }
+-- 
+2.31.1
+
diff --git a/SOURCES/tdb-1.4.4.tar.asc b/SOURCES/tdb-1.4.4.tar.asc
new file mode 100644
index 0000000..cfa1032
--- /dev/null
+++ b/SOURCES/tdb-1.4.4.tar.asc
@@ -0,0 +1,11 @@
+-----BEGIN PGP SIGNATURE-----
+
+iQEzBAABCgAdFiEEkUejOXGVGO6QEby1R5ORYRMIQCUFAmDv5EAACgkQR5ORYRMI
+QCUKIQf+IYu12bmcSAlHfxP9QBWpYBF+CGk4UNNsw6iNnuYlN4kf12kdNJtV2ZvJ
+umkbtSu76BRHp3zJoIsy1XlivbJUcAz88b5elG0w3VLXfS2HGGvdPW6QLra3MbK9
+8/LAyjSOSnOtYcOSLJM4o3Yacm/Xlv8M2Ydn/vCh/2A52lLw6W6xlsYXL95Jp8v0
+f5XHEOLP4kFFQHhHxLR1Z5AcQ0Y4c5q2qgBiTK/m2m8cXyQMy578Xle+BMGatUXX
+oBva7HSQAWTRfN9BwDFckS6jGDu45UGu39TCqptJhC9WWdI4xUaw9CMHYPhtmJfl
+kyaMmTAA+WkHc63mRy1T2/WgmM8Z0w==
+=4HbA
+-----END PGP SIGNATURE-----
diff --git a/SPECS/libtdb.spec b/SPECS/libtdb.spec
index 783ae04..1f47463 100644
--- a/SPECS/libtdb.spec
+++ b/SPECS/libtdb.spec
@@ -1,22 +1,33 @@
+%if 0%{?fedora} || 0%{?rhel} > 7
+%global with_python3 1
+%endif
+
 Name: libtdb
-Version: 1.4.3
+Version: 1.4.4
 Release: 1%{?dist}
 Summary: The tdb library
 License: LGPLv3+
 URL: http://tdb.samba.org/
-Source: http://samba.org/ftp/tdb/tdb-%{version}.tar.gz
+Source0: http://samba.org/ftp/tdb/tdb-%{version}.tar.gz
+Source1: http://samba.org/ftp/tdb/tdb-%{version}.tar.asc
+# gpg2 --no-default-keyring --keyring ./tdb.keyring --recv-keys 9147A339719518EE9011BCB54793916113084025
+Source2: tdb.keyring
+
+# Patches
+Patch0001: 0003-wafsamba-Fix-few-SyntaxWarnings-caused-by-regular-ex.patch
+Patch0002: libtdb-revert-breaking-tdb.h.patch
 
+BuildRequires: make
 BuildRequires: gcc
+BuildRequires: gnupg2
 BuildRequires: libxslt
 BuildRequires: docbook-style-xsl
+%if 0%{?with_python3}
 BuildRequires: python3-devel
-
-Obsoletes: python2-tdb < %{version}-%{release}
-Obsoletes: python2-tdb-debuginfo < %{version}-%{release}
+%endif
 
 Provides: bundled(libreplace)
-
-# Patches
+Obsoletes: python2-tdb < 1.4.2-1
 
 %description
 A library that implements a trivial database.
@@ -24,7 +35,6 @@ A library that implements a trivial database.
 %package devel
 Summary: Header files need to link the Tdb library
 Requires: libtdb = %{version}-%{release}
-Requires: pkgconfig
 
 %description devel
 Header files needed to develop programs that link against the Tdb library.
@@ -36,6 +46,7 @@ Requires: libtdb = %{version}-%{release}
 %description -n tdb-tools
 Tools to manage Tdb files
 
+%if 0%{?with_python3}
 %package -n python3-tdb
 Summary: Python3 bindings for the Tdb library
 Requires: libtdb = %{version}-%{release}
@@ -43,29 +54,25 @@ Requires: libtdb = %{version}-%{release}
 
 %description -n python3-tdb
 Python3 bindings for libtdb
+%endif
 
 %prep
 %autosetup -n tdb-%{version} -p1
 
 %build
+zcat %{SOURCE0} | gpgv2 --quiet --keyring %{SOURCE2} %{SOURCE1} -
 %configure --disable-rpath \
            --bundled-libraries=NONE \
            --builtin-libraries=replace
 
-make %{?_smp_mflags} V=1
+%make_build
 
 %check
-make %{?_smp_mflags} check
+%make_build check
 
 %install
 make install DESTDIR=$RPM_BUILD_ROOT
 
-# Shared libraries need to be marked executable for
-# rpmbuild to strip them and include them in debuginfo
-find $RPM_BUILD_ROOT -name "*.so*" -exec chmod -c +x {} \;
-
-rm -f $RPM_BUILD_ROOT%{_libdir}/libtdb.a
-
 %files
 %{_libdir}/libtdb.so.*
 
@@ -85,20 +92,19 @@ rm -f $RPM_BUILD_ROOT%{_libdir}/libtdb.a
 %{_mandir}/man8/tdbtool.8*
 %{_mandir}/man8/tdbrestore.8*
 
+%if 0%{?with_python3}
 %files -n python3-tdb
 %{python3_sitearch}/__pycache__/_tdb_text.cpython*.py[co]
 %{python3_sitearch}/tdb.cpython*.so
 %{python3_sitearch}/_tdb_text.py
+%endif
 
-%post -p /sbin/ldconfig
-
-%postun -p /sbin/ldconfig
-
-%post -n python3-tdb -p /sbin/ldconfig
-
-%postun -n python3-tdb -p /sbin/ldconfig
+%ldconfig_scriptlets
 
 %changelog
+* Thu Nov 25 2021 Pavel Filipenský <pfilipen@redhat.com> - 1.4.4-1
+* resolves: rhbz#2013604 - Rebase to version 1.4.4
+
 * Tue Jun 2 2020 Isaac Boukris <iboukris@redhat.com> - 1.4.3-1
 - Resolves: rhbz#1817565 - Rebase libtdb 1.4.3 for samba