File just-one-big-cookie.patch of Package pam_ssh_agent_auth

From db2d41937e714b56d17771f8ee3d61f11c26cc7e Mon Sep 17 00:00:00 2001
From: Florian Franzen <Florian.Franzen@gmail.com>
Date: Wed, 20 Oct 2021 22:39:18 +0200
Subject: [PATCH] use single fixed size cookie as session id

---
 iterate_ssh_agent_keys.c | 94 +++-------------------------------------
 1 file changed, 6 insertions(+), 88 deletions(-)

diff --git a/iterate_ssh_agent_keys.c b/iterate_ssh_agent_keys.c
index 1f551c2..cb25fb6 100644
--- a/iterate_ssh_agent_keys.c
+++ b/iterate_ssh_agent_keys.c
@@ -82,97 +82,15 @@ agent_action(Buffer *buf, char ** action, size_t count)
 
 
 void
-pamsshagentauth_session_id2_gen(Buffer * session_id2, const char * user,
-                                const char * ruser, const char * servicename)
+pamsshagentauth_session_id2_random(Buffer * session_id2) 
 {
-    char *cookie = NULL;
-    uint8_t i = 0;
-    uint32_t rnd = 0;
-    uint8_t cookie_len;
-    char hostname[256] = { 0 };
-    char pwd[1024] = { 0 };
-    time_t ts;
-    char ** reported_argv = NULL;
-    size_t count = 0;
-    char * action_logbuf = NULL;
-    Buffer action_agentbuf;
-    uint8_t free_logbuf = 0;
-    char * retc;
-    int32_t reti;
-
-    rnd = pamsshagentauth_arc4random();
-    cookie_len = ((uint8_t) rnd);
-    while (cookie_len < 16) { 
-        cookie_len += 16;                                          /* Add 16 bytes to the size to ensure that while the length is random, the length is always reasonable; ticket #18 */
-    }
-
-    cookie = pamsshagentauth_xcalloc(1,cookie_len);
+    uint8_t i;
 
-    for (i = 0; i < cookie_len; i++) {
-        if (i % 4 == 0) {
-            rnd = pamsshagentauth_arc4random();
-        }
-        cookie[i] = (char) rnd;
-        rnd >>= 8;
+    // Generate 1024 random bits (32 * 4 * 8)
+    for (i = 0; i < 32; i++) {    
+        pamsshagentauth_buffer_put_int(session_id2, pamsshagentauth_arc4random());
     }
 
-    count = pamsshagentauth_get_command_line(&reported_argv);
-    if (count > 0) { 
-        free_logbuf = 1;
-        action_logbuf = log_action(reported_argv, count);
-        agent_action(&action_agentbuf, reported_argv, count);
-        pamsshagentauth_free_command_line(reported_argv, count);
-    }
-    else {
-        action_logbuf = "unknown on this platform";
-        pamsshagentauth_buffer_init(&action_agentbuf); /* stays empty, means unavailable */
-    }
-    
-    /*
-    action = getenv("SUDO_COMMAND");
-    if(!action) {
-        action = getenv("PAM_AUTHORIZED_ACTION");
-        if(!action) {
-            action = empty;
-        }
-    }
-    */
-
-    reti = gethostname(hostname, sizeof(hostname) - 1);
-    retc = getcwd(pwd, sizeof(pwd) - 1);
-    time(&ts);
-
-    pamsshagentauth_buffer_init(session_id2);
-
-    pamsshagentauth_buffer_put_int(session_id2, PAM_SSH_AGENT_AUTH_REQUESTv1);
-    /* pamsshagentauth_debug3("cookie: %s", pamsshagentauth_tohex(cookie, cookie_len)); */
-    pamsshagentauth_buffer_put_string(session_id2, cookie, cookie_len);
-    /* pamsshagentauth_debug3("user: %s", user); */
-    pamsshagentauth_buffer_put_cstring(session_id2, user);
-    /* pamsshagentauth_debug3("ruser: %s", ruser); */
-    pamsshagentauth_buffer_put_cstring(session_id2, ruser);
-    /* pamsshagentauth_debug3("servicename: %s", servicename); */
-    pamsshagentauth_buffer_put_cstring(session_id2, servicename);
-    /* pamsshagentauth_debug3("pwd: %s", pwd); */
-    if(retc)
-        pamsshagentauth_buffer_put_cstring(session_id2, pwd);
-    else
-        pamsshagentauth_buffer_put_cstring(session_id2, "");
-    /* pamsshagentauth_debug3("action: %s", action_logbuf); */
-    pamsshagentauth_buffer_put_string(session_id2, action_agentbuf.buf + action_agentbuf.offset, action_agentbuf.end - action_agentbuf.offset);
-    if (free_logbuf) { 
-        pamsshagentauth_xfree(action_logbuf);
-        pamsshagentauth_buffer_free(&action_agentbuf);
-    }
-    /* pamsshagentauth_debug3("hostname: %s", hostname); */
-    if(reti >= 0)
-        pamsshagentauth_buffer_put_cstring(session_id2, hostname);
-    else
-        pamsshagentauth_buffer_put_cstring(session_id2, "");
-    /* pamsshagentauth_debug3("ts: %ld", ts); */
-    pamsshagentauth_buffer_put_int64(session_id2, (uint64_t) ts);
-
-    free(cookie);
     return;
 }
 
@@ -188,7 +106,7 @@ pamsshagentauth_find_authorized_keys(const char * user, const char * ruser, cons
     uid_t uid = getpwnam(ruser)->pw_uid;
 
     OpenSSL_add_all_digests();
-    pamsshagentauth_session_id2_gen(&session_id2, user, ruser, servicename);
+    pamsshagentauth_session_id2_random(&session_id2);
 
     if ((ac = ssh_get_authentication_connection(uid))) {
         pamsshagentauth_verbose("Contacted ssh-agent of user %s (%u)", ruser, uid);
openSUSE Build Service is sponsored by