krb5 commit: Read GSS configuration files with mtime 0

ghudson at mit.edu ghudson at mit.edu
Tue May 24 17:41:09 EDT 2022


https://github.com/krb5/krb5/commit/2b34a007461065e0cab4490dfe1ae5ddd10da67b
commit 2b34a007461065e0cab4490dfe1ae5ddd10da67b
Author: Simo Sorce <simo at redhat.com>
Date:   Thu May 19 12:27:40 2022 -0400

    Read GSS configuration files with mtime 0
    
    There is at least one case (with flatpaks) where configuration files
    in the special read-only /etc all have an mtime of 0.  Using an
    initial last modified time of 0 in g_initialize.c causes these files
    to never be read.
    
    Change the initial high value to the be the "invalid" value
    (time_t)-1.  Since the C and POSIX standards do not require time_t to
    be signed, special-case the checks in load_if_changed() and
    updateMechList() to treat all mod times as newer than -1.
    
    [ghudson at mit.edu: edited commit message; slightly modified approach]
    
    ticket: 9060 (new)
    target_version: 1.20
    tags: pullup

 src/lib/gssapi/mechglue/g_initialize.c | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/src/lib/gssapi/mechglue/g_initialize.c b/src/lib/gssapi/mechglue/g_initialize.c
index b26262d69..22f6c615c 100644
--- a/src/lib/gssapi/mechglue/g_initialize.c
+++ b/src/lib/gssapi/mechglue/g_initialize.c
@@ -93,7 +93,7 @@ static void free_mechSet(void);
 static gss_mech_info g_mechList = NULL;
 static gss_mech_info g_mechListTail = NULL;
 static k5_mutex_t g_mechListLock = K5_MUTEX_PARTIAL_INITIALIZER;
-static time_t g_confFileModTime = (time_t)0;
+static time_t g_confFileModTime = (time_t)-1;
 static time_t g_confLastCall = (time_t)0;
 
 static gss_OID_set_desc g_mechSet = { 0, NULL };
@@ -469,9 +469,9 @@ load_if_changed(const char *pathname, time_t last, time_t *highest)
 	mtime = check_link_mtime(pathname, &mtime);
 	if (mtime == (time_t)-1)
 		return;
-	if (mtime > *highest)
+	if (mtime > *highest || *highest == (time_t)-1)
 		*highest = mtime;
-	if (mtime > last)
+	if (mtime > last || last == (time_t)-1)
 		loadConfigFile(pathname);
 }
 
@@ -482,7 +482,7 @@ static void
 loadConfigFiles()
 {
 	glob_t globbuf;
-	time_t highest = 0, now;
+	time_t highest = (time_t)-1, now;
 	char **path;
 	const char *val;
 
@@ -522,7 +522,8 @@ updateMechList(void)
 
 #if defined(_WIN32)
 	time_t lastConfModTime = getRegConfigModTime(MECH_KEY);
-	if (g_confFileModTime >= lastConfModTime)
+	if (g_confFileModTime >= lastConfModTime &&
+	    g_confFileModTime != (time_t)-1)
 		return;
 	g_confFileModTime = lastConfModTime;
 	loadConfigFromRegistry(HKEY_CURRENT_USER, MECH_KEY);


More information about the cvs-krb5 mailing list