⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ftpd.h

📁 功能强大的ftp服务器源代码
💻 H
📖 第 1 页 / 共 2 页
字号:
#ifndef __FTPD_H__#define __FTPD_H__ 1#ifndef __GNUC__# ifdef __attribute__#  undef __attribute__# endif# define __attribute__(a)#endif#if defined(SYSTEM_QUOTAS) || defined(WITH_PRIVSEP)# ifdef HAVE_SYS_FSUID_H#  undef HAVE_SYS_FSUID_H# endif#endif#include <stdio.h>#ifdef STDC_HEADERS# include <stdlib.h># include <stddef.h># include <stdarg.h>#else# if HAVE_STDLIB_H#  include <stdlib.h># endif#endif#ifdef HAVE_LOCALE_H# include <locale.h>#endif#ifdef HAVE_STRING_H# if !STDC_HEADERS && HAVE_MEMORY_H#  include <memory.h># endif# include <string.h>#else# if HAVE_STRINGS_H#  include <strings.h># endif#endif#include <limits.h>#include <errno.h>#include <ctype.h>#include <signal.h>#ifdef HAVE_UNISTD_H# include <unistd.h>#endif#ifdef TIME_WITH_SYS_TIME# include <sys/time.h># include <time.h>#else# if HAVE_SYS_TIME_H#  include <sys/time.h># else#  include <time.h># endif#endif#include <sys/types.h>#include <sys/stat.h>#ifdef HAVE_FCNTL_H# include <fcntl.h>#elif defined(HAVE_SYS_FCNTL_H)# include <sys/fcntl.h>#endif#ifdef HAVE_IOCTL_H# include <ioctl.h>#elif defined(HAVE_SYS_IOCTL_H)# include <sys/ioctl.h>#endif#include <sys/socket.h>#ifdef HAVE_NETINET_IN_SYSTM_H# include <netinet/in_systm.h>#endif#include <netinet/in.h>#include <netinet/ip.h>#include <netinet/tcp.h>#include <sys/mman.h>#ifdef HAVE_SYS_RESOURCE_H# include <sys/resource.h>#endif#ifdef HAVE_SYS_PARAM_H# include <sys/param.h>#endif#ifdef HAVE_SYS_MOUNT_H# include <sys/mount.h>#endif#include <pwd.h>#include <grp.h>#include <arpa/inet.h>#include <netdb.h>#ifdef HAVE_SYS_VFS_H# ifndef STATFS_ALREADY_DEFINED#  include <sys/vfs.h># endif#endif#ifdef HAVE_SYS_STATVFS_H# include <sys/statvfs.h>#endif#ifdef HAVE_SYS_LOADAVG_H# include <sys/loadavg.h>#endif#ifdef HAVE_SYS_SYSMP_H# include <sys/sysmp.h>#endif#ifdef HAVE_SYS_SYSGET_H# include <sys/sysget.h>#endif#ifdef HAVE_UTIME_H# include <utime.h>#endif#include "mysnprintf.h"#if !defined(HAVE_GETADDRINFO) || !defined(HAVE_GETNAMEINFO) || (!defined(HAVE_INET_NTOP) && !defined(inet_ntop)) || (!defined(HAVE_INET_PTON) && !defined(inet_pton))# define OLD_IP_STACK 1#endif#include "ipv4stack.h"/* We can't have more than one implementation, so if more than one were * found, the configure test failed - Use none */#ifdef VIRTUOZZO# ifndef DISABLE_SENDFILE#  define DISABLE_SENDFILE 1# endif#endif#if defined(DISABLE_SENDFILE) || \  (defined(SENDFILE_FREEBSD) && (defined(SENDFILE_LINUX) || defined(SENDFILEV_SOLARIS) || defined(SENDFILE_HPUX))) || \  (defined(SENDFILE_LINUX) && (defined(SENDFILEV_SOLARIS) || defined(SENDFILE_HPUX))) || \  (defined(SENDFILEV_SOLARIS) && defined(SENDFILE_HPUX))# undef SENDFILE_FREEBSD# undef SENDFILE_LINUX# undef SENDFILE_HPUX# undef SENDFILEV_SOLARIS#endif#if defined(SENDFILE_FREEBSD) || defined(SENDFILEV_SOLARIS) || defined(SENDFILE_HPUX)/* FreeBSD, Solaris and HP-UX sendfile() handles large files */#elif defined(SENDFILE_LINUX)# ifdef WITH_LARGE_FILES#  undef SENDFILE_LINUX#  define SENDFILE_NONE# endif#else# define SENDFILE_NONE#endif#ifdef HAVE_SYS_UIO_H# include <sys/uio.h>#endif/* * sendfile() is very kernel dependant. It's probable that you have platforms * that require specific #include before sys/sendfile.h . So to enhance * portability, we only include sys/sendfile.h on operating systems known * to be supported */#if (defined(SENDFILE_LINUX) || defined(SENDFILEV_SOLARIS)) && defined(HAVE_SYS_SENDFILE_H)# include <sys/sendfile.h>#endif#ifdef HAVE_SYS_FSUID_H# include <sys/fsuid.h>#endif#ifdef HAVE_ALLOCA# ifdef HAVE_ALLOCA_H#  include <alloca.h># endif# define ALLOCA(X) alloca(X)# define ALLOCA_FREE(X) do { } while (0)#else# define ALLOCA(X) malloc(X)# define ALLOCA_FREE(X) free(X)#endif#ifdef __FTPD_P_H__# define SYSLOG_NAMES    1        /* for -f */#endif#include <syslog.h>#ifndef HAVE_SYSLOG_NAMES# include "syslognames.h"#endif#ifdef HAVE_CRYPT_H# include <crypt.h>#endif#ifdef USE_SHADOW# ifdef HAVE_SHADOW_H#  include <shadow.h># endif#endif#if defined(__svr4__) && defined(__sun__) /* Solaris 2 aka SunOS 5 */# include <kvm.h># include <nlist.h>#endif#ifdef HAVE_SYS_PSTAT_H# include <sys/pstat.h>#endif#ifndef O_NOFOLLOW# define O_NOFOLLOW 0#endif#ifndef O_DIRECTORY# define O_DIRECTORY 0#endif#ifndef MAP_FILE# define MAP_FILE 0#endif/* * It's a hell. Some OS (Linux, BSD) have statfs. * Other OS (Solaris, Irix) have statvfs and statvfs64. * They do the same thing, but with a different syntax. */#if defined(HAVE_STATVFS) || defined(HAVE_STATVFS64)# ifdef HAVE_STATVFS64#  define STATFS_STRUCT struct statvfs64#  define STATFS(PATH, STR) statvfs64(PATH, STR)#  define FSTATFS(FD, STR) fstatvfs64(FD, STR)#  define STATFS_TYPE 1# else#  define STATFS_STRUCT struct statvfs#  define STATFS(PATH, STR) statvfs(PATH, STR)#  define FSTATFS(FD, STR) fstatvfs(FD, STR)#  define STATFS_TYPE 2# endif# define STATFS_BAVAIL(X) ((X).f_bavail)# define STATFS_BLOCKS(X) ((X).f_blocks)# define STATFS_BSIZE(X) ((X).f_bsize)# define STATFS_FRSIZE(X) ((X).f_frsize)#elif defined(HAVE_STATFS)# define STATFS_STRUCT struct statfs# define STATFS(PATH, STR) statfs(PATH, STR)# define FSTATFS(FD, STR) fstatfs(FD, STR)# define STATFS_TYPE 3# define STATFS_BAVAIL(X) ((X).f_bavail)# define STATFS_BLOCKS(X) ((X).f_blocks)# define STATFS_FRSIZE(X) ((X).f_bsize)# define STATFS_BSIZE(X) ((X).f_bsize)#else# define STATFS_STRUCT int# define STATFS(PATH, STR) (-1)# define FSTATFS(FD, STR) (-1)# define STATFS_TYPE -1# define STATFS_BAVAIL(X) (0)# define STATFS_BLOCKS(X) (0)# define STATFS_BSIZE(X) (0)# define STATFS_FRSIZE(X) (0)#endif#ifndef errnoextern int errno;#endif#ifndef environextern char **environ;#endiftypedef struct AuthResult_ {    int auth_ok;                       /* 0=no auth/login not found,1=ok,-1=auth failed */    uid_t uid;    gid_t gid;    const char *dir;    int slow_tilde_expansion;#ifdef THROTTLING    unsigned long throttling_bandwidth_ul;    unsigned long throttling_bandwidth_dl;    int throttling_ul_changed;    int throttling_dl_changed;    #endif#ifdef QUOTAS    unsigned long long user_quota_size;    unsigned long long user_quota_files;    int quota_size_changed;    int quota_files_changed;#endif#ifdef RATIOS    unsigned int ratio_upload;    unsigned int ratio_download;    int ratio_ul_changed;    int ratio_dl_changed;#endif#ifdef PER_USER_LIMITS    unsigned int per_user_max;#endif} AuthResult;typedef struct FileInfo_ {    char **names_pnt;    size_t name_offset;    off_t size;    time_t mtime;    mode_t mode;    nlink_t nlink;    uid_t uid;    gid_t gid;} FileInfo;#define FI_NAME(X) (*((X)->names_pnt) + (X)->name_offset)typedef enum {    ALTLOG_NONE, ALTLOG_CLF, ALTLOG_STATS, ALTLOG_W3C} AltLogFormat;typedef struct AltLogPrefixes_ {    const char *prefix;    const AltLogFormat format;} AltLogPrefixes;int safe_write(const int fd, const void *buf_, size_t count);void *aborttransfer(int);void parser(void);void stripctrl(char * const buf, size_t len);void dobanner(const int type);void douser(const char *name);void dopass(char *password);void docwd(const char *dir);void doretr(char *name);void dorest(const char *name);void dodele(char *name);void dostor(char *name, const int append, const int autorename);void domkd(char *name);void dormd(char *name);void domdtm(const char *name);void dosize(const char *name);void doeprt(char *p);void doport(const char *arg);void doport2(struct sockaddr_storage a, unsigned int p);#ifndef MINIMALvoid doesta(void);void doestp(void);#endifvoid dopasv(int);void dochmod(char *name, mode_t mode);void error(int n, const char *msg);void domode(const char *arg);void dostru(const char *arg);void dotype(const char *arg);void donoop(void);void dornfr(char *name);void dornto(char *name);void dostou(void);void dofeat(void);void domlst(const char * const file);void dositetime(void);void mappedtov4(struct sockaddr_storage *ss);#ifndef HAVE_SYS_FSUID_Hvoid disablesignals(void);#endifvoid getnames(void);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -