The branch, v3-5-test has been updated via 2ee2ea9 s3:smbd: Align change notify replies on 4-byte boundary from f7e7fa5 libwbclient: Fix a fd-leak at dlclose-time
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-5-test - Log ----------------------------------------------------------------- commit 2ee2ea9fa5b839a4395895872f1ed149226dd06f Author: Chere Zhou <chere.z...@isilon.com> Date: Mon Jul 5 17:18:35 2010 -0700 s3:smbd: Align change notify replies on 4-byte boundary MS-CIFS section 2.2.7.4.2 states this is mandatory. WinXP clients don't seem to care, but a Win7 client will send an immediate Close() to the directory handle when receiving an incorrectly aligned change notify response. Fix bug #7662 (Change notify replies must be aligned on 4-byte boundary for Win7.) ----------------------------------------------------------------------- Summary of changes: source3/smbd/notify.c | 10 ++++++++++ 1 files changed, 10 insertions(+), 0 deletions(-) Changeset truncated at 500 lines: diff --git a/source3/smbd/notify.c b/source3/smbd/notify.c index 0c75769..a53f3fb 100644 --- a/source3/smbd/notify.c +++ b/source3/smbd/notify.c @@ -76,6 +76,7 @@ static bool notify_marshall_changes(int num_changes, for (i=0; i<num_changes; i++) { struct notify_change *c; size_t namelen; + int rem = 0; uint32 u32_tmp; /* Temp arg to prs_uint32 to avoid * signed/unsigned issues */ @@ -101,6 +102,11 @@ static bool notify_marshall_changes(int num_changes, */ u32_tmp = (i == num_changes-1) ? 0 : namelen + 12; + + /* Align on 4-byte boundary according to MS-CIFS 2.2.7.4.2 */ + if ((rem = u32_tmp % 4 ) != 0) + u32_tmp += 4 - rem; + if (!prs_uint32("offset", ps, 1, &u32_tmp)) goto fail; u32_tmp = c->action; @@ -116,6 +122,10 @@ static bool notify_marshall_changes(int num_changes, */ prs_set_offset(ps, prs_offset(ps)-2); + if (rem != 0) { + if (!prs_align_custom(ps, 4)) goto fail; + } + TALLOC_FREE(uni_name.buffer); if (prs_offset(ps) > max_offset) { -- Samba Shared Repository