Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 200811 | Differences between
and this patch

Collapse All | Expand All

(-)vsftpd-2.0.5-orgin/features.c (+4 lines)
Lines 34-39 Link Here
34
  {
34
  {
35
    vsf_cmdio_write_raw(p_sess, " PASV\r\n");
35
    vsf_cmdio_write_raw(p_sess, " PASV\r\n");
36
  }
36
  }
37
  if (tunable_charset_filter_enable)
38
  {
39
    vsf_cmdio_write_raw(p_sess, " UTF8\r\n");
40
  }
37
  if (tunable_ssl_enable)
41
  if (tunable_ssl_enable)
38
  {
42
  {
39
    vsf_cmdio_write_raw(p_sess, " PBSZ\r\n");
43
    vsf_cmdio_write_raw(p_sess, " PBSZ\r\n");
(-)vsftpd-2.0.5-orgin/ftpcodes.h (+1 lines)
Lines 14-19 Link Here
14
#define FTP_MODEOK            200
14
#define FTP_MODEOK            200
15
#define FTP_PBSZOK            200
15
#define FTP_PBSZOK            200
16
#define FTP_PROTOK            200
16
#define FTP_PROTOK            200
17
#define FTP_OPTSOK            200
17
#define FTP_ALLOOK            202
18
#define FTP_ALLOOK            202
18
#define FTP_FEAT              211
19
#define FTP_FEAT              211
19
#define FTP_STATOK            211
20
#define FTP_STATOK            211
(-)vsftpd-2.0.5-orgin/main.c (+13 lines)
Lines 22-27 Link Here
22
#include "tcpwrap.h"
22
#include "tcpwrap.h"
23
#include "vsftpver.h"
23
#include "vsftpver.h"
24
#include "ssl.h"
24
#include "ssl.h"
25
#include <iconv.h>
25
26
26
/*
27
/*
27
 * Forward decls of helper functions
28
 * Forward decls of helper functions
Lines 34-39 Link Here
34
int
35
int
35
main(int argc, const char* argv[])
36
main(int argc, const char* argv[])
36
{
37
{
38
  iconv_t cd;
37
  struct vsf_session the_session =
39
  struct vsf_session the_session =
38
  {
40
  {
39
    /* Control connection */
41
    /* Control connection */
Lines 106-111 Link Here
106
    }
108
    }
107
    vsf_sysutil_free(p_statbuf);
109
    vsf_sysutil_free(p_statbuf);
108
  }
110
  }
111
  if (tunable_charset_filter_enable == 1)
112
  {
113
      if ((cd = iconv_open(tunable_charset_client, tunable_charset_server))!=(iconv_t)-1)
114
      {
115
          iconv_close(cd);
116
          tunable_charset_filter_enable=1;
117
      }
118
      else
119
          tunable_charset_filter_enable = 0;
120
  }
121
109
  /* Resolve pasv_address if required */
122
  /* Resolve pasv_address if required */
110
  if (tunable_pasv_address && tunable_pasv_addr_resolve)
123
  if (tunable_pasv_address && tunable_pasv_addr_resolve)
111
  {
124
  {
(-)vsftpd-2.0.5-orgin/parseconf.c (+3 lines)
Lines 99-104 Link Here
99
  { "mdtm_write", &tunable_mdtm_write },
99
  { "mdtm_write", &tunable_mdtm_write },
100
  { "lock_upload_files", &tunable_lock_upload_files },
100
  { "lock_upload_files", &tunable_lock_upload_files },
101
  { "pasv_addr_resolve", &tunable_pasv_addr_resolve },
101
  { "pasv_addr_resolve", &tunable_pasv_addr_resolve },
102
  { "charset_filter_enable", &tunable_charset_filter_enable },
102
  { 0, 0 }
103
  { 0, 0 }
103
};
104
};
104
105
Lines 168-173 Link Here
168
  { "ssl_ciphers", &tunable_ssl_ciphers },
169
  { "ssl_ciphers", &tunable_ssl_ciphers },
169
  { "rsa_private_key_file", &tunable_rsa_private_key_file },
170
  { "rsa_private_key_file", &tunable_rsa_private_key_file },
170
  { "dsa_private_key_file", &tunable_dsa_private_key_file },
171
  { "dsa_private_key_file", &tunable_dsa_private_key_file },
172
  { "charset_client", &tunable_charset_client },
173
  { "charset_server", &tunable_charset_server },
