Nalin Dahyabhai b3399eb
commit 5ac159e220297a8f62dd5edcec6f9b988b0627ea
Nalin Dahyabhai 49c8edf
Author: Nalin Dahyabhai <nalin@dahyabhai.net>
Nalin Dahyabhai 49c8edf
Date:   Mon Nov 11 13:10:08 2013 -0500
Nalin Dahyabhai 49c8edf
Nalin Dahyabhai 49c8edf
    Catch more strtol() failures when using KEYRINGs
Nalin Dahyabhai 49c8edf
    
Nalin Dahyabhai b3399eb
    When parsing what should be a UID while resolving a KEYRING ccache
Nalin Dahyabhai b3399eb
    name, don't just depend on strtol() to set errno when the residual
Nalin Dahyabhai b3399eb
    that we pass to it can't be parsed as a number.  In addition to
Nalin Dahyabhai b3399eb
    checking errno, pass in and check the value of an "endptr".
Nalin Dahyabhai b3399eb
    
Nalin Dahyabhai b3399eb
    [ghudson@mit.edu: simplified slightly]
Nalin Dahyabhai b3399eb
    
Nalin Dahyabhai b3399eb
    ticket: 7764 (new)
Nalin Dahyabhai b3399eb
    target_version: 1.12
Nalin Dahyabhai b3399eb
    tags: pullup
Nalin Dahyabhai 49c8edf
Nalin Dahyabhai 49c8edf
diff --git a/src/lib/krb5/ccache/cc_keyring.c b/src/lib/krb5/ccache/cc_keyring.c
Nalin Dahyabhai b3399eb
index 795ccd6..a07a0dc 100644
Nalin Dahyabhai 49c8edf
--- a/src/lib/krb5/ccache/cc_keyring.c
Nalin Dahyabhai 49c8edf
+++ b/src/lib/krb5/ccache/cc_keyring.c
Nalin Dahyabhai 49c8edf
@@ -593,7 +593,7 @@ get_collection(const char *anchor_name, const char *collection_name,
Nalin Dahyabhai 49c8edf
 {
Nalin Dahyabhai 49c8edf
     krb5_error_code ret;
Nalin Dahyabhai 49c8edf
     key_serial_t persistent_id, anchor_id, possess_id = 0;
Nalin Dahyabhai 49c8edf
-    char *ckname;
Nalin Dahyabhai b3399eb
+    char *ckname, *cnend;
Nalin Dahyabhai 49c8edf
     long uidnum;
Nalin Dahyabhai 49c8edf
 
Nalin Dahyabhai 49c8edf
     *collection_id_out = 0;
Nalin Dahyabhai 49c8edf
@@ -607,8 +607,8 @@ get_collection(const char *anchor_name, const char *collection_name,
Nalin Dahyabhai 49c8edf
          */
Nalin Dahyabhai 49c8edf
         if (*collection_name != '\0') {
Nalin Dahyabhai 49c8edf
             errno = 0;
Nalin Dahyabhai 49c8edf
-            uidnum = strtol(collection_name, NULL, 10);
Nalin Dahyabhai 49c8edf
-            if (errno)
Nalin Dahyabhai 49c8edf
+            uidnum = strtol(collection_name, &cnend, 10);
Nalin Dahyabhai b3399eb
+            if (errno || *cnend != '\0')
Nalin Dahyabhai 49c8edf
                 return KRB5_KCC_INVALID_UID;
Nalin Dahyabhai 49c8edf
         } else {
Nalin Dahyabhai 49c8edf
             uidnum = geteuid();