1 #include <stdio.h> 2 #include <pcre.h> 3 4 #define VERSION "3.2.12" 5 #define DEFAULT_CONFIG "/usr/local/rejik3/redirector.conf" 6 7 /*** Print debug info for develop ***/ 8 //#define DEBUG_ERR_MES 9 //#define DEBUG_CFG 10 //#define DEBUG_CYCLE 11 //#define DEBUG_MAKE_CACHE 12 //#define DEBUG_URLS_LOAD 13 //#define DEBUG_PCRE 14 //#define DEBUG_PARSE_URL 15 //#define DEBUG_PRUNE_URLS 16 //#define DEBUG_CACHE2URL 17 //#define DEBUG_WRITE_CACHE 18 //#define DEBUG_LOAD_CACHE 19 //#define DEBUG_PARSE_UNPUT 20 //#define DEBUG_CHECK_URLS 21 //#define DEBUG_URLS_CMP 22 //#define DEBUG_RUN_MAKE_CACHE 23 //#define DEBUG_IP 24 //#define DEBUG_ID 25 //#define DEBUG_NEW_URL 26 //#define DEBUG_RAW_CHANGE 27 //#define DEBUG_PASS 28 29 30 // Uncoment next line for case independent 31 //#define CASE_INDEPENDENT 32 33 // MAX LENS OF SOME VARS 34 #define ML_CFG 200 35 #define ML_FILE_NAME 200 36 #define ML_ETMP 7168 37 #define ML_PCRE_VARS 512 38 39 #define ML_URL 6144 40 #define ML_HOST 100 41 #define ML_IDENT 100 42 #define ML_METHOD 10 43 44 45 #define ML_PROTOKOL 20 46 #define ML_DIRS 4096 47 #define ML_PORT 10 48 #define ML_2LD 200 49 #define ML_SUBDOMEN 512 50 51 extern FILE *change_log; 52 53 extern char *input_ident; 54 extern char *input_ident_un; 55 extern char *input_ip; 56 extern char *input_url; 57 extern char *input_url_un; 58 59 #ifdef CASE_INDEPENDENT 60 char *input_url_uc; 61 #endif 62 63 extern char *input_method; 64 extern char *input_host; 65 extern struct p_url *i_url; 66 67 extern char *change_reason; 68 69 70 /***************************************************************** 71 * http://sub.sub.sub.domen2levelname.ru:45433/dir/dir/file * 72 * | | | | | | * 73 * protocol | subdomen | twoleveldomen |port| dirs * 74 *****************************************************************/ 75 struct p_url 76 { 77 char protocol[ML_PROTOKOL]; 78 char twoleveldomen[ML_2LD]; 79 char port[ML_PORT]; 80 char subdomen[ML_SUBDOMEN]; 81 char dirs[ML_DIRS]; 82 }; 83 84 //GLOBAL OPTIONS 85 extern char *err_log; // Error log path 86 extern char *chg_log; // Change log path 87 extern char *makecache; // make-cache program 88 89 extern char *work_ip; //Work ip 90 extern int work_ip_count; //Work ip count 91 extern int work_ip_flag; //Work ip flag 92 93 extern char *allow_ip; //Allow ip 94 extern int allow_ip_count; //Allow ip count 95 96 extern char **work_id; //Work id 97 extern int work_id_count; //Work id count 98 extern int work_id_flag; //Work id flag 99 100 extern char **allow_id; //Allow id 101 extern int allow_id_count; //Allow id count 102 103 extern char *allow_urls_file; //Allow urls file name 104 extern char **allow_urls; //Allow urls 105 extern int allow_urls_count; //Allow urls count 106 107 extern char **change_from; // 108 extern char **change_to; // Change data 109 extern int change_count; // 110 extern int raw_change_log_flag; // 111 112 extern int write_hostname_to_log; // Write hostname to log flag 113 114 //SECTIONS OPTIONS 115 extern int sections_count; //Count of sections in config 116 extern struct section 117 { 118 char *name; //Header name 119 char *ban_dir; //Ban lists dir 120 char *url; //Url to change 121 char revers; // revers flag 122 123 char **new_url; // Block of urls 124 char *new_url_inset; // to change with 125 int new_url_count; // change #*# elements 126 127 char log_flag; //Write to log or not 128 129 char *work_ip; //Work ip 130 int work_ip_count; //Work ip count 131 int work_ip_flag; //Work ip flag 132 133 char *allow_ip; //Allow ip 134 int allow_ip_count; //Allow ip count 135 136 char **work_id; //Work id 137 int work_id_count; //Work id count 138 int work_id_flag; //Work id flag 139 140 char **allow_id; //Allow id 141 int allow_id_count; //Allow id count 142 143 pcre **ban_pcre; //Ban PCRE patterns 144 pcre_extra **ban_pcre_s; //Ban PCRE optimization 145 int ban_pcre_count; //Ban PCRE patterns count 146 147 char **ban_urls; //Ban urls lists area 148 int ban_urls_count; //Counter urls elements 149 150 char action; // Action for section: 151 // 0 - redirect 152 // 1 - pass 153 154 } **redir; 155 156 char *now (void); 157 void err_mes(char*); 158 void get_opt(char*); 159 160 int load_urls(int,char *); 161 int parse_urls(struct p_url *,char *); 162 int prune_urls(int); 163 int cmp_urls(const void *, const void *); 164 int cache2url(struct p_url *,char *); 165 int need_cache_update(char*,char*); 166 int write_cache(int,char*,char*); 167 int load_cache(char ***,int*,char *); 168 int load_pcre_file(int); 169 int check_pcre(int); 170 int parse_input(char *); 171 void init_vars(void); 172 int check_url(char**,int count); 173 int cmp_urls_bs(const void *, const void *); 174 int cmp_urls_sub(const void *, const void *); 175 int cmp_urls_dirs(const void *, const void *); 176 int cmp_urls_port(const void *, const void *); 177 int run_make_cache(char*); 178 int add_ip(char *,char **,int* ); 179 int check_ip(char *,int ); 180 int add_id(char *,char ***,int* ); 181 int sort_id(char ***,int* ); 182 int check_id(char **,int); 183 int prepare_new_url(int); 184 int add_new_url (int, char *, int); 185 int redirect(int); 186 int raw_change(void); 187 int pass(void); 188