diff options
Diffstat (limited to 'net-misc/openssh/files/openssh-3.8.1p1-sftplogging-1.2-gentoo.patch')
-rw-r--r-- | net-misc/openssh/files/openssh-3.8.1p1-sftplogging-1.2-gentoo.patch | 755 |
1 files changed, 755 insertions, 0 deletions
diff --git a/net-misc/openssh/files/openssh-3.8.1p1-sftplogging-1.2-gentoo.patch b/net-misc/openssh/files/openssh-3.8.1p1-sftplogging-1.2-gentoo.patch new file mode 100644 index 000000000000..3e9dd1f4e798 --- /dev/null +++ b/net-misc/openssh/files/openssh-3.8.1p1-sftplogging-1.2-gentoo.patch @@ -0,0 +1,755 @@ +diff -ru openssh-3.8.1p1/servconf.c openssh-3.8.1p1_sftp/servconf.c +--- openssh-3.8.1p1/servconf.c 2004-01-23 11:03:10.000000000 +0000 ++++ openssh-3.8.1p1_sftp/servconf.c 2004-08-18 21:28:18.564861272 +0000 +@@ -102,6 +102,15 @@ + options->authorized_keys_file = NULL; + options->authorized_keys_file2 = NULL; + ++ options->log_sftp = LOG_SFTP_NOT_SET; ++ options->sftp_log_facility = SYSLOG_FACILITY_NOT_SET; ++ options->sftp_log_level = SYSLOG_LEVEL_NOT_SET; ++ ++ memset(options->sftp_umask, 0, SFTP_UMASK_LENGTH); ++ ++ options->sftp_permit_chmod = SFTP_PERMIT_NOT_SET; ++ options->sftp_permit_chown = SFTP_PERMIT_NOT_SET; ++ + /* Needs to be accessable in many places */ + use_privsep = -1; + } +@@ -109,7 +118,7 @@ + void + fill_default_server_options(ServerOptions *options) + { +- /* Portable-specific options */ ++/* Portable-specific options */ + if (options->use_pam == -1) + options->use_pam = 0; + +@@ -228,6 +237,24 @@ + if (options->authorized_keys_file == NULL) + options->authorized_keys_file = _PATH_SSH_USER_PERMITTED_KEYS; + ++ /* Turn sftp-server logging off by default */ ++ if (options->log_sftp == LOG_SFTP_NOT_SET) ++ options->log_sftp = LOG_SFTP_NO; ++ if (options->sftp_log_facility == SYSLOG_FACILITY_NOT_SET) ++ options->sftp_log_facility = SYSLOG_FACILITY_AUTH; ++ if (options->sftp_log_level == SYSLOG_LEVEL_NOT_SET) ++ options->sftp_log_level = SYSLOG_LEVEL_INFO; ++ ++ /* Don't set sftp-server umask */ ++ if (!options->sftp_umask) ++ memset(options->sftp_umask, 0, SFTP_UMASK_LENGTH); ++ ++ /* allow sftp client to issue chmod, chown / chgrp commands */ ++ if (options->sftp_permit_chmod == SFTP_PERMIT_NOT_SET) ++ options->sftp_permit_chmod = SFTP_PERMIT_YES; ++ if (options->sftp_permit_chown == SFTP_PERMIT_NOT_SET) ++ options->sftp_permit_chown = SFTP_PERMIT_YES; ++ + /* Turn privilege separation on by default */ + if (use_privsep == -1) + use_privsep = 1; +@@ -249,6 +276,9 @@ + /* Portable-specific options */ + sUsePAM, + /* Standard Options */ ++ sLogSftp, sSftpLogFacility, sSftpLogLevel, ++ sSftpUmask, ++ sSftpPermitChown, sSftpPermitChmod, + sPort, sHostKeyFile, sServerKeyBits, sLoginGraceTime, sKeyRegenerationTime, + sPermitRootLogin, sLogFacility, sLogLevel, + sRhostsRSAAuthentication, sRSAAuthentication, +@@ -334,6 +364,12 @@ + { "printmotd", sPrintMotd }, + { "printlastlog", sPrintLastLog }, + { "ignorerhosts", sIgnoreRhosts }, ++ { "logsftp", sLogSftp}, ++ { "sftplogfacility", sSftpLogFacility}, ++ { "sftploglevel", sSftpLogLevel}, ++ { "sftpumask", sSftpUmask}, ++ { "sftppermitchmod", sSftpPermitChmod}, ++ { "sftppermitchown", sSftpPermitChown}, + { "ignoreuserknownhosts", sIgnoreUserKnownHosts }, + { "x11forwarding", sX11Forwarding }, + { "x11displayoffset", sX11DisplayOffset }, +@@ -431,6 +467,8 @@ + char *cp, **charptr, *arg, *p; + int *intptr, value, i, n; + ServerOpCodes opcode; ++ unsigned int umaskvalue = 0; ++ char *umaskptr; + + cp = line; + arg = strdelim(&cp); +@@ -871,6 +909,58 @@ + case sBanner: + charptr = &options->banner; + goto parse_filename; ++ ++ case sLogSftp: ++ intptr = &options->log_sftp; ++ goto parse_flag; ++ ++ case sSftpLogFacility: ++ intptr = (int *) &options->sftp_log_facility; ++ arg = strdelim(&cp); ++ value = log_facility_number(arg); ++ if (value == SYSLOG_FACILITY_NOT_SET) ++ fatal("%.200s line %d: unsupported log facility '%s'", ++ filename, linenum, arg ? arg : "<NONE>"); ++ if (*intptr == -1) ++ *intptr = (SyslogFacility) value; ++ break; ++ ++ case sSftpLogLevel: ++ intptr = (int *) &options->sftp_log_level; ++ arg = strdelim(&cp); ++ value = log_level_number(arg); ++ if (value == SYSLOG_LEVEL_NOT_SET) ++ fatal("%.200s line %d: unsupported log level '%s'", ++ filename, linenum, arg ? arg : "<NONE>"); ++ if (*intptr == -1) ++ *intptr = (LogLevel) value; ++ break; ++ ++ case sSftpUmask: ++ arg = strdelim(&cp); ++ umaskptr = arg; ++ while (*arg && *arg >= '0' && *arg <= '9') ++ umaskvalue = umaskvalue * 8 + *arg++ - '0'; ++ if (*arg || umaskvalue > 0777) ++ fatal("%s line %d: bad value for umask", ++ filename, linenum); ++ else { ++ while (*umaskptr && *umaskptr == '0') ++ *umaskptr++; ++ strncpy(options->sftp_umask, umaskptr, ++ SFTP_UMASK_LENGTH); ++ } ++ ++ break; ++ ++ case sSftpPermitChmod: ++ intptr = &options->sftp_permit_chmod; ++ goto parse_flag; ++ ++ case sSftpPermitChown: ++ intptr = &options->sftp_permit_chown; ++ goto parse_flag; ++ + /* + * These options can contain %X options expanded at + * connect time, so that you can specify paths like: +@@ -913,6 +1003,7 @@ + if ((arg = strdelim(&cp)) != NULL && *arg != '\0') + fatal("%s line %d: garbage at end of line; \"%.200s\".", + filename, linenum, arg); ++ + return 0; + } + +Only in openssh-3.8.1p1_sftp/: servconf.c.orig +diff -ru openssh-3.8.1p1/servconf.h openssh-3.8.1p1_sftp/servconf.h +--- openssh-3.8.1p1/servconf.h 2003-12-31 00:37:34.000000000 +0000 ++++ openssh-3.8.1p1_sftp/servconf.h 2004-08-18 21:30:53.354147322 +0000 +@@ -13,6 +13,19 @@ + * called by a name other than "ssh" or "Secure Shell". + */ + ++/* sftp-server logging */ ++#define LOG_SFTP_NOT_SET -1 ++#define LOG_SFTP_NO 0 ++#define LOG_SFTP_YES 1 ++ ++/* sftp-server umask control */ ++#define SFTP_UMASK_LENGTH 5 ++ ++/* sftp-server client priviledge */ ++#define SFTP_PERMIT_NOT_SET -1 ++#define SFTP_PERMIT_NO 0 ++#define SFTP_PERMIT_YES 1 ++ + #ifndef SERVCONF_H + #define SERVCONF_H + +@@ -94,6 +107,12 @@ + int use_login; /* If true, login(1) is used */ + int compression; /* If true, compression is allowed */ + int allow_tcp_forwarding; ++ int log_sftp; /* perform sftp-server logging */ ++ SyslogFacility sftp_log_facility; /* Facility for sftp subsystem logging. */ ++ LogLevel sftp_log_level; /* Level for sftp subsystem logging. */ ++ char sftp_umask[SFTP_UMASK_LENGTH]; /* Sftp Umask */ ++ int sftp_permit_chmod; ++ int sftp_permit_chown; + u_int num_allow_users; + char *allow_users[MAX_ALLOW_USERS]; + u_int num_deny_users; +Only in openssh-3.8.1p1_sftp/: servconf.h.orig +diff -ru openssh-3.8.1p1/session.c openssh-3.8.1p1_sftp/session.c +--- openssh-3.8.1p1/session.c 2004-04-16 12:47:55.000000000 +0000 ++++ openssh-3.8.1p1_sftp/session.c 2004-08-18 21:06:14.440083846 +0000 +@@ -112,6 +112,15 @@ + + static int is_child = 0; + ++/* so SFTP_LOG_FACILITY and SFTP_LOG_LEVEL can be passed through the ++ environment to the sftp-server subsystem. */ ++static const char *sysfac_to_int[] = { "0", "1", "2", "3", "4", "5", "6", ++ "7", "8", "9", "10", "11", "-1" }; ++static const char *syslevel_to_int[] = { "0", "1", "2", "3", "4", "5", "6", ++ "7", "-1" }; ++ ++static char *sftpumask; ++ + /* Name and directory of socket for authentication agent forwarding. */ + static char *auth_sock_name = NULL; + static char *auth_sock_dir = NULL; +@@ -979,6 +988,7 @@ + env = xmalloc(envsize * sizeof(char *)); + env[0] = NULL; + ++ + #ifdef HAVE_CYGWIN + /* + * The Windows environment contains some setting which are +@@ -1119,6 +1129,67 @@ + child_set_env(&env, &envsize, SSH_AUTHSOCKET_ENV_NAME, + auth_sock_name); + ++ /* LOG_SFTP */ ++ if (options.log_sftp == -1 ) ++ child_set_env(&env, &envsize, "LOG_SFTP", "-1"); ++ else if (options.log_sftp == 0) ++ child_set_env(&env, &envsize, "LOG_SFTP", "0"); ++ else ++ child_set_env(&env, &envsize, "LOG_SFTP", "1"); ++ ++ /* SFTP_LOG_FACILITY */ ++ if (options.sftp_log_facility < 0) ++ child_set_env(&env, &envsize, "SFTP_LOG_FACILITY", ++ "-1"); ++ else ++ child_set_env(&env, &envsize, "SFTP_LOG_FACILITY", ++ sysfac_to_int[options.sftp_log_facility]); ++ ++ /* SFTP_LOG_LEVEL */ ++ if (options.sftp_log_level < 0) ++ child_set_env(&env, &envsize, "SFTP_LOG_LEVEL", ++ "-1"); ++ else ++ child_set_env(&env, &envsize, "SFTP_LOG_LEVEL", ++ syslevel_to_int[options.sftp_log_level]); ++ ++ /* SFTP_UMASK */ ++ ++ if (options.sftp_umask[0] == '\0') ++ child_set_env(&env, &envsize, "SFTP_UMASK", ++ "" ); ++ else { ++ if (!(sftpumask = calloc(SFTP_UMASK_LENGTH,1))) { ++ ++logit("session.c: unabled to allocate memory for SftpUmask. SftpUmask control \ ++will be turned off."); ++ ++ child_set_env(&env, &envsize, "SFTP_UMASK", ++ "" ); ++ } else { ++ strncpy(sftpumask, options.sftp_umask, ++ SFTP_UMASK_LENGTH); ++ child_set_env(&env, &envsize, "SFTP_UMASK", ++ sftpumask ); ++ } ++ } ++ ++ /* SFTP_PERMIT_CHMOD */ ++ if (options.sftp_permit_chmod == -1 ) ++ child_set_env(&env, &envsize, "SFTP_PERMIT_CHMOD", "-1"); ++ else if (options.sftp_permit_chmod == 0) ++ child_set_env(&env, &envsize, "SFTP_PERMIT_CHMOD", "0"); ++ else ++ child_set_env(&env, &envsize, "SFTP_PERMIT_CHMOD", "1"); ++ ++ /* SFTP_PERMIT_CHOWN */ ++ if (options.sftp_permit_chown == -1 ) ++ child_set_env(&env, &envsize, "SFTP_PERMIT_CHOWN", "-1"); ++ else if (options.sftp_permit_chown == 0) ++ child_set_env(&env, &envsize, "SFTP_PERMIT_CHOWN", "0"); ++ else ++ child_set_env(&env, &envsize, "SFTP_PERMIT_CHOWN", "1"); ++ + /* read $HOME/.ssh/environment. */ + if (options.permit_user_env && !options.use_login) { + snprintf(buf, sizeof buf, "%.200s/.ssh/environment", +Only in openssh-3.8.1p1_sftp/: session.c.orig +diff -ru openssh-3.8.1p1/sftp-server.8 openssh-3.8.1p1_sftp/sftp-server.8 +--- openssh-3.8.1p1/sftp-server.8 2003-10-15 05:50:43.000000000 +0000 ++++ openssh-3.8.1p1_sftp/sftp-server.8 2004-08-18 21:06:14.441083601 +0000 +@@ -42,12 +42,27 @@ + option. + See + .Xr sshd_config 5 ++for more information. Sftp-server transactions may be logged ++using the ++.Cm LogSftp , ++.Cm SftpLogFacility , ++and ++.Cm SftpLogLevel ++options. The administrator may exert control over the file and directory ++permission and ownership, with ++.Cm SftpUmask , ++.Cm SftpPermitChmod , ++and ++.Cm SftpPermitChown ++. See ++.Xr sshd_config 5 + for more information. + .Sh SEE ALSO + .Xr sftp 1 , + .Xr ssh 1 , + .Xr sshd_config 5 , +-.Xr sshd 8 ++.Xr sshd 8, ++.Xr sshd_config 5 + .Rs + .%A T. Ylonen + .%A S. Lehtinen +diff -ru openssh-3.8.1p1/sftp-server.c openssh-3.8.1p1_sftp/sftp-server.c +--- openssh-3.8.1p1/sftp-server.c 2004-02-23 22:19:15.000000000 +0000 ++++ openssh-3.8.1p1_sftp/sftp-server.c 2004-08-18 21:06:14.443083113 +0000 +@@ -31,6 +31,13 @@ + #define get_string(lenp) buffer_get_string(&iqueue, lenp); + #define TRACE debug + ++/* SFTP_UMASK */ ++static mode_t setumask = 0; ++ ++static int permit_chmod = 1; ++static int permit_chown = 1; ++static int permit_logging = 0; ++ + #ifdef HAVE___PROGNAME + extern char *__progname; + #else +@@ -385,6 +392,14 @@ + a = get_attrib(); + flags = flags_from_portable(pflags); + mode = (a->flags & SSH2_FILEXFER_ATTR_PERMISSIONS) ? a->perm : 0666; ++ ++ if (setumask != 0) { ++ if ( permit_logging == 1 ) ++ logit("setting file creation mode to 0666 and umask to %o", setumask); ++ mode = 0666; ++ umask(setumask); ++ } ++ + TRACE("open id %u name %s flags %d mode 0%o", id, name, pflags, mode); + fd = open(name, flags, mode); + if (fd < 0) { +@@ -398,6 +413,8 @@ + status = SSH2_FX_OK; + } + } ++ if ( permit_logging == 1 ) ++ logit("open %s", name); + if (status != SSH2_FX_OK) + send_status(id, status); + xfree(name); +@@ -434,6 +451,7 @@ + (u_int64_t)off, len); + if (len > sizeof buf) { + len = sizeof buf; ++ if ( permit_logging == 1 ) + logit("read change len %d", len); + } + fd = handle_to_fd(handle); +@@ -453,6 +471,8 @@ + } + } + } ++ if ( permit_logging == 1 ) ++ logit("reading file"); + if (status != SSH2_FX_OK) + send_status(id, status); + } +@@ -487,10 +507,13 @@ + } else if (ret == len) { + status = SSH2_FX_OK; + } else { ++ if ( permit_logging == 1 ) + logit("nothing at all written"); + } + } + } ++ if ( permit_logging == 1 ) ++ logit("writing file"); + send_status(id, status); + xfree(data); + } +@@ -583,24 +606,46 @@ + a = get_attrib(); + TRACE("setstat id %u name %s", id, name); + if (a->flags & SSH2_FILEXFER_ATTR_SIZE) { ++if ( permit_logging == 1 ) ++logit("process_setstat: truncate"); + ret = truncate(name, a->size); + if (ret == -1) + status = errno_to_portable(errno); + } + if (a->flags & SSH2_FILEXFER_ATTR_PERMISSIONS) { +- ret = chmod(name, a->perm & 0777); +- if (ret == -1) +- status = errno_to_portable(errno); ++ if (permit_chmod == 1) { ++ ret = chmod(name, a->perm & 0777); ++ if (ret == -1) ++ status = errno_to_portable(errno); ++ else ++ if ( permit_logging == 1 ) ++ logit("chmod'ed %s", name); ++ } else { ++ status = SSH2_FX_PERMISSION_DENIED; ++ if ( permit_logging == 1 ) ++ logit("chmod %s: operation prohibited by sftp-server configuration.", name); ++ } + } + if (a->flags & SSH2_FILEXFER_ATTR_ACMODTIME) { ++if ( permit_logging == 1 ) ++logit("process_setstat: utimes"); + ret = utimes(name, attrib_to_tv(a)); + if (ret == -1) + status = errno_to_portable(errno); + } + if (a->flags & SSH2_FILEXFER_ATTR_UIDGID) { +- ret = chown(name, a->uid, a->gid); +- if (ret == -1) +- status = errno_to_portable(errno); ++ if (permit_chown == 1) { ++ ret = chown(name, a->uid, a->gid); ++ if (ret == -1) ++ status = errno_to_portable(errno); ++ else ++ if ( permit_logging == 1 ) ++ logit("chown'ed %s.", name); ++ } else { ++ status = SSH2_FX_PERMISSION_DENIED; ++ if ( permit_logging == 1 ) ++ logit("chown %s: operation prohibited by sftp-server configuration.", name); ++ } + } + send_status(id, status); + xfree(name); +@@ -615,6 +660,9 @@ + int status = SSH2_FX_OK; + char *name; + ++if ( permit_logging == 1 ) ++logit("process_fsetstat"); ++ + id = get_int(); + handle = get_handle(); + a = get_attrib(); +@@ -625,20 +673,33 @@ + status = SSH2_FX_FAILURE; + } else { + if (a->flags & SSH2_FILEXFER_ATTR_SIZE) { ++if ( permit_logging == 1 ) ++logit("process_fsetstat: ftruncate"); + ret = ftruncate(fd, a->size); + if (ret == -1) + status = errno_to_portable(errno); + } + if (a->flags & SSH2_FILEXFER_ATTR_PERMISSIONS) { ++ if (permit_chmod == 1) { + #ifdef HAVE_FCHMOD +- ret = fchmod(fd, a->perm & 0777); ++ ret = fchmod(fd, a->perm & 0777); + #else +- ret = chmod(name, a->perm & 0777); ++ ret = chmod(name, a->perm & 0777); + #endif +- if (ret == -1) +- status = errno_to_portable(errno); ++ if (ret == -1) ++ status = errno_to_portable(errno); ++ else ++ if ( permit_logging == 1 ) ++ logit("chmod: succeeded."); ++ } else { ++ status = SSH2_FX_PERMISSION_DENIED; ++ if ( permit_logging == 1 ) ++ logit("chmod: operation prohibited by sftp-server configuration."); ++ } + } + if (a->flags & SSH2_FILEXFER_ATTR_ACMODTIME) { ++if ( permit_logging == 1 ) ++logit("process_fsetstat: utimes"); + #ifdef HAVE_FUTIMES + ret = futimes(fd, attrib_to_tv(a)); + #else +@@ -648,13 +709,22 @@ + status = errno_to_portable(errno); + } + if (a->flags & SSH2_FILEXFER_ATTR_UIDGID) { ++ if (permit_chown == 1) { + #ifdef HAVE_FCHOWN +- ret = fchown(fd, a->uid, a->gid); ++ ret = fchown(fd, a->uid, a->gid); + #else +- ret = chown(name, a->uid, a->gid); ++ ret = chown(name, a->uid, a->gid); + #endif +- if (ret == -1) +- status = errno_to_portable(errno); ++ if (ret == -1) ++ status = errno_to_portable(errno); ++ else ++ if ( permit_logging == 1 ) ++ logit("chown: succeeded"); ++ } else { ++ status = SSH2_FX_PERMISSION_DENIED; ++ if ( permit_logging == 1 ) ++ logit("chown: operation prohibited by sftp-server configuration."); ++ } + } + } + send_status(id, status); +@@ -684,6 +754,8 @@ + } + + } ++ if ( permit_logging == 1 ) ++ logit("opendir %s", path); + if (status != SSH2_FX_OK) + send_status(id, status); + xfree(path); +@@ -757,6 +829,8 @@ + TRACE("remove id %u name %s", id, name); + ret = unlink(name); + status = (ret == -1) ? errno_to_portable(errno) : SSH2_FX_OK; ++ if ( permit_logging == 1 ) ++ logit("remove file %s", name); + send_status(id, status); + xfree(name); + } +@@ -774,9 +848,19 @@ + a = get_attrib(); + mode = (a->flags & SSH2_FILEXFER_ATTR_PERMISSIONS) ? + a->perm & 0777 : 0777; ++ ++ if (setumask != 0) { ++ if ( permit_logging == 1 ) ++ logit("setting directory creation mode to 0777 and umask to %o.", setumask); ++ mode = 0777; ++ umask(setumask); ++ } ++ + TRACE("mkdir id %u name %s mode 0%o", id, name, mode); + ret = mkdir(name, mode); + status = (ret == -1) ? errno_to_portable(errno) : SSH2_FX_OK; ++ if ( permit_logging == 1 ) ++ logit("mkdir %s", name); + send_status(id, status); + xfree(name); + } +@@ -793,6 +877,8 @@ + TRACE("rmdir id %u name %s", id, name); + ret = rmdir(name); + status = (ret == -1) ? errno_to_portable(errno) : SSH2_FX_OK; ++ if ( permit_logging == 1 ) ++ logit("rmdir %s", name); + send_status(id, status); + xfree(name); + } +@@ -819,6 +905,8 @@ + s.name = s.long_name = resolvedname; + send_names(id, 1, &s); + } ++ if ( permit_logging == 1 ) ++ logit("realpath %s", path); + xfree(path); + } + +@@ -854,6 +942,8 @@ + status = SSH2_FX_OK; + } + send_status(id, status); ++ if ( permit_logging == 1 ) ++ logit("rename old %s new %s", oldpath, newpath); + xfree(oldpath); + xfree(newpath); + } +@@ -879,6 +969,8 @@ + s.name = s.long_name = link; + send_names(id, 1, &s); + } ++ if ( permit_logging == 1 ) ++ logit("readlink %s", path); + xfree(path); + } + +@@ -897,6 +989,8 @@ + ret = symlink(oldpath, newpath); + status = (ret == -1) ? errno_to_portable(errno) : SSH2_FX_OK; + send_status(id, status); ++ if ( permit_logging == 1 ) ++ logit("symlink old %s new %s", oldpath, newpath); + xfree(oldpath); + xfree(newpath); + } +@@ -1018,6 +1112,8 @@ + { + fd_set *rset, *wset; + int in, out, max; ++ unsigned int val = 0; ++ char *umask_env; + ssize_t len, olen, set_size; + + /* XXX should use getopt */ +@@ -1025,10 +1121,53 @@ + __progname = ssh_get_progname(av[0]); + handle_init(); + ++ /* Transaction logging */ ++ ++ if (atoi(getenv("LOG_SFTP")) == 1) ++ { ++ permit_logging = 1; ++ log_init("sftp-server", atoi(getenv("SFTP_LOG_LEVEL")), ++ atoi(getenv("SFTP_LOG_FACILITY")), 0); ++ }; ++ ++ + #ifdef DEBUG_SFTP_SERVER + log_init("sftp-server", SYSLOG_LEVEL_DEBUG1, SYSLOG_FACILITY_AUTH, 0); + #endif + ++ if ( permit_logging == 1 ) ++ logit("Starting sftp-server logging for user %s.", getenv("USER")); ++ ++ /* Umask control */ ++ ++ umask_env = getenv("SFTP_UMASK"); ++ while (*umask_env && *umask_env >= '0' && *umask_env <= '9') ++ val = val * 8 + *umask_env++ - '0'; ++ ++ if (*umask_env || val > 0777 || val == 0) { ++ if ( permit_logging == 1 ) ++ logit("bad value %o for SFTP_UMASK, turning umask control off.", val); ++ setumask = 0; ++ } else { ++ if ( permit_logging == 1 ) ++ logit("umask control is on."); ++ setumask = val; ++ }; ++ ++ ++ /* Sensitive client commands */ ++ ++ if (atoi(getenv("SFTP_PERMIT_CHMOD")) != 1) { ++ permit_chmod = 0; ++ if ( permit_logging == 1 ) ++ logit("client is not permitted to chmod."); ++ }; ++ if (atoi(getenv("SFTP_PERMIT_CHOWN")) != 1) { ++ permit_chown = 0; ++ if ( permit_logging == 1 ) ++ logit("client is not permitted to chown."); ++ }; ++ + in = dup(STDIN_FILENO); + out = dup(STDOUT_FILENO); + +@@ -1071,6 +1210,8 @@ + len = read(in, buf, sizeof buf); + if (len == 0) { + debug("read eof"); ++ if ( permit_logging == 1 ) ++ logit("sftp-server finished."); + exit(0); + } else if (len < 0) { + error("read error"); +Only in openssh-3.8.1p1_sftp/: sftp-server.c.orig +diff -ru openssh-3.8.1p1/sshd_config openssh-3.8.1p1_sftp/sshd_config +--- openssh-3.8.1p1/sshd_config 2003-12-31 00:38:32.000000000 +0000 ++++ openssh-3.8.1p1_sftp/sshd_config 2004-08-18 21:06:14.443083113 +0000 +@@ -95,3 +95,14 @@ + + # override default of no subsystems + Subsystem sftp /usr/libexec/sftp-server ++ ++# sftp-server logging ++#LogSftp no ++#SftpLogFacility AUTH ++#SftpLogLevel INFO ++ ++# sftp-server umask control ++#SftpUmask ++ ++#SftpPermitChmod yes ++#SftpPermitChown yes +diff -ru openssh-3.8.1p1/sshd_config.5 openssh-3.8.1p1_sftp/sshd_config.5 +--- openssh-3.8.1p1/sshd_config.5 2004-04-14 03:04:36.000000000 +0000 ++++ openssh-3.8.1p1_sftp/sshd_config.5 2004-08-18 21:06:14.444082869 +0000 +@@ -379,6 +379,10 @@ + DEBUG and DEBUG1 are equivalent. + DEBUG2 and DEBUG3 each specify higher levels of debugging output. + Logging with a DEBUG level violates the privacy of users and is not recommended. ++.It Cm LogSftp ++Specifies whether to perform logging of ++.Nm sftp-server ++subsystem transactions. Must be "yes" or "no." The default value is "no." + .It Cm MACs + Specifies the available MAC (message authentication code) algorithms. + The MAC algorithm is used in protocol version 2 +@@ -533,6 +537,37 @@ + .It Cm ServerKeyBits + Defines the number of bits in the ephemeral protocol version 1 server key. + The minimum value is 512, and the default is 768. ++.It Cm SftpLogFacility ++Gives the facility code that is used when logging ++.Nm sftp-server . ++transactions. The possible values are: DAEMON, USER, AUTH, LOCAL0, ++LOCAL1, LOCAL2, LOCAL3, LOCAL4, LOCAL5, LOCAL6, LOCAL7. ++The default is AUTH. ++.It Cm SftpLogLevel ++Gives the verbosity level that is used when logging messages from ++.Nm sftp-server . ++The possible values are: ++QUIET, FATAL, ERROR, INFO, VERBOSE, DEBUG, DEBUG1, DEBUG2 and DEBUG3. ++The default is INFO. DEBUG and DEBUG1 are equivalent. DEBUG2 ++and DEBUG3 each specify higher levels of debugging output. ++Logging with a DEBUG level violates the privacy of users ++and is not recommended. ++.It Cm SftpPermitChmod ++Specifies whether the sftp-server allows the sftp client to execute chmod ++commands on the server. The default is yes. ++.It Cm SftpPermitChown ++Specifies whether the sftp-server allows the sftp client to execute chown ++or chgrp commands on the server. Turning this value on means that the client ++is allowed to execute both chown and chgrp commands. Turning it off means that ++the client is prohibited from executing either chown or chgrp. ++ The default is yes. ++.It Cm SftpUmask ++Specifies an optional umask for ++.Nm sftp-server ++subsystem transactions. If a umask is given, this umask will override all system, ++environment or sftp client permission modes. If ++no umask or an invalid umask is given, file creation mode defaults to the permission ++mode specified by the sftp client. The default is for no umask. + .It Cm StrictModes + Specifies whether + .Nm sshd +Only in openssh-3.8.1p1_sftp/: sshd_config.5.orig +Only in openssh-3.8.1p1_sftp/: sshd_config.orig +diff -ru openssh-3.8.1p1/version.h openssh-3.8.1p1_sftp/version.h +--- openssh-3.8.1p1/version.h 2004-03-21 22:39:10.000000000 +0000 ++++ openssh-3.8.1p1_sftp/version.h 2004-08-18 21:06:14.436084823 +0000 +@@ -1,3 +1,3 @@ + /* $OpenBSD: version.h,v 1.41 2004/03/20 10:40:59 markus Exp $ */ + +-#define SSH_VERSION "OpenSSH_3.8.1p1" ++#define SSH_VERSION "OpenSSH_3.8.1p1+sftplogging-v1.2" +Only in openssh-3.8.1p1_sftp/: version.h.orig |