171
  { 0, 0 }
174
  { 0, 0 }
172
};
175
};
173
176
(-)vsftpd-2.0.5-orgin/postlogin.c (-1 / +56 lines)
Lines 340-346 Link Here
340
    }
340
    }
341
    else if (str_equal_text(&p_sess->ftp_cmd_str, "OPTS"))
341
    else if (str_equal_text(&p_sess->ftp_cmd_str, "OPTS"))
342
    {
342
    {
343
      vsf_cmdio_write(p_sess, FTP_BADOPTS, "Option not understood.");
343
      if (tunable_charset_filter_enable)
344
      {
345
        handle_opts(p_sess);
346
      }
347
      else
348
      {
349
        vsf_cmdio_write(p_sess, FTP_BADOPTS, "Option not understood.");
350
      }
344
    }
351
    }
345
    else if (str_equal_text(&p_sess->ftp_cmd_str, "STAT") &&
352
    else if (str_equal_text(&p_sess->ftp_cmd_str, "STAT") &&
346
             str_isempty(&p_sess->ftp_arg_str))
353
             str_isempty(&p_sess->ftp_arg_str))
Lines 1702-1707 Link Here
1702
  }
1709
  }
1703
}
1710
}
1704
1711
1712
handle_opts(struct vsf_session* p_sess)
1713
{
1714
  struct mystr opts = INIT_MYSTR;
1715
  struct mystr prm  = INIT_MYSTR;
1716
  
1717
  str_copy(&opts, &p_sess->ftp_arg_str);
1718
  str_upper(&opts);
1719
  str_split_char(&opts, &prm, ' ');
1720
  
1721
  if (str_equal_text(&opts, "UTF8"))
1722
  {
1723
    if (str_equal_text(&prm, "ON"))
1724
    {
1725
      tunable_charset_client=vsf_sysutil_strdup("UTF8");
1726
      vsf_cmdio_write(p_sess, FTP_OPTSOK, "UTF8 option is On.");
1727
    }
1728
    else
1729
    if (str_equal_text(&prm, "OFF"))
1730
    {
1731
      vsf_cmdio_write(p_sess, FTP_OPTSOK, "UTF8 option is Off.");
1732
    }
1733
    else
1734
    {
1735
      vsf_cmdio_write(p_sess, FTP_BADOPTS, "Invalid UTF8 option.");
1736
    }
1737
  } 
1738
}
1705
static void
1739
static void
1706
handle_stat(struct vsf_session* p_sess)
1740
handle_stat(struct vsf_session* p_sess)
1707
{
1741
{
Lines 1764-1769 Link Here
1764
    vsf_cmdio_write_raw(p_sess, vsf_sysutil_ulong_to_str(p_sess->num_clients));
1798
    vsf_cmdio_write_raw(p_sess, vsf_sysutil_ulong_to_str(p_sess->num_clients));
1765
    vsf_cmdio_write_raw(p_sess, "\r\n");
1799
    vsf_cmdio_write_raw(p_sess, "\r\n");
1766
  }
1800
  }
1801
1802
  if (tunable_charset_filter_enable)
1803
  {
1804
    vsf_cmdio_write_raw(p_sess, "     Server charset is ");
1805
    vsf_cmdio_write_raw(p_sess, tunable_charset_server);
1806
    vsf_cmdio_write_raw(p_sess, "\r\n");
1807
    vsf_cmdio_write_raw(p_sess, "     Remote charset is ");
1808
    vsf_cmdio_write_raw(p_sess, tunable_charset_client);
1809
    vsf_cmdio_write_raw(p_sess, "\r\n");
1810
/*    vsf_cmdio_write_raw(p_sess, "     Char convertion is ");
1811
 *    if (p_sess->enable_convertion)
1812
 *   {
1813
 *     vsf_cmdio_write_raw(p_sess, "on");
1814
 *   }
1815
 *   else
1816
 *   {
1817
 *     vsf_cmdio_write_raw(p_sess, "off");
1818
 *   }
1819
 *   vsf_cmdio_write_raw(p_sess, "\r\n");
1820
 */
1821
  }  
1767
  vsf_cmdio_write_raw(p_sess,
1822
  vsf_cmdio_write_raw(p_sess,
1768
    "     vsFTPd " VSF_VERSION " - secure, fast, stable\r\n");
1823
    "     vsFTPd " VSF_VERSION " - secure, fast, stable\r\n");
