krb5 commit: Read GSS configuration files with mtime 0

[email protected]
Newsgroups gmane.comp.encryption.kerberos.cvs
Message-ID <[email protected]>
https://github.com/krb5/krb5/commit/2b34a007461065e0cab4490dfe1ae5ddd10da67b
commit 2b34a007461065e0cab4490dfe1ae5ddd10da67b
Author: Simo Sorce <[email protected]>
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.
    
    [[email protected]: 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);
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.