The branch, v4-21-stable has been updated
via cc104bd1f42 VERSION: Disable GIT_SNAPSHOT for the 4.21.5 release.
via 1e6a8496fe5 WHATSNEW: Add release notes for Samba 4.21.5.
via 1f9c1dad691 vfs: Fix Bug 15791, vfs_acl_tdb unlinkat()
via fbd038e3db9 vfs: Fix a lock order violation in unlinkat_acl_tdb()
via cd0b2f6df72 vfs_ceph_new: Add path based fallback for
SMB_VFS_FNTIMES
via 8f3bc967657 vfs_ceph_new: Add path based fallback for SMB_VFS_FCHMOD
via 997b4736797 vfs_ceph_new: Add path based fallback for SMB_VFS_FCHOWN
via 9d9998a528b s3/lib: fix matching interfaces with multiple assigned
IPs
via 6533b3db6ce vfs_ceph_new: detect case sensitivity in CephFS
via f57377d1b9c vfs_glusterfs: Retrieve fs capabilities using
vfs_get_fs_capabilities
via 2a70febce8a vfs_ceph_new: Retrieve fs capabilties using
vfs_get_fs_capabilities
via 32e6aefa86d vfs_ceph_new: Populate fs capabilities within
vfs_ceph_statvfs
via 3b5c47c40f2 vfs_ceph: Retrieve fs capabilties using
vfs_get_fs_capabilities
via 78ab723ea2b vfs_ceph: Populate fs capabilities within
cephwrap_statvfs
via 904341acc5f vfs_default: Retrieve fs capabilites using
vfs_get_fs_capabilties
via 8c7d9f39d9f s3/smbd: Add a helper to fetch fs capabilities
via 37a74eb39a9 smbd: consolidate fs capabilities code in
vfswrap_fs_capabilities()
via 40d2b73f24b vfs_ceph_new: Do not resolve by inode number
via d9151f66cc3 vfs_ceph_new: Handle absolute path in vfs_ceph_ll_walk
via 6b997c180f5 vfs_ceph_new: Remove unused code in cephmount_mount_fs()
via 08f2d5abca6 vfs_ceph_new: Remove redundant re-intialization to NULL
via 101c2999830 vfs_ceph_new: use libcephfs nonblocking API for
async-io ops
via f04ad3933b5 vfs_ceph_new: Remove unused symbol for ceph_readdir
via 2900b44971e source3/wscript: Introduce auto mode to build ceph vfs
modules
via d7ac6062d61 s3:utils: Remove call of ads_startup() from
net_ads_keytab_create()
via 92253a4708b s3:libads: Make sure that REALM is always added to
keytab principals
via c0e3cabdb70 lib:krb5_wrap: Add smb_krb5_parse_name_flags()
via b7843d0f422 vfs_shadow_copy2: Use VFS interface to derive mount
point
via cb882609555 ctdb-utils: Fix incorrect FSF address
via 480f27625dd python:tdb_util: "samba-tool domain backup offline"
hangs
via fdb73ecba3b provision: always use a large transaction index cache
via 15232a62876 netcmd: Increase the transaction_index_cache_size to
200k for schemaupgrade
via 6dbb7b0b108 VERSION: Bump version up to Samba 4.21.5...
from 0b084c0bc6f VERSION: Disable GIT_SNAPSHOT for the 4.21.4 release.
https://git.samba.org/?p=samba.git;a=shortlog;h=v4-21-stable
- Log -----------------------------------------------------------------
-----------------------------------------------------------------------
Summary of changes:
VERSION | 2 +-
WHATSNEW.txt | 81 ++-
ctdb/utils/pmda/Install | 3 +-
ctdb/utils/pmda/Remove | 3 +-
ctdb/utils/pmda/domain.h | 3 +-
ctdb/utils/pmda/help | 3 +-
ctdb/utils/pmda/pmda_ctdb.c | 3 +-
ctdb/utils/pmda/pmns | 3 +-
lib/krb5_wrap/krb5_samba.c | 39 +-
lib/krb5_wrap/krb5_samba.h | 5 +
python/samba/netcmd/domain/schemaupgrade.py | 6 +-
python/samba/provision/__init__.py | 9 +-
python/samba/tdb_util.py | 5 +-
source3/lib/interface.c | 5 +-
source3/libads/kerberos_keytab.c | 19 +-
source3/modules/vfs_acl_tdb.c | 51 +-
source3/modules/vfs_ceph.c | 7 +-
source3/modules/vfs_ceph_new.c | 858 ++++++++++++++++++++--------
source3/modules/vfs_default.c | 61 +-
source3/modules/vfs_glusterfs.c | 6 +-
source3/modules/vfs_shadow_copy2.c | 31 +-
source3/smbd/proto.h | 2 +
source3/smbd/smb2_trans2.c | 18 +-
source3/smbd/vfs.c | 72 +++
source3/utils/net_ads.c | 11 -
source3/wscript | 24 +-
26 files changed, 940 insertions(+), 390 deletions(-)
Changeset truncated at 500 lines:
diff --git a/VERSION b/VERSION
index a8a8ae01d2a..f0179480db1 100644
--- a/VERSION
+++ b/VERSION
@@ -27,7 +27,7 @@ SAMBA_COPYRIGHT_STRING="Copyright Andrew Tridgell and the
Samba Team 1992-2024"
########################################################
SAMBA_VERSION_MAJOR=4
SAMBA_VERSION_MINOR=21
-SAMBA_VERSION_RELEASE=4
+SAMBA_VERSION_RELEASE=5
########################################################
# If a official release has a serious bug #
diff --git a/WHATSNEW.txt b/WHATSNEW.txt
index 6d5e65dd043..873b4ec20df 100644
--- a/WHATSNEW.txt
+++ b/WHATSNEW.txt
@@ -1,3 +1,81 @@
+ ==============================
+ Release Notes for Samba 4.21.5
+ March 31, 2025
+ ==============================
+
+
+This is the latest stable release of the Samba 4.21 release series.
+
+
+Changes since 4.21.4
+--------------------
+
+o Douglas Bagnall <[email protected]>
+ * BUG 15795: ldb index cache is too small on known large transactions
+ (schemaupgrade, provision).
+
+o Ralph Boehme <[email protected]>
+ * BUG 15822: Enable support for cephfs case insensitive behavior.
+ * BUG 15823: Subnet based interfaces definition not listening on all covered
+ IP addresses.
+
+o Pavel Filipenský <[email protected]>
+ * BUG 15727: net ad join fails with "Failed to join domain: failed to create
+ kerberos keytab".
+
+o Xavi Hernandez <[email protected]>
+ * BUG 15822: Enable support for cephfs case insensitive behavior.
+
+o Volker Lendecke <[email protected]>
+ * BUG 15791: Remove of file or directory not possible with vfs_acl_tdb.
+
+o Andréas Leroux <[email protected]>
+ * BUG 15795: ldb index cache is too small on known large transactions
+ (schemaupgrade, provision).
+
+o Anoop C S <[email protected]>
+ * BUG 15797: Unable to connect to CephFS subvolume shares with
+ vfs_shadow_copy2.
+ * BUG 15810: Add async io API from libcephfs to ceph_new VFS module.
+ * BUG 15818: vfs_ceph_new module does not work with other modules for
+ snapshot management.
+ * BUG 15822: Enable support for cephfs case insensitive behavior.
+ * BUG 15834: vfs_ceph_new: Add path based fallback for SMB_VFS_FCHOWN,
+ SMB_VFS_FCHMOD and SMB_VFS_FNTIMES.
+
+o Martin Schwenke <[email protected]>
+ * BUG 15820: Incorrect FSF address in ctdb pcp scripts.
+
+o Shachar Sharon <[email protected]>
+ * BUG 15810: Add async io API from libcephfs to ceph_new VFS module.
+
+o Andrea Venturoli <[email protected]>
+ * BUG 15804: "samba-tool domain backup offline" hangs.
+
+
+#######################################
+Reporting bugs & Development Discussion
+#######################################
+
+Please discuss this release on the samba-technical mailing list or by
+joining the #samba-technical:matrix.org matrix room, or
+#samba-technical IRC channel on irc.libera.chat.
+
+If you do report problems then please try to send high quality
+feedback. If you don't provide vital information to help us track down
+the problem then you will probably be ignored. All bug reports should
+be filed under the Samba 4.1 and newer product in the project's Bugzilla
+database (https://bugzilla.samba.org/).
+
+
+======================================================================
+== Our Code, Our Bugs, Our Responsibility.
+== The Samba Team
+======================================================================
+
+
+Release notes for older releases follow:
+----------------------------------------
==============================
Release Notes for Samba 4.21.4
February 17, 2025
@@ -83,8 +161,7 @@ database (https://bugzilla.samba.org/).
======================================================================
-Release notes for older releases follow:
-----------------------------------------
+----------------------------------------------------------------------
==============================
Release Notes for Samba 4.21.3
January 06, 2025
diff --git a/ctdb/utils/pmda/Install b/ctdb/utils/pmda/Install
index a56a63506a8..bd12b7486cf 100644
--- a/ctdb/utils/pmda/Install
+++ b/ctdb/utils/pmda/Install
@@ -13,8 +13,7 @@
# for more details.
#
# You should have received a copy of the GNU General Public License along
-# with this program; if not, write to the Free Software Foundation, Inc.,
-# 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+# with this program; if not, see <https://www.gnu.org/licenses/>.
#
# Install the ctdb PMDA and/or PMNS
#
diff --git a/ctdb/utils/pmda/Remove b/ctdb/utils/pmda/Remove
index 7d1c509e50e..8bf0fe76e15 100644
--- a/ctdb/utils/pmda/Remove
+++ b/ctdb/utils/pmda/Remove
@@ -13,8 +13,7 @@
# for more details.
#
# You should have received a copy of the GNU General Public License along
-# with this program; if not, write to the Free Software Foundation, Inc.,
-# 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+# with this program; if not, see <https://www.gnu.org/licenses/>.
#
# Remove the ctdb PMDA
#
diff --git a/ctdb/utils/pmda/domain.h b/ctdb/utils/pmda/domain.h
index 0bed7fef599..b00d32d90dc 100644
--- a/ctdb/utils/pmda/domain.h
+++ b/ctdb/utils/pmda/domain.h
@@ -13,7 +13,6 @@
* 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, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * along with this program; if not, see <https://www.gnu.org/licenses/>.
*/
#define CTDB 110
diff --git a/ctdb/utils/pmda/help b/ctdb/utils/pmda/help
index 0e9984eab3a..26b5385b0da 100644
--- a/ctdb/utils/pmda/help
+++ b/ctdb/utils/pmda/help
@@ -12,8 +12,7 @@
# for more details.
#
# You should have received a copy of the GNU General Public License along
-# with this program; if not, write to the Free Software Foundation, Inc.,
-# 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+# with this program; if not, see <https://www.gnu.org/licenses/>.
#
# ctdb PMDA help file in the ASCII format
#
diff --git a/ctdb/utils/pmda/pmda_ctdb.c b/ctdb/utils/pmda/pmda_ctdb.c
index 4f7933de9c5..7ac8a3b38d1 100644
--- a/ctdb/utils/pmda/pmda_ctdb.c
+++ b/ctdb/utils/pmda/pmda_ctdb.c
@@ -15,8 +15,7 @@
* for more details.
*
* You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * with this program; if not, see <https://www.gnu.org/licenses/>.
*/
#include "replace.h"
diff --git a/ctdb/utils/pmda/pmns b/ctdb/utils/pmda/pmns
index dc7e3ac2bfa..c9f6644d52f 100644
--- a/ctdb/utils/pmda/pmns
+++ b/ctdb/utils/pmda/pmns
@@ -15,8 +15,7 @@
* for more details.
*
* You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * with this program; if not, see <https://www.gnu.org/licenses/>.
*/
ctdb {
diff --git a/lib/krb5_wrap/krb5_samba.c b/lib/krb5_wrap/krb5_samba.c
index 451616c79e5..0a4a7ea986f 100644
--- a/lib/krb5_wrap/krb5_samba.c
+++ b/lib/krb5_wrap/krb5_samba.c
@@ -836,6 +836,29 @@ krb5_error_code smb_krb5_get_allowed_etypes(krb5_context
context,
krb5_error_code smb_krb5_parse_name(krb5_context context,
const char *name,
krb5_principal *principal)
+{
+ return smb_krb5_parse_name_flags(context, name, 0, principal);
+}
+
+/**
+ * @brief Convert a string principal name to a Kerberos principal.
+ *
+ * @param[in] context The library context
+ *
+ * @param[in] name The principal as a unix charset string.
+ *
+ * @param[in] flags Flags for krb5_parse_name_flags()
+ *
+ * @param[out] principal The newly allocated principal.
+ *
+ * Use krb5_free_principal() to free a principal when it is no longer needed.
+ *
+ * @return 0 on success, a Kerberos error code otherwise.
+ */
+krb5_error_code smb_krb5_parse_name_flags(krb5_context context,
+ const char *name,
+ int flags,
+ krb5_principal *principal)
{
krb5_error_code ret;
char *utf8_name;
@@ -843,17 +866,19 @@ krb5_error_code smb_krb5_parse_name(krb5_context context,
TALLOC_CTX *frame = talloc_stackframe();
if (!push_utf8_talloc(frame, &utf8_name, name, &converted_size)) {
- talloc_free(frame);
+ TALLOC_FREE(frame);
return ENOMEM;
}
+ TALLOC_FREE(frame);
- ret = krb5_parse_name(context, utf8_name, principal);
- if (ret == KRB5_PARSE_MALFORMED) {
- ret = krb5_parse_name_flags(context, utf8_name,
- KRB5_PRINCIPAL_PARSE_ENTERPRISE,
- principal);
+ ret = krb5_parse_name_flags(context, utf8_name, flags, principal);
+ if (ret != KRB5_PARSE_MALFORMED) {
+ return ret;
}
- TALLOC_FREE(frame);
+
+ flags |= KRB5_PRINCIPAL_PARSE_ENTERPRISE;
+ ret = krb5_parse_name_flags(context, utf8_name, flags, principal);
+
return ret;
}
diff --git a/lib/krb5_wrap/krb5_samba.h b/lib/krb5_wrap/krb5_samba.h
index 0acf567371c..9da8a2b4806 100644
--- a/lib/krb5_wrap/krb5_samba.h
+++ b/lib/krb5_wrap/krb5_samba.h
@@ -186,6 +186,11 @@ krb5_error_code smb_krb5_parse_name(krb5_context context,
const char *name, /* in unix charset */
krb5_principal *principal);
+krb5_error_code smb_krb5_parse_name_flags(krb5_context context,
+ const char *name, /* unix charset */
+ int flags,
+ krb5_principal *principal);
+
krb5_error_code smb_krb5_unparse_name(TALLOC_CTX *mem_ctx,
krb5_context context,
krb5_const_principal principal,
diff --git a/python/samba/netcmd/domain/schemaupgrade.py
b/python/samba/netcmd/domain/schemaupgrade.py
index ff00a771b20..33b942ca460 100644
--- a/python/samba/netcmd/domain/schemaupgrade.py
+++ b/python/samba/netcmd/domain/schemaupgrade.py
@@ -244,7 +244,11 @@ class cmd_domain_schema_upgrade(Command):
temp_folder = None
- samdb = SamDB(url=H, session_info=system_session(), credentials=creds,
lp=lp)
+ # we set the transaction_index_cache_size to 200,000 to ensure it is
+ # not too small, if it's too small the performance of the upgrade will
+ # be negatively impacted. (similarly to the join operation)
+ samdb = SamDB(url=H, session_info=system_session(), credentials=creds,
lp=lp,
+ options=['transaction_index_cache_size:200000'])
# we're not going to get far if the config doesn't allow schema updates
if lp.get("dsdb:schema update allowed") is None:
diff --git a/python/samba/provision/__init__.py
b/python/samba/provision/__init__.py
index dea50aa364e..f091ccf2f18 100644
--- a/python/samba/provision/__init__.py
+++ b/python/samba/provision/__init__.py
@@ -1299,12 +1299,9 @@ def setup_samdb(path, session_info, provision_backend,
lp, names,
options.append("lmdb_env_size:" + str(store_size))
if batch_mode:
options.append("batch_mode:1")
- if batch_mode:
- # Estimate the number of index records in the transaction_index_cache
- # Numbers chosen give the prime 202481 for the default backend size,
- # which works well for a 100,000 user database
- cache_size = int(store_size / 42423) + 1
- options.append("transaction_index_cache_size:" + str(cache_size))
+
+ # For bulk operations like this we use a large transaction index cache.
+ options.append("transaction_index_cache_size:200000")
# Load the database, but don's load the global schema and don't connect
# quite yet
diff --git a/python/samba/tdb_util.py b/python/samba/tdb_util.py
index 99b6e02e03f..202fbdb3f8b 100644
--- a/python/samba/tdb_util.py
+++ b/python/samba/tdb_util.py
@@ -37,9 +37,10 @@ def tdb_copy(file1, file2, readonly=False):
raise FileNotFoundError(2, "could not find tdbbackup tool: "
"is tdb-tools installed?")
- tdbbackup_cmd = [toolpath, "-s", ".copy.tdb", file1]
if readonly:
- tdbbackup_cmd.append("-r")
+ tdbbackup_cmd = [toolpath, "-r", "-s", ".copy.tdb", file1]
+ else:
+ tdbbackup_cmd = [toolpath, "-s", ".copy.tdb", file1]
status = subprocess.check_call(tdbbackup_cmd, close_fds=True, shell=False)
diff --git a/source3/lib/interface.c b/source3/lib/interface.c
index 032362b4da3..5f351999e41 100644
--- a/source3/lib/interface.c
+++ b/source3/lib/interface.c
@@ -624,9 +624,12 @@ static void interpret_interface(char *token)
}
add_interface(&probed_ifaces[i]);
probed_ifaces[i].netmask = saved_mask;
- return;
+ added = true;
}
}
+ if (added) {
+ return;
+ }
DEBUG(2,("interpret_interface: Can't determine ip for "
"broadcast address %s\n",
token));
diff --git a/source3/libads/kerberos_keytab.c b/source3/libads/kerberos_keytab.c
index 5913db299ad..49a892e5a55 100644
--- a/source3/libads/kerberos_keytab.c
+++ b/source3/libads/kerberos_keytab.c
@@ -364,12 +364,29 @@ static krb5_error_code pw2kt_process_add_info(struct
pw2kt_keytab_state *state2,
krb5_principal princ = NULL;
krb5_principal *a = NULL;
size_t len;
+ const char *realm = NULL;
- ret = smb_krb5_parse_name(state2->context, princs, &princ);
+ ret = smb_krb5_parse_name_flags(state2->context,
+ princs,
+ KRB5_PRINCIPAL_PARSE_NO_DEF_REALM,
+ &princ);
if (ret != 0) {
DBG_ERR("Failed to parse principal: %s\n", princs);
return ret;
}
+ /* Add realm part if missing (e.g. SPNs synced from DC) */
+ realm = smb_krb5_principal_get_realm(state2, state2->context, princ);
+ if (realm == NULL || *realm == 0) {
+ ret = smb_krb5_principal_set_realm(state2->context,
+ princ,
+ lp_realm());
+ if (ret != 0) {
+ DBG_ERR("Failed to add realm to principal: %s\n",
+ princs);
+ return ret;
+ }
+ }
+
len = talloc_array_length(state2->princ_array);
a = talloc_realloc(state2,
state2->princ_array,
diff --git a/source3/modules/vfs_acl_tdb.c b/source3/modules/vfs_acl_tdb.c
index 5ecba7ba757..fb99c58b2f7 100644
--- a/source3/modules/vfs_acl_tdb.c
+++ b/source3/modules/vfs_acl_tdb.c
@@ -58,7 +58,7 @@ static bool acl_tdb_init(void)
become_root();
acl_db = db_open(NULL, dbname, 0, TDB_DEFAULT, O_RDWR|O_CREAT, 0600,
- DBWRAP_LOCK_ORDER_1, DBWRAP_FLAG_NONE);
+ DBWRAP_LOCK_ORDER_2, DBWRAP_FLAG_NONE);
unbecome_root();
if (acl_db == NULL) {
@@ -195,38 +195,43 @@ static int unlinkat_acl_tdb(vfs_handle_struct *handle,
const struct smb_filename *smb_fname,
int flags)
{
- struct smb_filename *smb_fname_tmp = NULL;
- struct db_context *db = acl_db;
- int ret = -1;
-
- smb_fname_tmp = cp_smb_filename_nostream(talloc_tos(), smb_fname);
- if (smb_fname_tmp == NULL) {
- errno = ENOMEM;
- goto out;
- }
+ struct stat_ex st = {};
+ int ret;
- ret = vfs_stat(handle->conn, smb_fname_tmp);
- if (ret == -1) {
- goto out;
+ if (!is_named_stream(smb_fname)) {
+ if (VALID_STAT(smb_fname->st)) {
+ st = smb_fname->st;
+ } else {
+ ret = SMB_VFS_NEXT_FSTATAT(handle,
+ dirfsp,
+ smb_fname,
+ &st,
+ AT_SYMLINK_NOFOLLOW);
+ if (ret == -1) {
+ return ret;
+ }
+ }
}
if (flags & AT_REMOVEDIR) {
- ret = rmdir_acl_common(handle,
- dirfsp,
- smb_fname_tmp);
+ ret = rmdir_acl_common(handle, dirfsp, smb_fname);
} else {
- ret = unlink_acl_common(handle,
- dirfsp,
- smb_fname_tmp,
- flags);
+ ret = unlink_acl_common(handle, dirfsp, smb_fname, flags);
}
if (ret == -1) {
- goto out;
+ return -1;
+ }
+
+ if (is_named_stream(smb_fname)) {
+ /*
+ * ACLs only stored for basenames
+ */
+ return ret;
}
- acl_tdb_delete(handle, db, &smb_fname_tmp->st);
- out:
+ acl_tdb_delete(handle, acl_db, &st);
+
return ret;
}
diff --git a/source3/modules/vfs_ceph.c b/source3/modules/vfs_ceph.c
index fd450af16c2..a72061d5d9d 100644
--- a/source3/modules/vfs_ceph.c
+++ b/source3/modules/vfs_ceph.c
@@ -363,6 +363,9 @@ static int cephwrap_statvfs(struct vfs_handle_struct
*handle,
statbuf->TotalFileNodes = statvfs_buf.f_files;
statbuf->FreeFileNodes = statvfs_buf.f_ffree;
statbuf->FsIdentifier = statvfs_buf.f_fsid;
+ statbuf->FsCapabilities =
+ FILE_CASE_SENSITIVE_SEARCH | FILE_CASE_PRESERVED_NAMES;
+
DBG_DEBUG("[CEPH] f_bsize: %ld, f_blocks: %ld, f_bfree: %ld, "
"f_bavail: %ld\n",
(long int)statvfs_buf.f_bsize,
@@ -377,9 +380,7 @@ static uint32_t cephwrap_fs_capabilities(
struct vfs_handle_struct *handle,
enum timestamp_set_resolution *p_ts_res)
{
- uint32_t caps = FILE_CASE_SENSITIVE_SEARCH | FILE_CASE_PRESERVED_NAMES;
-
- *p_ts_res = TIMESTAMP_SET_NT_OR_BETTER;
+ uint32_t caps = vfs_get_fs_capabilities(handle->conn, p_ts_res);
return caps;
}
diff --git a/source3/modules/vfs_ceph_new.c b/source3/modules/vfs_ceph_new.c
index 1cb04f1f9ee..4622d8659cd 100644
--- a/source3/modules/vfs_ceph_new.c
+++ b/source3/modules/vfs_ceph_new.c
@@ -102,6 +102,9 @@ static const struct enum_list enum_vfs_cephfs_proxy_vals[]
= {
#define CEPH_FN(_name) typeof(_name) *_name ## _fn
struct vfs_ceph_config {
+#if HAVE_CEPH_ASYNCIO
+ struct tevent_threaded_context *tctx;
+#endif
const char *conf_file;
const char *user_id;
const char *fsname;
@@ -110,7 +113,15 @@ struct vfs_ceph_config {
enum vfs_cephfs_proxy_mode proxy;
void *libhandle;
- CEPH_FN(ceph_ll_lookup_inode);
+ /*
--
Samba Shared Repository