1769
  vsf_cmdio_write(p_sess, FTP_STATOK, "End of status");
1824
  vsf_cmdio_write(p_sess, FTP_STATOK, "End of status");
(-)vsftpd-2.0.5-orgin/readwrite.c (+6 lines)
Lines 15-25 Link Here
15
#include "privsock.h"
15
#include "privsock.h"
16
#include "defs.h"
16
#include "defs.h"
17
#include "sysutil.h"
17
#include "sysutil.h"
18
#include "str.h"
19
#include "tunables.h"
18
20
19
int
21
int
20
ftp_write_str(const struct vsf_session* p_sess, const struct mystr* p_str,
22
ftp_write_str(const struct vsf_session* p_sess, const struct mystr* p_str,
21
              enum EVSFRWTarget target)
23
              enum EVSFRWTarget target)
22
{
24
{
25
  if(tunable_charset_filter_enable)
26
       str_iconv_write(p_str);
23
  if (target == kVSFRWData)
27
  if (target == kVSFRWData)
24
  {
28
  {
25
    if (p_sess->data_use_ssl)
29
    if (p_sess->data_use_ssl)
Lines 94-98 Link Here
94
    str_netfd_alloc(
98
    str_netfd_alloc(
95
      p_str, VSFTP_COMMAND_FD, '\n', p_buf, VSFTP_MAX_COMMAND_LINE);
99
      p_str, VSFTP_COMMAND_FD, '\n', p_buf, VSFTP_MAX_COMMAND_LINE);
96
  }
100
  }
101
  if(tunable_charset_filter_enable)
102
      str_iconv_read(p_str);
97
}
103
}
98
104
(-)vsftpd-2.0.5-orgin/str.c (+152 lines)
Lines 19-24 Link Here
19
/* Ick. Its for die() */
19
/* Ick. Its for die() */
20
#include "utility.h"
20
#include "utility.h"
21
#include "sysutil.h"
21
#include "sysutil.h"
22
#include <stdio.h>
23
#include <errno.h>
24
#include "tunables.h"
22
25
23
/* File local functions */
26
/* File local functions */
24
static void str_split_text_common(struct mystr* p_src, struct mystr* p_rhs,
27
static void str_split_text_common(struct mystr* p_src, struct mystr* p_rhs,
Lines 666-668 Link Here
666
  }
669
  }
667
}
670
}
668
671
672
void
673
str_iconv_write(struct mystr* p_str)
674
{
675
  iconv_t cd;
676
  char * from_buf;
677
  char * dyn_from_buf, * to_buf, * dyn_to_buf;
678
  size_t from_len;
679
  size_t dyn_from_len, to_len, dyn_to_len;
680
  size_t print_buf;
681
  
682
  from_buf = str_getbuf(p_str);
683
  from_len = str_getlen(p_str);
684
685
  p_str->p_buf = 0;
686
  str_free(p_str);
687
  
688
  private_str_alloc_memchunk(p_str, from_buf, from_len);
689
  str_reserve(p_str, 2*from_len);
690
  p_str->len=2*from_len;
691
  vsf_sysutil_memclr(p_str->p_buf, p_str->len+1);
692
  dyn_from_buf = from_buf;
693
  dyn_from_len = from_len;
694
  to_buf = p_str->p_buf;
695
  dyn_to_buf = to_buf;
696
  to_len = p_str->len;
697
  dyn_to_len = to_len;
698
699
  if((cd = vsf_sysutil_iconv_init_write())==(iconv_t)(-1))
700
  {
701
    bug("str_iconv_write");
702
  }
703
704
  while(vsf_sysutil_iconv(cd, &dyn_from_buf, &dyn_from_len, &dyn_to_buf, &dyn_to_len)==(size_t)(-1))
705
  {
706
    switch(errno)
707
    {
708
    case EILSEQ:
709
      if((dyn_to_buf<to_buf+to_len)&&(dyn_to_buf>=to_buf))
710
      {
711
	vsf_sysutil_memcpy(dyn_to_buf, dyn_from_buf, 1);
712
	dyn_to_buf+=1;
713
	dyn_to_len-=1;
714
	dyn_from_buf+=1;
715
	dyn_from_len = from_buf + from_len -dyn_from_buf;
716
	if(dyn_from_len==0) break;
717
      }
718
      else
719
	break;
720
      continue;
721
      
722
   case EINVAL:
723
      break;
724
      
725
    case E2BIG:
726
      str_reserve(p_str, to_len+dyn_from_len);
727
      p_str->len=to_len+dyn_from_len;
728
      dyn_to_len+=dyn_from_len;
729
      dyn_to_buf = p_str->p_buf + (dyn_to_buf-to_buf);
730
      to_buf = p_str->p_buf;
731
      to_len = p_str->len;
732
      continue;
733
734
    default:
735
      die("iconv set strange errno. Should not happenned!");
736
      break;
737
    }
738
    break;
739
  }
740
741
  str_trunc(p_str, (p_str->len)-dyn_to_len);
742
743
  vsf_sysutil_iconv_close(cd);
744
  vsf_sysutil_free(from_buf);
745
}
746
747
void
748
str_iconv_read(struct mystr* p_str)
749
{
750
  iconv_t cd;
751
  char *from_buf;
752
  char *dyn_from_buf, *to_buf, *dyn_to_buf;
753
  size_t from_len;
754
  size_t dyn_from_len, to_len, dyn_to_len;
755
  size_t print_buf;
756
  
757
  from_buf = str_getbuf(p_str);
758
  from_len = str_getlen(p_str);
759
760
  p_str->p_buf = 0;
761
  str_free(p_str);
762
  
763
  private_str_alloc_memchunk(p_str, from_buf, from_len);
764
  str_reserve(p_str, 2*from_len);
765
  p_str->len=2*from_len;
766
  vsf_sysutil_memclr(p_str->p_buf, p_str->len+1);
767
  dyn_from_buf = from_buf;
768
  dyn_from_len = from_len;
769
  to_buf = p_str->p_buf;
770
  dyn_to_buf = to_buf;
771
  to_len = p_str->len;
772
  dyn_to_len = to_len;
773
774
  if((cd = vsf_sysutil_iconv_init_read())==(iconv_t)(-1))
775
  {
776
    bug("str_iconv_read");
777
  }
778
779
  while(vsf_sysutil_iconv(cd, &dyn_from_buf, &dyn_from_len, &dyn_to_buf, &dyn_to_len)==(size_t)(-1))
780
  {
781
    switch(errno)
782
    {
783
    case EILSEQ:
784
      if((dyn_to_buf<to_buf+to_len)&&(dyn_to_buf>=to_buf))
785
      {
786
	vsf_sysutil_memcpy(dyn_to_buf, dyn_from_buf, 1);
787
	dyn_to_buf+=1;
788
	dyn_to_len-=1;
789
	dyn_from_buf+=1;
790
	dyn_from_len = from_buf + from_len -dyn_from_buf;
791
	if(dyn_from_len==0) break;
792
      }
793
      else
794
	break;
795
      continue;
796
      
797
    case EINVAL:
798
      break;
799
800
    case E2BIG:
801
      str_reserve(p_str, to_len+dyn_from_len);
802
      p_str->len=to_len+dyn_from_len;
803
      dyn_to_len+=dyn_from_len;
804
      dyn_to_buf = p_str->p_buf + (dyn_to_buf-to_buf);
805
      to_buf = p_str->p_buf;
806
      to_len = p_str->len;
807
      continue;
808
809
    default:
810
      die("iconv set strange errno. Should not happenned!");
811
      break;
812
    }
813
    break;
814
  }
815
816
  str_trunc(p_str, (p_str->len)-dyn_to_len);
817
818
  vsf_sysutil_iconv_close(cd);
819
  vsf_sysutil_free(from_buf);
820
}
(-)vsftpd-2.0.5-orgin/str.h (+4 lines)
Lines 120-124 Link Here
120
int str_contains_line(const struct mystr* p_str,
120
int str_contains_line(const struct mystr* p_str,
121
                      const struct mystr* p_line_str);
121
                      const struct mystr* p_line_str);
122
122
123
/* Locale string conversion */
124
void str_iconv_read(struct mystr* p_str);
125
void str_iconv_write(struct mystr* p_str);
126
123
#endif /* VSFTP_STR_H */
127
#endif /* VSFTP_STR_H */
124
128
(-)vsftpd-2.0.5-orgin/sysutil.c (+61 lines)
Lines 53-58 Link Here
53
#include <syslog.h>
53
#include <syslog.h>
54
#include <utime.h>
54
#include <utime.h>
55
#include <netdb.h>
55
#include <netdb.h>
56
#include <iconv.h>
56
57
57
/* Private variables to this file */
58
/* Private variables to this file */
58
/* Current umask() */
59
/* Current umask() */
Lines 2644-2646 Link Here
2644
  return utime(p_file, &new_times);
2645
  return utime(p_file, &new_times);
2645
}
2646
}
2646
2647
2648
iconv_t
2649
vsf_sysutil_iconv_init_read(void)
2650
{
2651
  iconv_t cd;
2652
2653
  if((cd=iconv_open(tunable_charset_server, tunable_charset_client))==(iconv_t)(-1))
2654
  {
2655
    if(errno==EINVAL)
2656
    {
2657
      vsf_sysutil_free(tunable_charset_server);
2658
      tunable_charset_server=vsf_sysutil_strdup("UTF8");
2659
      vsf_sysutil_free(tunable_charset_client);
2660
      tunable_charset_client=vsf_sysutil_strdup("UTF8");
2661
      return iconv_open(tunable_charset_server, tunable_charset_client);
2662
    }
2663
    else
2664
    {
2665
      bug("iconv_open error!");
2666
    }
2667
  }
2668
2669
  return cd;
2670
}
2671
2672
iconv_t
2673
vsf_sysutil_iconv_init_write(void)
2674
{
2675
  iconv_t cd;
2676
2677
  if((cd=iconv_open(tunable_charset_client, tunable_charset_server))==(iconv_t)(-1))
2678
  {
2679
    if(errno==EINVAL)
2680
    {
2681
      vsf_sysutil_free(tunable_charset_server);
2682
      tunable_charset_server=vsf_sysutil_strdup("UTF8");
2683
      vsf_sysutil_free(tunable_charset_client);
2684
      tunable_charset_client=vsf_sysutil_strdup("UTF8");
2685
      return iconv_open(tunable_charset_server, tunable_charset_client);
2686
    }
2687
    else
2688
    {
2689
      bug("iconv_open error!");
2690
    }
2691
  }
2692
  return cd;
2693
}
2694
2695
int
2696
vsf_sysutil_iconv_close(iconv_t cd)
2697
{
2698
  return iconv_close(cd);
2699
}
2700
2701
2702
size_t
2703
vsf_sysutil_iconv(iconv_t cd, char **inbuf, size_t *inbytes, char **outbuf, size_t *outbytes)
2704
{
2705
  return iconv(cd, inbuf, inbytes, outbuf, outbytes);
2706
}
2707
(-)vsftpd-2.0.5-orgin/sysutil.h (+15 lines)
Lines 7-12 Link Here
7
#include "filesize.h"
7
#include "filesize.h"
8
#endif
8
#endif
9
9
10
#ifndef VSF_SYSUTIL_ICONV_H
11
#include <iconv.h>
12
#endif
13
14
#ifndef VSF_SYSUTIL_STDDEF_H
15
#include <stddef.h>
16
#endif
17
10
/* Return value queries */
18
/* Return value queries */
11
int vsf_sysutil_retval_is_error(int retval);
19
int vsf_sysutil_retval_is_error(int retval);
12
enum EVSFSysUtilError
20
enum EVSFSysUtilError
Lines 330-334 Link Here
330
void vsf_sysutil_sleep(double seconds);
338
void vsf_sysutil_sleep(double seconds);
331
int vsf_sysutil_setmodtime(const char* p_file, long the_time, int is_localtime);
339
int vsf_sysutil_setmodtime(const char* p_file, long the_time, int is_localtime);
332
340
341
/* Locale string conversion */
342
343
iconv_t vsf_sysutil_iconv_init_read(void);
344
iconv_t vsf_sysutil_iconv_init_write(void);
345
int vsf_sysutil_iconv_close(iconv_t cd);
346
size_t vsf_sysutil_iconv(iconv_t cd, char **inbuf, size_t *inbytes, char **outbuf, size_t *outbytes);
347
333
#endif /* VSF_SYSUTIL_H */
348
#endif /* VSF_SYSUTIL_H */
334
349
(-)vsftpd-2.0.5-orgin/tunables.c (-1 / +3 lines)
Lines 68-73 Link Here
68
int tunable_tilde_user_enable = 0;
68
int tunable_tilde_user_enable = 0;
69
int tunable_force_anon_logins_ssl = 0;
69
int tunable_force_anon_logins_ssl = 0;
70
int tunable_force_anon_data_ssl = 0;
70
int tunable_force_anon_data_ssl = 0;
71
int tunable_charset_filter_enable = 0;
71
int tunable_mdtm_write = 1;
72
int tunable_mdtm_write = 1;
72
int tunable_lock_upload_files = 1;
73
int tunable_lock_upload_files = 1;
73
int tunable_pasv_addr_resolve = 0;
74
int tunable_pasv_addr_resolve = 0;
Lines 125-128 Link Here
125
const char* tunable_ssl_ciphers = "DES-CBC3-SHA";
126
const char* tunable_ssl_ciphers = "DES-CBC3-SHA";
126
const char* tunable_rsa_private_key_file = 0;
127
const char* tunable_rsa_private_key_file = 0;
127
const char* tunable_dsa_private_key_file = 0;
128
const char* tunable_dsa_private_key_file = 0;
128
129
const char* tunable_charset_client = "UTF-8";
130
const char* tunable_charset_server = "UTF-8";
(-)vsftpd-2.0.5-orgin/tunables.h (+3 lines)
Lines 64-69 Link Here
64
extern int tunable_tilde_user_enable;         /* Support e.g. ~chris */
64
extern int tunable_tilde_user_enable;         /* Support e.g. ~chris */
65
extern int tunable_force_anon_logins_ssl;     /* Require anon logins use SSL */
65
extern int tunable_force_anon_logins_ssl;     /* Require anon logins use SSL */
66
extern int tunable_force_anon_data_ssl;       /* Require anon data uses SSL */
66
extern int tunable_force_anon_data_ssl;       /* Require anon data uses SSL */
67
extern int tunable_charset_filter_enable;      /* Enable charset transfer */
67
extern int tunable_mdtm_write;                /* Allow MDTM to set timestamps */
68
extern int tunable_mdtm_write;                /* Allow MDTM to set timestamps */
68
extern int tunable_lock_upload_files;         /* Lock uploading files */
69
extern int tunable_lock_upload_files;         /* Lock uploading files */
69
extern int tunable_pasv_addr_resolve;         /* DNS resolve pasv_addr */
70
extern int tunable_pasv_addr_resolve;         /* DNS resolve pasv_addr */
Lines 120-125 Link Here
120
extern const char* tunable_ssl_ciphers;
121
extern const char* tunable_ssl_ciphers;
121
extern const char* tunable_rsa_private_key_file;
122
extern const char* tunable_rsa_private_key_file;
122
extern const char* tunable_dsa_private_key_file;
123
extern const char* tunable_dsa_private_key_file;
124
extern const char* tunable_charset_client;
125
extern const char* tunable_charset_server;
123
126
124
#endif /* VSF_TUNABLES_H */
127
#endif /* VSF_TUNABLES_H */
125
128
(-)vsftpd-2.0.5-orgin/vsftpd.conf.5 (-1 / +22 lines)
Lines 112-117 Link Here
112
112
113
Default: NO
113
Default: NO
114
.TP
114
.TP
115
.B charset_filter_enable
116
When enabled, vsftpd will setup a character set filter. It is not recommended because
117
it depends on the implementation of external glibc library. vsftpd can't ensure
118
the security.
119
120
Default: NO
121
.TP
115
.B check_shell
122
.B check_shell
116
Note! This option only has an effect for non-PAM builds of vsftpd. If disabled,
123
Note! This option only has an effect for non-PAM builds of vsftpd. If disabled,
117
vsftpd will not check /etc/shells for a valid user shell for local logins.
124
vsftpd will not check /etc/shells for a valid user shell for local logins.
Lines 702-707 Link Here
702
709
703
Default: (none)
710
Default: (none)
704
.TP
711
.TP
712
.B charset_client
713
For this option to take effect,
714
.BR charset_filter_enable 
715
must be set. This option set the character set for client side.
716
717
Default: UTF-8
718
.TP
719
.B charset_server
720
For this option to take effect,
721
.BR charset_filter_enable 
722
must be set. This option set the character set for server side.
723
724
Default: UTF-8
725
.TP
705
.B chown_username
726
.B chown_username
706
This is the name of the user who is given ownership of anonymously uploaded
727
This is the name of the user who is given ownership of anonymously uploaded
707
files. This option is only relevant if another option,
728
files. This option is only relevant if another option,
Lines 963-966 Link Here
963
984
964
.SH AUTHOR
985
.SH AUTHOR
965
chris@scary.beasts.org
986
chris@scary.beasts.org
966
987
wzhou@princeton.edu

Return to bug 200811