Blob Blame History Raw
--- authd.c.orig	2013-07-25 09:31:23.000000000 +0100
+++ authd.c	2013-07-17 11:59:53.000000000 +0100
@@ -381,6 +381,23 @@
     return ul;
 }
 
+static long get_tok_int(char *s, unsigned base) {
+
+    long l = LONG_MAX;
+
+    assert(base <= 36);
+    if ((s = strtok(s, DELIM)) != NULL) {
+        char *endptr;
+
+        l = strtol(s, &endptr, (int) base);
+        if (l > INT_MAX || is_bad_strto(s, endptr))
+            errno = EINVAL;
+    }
+    else errno = EINVAL;
+    return l;
+}
+
+
 static void destroy_opt(void) {
     free(opt.codeset); free(opt.Encrypt); free(opt.ident); free(opt.lang);
     free(opt.Noident); free(opt.os); free(opt.passwd); free(opt.mapped);
@@ -603,7 +620,9 @@
 static const char *const TEXT_READ_MODE = "r"; // passphrase, /proc plaintext
 
 static bool get_info(reply_t *out, request_t in, const char *tcpname) {
-    unsigned long lport, rport, uid, status; FILE *stream;
+    //unsigned long lport, rport, uid, status; FILE *stream;
+    unsigned long lport, rport, status; FILE *stream;
+    long uid;
     const unsigned long ESTABLISHED = 0x01;
     unsigned lineno = 0;
     char *laddr = NULL, *raddr = NULL;
@@ -675,7 +694,8 @@
         (void) get_tok_uint(NULL, 16);            // tr (boolean)
         (void) get_tok_ullong(NULL, 16);            // tm->when (unit: jiffies)
         strtok(NULL, DELIM);                      // retrnsmt
-        uid = get_tok_uint(NULL, 10);             // uid (base 10 uint)
+        //uid = get_tok_uint(NULL, 10);             // uid (base 10 uint)
+        uid = get_tok_int(NULL, 10);             // uid (base 10 int)
         strtok(NULL, DELIM);                      // timeout
         inode = get_tok_uint(NULL, 10);           // inode (base 10 uint)
         if (errno == EINVAL) {