diff options
author | Jeremy Allison <jra@samba.org> | 2005-04-07 20:59:37 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 10:56:31 -0500 |
commit | ecc6933a86dfc61b49ce907cf444cc45d2e3f8d5 (patch) | |
tree | 5dfc66fa51392babdaa5b97737f65504cc8729d0 | |
parent | b751f95a256e0309f878ef93e6da9003fbde92d2 (diff) | |
download | samba-ecc6933a86dfc61b49ce907cf444cc45d2e3f8d5.tar.gz samba-ecc6933a86dfc61b49ce907cf444cc45d2e3f8d5.tar.xz samba-ecc6933a86dfc61b49ce907cf444cc45d2e3f8d5.zip |
r6240: Fix for bug #2581. Add size limit (in kb) to stat cache.
Jeremy.
(This used to be commit 836b73d0018c3137b7a924b6345e69ae5d23431d)
-rw-r--r-- | source3/param/loadparm.c | 4 | ||||
-rw-r--r-- | source3/smbd/statcache.c | 5 |
2 files changed, 9 insertions, 0 deletions
diff --git a/source3/param/loadparm.c b/source3/param/loadparm.c index ad952b63627..619a9ccb3d1 100644 --- a/source3/param/loadparm.c +++ b/source3/param/loadparm.c @@ -281,6 +281,7 @@ typedef struct BOOL bNTPipeSupport; BOOL bNTStatusSupport; BOOL bStatCache; + int iMaxStatCacheSize; BOOL bKernelOplocks; BOOL bAllowTrustedDomains; BOOL bLanmanAuth; @@ -1033,6 +1034,7 @@ static struct parm_struct parm_table[] = { {"map archive", P_BOOL, P_LOCAL, &sDefault.bMap_archive, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL}, {"mangled names", P_BOOL, P_LOCAL, &sDefault.bMangledNames, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL}, {"mangled map", P_STRING, P_LOCAL, &sDefault.szMangledMap, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL | FLAG_DEPRECATED }, + {"max stat cache size", P_INTEGER, P_GLOBAL, &Globals.iMaxStatCacheSize, NULL, NULL, FLAG_ADVANCED}, {"stat cache", P_BOOL, P_GLOBAL, &Globals.bStatCache, NULL, NULL, FLAG_ADVANCED}, {"store dos attributes", P_BOOL, P_LOCAL, &sDefault.bStoreDosAttributes, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL}, @@ -1462,6 +1464,7 @@ static void init_globals(void) Globals.bNTPipeSupport = True; /* Do NT pipes by default. */ Globals.bNTStatusSupport = True; /* Use NT status by default. */ Globals.bStatCache = True; /* use stat cache by default */ + Globals.iMaxStatCacheSize = 0; /* unlimited size in kb by default. */ Globals.restrict_anonymous = 0; Globals.bClientLanManAuth = True; /* Do use the LanMan hash if it is available */ Globals.bClientPlaintextAuth = True; /* Do use a plaintext password if is requested by the server */ @@ -1814,6 +1817,7 @@ FN_GLOBAL_INTEGER(lp_passwd_chat_timeout, &Globals.iPasswdChatTimeout) FN_GLOBAL_BOOL(lp_nt_pipe_support, &Globals.bNTPipeSupport) FN_GLOBAL_BOOL(lp_nt_status_support, &Globals.bNTStatusSupport) FN_GLOBAL_BOOL(lp_stat_cache, &Globals.bStatCache) +FN_GLOBAL_INTEGER(lp_max_stat_cache_size, &Globals.iMaxStatCacheSize) FN_GLOBAL_BOOL(lp_allow_trusted_domains, &Globals.bAllowTrustedDomains) FN_GLOBAL_INTEGER(lp_restrict_anonymous, &Globals.restrict_anonymous) FN_GLOBAL_BOOL(lp_lanman_auth, &Globals.bLanmanAuth) diff --git a/source3/smbd/statcache.c b/source3/smbd/statcache.c index cfc5286327b..99f209006b3 100644 --- a/source3/smbd/statcache.c +++ b/source3/smbd/statcache.c @@ -47,10 +47,15 @@ void stat_cache_add( const char *full_orig_name, const char *orig_translated_pat TDB_DATA data_val; char *original_path; size_t original_path_length; + size_t sc_size = lp_max_stat_cache_size(); if (!lp_stat_cache()) return; + if (sc_size && (sc_size*1024 > tdb_stat_cache->map_size)) { + reset_stat_cache(); + } + ZERO_STRUCT(data_val); /* |