OpenPKG CVS Repository
http://cvs.openpkg.org/
____________________________________________________________________________
Server: cvs.openpkg.org Name: Christoph Schug
Root: /e/openpkg/cvs Email: [EMAIL PROTECTED]
Module: openpkg-src Date: 29-Mar-2004 14:44:24
Branch: HEAD Handle: 2004032913442300
Added files:
openpkg-src/openssh openssh.patch.sftplogging
Modified files:
openpkg-src/openssh openssh.spec
Log:
added patch based on http://sftplogging.sf.net/ which allows
controlled umask-ing and controls chown/chmod in SFTP sessions
Summary:
Revision Changes Path
1.1 +712 -0 openpkg-src/openssh/openssh.patch.sftplogging
1.128 +15 -10 openpkg-src/openssh/openssh.spec
____________________________________________________________________________
patch -p0 <<'@@ .'
Index: openpkg-src/openssh/openssh.patch.sftplogging
============================================================================
$ cvs diff -u -r0 -r1.1 openssh.patch.sftplogging
--- /dev/null 2004-03-29 14:44:23.000000000 +0200
+++ openssh.patch.sftplogging 2004-03-29 14:44:23.000000000 +0200
@@ -0,0 +1,712 @@
+diff -wur openssh-3.8p1.orig/servconf.c openssh-3.8p1/servconf.c
+--- openssh-3.8p1.orig/servconf.c 2004-01-23 12:03:10.000000000 +0100
++++ openssh-3.8p1/servconf.c 2004-03-29 10:44:26.000000000 +0200
+@@ -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;
+ }
+@@ -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;
+@@ -268,6 +295,9 @@
+ sClientAliveCountMax, sAuthorizedKeysFile, sAuthorizedKeysFile2,
+ sGssAuthentication, sGssCleanupCreds,
+ sUsePrivilegeSeparation,
++ sLogSftp, sSftpLogFacility, sSftpLogLevel,
++ sSftpUmask,
++ sSftpPermitChown, sSftpPermitChmod,
+ sDeprecated, sUnsupported
+ } ServerOpCodes;
+
+@@ -366,6 +396,12 @@
+ { "authorizedkeysfile", sAuthorizedKeysFile },
+ { "authorizedkeysfile2", sAuthorizedKeysFile2 },
+ { "useprivilegeseparation", sUsePrivilegeSeparation},
++ { "logsftp", sLogSftp},
++ { "sftplogfacility", sSftpLogFacility},
++ { "sftploglevel", sSftpLogLevel},
++ { "sftpumask", sSftpUmask},
++ { "sftppermitchmod", sSftpPermitChmod},
++ { "sftppermitchown", sSftpPermitChown},
+ { NULL, sBadOption }
+ };
+
+@@ -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;
+ }
+
+diff -wur openssh-3.8p1.orig/servconf.h openssh-3.8p1/servconf.h
+--- openssh-3.8p1.orig/servconf.h 2003-12-31 01:37:34.000000000 +0100
++++ openssh-3.8p1/servconf.h 2004-03-29 10:44:26.000000000 +0200
+@@ -32,6 +32,18 @@
+ #define PERMIT_NO_PASSWD 2
+ #define PERMIT_YES 3
+
++/* 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
+
+ typedef struct {
+ u_int num_ports;
+@@ -125,6 +137,13 @@
+ char *authorized_keys_file; /* File containing public keys */
+ char *authorized_keys_file2;
+ int use_pam; /* Enable auth via PAM */
++ 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;
++
+ } ServerOptions;
+
+ void initialize_server_options(ServerOptions *);
+diff -wur openssh-3.8p1.orig/session.c openssh-3.8p1/session.c
+--- openssh-3.8p1.orig/session.c 2004-02-23 14:01:27.000000000 +0100
++++ openssh-3.8p1/session.c 2004-03-29 10:44:26.000000000 +0200
+@@ -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;
+@@ -971,6 +980,7 @@
+ env = xmalloc(envsize * sizeof(char *));
+ env[0] = NULL;
+
++
+ #ifdef HAVE_CYGWIN
+ /*
+ * The Windows environment contains some setting which are
+@@ -1111,6 +1121,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",
+diff -wur openssh-3.8p1.orig/sftp-server.8 openssh-3.8p1/sftp-server.8
+--- openssh-3.8p1.orig/sftp-server.8 2003-10-15 07:50:43.000000000 +0200
++++ openssh-3.8p1/sftp-server.8 2004-03-29 10:44:26.000000000 +0200
+@@ -41,6 +41,20 @@
+ .Cm Subsystem
+ option.
+ See
++.Xr sshd 8
++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
+diff -wur openssh-3.8p1.orig/sftp-server.c openssh-3.8p1/sftp-server.c
+--- openssh-3.8p1.orig/sftp-server.c 2004-02-23 23:19:15.000000000 +0100
++++ openssh-3.8p1/sftp-server.c 2004-03-29 10:45:39.000000000 +0200
+@@ -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) {
++ 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) {
++ 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,11 +673,14 @@
+ 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);
+ #else
+@@ -637,8 +688,18 @@
+ #endif
+ 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,6 +709,7 @@
+ 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);
+ #else
+@@ -655,6 +717,14 @@
+ #endif
+ 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,6 +1121,16 @@
+ __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
+@@ -1032,6 +1138,39 @@
+ in = dup(STDIN_FILENO);
+ out = dup(STDOUT_FILENO);
+
++ 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.");
++ };
++
+ #ifdef HAVE_CYGWIN
+ setmode(in, O_BINARY);
+ setmode(out, O_BINARY);
+@@ -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");
+diff -wur openssh-3.8p1.orig/sshd_config openssh-3.8p1/sshd_config
+--- openssh-3.8p1.orig/sshd_config 2003-12-31 01:38:32.000000000 +0100
++++ openssh-3.8p1/sshd_config 2004-03-29 10:44:26.000000000 +0200
+@@ -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 -wur openssh-3.8p1.orig/sshd_config.5 openssh-3.8p1/sshd_config.5
+--- openssh-3.8p1.orig/sshd_config.5 2004-02-18 04:31:24.000000000 +0100
++++ openssh-3.8p1/sshd_config.5 2004-03-29 10:44:26.000000000 +0200
+@@ -374,6 +374,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
+@@ -526,6 +530,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
@@ .
patch -p0 <<'@@ .'
Index: openpkg-src/openssh/openssh.spec
============================================================================
$ cvs diff -u -r1.127 -r1.128 openssh.spec
--- openpkg-src/openssh/openssh.spec 24 Mar 2004 19:55:41 -0000 1.127
+++ openpkg-src/openssh/openssh.spec 29 Mar 2004 12:44:23 -0000 1.128
@@ -42,18 +42,19 @@
Group: Security
License: BSD
Version: %{V_base}%{V_portable}
-Release: 20040324
+Release: 20040329
# package options
-%option with_fsl yes
-%option with_pam no
-%option with_skey no
-%option with_x11 no
-%option with_chroot no
-%option with_alias no
-%option with_watchdog no
-%option with_ldap no
-%option with_wrap no
+%option with_fsl yes
+%option with_alias no
+%option with_chroot no
+%option with_ldap no
+%option with_pam no
+%option with_sftplogging no
+%option with_skey no
+%option with_watchdog no
+%option with_wrap no
+%option with_x11 no
# list of sources
Source0:
ftp://ftp.openssh.com/pub/OpenBSD/OpenSSH/portable/openssh-%{version}.tar.gz
@@ -70,6 +71,7 @@
Patch2: openssh.patch.alias
Patch3:
http://www.sc.isc.tohoku.ac.jp/~hgot/sources/openssh-%{V_watchdog}-watchdog.patch.tgz
Patch4:
http://ldappubkey.gcu-squad.org/%{V_ldap_vers1}/ldappubkey-ossh%{V_ldap_base}-%{V_ldap_vers2}.patch
+Patch5: openssh.patch.sftplogging
# build information
Prefix: %{l_prefix}
@@ -147,6 +149,9 @@
%endif
%if "%{with_ldap}" == "yes"
%{l_gzip} -d -c %{SOURCE ldappubkey-ossh%{V_ldap_base}-%{V_ldap_vers2}.patch} |
%{l_patch} -p0
+%endif
+%if "%{with_sftplogging}" == "yes"
+ %patch -p1 -P 5
%endif
%build
@@ .
______________________________________________________________________
The OpenPKG Project www.openpkg.org
CVS Repository Commit List [EMAIL PROTECTED]