s3:winbind: Some calls are not cacheable
authorVolker Lendecke <vl@samba.org>
Tue, 25 Aug 2009 10:25:12 +0000 (12:25 +0200)
committerVolker Lendecke <vl@samba.org>
Thu, 27 Aug 2009 13:04:09 +0000 (15:04 +0200)
source3/winbindd/winbindd_cache.c

index cc1f095919c6e4a4fd82b48f3faeb23f17b4aa27..d1aeba9f39df62dfc1eb1cf716391b73cd51a419 100644 (file)
@@ -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;
        }