file_name_hash vs. smb_name_hash

Stefan (metze) Metzmacher metze at samba.org
Wed Jan 26 02:07:21 MST 2011


Hi Jeremy,

> The branch, master has been updated
>        via  3272e16 Missed one debug printf of name_hash. Ensure always use %x.
>        via  4473273 Fix bug #7863 - Unlink may unlink wrong file when hardlinks are involved.
>        via  a65bce4 Add uint32_t name_hash argument (currently unused) to get_file_infos().
>        via  b97f1ce Add name_hash into the share mode entry struct (as yet only use for renames to identify a specific path).
>        via  76418e2 Add name_hash to files_struct. Set within fsp_set_smb_fname().
>       from  6e22637 s4-test/delete_object: Remove global ldb connections
> 
> http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master

> +static uint32_t smb_name_hash(const char *sharepath, const char *filename, int *err)
> +{
> +	TDB_DATA key;
> +	char *fullpath = NULL;
> +	int ret;
> +	uint32_t name_hash;
> +
> +	*err = 0;
> +	ret = asprintf(&fullpath, "%s/%s", sharepath, filename);
> +	if (ret == -1 || fullpath == NULL) {
> +		*err = 1;
> +		return 0;
> +	}
> +	key.dptr = (uint8_t *)fullpath;
> +	key.dsize = strlen(fullpath);
> +	name_hash = tdb_jenkins_hash(&key);
> +	free(fullpath);
> +	return name_hash;
> +}
> +

> +NTSTATUS file_name_hash(connection_struct *conn,
> +                       const char *name, uint32_t *p_name_hash)
> +{
> +       TDB_DATA key;
> +       char *fullpath = NULL;
> +
> +       /* Set the hash of the full pathname. */
> +       fullpath = talloc_asprintf(talloc_tos(),
> +                       "%s/%s",
> +                       conn->connectpath,
> +                       name);
> +       if (!fullpath) {
> +               return NT_STATUS_NO_MEMORY;
> +       }
> +       key = string_term_tdb_data(fullpath);
> +       *p_name_hash = tdb_jenkins_hash(&key);
> +
> +       DEBUG(10,("file_name_hash: %s hash 0x%x\n",
> +               fullpath,
> +               (unsigned int)*p_name_hash ));
> +
> +       TALLOC_FREE(fullpath);
> +       return NT_STATUS_OK;
> +}

These function don't calculate the same hash!
string_term_tdb_data() uses strlen()+1.

metze

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 262 bytes
Desc: OpenPGP digital signature
URL: <http://lists.samba.org/pipermail/samba-technical/attachments/20110126/f4f2b555/attachment.pgp>


More information about the samba-technical mailing list