[31596] in CVS-changelog-for-Kerberos-V5

home help back first fref pref prev next nref lref last post

krb5 commit: Fix hex key input handling in ktutil addent

daemon@ATHENA.MIT.EDU (ghudson@mit.edu)
Sat Oct 31 21:47:03 2026

From: ghudson@mit.edu
To: cvs-krb5@mit.edu
Message-Id: <20261101014657.5EB91105825@krbdev.mit.edu>
Date: Sat, 31 Oct 2026 21:46:57 -0400 (EDT)
MIME-Version: 1.0
Reply-To: krbdev@mit.edu
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Errors-To: cvs-krb5-bounces@mit.edu

https://github.com/krb5/krb5/commit/831e420ee0434377fe8e0c6cc86562b46deb73be
commit 831e420ee0434377fe8e0c6cc86562b46deb73be
Author: Tigran Sogomonian <tsogomonian@astralinux.ru>
Date:   Wed Oct 21 13:27:03 2026 +0300

    Fix hex key input handling in ktutil addent
    
    In ktutil_add(), check the return value of fgets(), and do not assume
    the line contains a newline.
    
    [ghudson@mit.edu: slightly simplified logic; edited commit message]
    
    ticket: 9277 (new)
    tags: pullup
    target_version: 1.22-next

 src/kadmin/ktutil/ktutil_funcs.c | 24 ++++++++++++------------
 1 file changed, 12 insertions(+), 12 deletions(-)

diff --git a/src/kadmin/ktutil/ktutil_funcs.c b/src/kadmin/ktutil/ktutil_funcs.c
index e489b5b57..401c1586e 100644
--- a/src/kadmin/ktutil/ktutil_funcs.c
+++ b/src/kadmin/ktutil/ktutil_funcs.c
@@ -153,7 +153,7 @@ ktutil_add(krb5_context context, krb5_kt_list *list, char *princ_str,
     char promptstr[1024];
     char *princ_full = NULL;
     uint8_t *keybytes;
-    size_t keylen;
+    size_t keylen, len;
     unsigned int pwsize = BUFSIZ;
 
     retval = krb5_parse_name(context, princ_str, &princ);
@@ -203,17 +203,17 @@ ktutil_add(krb5_context context, krb5_kt_list *list, char *princ_str,
         entry->key = key;
     } else {
         printf(_("Key for %s (hex): "), princ_full);
-        fgets(buf, BUFSIZ, stdin);
-        /*
-         * We need to get rid of the trailing '\n' from fgets.
-         * If we have an even number of hex digits (as we should),
-         * write a '\0' over the '\n'.  If for some reason we have
-         * an odd number of hex digits, force an even number of hex
-         * digits by writing a '0' into the last position (the string
-         * will still be null-terminated).
-         */
-        buf[strlen(buf) - 1] = strlen(buf) % 2 ? '\0' : '0';
-        if (strlen(buf) == 0) {
+        if (fgets(buf, sizeof(buf), stdin) == NULL)
+            buf[0] = '\0';
+        /* Strip the trailing newline; pad an odd number of hex digits. */
+        len = strcspn(buf, "\n");
+        if (len % 2 && len + 1 < sizeof(buf)) {
+            buf[len] = '0';
+            buf[len + 1] = '\0';
+        } else {
+            buf[len] = '\0';
+        }
+        if (*buf == '\0') {
             fprintf(stderr, _("addent: Error reading key.\n"));
             retval = 0;
             goto cleanup;
_______________________________________________
cvs-krb5 mailing list
cvs-krb5@mit.edu
https://mailman.mit.edu/mailman/listinfo/cvs-krb5

home help back first fref pref prev next nref lref last post