proftpd.h
上传用户:pycemail
上传日期:2007-01-04
资源大小:329k
文件大小:6k
源码类别:

Ftp客户端

开发平台:

Unix_Linux

  1. /*
  2.  * ProFTPD - FTP server daemon
  3.  * Copyright (c) 1997, 1998 Public Flood Software
  4.  *  
  5.  * This program is free software; you can redistribute it and/or modify
  6.  * it under the terms of the GNU General Public License as published by
  7.  * the Free Software Foundation; either version 2 of the License, or
  8.  * (at your option) any later version.
  9.  *
  10.  * This program is distributed in the hope that it will be useful,
  11.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13.  * GNU General Public License for more details.
  14.  *
  15.  * You should have received a copy of the GNU General Public License
  16.  * along with this program; if not, write to the Free Software
  17.  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307, USA.
  18.  */
  19. /* General options
  20.  * $Id: proftpd.h,v 1.7 1999/10/01 07:57:31 macgyver Exp $
  21.  */
  22. #ifndef __PROFTPD_H
  23. #define __PROFTPD_H
  24. #ifndef TRUE
  25. #define TRUE 1
  26. #endif
  27. #ifndef FALSE
  28. #define FALSE 0
  29. #endif
  30. #define CALLBACK_FRAME LPARAM p1,LPARAM p2,LPARAM p3,void *data
  31. #define ASSERT(x) assert(x)
  32. #include <assert.h>
  33. #define MAX_PATH_LEN 256
  34. typedef unsigned long LPARAM; /* Longest bitsize compatible with
  35.                                          * a scalar and largest pointer
  36.  * (platform dependant)
  37.  */
  38. /* adjust per platform */
  39. /* unsigned 32 bit integer */
  40. typedef unsigned long u_int_32;
  41. /* unsigned 16 bit integer */
  42. typedef unsigned short u_int_16;
  43. /* unsigned 8 bit integer */
  44. typedef unsigned char u_int_8;
  45. typedef unsigned char UCHAR;
  46. typedef unsigned int UINT;
  47. typedef unsigned long ULONG;
  48. typedef int (*callback_t)(CALLBACK_FRAME);
  49. /* Class structure */
  50. typedef struct class_struc {
  51.   struct class_struc *next;
  52.   char *name; /* class name */
  53.   int max_connections; /* max number of users in this class */
  54.   void *preg; /* compiled regexp */
  55. } class_t;
  56. typedef struct cdir_struc {
  57.   struct cdir_struc *next;
  58.   u_int_32 address;
  59.   u_int_32 netmask;
  60.   class_t *class;
  61. } cdir_t;
  62. struct conn_struc;
  63. struct cmd_struc;
  64. struct IO_Request;
  65. struct IO_File;
  66. struct config_struc;
  67. typedef struct {
  68.   pool *pool;
  69.   long flags; /* Session & State flags */
  70.   p_in_addr_t data_addr; /* Remote data address */
  71.   short data_port; /* Remote data port */
  72.   char *ident_user; /* User identified by ident protocol */
  73.   char cwd[MAX_PATH_LEN]; /* Current working directory */  
  74.   char vwd[MAX_PATH_LEN]; /* Current virtual working directory */
  75.   struct config_struc *dir_config; /* Closest matching configuration
  76.                                          * for current operation
  77.                                          */
  78.   /* The uid/gids are manipulated by the PRIVS macros in
  79.    * privs.h
  80.    */
  81.   int disable_id_switching; /* disable uid/gid switching */
  82.   int uid,ouid,gid; /* Currently running uid, 
  83.                                          * original (startup) uid and
  84.                                          * current gid 
  85.                                          */
  86.   array_header *gids;
  87.   array_header *groups;
  88.   int fsgid; /* Saved file gid */
  89.   char *user,*group; /* username/groupname after login */
  90.   class_t *class; /* session class */
  91.   char *proc_prefix; /* The "prefix" of our process name */
  92.   int wtmp_log; /* Are we logging to wtmp? */
  93.   struct conn_struc *c; /* Control connection */
  94.   struct conn_struc *d; /* Data connection */
  95.   struct IO_Request *d_req; /* Active data connection request */
  96.   int hide_password; /* Hide password in logs/ps listing */
  97.   char *anon_root; /* Anonymous root directory */
  98.   struct config_struc *anon_config; /* Anonymous FTP configuration */
  99.   char *anon_user; /* E-mail address sent to us */
  100.   
  101.   unsigned long restart_pos; /* Restart marked position */
  102.   struct {
  103.     struct pool *p;
  104.     int xfer_type;     /* xfer session attributes, default/append/hidden */
  105.     int direction;
  106.     char *filename; /* As shown to user */
  107.     char *path; /* As used in transfer */
  108.     char *path_hidden; /* As used in hidden stor */
  109.     char *bufstart,*buf;
  110.     int bufsize,buflen;
  111.     struct timeval start_time; /* Time current transfer started */
  112.     unsigned long file_size; /* Total size of file (if known) */
  113.     unsigned long total_bytes; /* Total bytes transfered */
  114.     int (*get_data)(struct IO_File*,char*,int);
  115.     int (*complete)(struct IO_File*);
  116.     int (*abort)(struct IO_File*,int err);
  117.   } xfer;
  118.   unsigned long total_bytes;          /* Total bytes transfered for this session */
  119. } session_t;
  120. /* Possible values for xfer.xfer_type, mutually exclusive */
  121. #define STOR_DEFAULT 0
  122. #define STOR_APPEND 1
  123. #define STOR_HIDDEN 2
  124. extern session_t session;
  125. extern char ServerType;
  126. extern char MultilineRFC2228;
  127. extern const char *pwdfname,*grpfname;
  128. /* Session/State flags */
  129. #define SF_PASSIVE (1 << 0) /* Data connection is in passive mode */
  130. #define SF_ABORT (1 << 1) /* Abort in progess */
  131. #define SF_XFER (1 << 2) /* Transfer in progress */
  132. #define SF_ASCII (1 << 3) /* ASCII mode transfer */
  133. #define SF_ASCII_OVERRIDE (1 << 4) /* ASCII override this xfer only */
  134. #define SF_ANON (1 << 5) /* Anonymous (chroot) login */
  135. #define SF_POST_ABORT (1 << 6) /* After abort has occured */
  136. #define SF_ALL (SF_PASSIVE|SF_ABORT|SF_XFER|SF_ASCII| 
  137.                         SF_ASCII_OVERRIDE|SF_ANON|SF_POST_ABORT)
  138. /* Macro to test global abort flag */
  139. #define XFER_ABORTED (session.flags & SF_ABORT)
  140. /* Server Types */
  141. #define SERVER_INETD 0
  142. #define SERVER_STANDALONE 1
  143. /* Timers */
  144. #define TIMER_LOGIN 1
  145. #define TIMER_IDLE 2
  146. #define TIMER_NOXFER 3
  147. #define TIMER_STALLED 4
  148. /* Response structure */
  149. typedef struct response_struc {
  150.   struct response_struc *next;
  151.   char *num;
  152.   char *msg;
  153. } response_t;
  154. /* Misc Prototypes */
  155. void set_proc_title(char *, ...);
  156. void send_response_raw(const char *, ...);
  157. void send_response_async(const char *, const char *, ...);
  158. void send_response(const char *, const char *, ...);
  159. void send_response_ml_start(const char *, const char *, ...);
  160. void send_response_ml(const char *, ...);
  161. void send_response_ml_end(const char *, ...);
  162. void add_response(const char*, const char *, ...);
  163. void add_response_err(const char *, const char *, ...);
  164. void end_login(int);
  165. void main_exit(void*,void*,void*,void*);
  166. void main_set_idle();
  167. void register_rehash(void*,void(*)(void*));
  168. #endif /* __PROFTPD_H */