diff options
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | ssh.c | 16 |
2 files changed, 13 insertions, 7 deletions
@@ -19,6 +19,10 @@ | |||
19 | - markus@cvs.openbsd.org 2009/06/30 14:54:40 | 19 | - markus@cvs.openbsd.org 2009/06/30 14:54:40 |
20 | [version.h] | 20 | [version.h] |
21 | crank version; ok deraadt | 21 | crank version; ok deraadt |
22 | - dtucker@cvs.openbsd.org 2009/07/02 02:11:47 | ||
23 | [ssh.c] | ||
24 | allow for long home dir paths (bz #1615). ok deraadt | ||
25 | (based in part on a patch from jchadima at redhat) | ||
22 | 26 | ||
23 | 20090622 | 27 | 20090622 |
24 | - (dtucker) OpenBSD CVS Sync | 28 | - (dtucker) OpenBSD CVS Sync |
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ssh.c,v 1.325 2009/03/17 21:37:00 markus Exp $ */ | 1 | /* $OpenBSD: ssh.c,v 1.326 2009/07/02 02:11:47 dtucker Exp $ */ |
2 | /* | 2 | /* |
3 | * Author: Tatu Ylonen <ylo@cs.hut.fi> | 3 | * Author: Tatu Ylonen <ylo@cs.hut.fi> |
4 | * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland | 4 | * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland |
@@ -48,6 +48,7 @@ | |||
48 | #endif | 48 | #endif |
49 | #include <sys/resource.h> | 49 | #include <sys/resource.h> |
50 | #include <sys/ioctl.h> | 50 | #include <sys/ioctl.h> |
51 | #include <sys/param.h> | ||
51 | #include <sys/socket.h> | 52 | #include <sys/socket.h> |
52 | 53 | ||
53 | #include <ctype.h> | 54 | #include <ctype.h> |
@@ -203,8 +204,8 @@ void muxserver_listen(void); | |||
203 | int | 204 | int |
204 | main(int ac, char **av) | 205 | main(int ac, char **av) |
205 | { | 206 | { |
206 | int i, opt, exit_status, use_syslog; | 207 | int i, r, opt, exit_status, use_syslog; |
207 | char *p, *cp, *line, *argv0, buf[256]; | 208 | char *p, *cp, *line, *argv0, buf[MAXPATHLEN]; |
208 | struct stat st; | 209 | struct stat st; |
209 | struct passwd *pw; | 210 | struct passwd *pw; |
210 | int dummy, timeout_ms; | 211 | int dummy, timeout_ms; |
@@ -614,9 +615,10 @@ main(int ac, char **av) | |||
614 | fatal("Can't open user config file %.100s: " | 615 | fatal("Can't open user config file %.100s: " |
615 | "%.100s", config, strerror(errno)); | 616 | "%.100s", config, strerror(errno)); |
616 | } else { | 617 | } else { |
617 | snprintf(buf, sizeof buf, "%.100s/%.100s", pw->pw_dir, | 618 | r = snprintf(buf, sizeof buf, "%s/%s", pw->pw_dir, |
618 | _PATH_SSH_USER_CONFFILE); | 619 | _PATH_SSH_USER_CONFFILE); |
619 | (void)read_config_file(buf, host, &options, 1); | 620 | if (r > 0 && (size_t)r < sizeof(buf)) |
621 | (void)read_config_file(buf, host, &options, 1); | ||
620 | 622 | ||
621 | /* Read systemwide configuration file after use config. */ | 623 | /* Read systemwide configuration file after use config. */ |
622 | (void)read_config_file(_PATH_HOST_CONFIG_FILE, host, | 624 | (void)read_config_file(_PATH_HOST_CONFIG_FILE, host, |
@@ -767,9 +769,9 @@ main(int ac, char **av) | |||
767 | * Now that we are back to our own permissions, create ~/.ssh | 769 | * Now that we are back to our own permissions, create ~/.ssh |
768 | * directory if it doesn't already exist. | 770 | * directory if it doesn't already exist. |
769 | */ | 771 | */ |
770 | snprintf(buf, sizeof buf, "%.100s%s%.100s", pw->pw_dir, | 772 | r = snprintf(buf, sizeof buf, "%s%s%s", pw->pw_dir, |
771 | strcmp(pw->pw_dir, "/") ? "/" : "", _PATH_SSH_USER_DIR); | 773 | strcmp(pw->pw_dir, "/") ? "/" : "", _PATH_SSH_USER_DIR); |
772 | if (stat(buf, &st) < 0) | 774 | if (r > 0 && (size_t)r < sizeof(buf) && stat(buf, &st) < 0) |
773 | if (mkdir(buf, 0700) < 0) | 775 | if (mkdir(buf, 0700) < 0) |
774 | error("Could not create directory '%.200s'.", buf); | 776 | error("Could not create directory '%.200s'.", buf); |
775 | 777 | ||