mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-28 09:39:00 +00:00
29e170dbaa
- drop patches (applied upstream):
* 010-backport-change-address-logging.patch
* 020-backport-ed25519-support.patch
* 021-backport-chacha20-poly1305-support.patch
- backport patches:
* 010-backport-disable-toom-and-karatsuba.patch:
reduce dropbear binary size (about ~8Kb).
- refresh patches.
- don't bother anymore with following config options
because they are disabled in upstream too:
* DROPBEAR_3DES
* DROPBEAR_ENABLE_CBC_MODE
* DROPBEAR_SHA1_96_HMAC
- explicitly disable DO_MOTD as it was before commit a1099ed
:
upstream has (accidentally) switched it to 0 in release 2019.77,
but reverted back in release 2020.79.
Signed-off-by: Konstantin Demin <rockdrilla@gmail.com>
87 lines
2.5 KiB
Diff
87 lines
2.5 KiB
Diff
--- a/svr-authpubkey.c
|
|
+++ b/svr-authpubkey.c
|
|
@@ -386,14 +386,19 @@ static int checkpubkey(const char* keyal
|
|
goto out;
|
|
}
|
|
|
|
- /* we don't need to check pw and pw_dir for validity, since
|
|
- * its been done in checkpubkeyperms. */
|
|
- len = strlen(ses.authstate.pw_dir);
|
|
- /* allocate max required pathname storage,
|
|
- * = path + "/.ssh/authorized_keys" + '\0' = pathlen + 22 */
|
|
- filename = m_malloc(len + 22);
|
|
- snprintf(filename, len + 22, "%s/.ssh/authorized_keys",
|
|
- ses.authstate.pw_dir);
|
|
+ if (ses.authstate.pw_uid != 0) {
|
|
+ /* we don't need to check pw and pw_dir for validity, since
|
|
+ * its been done in checkpubkeyperms. */
|
|
+ len = strlen(ses.authstate.pw_dir);
|
|
+ /* allocate max required pathname storage,
|
|
+ * = path + "/.ssh/authorized_keys" + '\0' = pathlen + 22 */
|
|
+ filename = m_malloc(len + 22);
|
|
+ snprintf(filename, len + 22, "%s/.ssh/authorized_keys",
|
|
+ ses.authstate.pw_dir);
|
|
+ } else {
|
|
+ filename = m_malloc(30);
|
|
+ strncpy(filename, "/etc/dropbear/authorized_keys", 30);
|
|
+ }
|
|
|
|
#if DROPBEAR_SVR_MULTIUSER
|
|
/* open the file as the authenticating user. */
|
|
@@ -474,27 +479,36 @@ static int checkpubkeyperms() {
|
|
goto out;
|
|
}
|
|
|
|
- /* allocate max required pathname storage,
|
|
- * = path + "/.ssh/authorized_keys" + '\0' = pathlen + 22 */
|
|
- len += 22;
|
|
- filename = m_malloc(len);
|
|
- strlcpy(filename, ses.authstate.pw_dir, len);
|
|
-
|
|
- /* check ~ */
|
|
- if (checkfileperm(filename) != DROPBEAR_SUCCESS) {
|
|
- goto out;
|
|
- }
|
|
+ if (ses.authstate.pw_uid == 0) {
|
|
+ if (checkfileperm("/etc/dropbear") != DROPBEAR_SUCCESS) {
|
|
+ goto out;
|
|
+ }
|
|
+ if (checkfileperm("/etc/dropbear/authorized_keys") != DROPBEAR_SUCCESS) {
|
|
+ goto out;
|
|
+ }
|
|
+ } else {
|
|
+ /* allocate max required pathname storage,
|
|
+ * = path + "/.ssh/authorized_keys" + '\0' = pathlen + 22 */
|
|
+ len += 22;
|
|
+ filename = m_malloc(len);
|
|
+ strlcpy(filename, ses.authstate.pw_dir, len);
|
|
+
|
|
+ /* check ~ */
|
|
+ if (checkfileperm(filename) != DROPBEAR_SUCCESS) {
|
|
+ goto out;
|
|
+ }
|
|
|
|
- /* check ~/.ssh */
|
|
- strlcat(filename, "/.ssh", len);
|
|
- if (checkfileperm(filename) != DROPBEAR_SUCCESS) {
|
|
- goto out;
|
|
- }
|
|
+ /* check ~/.ssh */
|
|
+ strlcat(filename, "/.ssh", len);
|
|
+ if (checkfileperm(filename) != DROPBEAR_SUCCESS) {
|
|
+ goto out;
|
|
+ }
|
|
|
|
- /* now check ~/.ssh/authorized_keys */
|
|
- strlcat(filename, "/authorized_keys", len);
|
|
- if (checkfileperm(filename) != DROPBEAR_SUCCESS) {
|
|
- goto out;
|
|
+ /* now check ~/.ssh/authorized_keys */
|
|
+ strlcat(filename, "/authorized_keys", len);
|
|
+ if (checkfileperm(filename) != DROPBEAR_SUCCESS) {
|
|
+ goto out;
|
|
+ }
|
|
}
|
|
|
|
/* file looks ok, return success */
|