kentpeacock / rpms / openssh

Forked from rpms/openssh 2 years ago
Clone
Petr Šabata 81d24c
diff -up openssh-8.2p1/authfile.c.keyperm openssh-8.2p1/authfile.c
Petr Šabata 81d24c
--- openssh-8.2p1/authfile.c.keyperm	2020-02-14 01:40:54.000000000 +0100
Petr Šabata 81d24c
+++ openssh-8.2p1/authfile.c	2020-02-17 11:55:12.841729758 +0100
Petr Šabata 81d24c
@@ -31,6 +31,7 @@
Petr Šabata 81d24c
 
Petr Šabata 81d24c
 #include <errno.h>
Petr Šabata 81d24c
 #include <fcntl.h>
Petr Šabata 81d24c
+#include <grp.h>
Petr Šabata 81d24c
 #include <stdio.h>
Petr Šabata 81d24c
 #include <stdarg.h>
Petr Šabata 81d24c
 #include <stdlib.h>
Petr Šabata 81d24c
@@ -101,7 +102,19 @@ sshkey_perm_ok(int fd, const char *filen
Petr Šabata 81d24c
 #ifdef HAVE_CYGWIN
Petr Šabata 81d24c
 	if (check_ntsec(filename))
Petr Šabata 81d24c
 #endif
Petr Šabata 81d24c
+
Petr Šabata 81d24c
 	if ((st.st_uid == getuid()) && (st.st_mode & 077) != 0) {
Petr Šabata 81d24c
+		if (st.st_mode & 040) {
Petr Šabata 81d24c
+			struct group *gr;
Petr Šabata 81d24c
+
Petr Šabata 81d24c
+			if ((gr = getgrnam("ssh_keys")) && (st.st_gid == gr->gr_gid)) {
Petr Šabata 81d24c
+				/* The only additional bit is read
Petr Šabata 81d24c
+				 * for ssh_keys group, which is fine */
Petr Šabata 81d24c
+				if ((st.st_mode & 077) == 040 ) {
Petr Šabata 81d24c
+					return 0;
Petr Šabata 81d24c
+				}
Petr Šabata 81d24c
+			}
Petr Šabata 81d24c
+		}
Petr Šabata 81d24c
 		error("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
Petr Šabata 81d24c
 		error("@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @");
Petr Šabata 81d24c
 		error("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");