summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source3/winbindd/winbindd_cache.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/source3/winbindd/winbindd_cache.c b/source3/winbindd/winbindd_cache.c
index cc1f095919..d1aeba9f39 100644
--- a/source3/winbindd/winbindd_cache.c
+++ b/source3/winbindd/winbindd_cache.c
@@ -27,6 +27,7 @@
#include "winbindd.h"
#include "tdb_validate.h"
#include "../libcli/auth/libcli_auth.h"
+#include "../librpc/gen_ndr/ndr_wbint.h"
#undef DBGC_CLASS
#define DBGC_CLASS DBGC_WINBIND
@@ -4336,12 +4337,26 @@ static bool wcache_ndr_key(TALLOC_CTX *mem_ctx, char *domain_name,
return true;
}
+static bool wcache_opnum_cacheable(uint32_t opnum)
+{
+ switch (opnum) {
+ case NDR_WBINT_PING:
+ case NDR_WBINT_QUERYSEQUENCENUMBER:
+ return false;
+ }
+ return true;
+}
+
bool wcache_fetch_ndr(TALLOC_CTX *mem_ctx, struct winbindd_domain *domain,
uint32_t opnum, const DATA_BLOB *req, DATA_BLOB *resp)
{
TDB_DATA key, data;
bool ret = false;
+ if (!wcache_opnum_cacheable(opnum)) {
+ return false;
+ }
+
if (wcache->tdb == NULL) {
return false;
}
@@ -4394,6 +4409,10 @@ void wcache_store_ndr(struct winbindd_domain *domain, uint32_t opnum,
TDB_DATA key, data;
uint32_t dom_seqnum, last_check;
+ if (!wcache_opnum_cacheable(opnum)) {
+ return;
+ }
+
if (wcache->tdb == NULL) {
return;
}