aboutsummaryrefslogtreecommitdiff
path: root/usr.sbin/cron
diff options
context:
space:
mode:
authorKyle Evans <kevans@FreeBSD.org>2018-04-12 13:52:55 +0000
committerKyle Evans <kevans@FreeBSD.org>2018-04-12 13:52:55 +0000
commit1cb7491a3f49f671e368efa50c2466ce75899cbd (patch)
treef1edf252e24a92ff2ef183c31821b710dec37e5b /usr.sbin/cron
parent81f187e57637431f8f0c1c71ac60b3943e447ed1 (diff)
downloadsrc-1cb7491a3f49f671e368efa50c2466ce75899cbd.tar.gz
src-1cb7491a3f49f671e368efa50c2466ce75899cbd.zip
Notes
Diffstat (limited to 'usr.sbin/cron')
-rw-r--r--usr.sbin/cron/cron/database.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/usr.sbin/cron/cron/database.c b/usr.sbin/cron/cron/database.c
index 2b0c67b9c02d..6665d87ea482 100644
--- a/usr.sbin/cron/cron/database.c
+++ b/usr.sbin/cron/cron/database.c
@@ -56,7 +56,7 @@ load_database(old_db)
{ SYSCRONTABS },
{ LOCALSYSCRONTABS }
};
- int i;
+ int i, ret;
Debug(DLOAD, ("[%d] load_database()\n", getpid()))
@@ -79,6 +79,18 @@ load_database(old_db)
for (i = 0; i < nitems(syscrontabs); i++) {
if (stat(syscrontabs[i].name, &syscrontabs[i].st) != -1) {
maxmtime = TMAX(syscrontabs[i].st.st_mtime, maxmtime);
+ /* Traverse into directory */
+ if (!(dir = opendir(syscrontabs[i].name)))
+ continue;
+ while (NULL != (dp = readdir(dir))) {
+ if (dp->d_name[0] == '.')
+ continue;
+ ret = fstatat(dirfd(dir), dp->d_name, &st, 0);
+ if (ret == 0 && !S_ISREG(st.st_mode))
+ continue;
+ maxmtime = TMAX(st.st_mtime, maxmtime);
+ }
+ closedir(dir);
} else {
syscrontabs[i].st.st_mtime = 0;
}