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

Ftp客户端

开发平台:

Unix_Linux

  1. /*
  2.  * ProFTPD - FTP server daemon
  3.  * Copyright (c) 1997, 1998 Public Flood Software
  4.  * Copyright (C) 1999, MacGyver aka Habeeb J. Dihu <macgyver@tos.net>
  5.  *  
  6.  * This program is free software; you can redistribute it and/or modify
  7.  * it under the terms of the GNU General Public License as published by
  8.  * the Free Software Foundation; either version 2 of the License, or
  9.  * (at your option) any later version.
  10.  *
  11.  * This program is distributed in the hope that it will be useful,
  12.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14.  * GNU General Public License for more details.
  15.  *
  16.  * You should have received a copy of the GNU General Public License
  17.  * along with this program; if not, write to the Free Software
  18.  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307, USA.
  19.  */
  20. /*
  21.  * Configuration structure, server, command and associated prototypes.
  22.  *
  23.  * $Id: dirtree.h,v 1.4 1999/10/01 07:57:31 macgyver Exp $
  24.  */
  25. #ifndef __DIRTREE_H
  26. #define __DIRTREE_H
  27. #include "pool.h"
  28. #include "sets.h"
  29. typedef struct config_struc config_rec;
  30. typedef struct privdata privdata_t;
  31. struct conn_struc;
  32. typedef struct server_struc {
  33.   struct server_struc *next,*prev;
  34.   pool *pool; /* Memory pool for this server */
  35.   xaset_t *set; /* Set holding all servers */
  36.   char *ServerName; /* This server name */
  37.   char *ServerAddress; /* This server address */
  38.   char *ServerFQDN; /* Fully Qualified Domain Name */
  39.   int ServerPort; /* Port # to run on */
  40.   int tcp_rwin,tcp_swin; /* Receive/Send windows */
  41.   int tcp_rwin_override; /* Specifically override tcp rwin */
  42.   int tcp_swin_override; /* Specifically override tcp swin */
  43.   char *ServerAdmin; /* Administrator's name */
  44.   char *ServerMessage; /* Server's welcome message */
  45.   int AnonymousGreeting; /* Do not greet until after user login */  
  46.   p_in_addr_t *ipaddr; /* Internal address of this server */
  47.   struct conn_struc *listen; /* Our listening connection */
  48.   xaset_t *conf; /* Configuration details */
  49. } server_rec;
  50. #define CLASS_USER
  51. typedef struct cmd_struc {
  52.   pool *pool;
  53.   server_rec *server;
  54.   config_rec *config;
  55.   pool *tmp_pool; /* Temporary pool which only exists
  56.  * while the cmd's handler is running
  57.  */
  58.   int argc;
  59.   char *arg; /* entire argument (excluding command) */
  60.   char **argv;
  61.   char *group; /* Command grouping */
  62.   int  class; /* The command class */
  63.   int  symtable_index; /* hack to speed up symbol hashing in modules.c */
  64.   privdata_t *private; /* Private data for passing/retaining between handlers */
  65.   array_header *privarr; /* Internal use */
  66. } cmd_rec;
  67. struct config_struc {
  68.   struct config_struc *next,*prev;
  69.   int config_type;
  70.   pool *pool; /* memory pool for this object */
  71.   xaset_t *set; /* The set we are stored in */
  72.   char *name;
  73.   int argc;
  74.   void **argv;
  75.   long overrides; /* Override classes */
  76.   long flags; /* Flags */
  77.   
  78.   server_rec *server; /* Server this config element is attached to */
  79.   config_rec *parent; /* Our parent configuration record */
  80.   xaset_t *subset; /* Sub-configuration */
  81. };
  82. #define CONF_ROOT (1 << 0) /* No conf record */
  83. #define CONF_DIR (1 << 1) /* Per-Dir configuration */
  84. #define CONF_ANON (1 << 2) /* Anon. FTP configuration */
  85. #define CONF_LIMIT (1 << 3) /* Limits commands available */
  86. #define CONF_VIRTUAL (1 << 4) /* Virtual host */
  87. #define CONF_DYNDIR (1 << 5) /* Internal use */
  88. #define CONF_GLOBAL (1 << 6) /* "Global" context (applies to main server and ALL virtualhosts */
  89. #define CONF_USERDATA (1 << 14) /* Runtime user data */
  90. #define CONF_PARAM (1 << 15) /* config/args pair */
  91. /* config_rec flags */
  92. #define CF_MERGEDOWN (1 << 0) /* Merge option down */
  93. #define CF_DYNAMIC (1 << 1) /* Dynamically added entry */
  94. #define CF_DEFER (1 << 2) /* Defer hashing until authentication */
  95. /* Operation codes for dir_* funcs */
  96. #define OP_HIDE 1 /* Op for hiding dirs/files */
  97. #define OP_COMMAND 2 /* Command operation */
  98. /* For the Order directive */
  99. #define ORDER_ALLOWDENY 0
  100. #define ORDER_DENYALLOW 1
  101. /* The following macro determines the "highest" level available for
  102.  * configuration directives.  If a current dir_config is available, it's
  103.  * subset is used, otherwise anon config or main server
  104.  */
  105. #define CURRENT_CONF (session.dir_config ? session.dir_config->subset 
  106.  : (session.anon_config ? session.anon_config->subset 
  107.                                     : main_server->conf))
  108. #define TOPLEVEL_CONF (session.anon_config ? session.anon_config->subset : main_server->conf)
  109. extern server_rec *main_server;
  110. extern int tcpBackLog;
  111. extern int SocketBindTight;
  112. extern char ServerType;
  113. extern int ServerMaxInstances;
  114. extern int ServerUseReverseDNS;
  115. extern int TimeoutLogin;
  116. extern int TimeoutIdle;
  117. extern int TimeoutNoXfer;
  118. extern int TimeoutStalled;
  119. /* These macros are used to help handle configuration in modules */
  120. #define CONF_ERROR(x,s) return ERROR_MSG((x),NULL,pstrcat((x)->tmp_pool, 
  121. (x)->argv[0],": ",(s),NULL));
  122. #define CHECK_ARGS(x,n) if((x)->argc-1 < n) 
  123. CONF_ERROR(x,"missing arguments")
  124. #define CHECK_CONF(x,p) if(!check_conf((x),(p))) 
  125. CONF_ERROR((x), 
  126. pstrcat((x)->tmp_pool,"directive not allowed in ", 
  127. get_section_name((x)), 
  128. " section.",NULL))
  129. /* Prototypes */
  130. /* KLUDGE: disable umask() for not G_WRITE operations.  Config/
  131.  * Directory walking code will be completely redesigned in 1.3,
  132.  * this is only necessary for perfomance reasons in 1.1/1.2
  133.  */
  134. void kludge_disable_umask();
  135. void kludge_enable_umask();
  136. void init_config();
  137. void fixup_servers();
  138. int parse_config_file(const char*);
  139. config_rec *add_config_set(xaset_t**,const char*);
  140. config_rec *add_config(const char*);
  141. config_rec *add_config_param(const char*,int,...);
  142. config_rec *add_config_param_str(const char*,int,...);
  143. config_rec *add_config_param_set(xaset_t**,const char*,int,...);
  144. config_rec *find_config_next(config_rec*,config_rec*,int,const char*,int);
  145. config_rec *find_config(xaset_t*,int,const char*,int);
  146. void find_config_set_top(config_rec*);
  147. int remove_config(xaset_t*,const char*,int);
  148. class_t *find_class(p_in_addr_t *addr, char *remote_name);
  149. array_header *parse_group_expression(pool*,int*,char**);
  150. array_header *parse_user_expression(pool*,int*,char**);
  151. int group_expression(char**);
  152. int user_expression(char**);
  153. long get_param_int(xaset_t*,const char*,int);
  154. long get_param_int_next(const char*,int);
  155. void *get_param_ptr(xaset_t*,const char*,int);
  156. void *get_param_ptr_next(const char*,int);
  157. void init_conf_stacks();
  158. void free_conf_stacks();
  159. server_rec *start_new_server(const char*);
  160. server_rec *end_new_server();
  161. config_rec *start_sub_config(const char*);
  162. config_rec *end_sub_config();
  163. char *get_word(char**);
  164. config_rec *dir_match_path(pool*,char*);
  165. void build_dyn_config(pool*,char*,struct stat*,int);
  166. int dir_check_op_mode(pool*,char*,int,int,int,int);
  167. int dir_check_full(pool*,char*,char*,char*,int*);
  168. int dir_check(pool*,char*,char*,char*,int*);
  169. int dir_check_canon(pool*,char*,char*,char*,int*);
  170. int login_check_limits(xaset_t*,int,int,int*);
  171. void resolve_anonymous_dirs(xaset_t*);
  172. void resolve_defered_dirs(server_rec*);
  173. void fixup_dirs(server_rec*,int);
  174. int check_conf(cmd_rec*,int);
  175. char *get_section_name(cmd_rec*);
  176. int get_boolean(cmd_rec*,int);
  177. char *get_full_cmd(cmd_rec*);
  178. int match_ip(p_in_addr_t*, char*, const char *);
  179. #endif /* __DIRTREE_H */