diff -Nuard vsftpd-1.0.1-orig/parseconf.c vsftpd-1.0.1/parseconf.c --- vsftpd-1.0.1-orig/parseconf.c Wed Nov 7 20:25:49 2001 +++ vsftpd-1.0.1/parseconf.c Thu Feb 14 13:57:58 2002 @@ -58,6 +58,7 @@ { "guest_enable", &tunable_guest_enable }, { "userlist_enable", &tunable_userlist_enable }, { "userlist_deny", &tunable_userlist_deny }, + { "upload_all_permissions", &tunable_upload_all_permissions }, { 0, 0 } }; diff -Nuard vsftpd-1.0.1-orig/sysutil.c vsftpd-1.0.1/sysutil.c --- vsftpd-1.0.1-orig/sysutil.c Mon Oct 8 15:06:37 2001 +++ vsftpd-1.0.1/sysutil.c Thu Feb 14 14:00:40 2002 @@ -14,6 +14,7 @@ #define PRIVATE_HANDS_OFF_exit_status exit_status #include "sysutil.h" #include "utility.h" +#include "tunables.h" /* For Linux, this adds nothing :-) */ #include "port/porting_junk.h" @@ -1221,8 +1222,10 @@ int vsf_sysutil_chmod(const char* p_filename, unsigned int mode) { + unsigned int mask = 0777; /* Safety: mask "mode" to just access permissions, e.g. no suid setting! */ - mode = mode & 0777; + if (tunable_upload_all_permissions) mask = 0; + mode = mode & mask; return chmod(p_filename, mode); } diff -Nuard vsftpd-1.0.1-orig/tunables.c vsftpd-1.0.1/tunables.c --- vsftpd-1.0.1-orig/tunables.c Wed Nov 7 20:24:53 2001 +++ vsftpd-1.0.1/tunables.c Thu Feb 14 14:02:21 2002 @@ -36,6 +36,7 @@ int tunable_guest_enable = 0; int tunable_userlist_enable = 0; int tunable_userlist_deny = 1; +int tunable_upload_all_permissions = 0; unsigned int tunable_accept_timeout = 60; unsigned int tunable_connect_timeout = 60; diff -Nuard vsftpd-1.0.1-orig/tunables.h vsftpd-1.0.1/tunables.h --- vsftpd-1.0.1-orig/tunables.h Wed Nov 7 20:24:23 2001 +++ vsftpd-1.0.1/tunables.h Thu Feb 14 13:57:35 2002 @@ -32,6 +32,7 @@ extern int tunable_guest_enable; /* Remap guest users */ extern int tunable_userlist_enable; /* Explicit user allow or deny */ extern int tunable_userlist_deny; /* Is user list allow or deny? */ +extern int tunable_upload_all_permissions; /* Integer/numeric defines */ extern unsigned int tunable_accept_timeout; diff -Nuard vsftpd-1.0.1-orig/vsftpd.conf vsftpd-1.0.1/vsftpd.conf --- vsftpd-1.0.1-orig/vsftpd.conf Mon Jul 30 17:51:07 2001 +++ vsftpd-1.0.1/vsftpd.conf Thu Feb 14 14:02:00 2002 @@ -97,4 +97,5 @@ # sites. However, some broken FTP clients such as "ncftp" and "mirror" assume # the presence of the "-R" option, so there is a strong case for enabling it. #ls_recurse_enable=YES +#upload_all_permissions=YES diff -Nuard vsftpd-1.0.1-orig/vsftpd.conf.5 vsftpd-1.0.1/vsftpd.conf.5 --- vsftpd-1.0.1-orig/vsftpd.conf.5 Wed Nov 7 20:30:21 2001 +++ vsftpd-1.0.1/vsftpd.conf.5 Thu Feb 14 14:05:53 2002 @@ -102,6 +102,15 @@ This is useful from an administrative, and perhaps security, standpoint. Default: NO + +.TP +.B upload_all_permissions +If enabled, all uploaded files will preserve all uploaded file permissions +(not changet by umask 0777) +.BR upload_all_permissions . +This is useful from an administrative, and perhaps unsecurity. + +Default: NO .TP .B chroot_list_enable If activated, you may provide a list of local users who are placed in a