mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-25 00:11:13 +00:00
a1099edf32
- drop patches applied upstream: * 010-runtime-maxauthtries.patch * 020-Wait-to-fail-invalid-usernames.patch * 150-dbconvert_standalone.patch * 610-skip-default-keys-in-custom-runs.patch - refresh patches - move OpenWrt configuration from patch to Build/Configure recipe, thus drop patch 120-openwrt_options.patch 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
|
|
@@ -338,14 +338,19 @@ static int checkpubkey(const char* algo,
|
|
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. */
|
|
@@ -426,27 +431,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 */
|