From 578d7157558e4303bfed583cded4c4f35b4e2911 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Mon, 29 Mar 2004 23:39:13 +0000 Subject: Setting EA's to zero length deletes them. Jeremy. (This used to be commit 01fb8717628d1daad19725a97f6ae2d729afcac2) --- source3/smbd/trans2.c | 10 ++++++++++ source3/torture/torture.c | 29 ++++++++++++++++++++++++++++- 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/source3/smbd/trans2.c b/source3/smbd/trans2.c index 2f164dafa2..9f5ef09454 100644 --- a/source3/smbd/trans2.c +++ b/source3/smbd/trans2.c @@ -49,6 +49,16 @@ SMB_BIG_UINT get_allocation_size(files_struct *fsp, SMB_STRUCT_STAT *sbuf) return ret; } +/**************************************************************************** + Utility functions for dealing with extended attributes. +****************************************************************************/ + +struct ea_list { + struct ea_list *next, *prev; + struct ea_struct ea; +}; + +static /**************************************************************************** Send the required number of replies back. We assume all fields other than the data fields are diff --git a/source3/torture/torture.c b/source3/torture/torture.c index 97bca82d9b..ead9d69cf1 100644 --- a/source3/torture/torture.c +++ b/source3/torture/torture.c @@ -4360,7 +4360,6 @@ static BOOL run_eatest(int dummy) } } - if (!cli_get_ea_list_path(cli, fname, mem_ctx, &num_eas, &ea_list)) { printf("ea_get list failed - %s\n", cli_errstr(cli)); correct = False; @@ -4372,6 +4371,34 @@ static BOOL run_eatest(int dummy) dump_data(0, ea_list[i].value.data, ea_list[i].value.length); } + /* Setting EA's to zero length deletes them. Test this */ + printf("Now deleting all EA's....\n"); + + for (i = 0; i < 20; i++) { + fstring ea_name; + slprintf(ea_name, sizeof(ea_name), "EA_%d", i); + if (!cli_set_ea_path(cli, fname, ea_name, "", 0)) { + printf("ea_set of name %s failed - %s\n", ea_name, cli_errstr(cli)); + return False; + } + } + + if (!cli_get_ea_list_path(cli, fname, mem_ctx, &num_eas, &ea_list)) { + printf("ea_get list failed - %s\n", cli_errstr(cli)); + correct = False; + } + + printf("num_eas = %d\n", num_eas); + for (i = 0; i < num_eas; i++) { + printf("%d: ea_name = %s. Val = ", i, ea_list[i].name); + dump_data(0, ea_list[i].value.data, ea_list[i].value.length); + } + + if (num_eas != 0) { + printf("deleting EA's failed.\n"); + correct = False; + } + talloc_destroy(mem_ctx); if (!torture_close_connection(cli)) { correct = False; -- cgit