On Wed, Jan 26, 2011 at 10:07:21AM +0100, Stefan (metze) Metzmacher wrote: > 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.
Got it - thanks ! I'll fix asap ! Jeremy