[PATCH] Change unix_convert to use struct smb_filename

Tim Prouty tprouty at samba.org
Tue Apr 28 21:30:11 GMT 2009


This is the first of a series of patches that change path based  
operations to operate on a struct smb_filename instead of a char *.   
This same concept already exists in source4.

My goals for this series of patches are to eventually:

1) Solve the stream vs. posix filename that contains a colon ambiguity  
that currently exists.
2) Make unix_convert the only function that parses the stream name.
3) Clean up the unix_convert API.
4) Change all path based vfs operation to take a struct smb_filename.
5) Make is_ntfs_stream_name() a constant operation that can simply  
check the state of struct smb_filename rather than re-parse the  
filename.
6) Eliminate the need for split_ntfs_stream_name() to exist.

My strategy is to start from the inside at unix_convert() and work my  
way out through the vfs layer, call by call.  This first patch does  
just that, by changing unix_convert and all of its callers to operate  
on struct smb_filename.  Since this is such a large change, I plan on  
pushing the patches in phases, where each phase keeps full  
compatibility and passes make test.

The API of unix_convert has been simplified from:

NTSTATUS unix_convert(TALLOC_CTX *ctx,
			connection_struct *conn,
			const char *orig_path,
			bool allow_wcard_last_component,
			char **pp_conv_path,
			char **pp_saved_last_component,
			SMB_STRUCT_STAT *pst)
to:

NTSTATUS unix_convert(TALLOC_CTX *ctx,
		      connection_struct *conn,
		      const char *orig_path,
		      struct smb_filename *smb_fname,
		      uint32_t ucf_flags)

Currently the smb_filename struct looks like:

struct smb_filename {
	char *base_name;
	char *stream_name;
	char *original_lcomp;
	SMB_STRUCT_STAT st;
};

One key point here is the decision to break up the base_name and  
stream_name.  I have introduced a helper function called  
get_full_smb_filename() that takes an smb_filename struct and  
allocates the full_name.  I changed the callers of unix_convert() to  
subsequently call get_full_smb_filename() for the time being, but I  
plan to eventually eliminate get_full_smb_filename().

I'm going to continue moving forward, but I would love any input or  
suggestions on the specifics of the data in the smb_filename struct,  
and the api moving forward.

-Tim

-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-s3-Change-callers-of-unix_convert-to-use-struct-smb.patch
Type: application/octet-stream
Size: 46175 bytes
Desc: not available
Url : http://lists.samba.org/archive/samba-technical/attachments/20090428/12b695df/0001-s3-Change-callers-of-unix_convert-to-use-struct-smb.obj
-------------- next part --------------



More information about the samba-technical mailing list