]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
s3/smbd: Create new file get_ea_list_from_fsp_new (not used)
authorNoel Power <noel.power@suse.com>
Wed, 10 Feb 2021 09:53:23 +0000 (09:53 +0000)
committerJeremy Allison <jra@samba.org>
Fri, 26 Feb 2021 21:28:33 +0000 (21:28 +0000)
On the way to removing get_ea_list_from_file_path and replacing
it with get_ea_list_from_fsp create a copy of get_ea_list_from_file_path
called get_ea_list_from_fsp_new. It is ifdef'ed out for the moment
as it isn't used yet

Signed-off-by: Noel Power <noel.power@suse.com>
Reviewed-by: Jeremy Allison <jra@samba.org>
source3/smbd/trans2.c

index e50785e7a5aefebe8f4a9e22a2a946bf947d0d0b..5d05a8490c7cb2db45ea14356a47fdaa4f491e82 100644 (file)
@@ -526,6 +526,121 @@ static NTSTATUS get_ea_list_from_file_path(TALLOC_CTX *mem_ctx,
        return NT_STATUS_OK;
 }
 
+
+#if 0
+/****************************************************************************
+ Return a linked list of the total EA's. Plus the total size
+****************************************************************************/
+
+static NTSTATUS get_ea_list_from_fsp_new(TALLOC_CTX *mem_ctx,
+                               files_struct *fsp,
+                               size_t *pea_total_len,
+                               struct ea_list **ea_list)
+{
+       /* Get a list of all xattrs. Max namesize is 64k. */
+       size_t i, num_names;
+       char **names;
+       struct ea_list *ea_list_head = NULL;
+       bool posix_pathnames = false;
+       NTSTATUS status;
+
+       *pea_total_len = 0;
+       *ea_list = NULL;
+
+       /* symlink */
+       if (fsp == NULL) {
+               return NT_STATUS_OK;
+       }
+
+       if (!lp_ea_support(SNUM(fsp->conn))) {
+               return NT_STATUS_OK;
+       }
+
+       posix_pathnames = (fsp->fsp_name->flags & SMB_FILENAME_POSIX_PATH);
+
+       status = get_ea_names_from_file(talloc_tos(),
+                               fsp->conn,
+                               fsp,
+                               &names,
+                               &num_names);
+
+       if (!NT_STATUS_IS_OK(status)) {
+               return status;
+       }
+
+       if (num_names == 0) {
+               return NT_STATUS_OK;
+       }
+
+       for (i=0; i<num_names; i++) {
+               struct ea_list *listp;
+               fstring dos_ea_name;
+
+               if (strnequal(names[i], "system.", 7)
+                   || samba_private_attr_name(names[i]))
+                       continue;
+
+               /*
+                * Filter out any underlying POSIX EA names
+                * that a Windows client can't handle.
+                */
+               if (!posix_pathnames &&
+                               is_invalid_windows_ea_name(names[i])) {
+                       continue;
+               }
+
+               listp = talloc(mem_ctx, struct ea_list);
+               if (listp == NULL) {
+                       return NT_STATUS_NO_MEMORY;
+               }
+
+               status = get_ea_value(listp,
+                                       fsp->conn,
+                                       fsp,
+                                       fsp->fsp_name,
+                                       names[i],
+                                       &listp->ea);
+
+               if (!NT_STATUS_IS_OK(status)) {
+                       TALLOC_FREE(listp);
+                       return status;
+               }
+
+               if (listp->ea.value.length == 0) {
+                       /*
+                        * We can never return a zero length EA.
+                        * Windows reports the EA's as corrupted.
+                        */
+                       TALLOC_FREE(listp);
+                       continue;
+               }
+
+               push_ascii_fstring(dos_ea_name, listp->ea.name);
+
+               *pea_total_len +=
+                       4 + strlen(dos_ea_name) + 1 + listp->ea.value.length;
+
+               DEBUG(10,("get_ea_list_from_file: total_len = %u, %s, val len "
+                         "= %u\n", (unsigned int)*pea_total_len, dos_ea_name,
+                         (unsigned int)listp->ea.value.length));
+
+               DLIST_ADD_END(ea_list_head, listp);
+
+       }
+
+       /* Add on 4 for total length. */
+       if (*pea_total_len) {
+               *pea_total_len += 4;
+       }
+
+       DEBUG(10, ("get_ea_list_from_file: total_len = %u\n",
+                  (unsigned int)*pea_total_len));
+
+       *ea_list = ea_list_head;
+       return NT_STATUS_OK;
+}
+#endif
+
 static NTSTATUS get_ea_list_from_fsp(TALLOC_CTX *mem_ctx,
                                files_struct *fsp,
                                size_t *pea_total_len,