#ifndef VSF_TUNABLES_H
#define VSF_TUNABLES_H

/* tunables_load_defaults()
 * PURPOSE
 * Load the default values into the global settings variables.
 */
void tunables_load_defaults();

/* Configurable preferences */
/* Booleans */
extern int tunable_anonymous_enable;          /* Allow anon logins */
extern int tunable_local_enable;              /* Allow local logins */
extern int tunable_pasv_enable;               /* Allow PASV */
extern int tunable_port_enable;               /* Allow PORT */
extern int tunable_chroot_local_user;         /* Restrict local to home dir */
extern int tunable_write_enable;              /* Global enable writes */
extern int tunable_anon_upload_enable;        /* Enable STOR for anon users */
extern int tunable_anon_mkdir_write_enable;   /* MKD for anon */
extern int tunable_anon_other_write_enable;   /* APPE DELE RMD RNFR for anon */
extern int tunable_chown_uploads;             /* chown() anon uploaded files */
extern int tunable_connect_from_port_20;      /* PORT connects from port 20 */
extern int tunable_xferlog_enable;            /* Log transfers to a file */
extern int tunable_dirmessage_enable;         /* Look for + output .message */
extern int tunable_anon_world_readable_only;  /* Only serve world readable */
extern int tunable_async_abor_enable;         /* Enable async ABOR requests */
extern int tunable_ascii_upload_enable;       /* Permit ASCII upload */
extern int tunable_ascii_download_enable;     /* Permit ASCII download */
extern int tunable_one_process_model;         /* Go faster stripes ;-) */
extern int tunable_xferlog_std_format;        /* Log details like wu-ftpd */
extern int tunable_pasv_promiscuous;          /* Allow any PASV connect IP */
extern int tunable_deny_email_enable;         /* Ban a list of anon e-mails */
extern int tunable_chroot_list_enable;        /* chroot() based on list file */
extern int tunable_setproctitle_enable;       /* Try to use setproctitle() */
extern int tunable_text_userdb_names;         /* For "ls", lookup text names */
extern int tunable_ls_recurse_enable;         /* Allow ls -R */
extern int tunable_log_ftp_protocol;          /* Log FTP requests/responses */
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_use_localtime;             /* Use local time or GMT? */
extern int tunable_check_shell;               /* Use /etc/shells for non-PAM */
extern int tunable_hide_ids;                  /* Show "ftp" in ls listings */
extern int tunable_listen;                    /* Standalone (no inetd) mode? */
extern int tunable_port_promiscuous;          /* Any any PORT connect IP */
extern int tunable_passwd_chroot_enable;      /* chroot() based on passwd */
extern int tunable_no_anon_password;          /* Do not ask for anon pword */
extern int tunable_tcp_wrappers;              /* Standalone: do tcp wrappers */
extern int tunable_use_sendfile;              /* Use sendfile() if we can */
extern int tunable_force_dot_files;           /* Show dotfiles without -a */
extern int tunable_listen_ipv6;               /* Standalone with IPv6 listen */
extern int tunable_dual_log_enable;           /* Log vsftpd.log AND xferlog */
extern int tunable_syslog_enable;             /* Use syslog not vsftpd.log */
extern int tunable_background;                /* Background listener process */
extern int tunable_virtual_use_local_privs;   /* Virtual user => local privs */
extern int tunable_session_support;           /* utmp, wtmp, pam_session */
extern int tunable_download_enable;           /* Can download anything? */
extern int tunable_dirlist_enable;            /* Can see any dirs? */
extern int tunable_chmod_enable;              /* Is CHMOD allowed? (local) */
extern int tunable_secure_email_list_enable;  /* Require specific anon email */
extern int tunable_run_as_launching_user;     /* Runs as launching user */
extern int tunable_no_log_lock;               /* Don't lock log files */
extern int tunable_ssl_enable;                /* Allow SSL/TLS AUTH */
extern int tunable_allow_anon_ssl;            /* Allow anonymous use of SSL */
extern int tunable_force_local_logins_ssl;    /* Require local logins use SSL */
extern int tunable_force_local_data_ssl;      /* Require local data uses SSL */
extern int tunable_sslv2;                     /* Allow SSLv2 */
extern int tunable_sslv3;                     /* Allow SSLv3 */
extern int tunable_tlsv1;                     /* Allow TLSv1 */
extern int tunable_tilde_user_enable;         /* Support e.g. ~chris */
extern int tunable_force_anon_logins_ssl;     /* Require anon logins use SSL */
extern int tunable_force_anon_data_ssl;       /* Require anon data uses SSL */
extern int tunable_mdtm_write;                /* Allow MDTM to set timestamps */
extern int tunable_lock_upload_files;         /* Lock uploading files */
extern int tunable_pasv_addr_resolve;         /* DNS resolve pasv_addr */
extern int tunable_debug_ssl;                 /* Verbose SSL logging */
extern int tunable_require_cert;              /* SSL client cert required */
extern int tunable_validate_cert;             /* SSL certs must be valid */
extern int tunable_strict_ssl_read_eof;       /* Need SSL_shutdown() on read */
extern int tunable_strict_ssl_write_shutdown; /* Need SSL_shutdown() on write */
extern int tunable_ssl_request_cert;          /* Ask client for cert */
extern int tunable_delete_failed_uploads;     /* Delete an upload that failed */
extern int tunable_implicit_ssl;              /* Use implicit SSL protocol */
extern int tunable_sandbox;                   /* Deploy ptrace sandbox */
extern int tunable_require_ssl_reuse;         /* Require re-used data conn */
extern int tunable_isolate;                   /* Use container clone() flags */
extern int tunable_isolate_network;           /* Use CLONE_NEWNET */

/* Integer/numeric defines */
extern unsigned int tunable_accept_timeout;
extern unsigned int tunable_connect_timeout;
extern unsigned int tunable_local_umask;
extern unsigned int tunable_anon_umask;
extern unsigned int tunable_ftp_data_port;
extern unsigned int tunable_idle_session_timeout;
extern unsigned int tunable_data_connection_timeout;
extern unsigned int tunable_pasv_min_port;
extern unsigned int tunable_pasv_max_port;
extern unsigned int tunable_anon_max_rate;
extern unsigned int tunable_local_max_rate;
extern unsigned int tunable_listen_port;
extern unsigned int tunable_max_clients;
extern unsigned int tunable_file_open_mode;
extern unsigned int tunable_max_per_ip;
extern unsigned int tunable_trans_chunk_size;
extern unsigned int tunable_delay_failed_login;
extern unsigned int tunable_delay_successful_login;
extern unsigned int tunable_max_login_fails;
extern unsigned int tunable_chown_upload_mode;

/* String defines */
extern const char* tunable_secure_chroot_dir;
extern const char* tunable_ftp_username;
extern const char* tunable_chown_username;
extern const char* tunable_xferlog_file;
extern const char* tunable_vsftpd_log_file;
extern const char* tunable_message_file;
extern const char* tunable_nopriv_user;
extern const char* tunable_ftpd_banner;
extern const char* tunable_banned_email_file;
extern const char* tunable_chroot_list_file;
extern const char* tunable_pam_service_name;
extern const char* tunable_guest_username;
extern const char* tunable_userlist_file;
extern const char* tunable_anon_root;
extern const char* tunable_local_root;
extern const char* tunable_banner_file;
extern const char* tunable_pasv_address;
extern const char* tunable_listen_address;
extern const char* tunable_user_config_dir;
extern const char* tunable_listen_address6;
extern const char* tunable_cmds_allowed;
extern const char* tunable_hide_file;
extern const char* tunable_deny_file;
extern const char* tunable_user_sub_token;
extern const char* tunable_email_password_file;
extern const char* tunable_rsa_cert_file;
extern const char* tunable_dsa_cert_file;
extern const char* tunable_ssl_ciphers;
extern const char* tunable_rsa_private_key_file;
extern const char* tunable_dsa_private_key_file;
extern const char* tunable_ca_certs_file;
extern const char* tunable_cmds_denied;

#endif /* VSF_TUNABLES_H */

