Reject write operations with expect_gen=0
Per PROTOCOL.txt specification, WRITE operations must provide a valid generation counter and cannot use expect_gen=0 (unlike other operations). This ensures the client has retrieved the file's metadata and knows the correct chunk size before writing. Changes: - Added FILETREE_BADGEN error code (-8) - Modified file_tree_write() to reject expect_gen=0 - Added error message for FILETREE_BADGEN
This commit is contained in:
@@ -366,6 +366,10 @@ int file_tree_write(FileTree *ft, string path,
|
|||||||
SHA256 *removed_hashes,
|
SHA256 *removed_hashes,
|
||||||
int *num_removed)
|
int *num_removed)
|
||||||
{
|
{
|
||||||
|
// Per protocol spec, WRITE operations cannot use expect_gen=0
|
||||||
|
if (expect_gen == NO_GENERATION)
|
||||||
|
return FILETREE_BADGEN;
|
||||||
|
|
||||||
int num_comps;
|
int num_comps;
|
||||||
string comps[MAX_COMPS];
|
string comps[MAX_COMPS];
|
||||||
|
|
||||||
@@ -534,6 +538,7 @@ string file_tree_strerror(int code)
|
|||||||
case FILETREE_EXISTS : return S("File or directory already exists");
|
case FILETREE_EXISTS : return S("File or directory already exists");
|
||||||
case FILETREE_BADPATH: return S("Invalid path");
|
case FILETREE_BADPATH: return S("Invalid path");
|
||||||
case FILETREE_BADOP : return S("Invalid operation");
|
case FILETREE_BADOP : return S("Invalid operation");
|
||||||
|
case FILETREE_BADGEN : return S("Generation counter cannot be zero for write operations");
|
||||||
default:break;
|
default:break;
|
||||||
}
|
}
|
||||||
return S("Unknown error");
|
return S("Unknown error");
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ enum {
|
|||||||
FILETREE_EXISTS = -5,
|
FILETREE_EXISTS = -5,
|
||||||
FILETREE_BADPATH = -6,
|
FILETREE_BADPATH = -6,
|
||||||
FILETREE_BADOP = -7,
|
FILETREE_BADOP = -7,
|
||||||
|
FILETREE_BADGEN = -8,
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct Entity Entity;
|
typedef struct Entity Entity;
|
||||||
|
|||||||
Reference in New Issue
Block a user