diff options
Diffstat (limited to 'source3')
-rw-r--r-- | source3/smbd/notify.c | 18 |
1 files changed, 8 insertions, 10 deletions
diff --git a/source3/smbd/notify.c b/source3/smbd/notify.c index d18bbb180f..b2ac26764a 100644 --- a/source3/smbd/notify.c +++ b/source3/smbd/notify.c @@ -337,7 +337,7 @@ void notify_fname(connection_struct *conn, uint32 action, uint32 filter, static void notify_fsp(files_struct *fsp, uint32 action, const char *name) { struct notify_change *change, *changes; - char *name2; + pstring name2; if (fsp->notify == NULL) { /* @@ -346,11 +346,7 @@ static void notify_fsp(files_struct *fsp, uint32 action, const char *name) return; } - if (!(name2 = talloc_strdup(fsp->notify, name))) { - DEBUG(0, ("talloc_strdup failed\n")); - return; - } - + pstrcpy(name2, name); string_replace(name2, '/', '\\'); /* @@ -364,7 +360,6 @@ static void notify_fsp(files_struct *fsp, uint32 action, const char *name) * guard against a DoS here. */ TALLOC_FREE(fsp->notify->changes); - TALLOC_FREE(name2); fsp->notify->num_changes = -1; return; } @@ -377,7 +372,6 @@ static void notify_fsp(files_struct *fsp, uint32 action, const char *name) fsp->notify, fsp->notify->changes, struct notify_change, fsp->notify->num_changes+1))) { DEBUG(0, ("talloc_realloc failed\n")); - TALLOC_FREE(name2); return; } @@ -385,7 +379,11 @@ static void notify_fsp(files_struct *fsp, uint32 action, const char *name) change = &(fsp->notify->changes[fsp->notify->num_changes]); - change->name = talloc_move(changes, &name2); + if (!(change->name = talloc_strdup(changes, name2))) { + DEBUG(0, ("talloc_strdup failed\n")); + return; + } + change->action = action; fsp->notify->num_changes += 1; @@ -401,7 +399,7 @@ static void notify_fsp(files_struct *fsp, uint32 action, const char *name) * We have to send the two rename events in one reply. So hold * the first part back. */ - return; + return; } /* |