Return the corrent number of entries found to the autofs client (related: #928447)

This commit is contained in:
Jakub Hrozek 2013-03-28 11:05:30 +01:00
parent 40c3ae988f
commit afc7bd6f1e
2 changed files with 58 additions and 1 deletions

View File

@ -0,0 +1,53 @@
From cd2327153a9ac55f3cf470c294691506096bd1eb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Pavel=20B=C5=99ezina?= <pbrezina@redhat.com>
Date: Wed, 27 Feb 2013 12:12:19 +0100
Subject: [PATCH] autofs: fix invalid header 'number of entries' in packet
https://fedorahosted.org/sssd/ticket/1739
Pointer to packet body may change while filling packet with autofs
mount points. As a consequence, we sometimes wrote the number of
entries into invalid body and we recieved an arbitrary number
on the client side.
If the number was 0, there were some skipped entries. If the number
was greater than 0, everything worked correctly, because we iterate
through the cached entries until we reach packet length - we don't
compare to the number.
---
src/responder/autofs/autofssrv_cmd.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/src/responder/autofs/autofssrv_cmd.c b/src/responder/autofs/autofssrv_cmd.c
index 550c981a73e40804701268d0b34f8d7198f3ecc6..491afbb1de057dae996cfc7d084cdaed0220b8e3 100644
--- a/src/responder/autofs/autofssrv_cmd.c
+++ b/src/responder/autofs/autofssrv_cmd.c
@@ -1085,13 +1085,13 @@ getautomntent_process(struct autofs_cmd_ctx *cmdctx,
goto done;
}
+ /* allocate memory for number of entries in the packet */
ret = sss_packet_grow(client->creq->out, sizeof(uint32_t));
if (ret != EOK) {
DEBUG(SSSDBG_OP_FAILURE, ("Cannot grow packet\n"));
goto done;
}
- sss_packet_get_body(client->creq->out, &body, &blen);
rp = sizeof(uint32_t); /* We'll write the number of entries here */
left = map->entry_count - cursor;
@@ -1111,6 +1111,10 @@ getautomntent_process(struct autofs_cmd_ctx *cmdctx,
nentries++;
}
+ /* packet grows in fill_autofs_entry, body pointer may change,
+ * thus we have to obtain it here */
+ sss_packet_get_body(client->creq->out, &body, &blen);
+
rp = 0;
SAFEALIGN_SET_UINT32(&body[rp], nentries, &rp);
--
1.8.1.4

View File

@ -16,7 +16,7 @@
Name: sssd
Version: 1.9.4
Release: 1%{?dist}
Release: 2%{?dist}
Group: Applications/System
Summary: System Security Services Daemon
License: GPLv3+
@ -32,6 +32,7 @@ Patch0004: 0004-Add-unit-tests-for-simple-access-test-by-groups.patch
Patch0005: 0005-Do-not-compile-main-in-DP-if-UNIT_TESTING-is-defined.patch
Patch0006: 0006-Provide-a-be_get_account_info_send-function.patch
Patch0007: 0007-Resolve-GIDs-in-the-simple-access-provider.patch
Patch0008: 0008-autofs-fix-invalid-header-number-of-entries-in-packe.patch
### Dependencies ###
@ -529,6 +530,9 @@ fi
%postun -n libsss_sudo -p /sbin/ldconfig
%changelog
* Thu Mar 28 2013 Jakub Hrozek <jhrozek@redhat.com> - 1.9.4-2
- autofs: return the correct number of maps to the client
* Mon Mar 25 2013 Jakub Hrozek <jhrozek@redhat.com> - 1.9.4-1
- New upstream release 1.9.4
- https://fedorahosted.org/sssd/wiki/Releases/Notes-1.9.4