s3-xattr_tdb: Fix listxattr
[tridge/samba.git] / source3 / modules / vfs_xattr_tdb.c
index 72624686f74828dc487483d15f6ed4991dd82a70..1f3f20e4993042509bc49fc7ac9bb1b58a71ea9c 100644 (file)
@@ -426,7 +426,7 @@ static ssize_t xattr_tdb_listattr(struct db_context *db_ctx,
        if (len > size) {
                TALLOC_FREE(attribs);
                errno = ERANGE;
-               return -1;
+               return len;
        }
 
        len = 0;
@@ -601,7 +601,8 @@ static bool xattr_tdb_init(int snum, struct db_context **p_db)
        /* now we know dbname is not NULL */
 
        become_root();
-       db = db_open(NULL, dbname, 0, TDB_DEFAULT, O_RDWR|O_CREAT, 0600);
+       db = db_open(NULL, dbname, 0, TDB_DEFAULT, O_RDWR|O_CREAT, 0600,
+                    DBWRAP_LOCK_ORDER_2);
        unbecome_root();
 
        if (db == NULL) {
@@ -767,16 +768,16 @@ static int xattr_tdb_connect(vfs_handle_struct *handle, const char *service,
 }
 
 static struct vfs_fn_pointers vfs_xattr_tdb_fns = {
-       .getxattr = xattr_tdb_getxattr,
-       .fgetxattr = xattr_tdb_fgetxattr,
-       .setxattr = xattr_tdb_setxattr,
-       .fsetxattr = xattr_tdb_fsetxattr,
-       .listxattr = xattr_tdb_listxattr,
-       .flistxattr = xattr_tdb_flistxattr,
-       .removexattr = xattr_tdb_removexattr,
-       .fremovexattr = xattr_tdb_fremovexattr,
-       .unlink = xattr_tdb_unlink,
-       .rmdir = xattr_tdb_rmdir,
+       .getxattr_fn = xattr_tdb_getxattr,
+       .fgetxattr_fn = xattr_tdb_fgetxattr,
+       .setxattr_fn = xattr_tdb_setxattr,
+       .fsetxattr_fn = xattr_tdb_fsetxattr,
+       .listxattr_fn = xattr_tdb_listxattr,
+       .flistxattr_fn = xattr_tdb_flistxattr,
+       .removexattr_fn = xattr_tdb_removexattr,
+       .fremovexattr_fn = xattr_tdb_fremovexattr,
+       .unlink_fn = xattr_tdb_unlink,
+       .rmdir_fn = xattr_tdb_rmdir,
        .connect_fn = xattr_tdb_connect,
 };