Jméno | Hodnota | Dokumentace |
BUFFER_GRANULARITY | 4096 | granularita bufferu, musi byt mocnina dvou |
DEFAULT_CONFIG_FILE | "/etc/sp_proxy.conf" | defaultni cesta ke konfiguracnimu souboru |
DEFAULT_POP3_PORT | 110 | defaultni POP3 proxy port |
DEFAULT_SMTP_PORT | 25 | defaultni SMTP proxy port |
INADDR_NONE | 0xffffffff | konstanta pro nedefinovanou adresu (-1) |
_vsnprintf | vsnprintf | alias pro funkci |
_vsnprintf | vsnprintf | alias pro funkci |
debug_printf | printf | UNDOCUMENTED! |
stricmp | strcasecmp | alias pro funkci |
stricmp | strcasecmp | alias pro funkci |
strnicmp | strncasecmp | alias pro funkci |
strnicmp | strncasecmp | alias pro funkci |
Jméno | Typ | Počáteční hodnota | Dokumentace |
a_size | int | ? | alokovana velikost |
a_size | int | ? | alokovana velikost |
active | *config | ? | aktivni konfigurace [EXT] |
begin | *char | ? | zacatek |
begin | *char | ? | zacatek |
blacklist | *tree | ? | blacklistovane emaily/domeny |
blacklist | *tree | ? | blacklistovane emaily/domeny |
blacklist_level | int | ? | uroven na jakou se nastavi hodnota emailu s odelilatelem v blacklistu |
blacklist_level | int | ? | uroven na jakou se nastavi hodnota emailu s odelilatelem v blacklistu |
blacklistfile | *char | ? | soubor s blacklistem |
blacklistfile | *char | ? | soubor s blacklistem |
buf | *char | ? | buffer na data |
buf | *char | ? | buffer na data |
cfg_lock | pthread_mutex_t | ? | lock na manipulace s configem |
configfile | *char | ? | jmeno aktualniho konfiguracniho souboru [EXT] |
curr | *char | ? | aktualni pozice |
curr | *char | ? | aktualni pozice |
func | *threadfunc | ? | funkce pro thread |
left | int | ? | kolik bajtu zbyva; |
left | int | ? | kolik bajtu zbyva; |
max | int | ? | minimalni priorita zporavy pro spusteni tohohle programmu |
max | int | ? | minimalni priorita zporavy pro spusteni tohohle programmu |
min | int | ? | minimalni priorita zporavy pro spusteni tohohle programu |
min | int | ? | minimalni priorita zporavy pro spusteni tohohle programu |
name | *char | ? | jmeno |
name | *char | ? | jmeno |
num | int | ? | pocet prvku tohoto (pod)stromu |
num | int | ? | pocet prvku tohoto (pod)stromu |
p_class | *char | ? | program na klasifikaci emailu |
p_class | *char | ? | program na klasifikaci emailu |
p_postact | *priority_list | ? | programy spoustene na zpravy |
p_postact | *priority_list | ? | programy spoustene na zpravy |
p_postfilt | *priority_list | ? | program na eventuelni zmenu vysledne zpravy |
p_postfilt | *priority_list | ? | program na eventuelni zmenu vysledne zpravy |
p_prefilt | *priority_list | ? | program na predzpracovani zpravy |
p_prefilt | *priority_list | ? | program na predzpracovani zpravy |
pop3_port | int | ? | POP3 port |
pop3_port | int | ? | POP3 port |
pop3s | int | ? | socket na POP3 |
prog | *char | ? | program ke spusteni |
prog | *char | ? | program ke spusteni |
refcount | int | ? | citac pouziti -> kdyz je na 0, zlikviduje se |
refcount | int | ? | citac pouziti -> kdyz je na 0, zlikviduje se |
remotesmtp | *char | ? | vzdaleny SMTP host, kam jsou mail preposilany |
remotesmtp | *char | ? | vzdaleny SMTP host, kam jsou mail preposilany |
size | int | ? | bajtu v bufferu |
size | int | ? | bajtu v bufferu |
smtp_port | int | ? | SMTP port |
smtp_port | int | ? | SMTP port |
smtps | int | ? | socket na SMTP |
sock | int | ? | socket pro thread |
subject_mark | *priority_list | ? | oznacovani subjektu |
subject_mark | *priority_list | ? | oznacovani subjektu |
val | *void | ? | hodnota |
val | *void | ? | hodnota |
valid_char | char[256] | ? | platne znaky v emailu |
whitelist | *tree | ? | whitelistovane emaily/domeny |
whitelist | *tree | ? | whitelistovane emaily/domeny |
whitelist_level | int | ? | uroven na jakou se nastavi hodnota emailu s odelilatelem ve whitelistu |
whitelist_level | int | ? | uroven na jakou se nastavi hodnota emailu s odelilatelem ve whitelistu |
whitelist_lock | pthread_mutex_t | ? | lock na zmenu whitelistu |
whitelistfile | *char | ? | soubor s blacklistem |
whitelistfile | *char | ? | soubor s blacklistem |
Modifikátor | Jméno | Parametry | Dokumentace |
void | add_to_whitelist | (config *cfg,const char *line) | zapise adresu do whitelistu |
char * | b_strncpy | (char *dest,const char *source, size_t count) | jako strncpy, ale posledni znak vzdy nastavi na NULL |
void | buf_add | (charbuffer *b,const char *data,int datalen) | prida do bufferu data |
void | buf_addline | (charbuffer *b,const char *line) | prida do buffer radku line + znaky CR a LF |
char * | buf_firstline | (charbuffer *b) | vrati a radku ukoncenou CRLF, LF, CR nebo koncem bufferu z bufferu, nebo NULL pokud je buffer prazdny. Radku z bufferu neostrani, buffer zustane nezmenen |
void | buf_free | (charbuffer *b) | uvolni pamet zabranou bufferem |
char * | buf_getline | (charbuffer *b) | vrati a odstrani radky ukoncenou CRLF z bufferu, nebo NULL pokud tam takova radka neni |
void | buf_init | (charbuffer *b,int size) | inicializuje promennou na defaultni hodnoty + naalokuje pocatecni buffer |
void | buf_realloc | (charbuffer *b,int minsize) | realokuje buffer na velikost alespon minsize bajtu. Pokud je buffer uz dostatecne velky, nedela nic |
int | chkerror | (char *action,int retcode) | pokud retcode je -1, vypise perror s parametrem action a ukonci program typicke pouziti: chkerror("popis chyby",syscall_co_vraci_-1_pri_chybe(...)); |
void | config_mutex_lock | () | zamkne konfiguraci pro modifikace |
void | config_mutex_lock_init | () | inicializace zamku |
void | config_mutex_unlock | () | odemkne konfiguraci pro modifikace |
int | connect_string | (const char *host,int def_port) | priconnecti se na adresu ve tvaru (hostname|adresa)(:port)? def_port se pouzije, pokud port neni zadan |
int | email_in_list | (tree *list,const char *email) | vraci 1 pokud je email v seznamu list, jinak 0 |
int | empty | (const char *a) | vrati 1 pokud je retezec NULL nebo prazdny |
int | eq | (const char *a,const char *b) | vrati 1 pokud se retezce rovnaji |
int | eqi | (const char *a,const char *b) | vrati 1 pokud se retezce rovnaji (case insensitive) |
void | fatal | (char *s) | vyskoci s chybovou hlaskou. Dobre k debugovani |
void | fatalf | (char *fmt,...) | jako fatal(), ale s formatovanym retezcem jako u printf |
void | free_config | (config *c) | uvolni konfiguracni strukturu z pameti |
void | freetoken | (text_token *t) | uvolni token z pameti, vcetne jeho vnitrku, tedy dat, ze kterych byl token vytvoren |
int | fsize | (const char *f) | vrati velikost souboru |
const char * | get_cmd_param | (const char *cmd,const char *input) | otestuje jestli vstup input zacina na cmd a vrati odkaz na prvni nemezerovy znak za prikazem cmd, nebo NULL, pokud to neni spravny prikaz |
int | have_char | (char c,char *buf,int len) | vraci true, je li znak v bufferu |
void | init_config | (int argc,char **argv) | nahraje konfiguracni soubor a pak ho (eventuelne) upravi podle commandline parametru |
int | is_canonical_email | (const char *string,int s_len) | vraci true, pokud podretezec retezce string delky strlen je email fe formatu user@domena |
void | line_checkwhitelist | (config *cfg,char *line) | ZKONTROLUJE jestli radka neobsahuje ^RCPT TO:(.*)$ a pokud ano, prida \1 do whitelistu |
config * | load_config | (char *filename) | nahraje konfiguraci ze souboru file |
int | loadfile | (void **out,const char *name) | nahraje soubor do pameti, vrati velikost |
tree * | loadlist | (char *filename) | nahraje do stromu vsechny radky ze souboru krome komentaru. Pripousti se, ze soubor neexistuje |
config * | lock_config | (config *c) | zvysi refcount |
config * | lock_config_int | (config *c) | zvysi refcount (bez zamykani) |
void | log_error | () | posle do logu chybovou hlasku podle kodu v ERRNO |
void | log_init | () | inicializuje logovani hlasek |
void | log_message | (int priority,const char *err) | zaloguje hlasky. Typicky do syslogu, ale pri debugovani i na STDOUT |
void | log_messagef | (int priority, const char *fmt,...) | jako log_message(), ale s formatovanym retezcem jako u printf |
int | main | (int argc,char **argv) | main - hlavni funkce programu |
void | main_rebind | (int change_smtp,int change_pop3) | zmeni sockety, pokud je po zmene konfigurace nuntno naslouchat na jinych portech |
void | make_vch_table | () | inicializuje tabulku valid_char |
void * | malloc0 | (size_t t) | naalokuje pamet. Pamet je vyplnena nulama |
void * | malloc1 | (size_t t) | naalokuje pamet. Selhani neni povoleno (pri nedostatku pameti program konci s chybovou hlaskou) |
void | message_dots | (charbuffer *b,int cnt) | Escape na tecky v smtp komunikaci cnt==-1: z .. na jednom radku udela . cnt==+1: z . na jednom radku udela .. |
int | net_listen | (int port) | zacne naslouchat na portu [port], vrati socket |
void | net_thread | (thread_rec *t) | wrapper kolem funkce socketu. Funkce (vnitrni) po sobe socket nezvira, to dela tato funkce |
void | net_thread_run | (thread_rec t) | spusti sitovy thread s danou funkcin a socketem |
int | open_connection | (const char *host,int port) | otevre konexi na dany host a port, vrati socket nebo -1 pokud chyba |
char * | parse_email | (const char *email) | rozparsuje email z formatu typu "neco" a podobnych na normalizovany tvar user@domena |
int | pipe_filter | (charbuffer *msg,charbuffer *msg_out,pid_t pid,int h_in,int h_out) | zapise obsah msg do h_in, zaroven vyzvedne obsah z h_out do bufferu msg_out, a po ukonceni procesu pid vrati jeho navratovou hodnotu |
void | plist_add | (priority_list **p,char *cfg_line) | do prioritniho seznamu prida zaznam z konfiguraku (format "LOW-HIGH PROGRAM"/"PRIO PROGRAM") |
void | plist_add_num | (priority_list **p,int lo, int hi, char *prog) | do prioritniho seznamu prida zaznam z konfiguraku (LOW,HIGH,PROGRAM) |
void | plist_free | (priority_list *p) | odalokuje spojak s programy spoustenymi dle priorit |
int | pop3_handler | (int s,config *cfg) | POP3 socket handler |
int | port_from_string | (const char *port) | prevede port na cislo |
long | resolve | (const char *name) | pro dany host vrati jeho IPV4 adresu |
int | run_classificator | (charbuffer *b_message,const char *prog) | na zpravu spusti klasifikator dle nastaveni a vrati hodnotu zpravy |
void | run_pipe | (const char *prog, int *h_in,int *h_out,pid_t *pid) | spusti program a k nemu oboustrannou pipe - vrati handle na zapis do programu (h_in) a handle na cteni programu (h_out) Vrati tez pid child procesu (aby se dalo cekat pres waitpid, az vypise vsechen vystup) |
void | run_postaction | (charbuffer *b_message,priority_list *filt,int state) | na zpravu spusti programy postaction dle nastaveni |
void | run_postfilter | (charbuffer *b_message,priority_list *filt,int state) | na zpravu spusti programy postfilter dle nastaveni |
charbuffer | run_prefilter | (charbuffer *b_message,priority_list *filt) | spusti na zpravy b_message prefilter, vrati prefiltrovanou zpravu |
int | run_prog | (charbuffer *msg,const char *prog,programtype pt) | spusti program, msg je buffer, ktery obsahuje vstupni zpravu, pokud pt je pt_subjectmark, nebo pt_filter, bude nahrazena vystupni zpravou |
void | run_programlist | (charbuffer *msg,priority_list *filt,int state,programtype pt) | spusti vsechny programy postupne v jejich poradi ze seznamu list na zpravu msg, programy dostanou parametry state a pt |
void | run_subjmark | (charbuffer *b_message,priority_list *filt,int state) | na zpravu spusti znackovac Subjectu dle nastaveni |
int | send_all | (int sock,const void *buf,size_t buf_bytes,int flags) | stejne jako send, az na to, ze se send_all pokusi prostlacit vzdy celou zpravu (pokud send vrati ze byla poslana pouze cast zpravy, send_all pokracuje pustenim send na zbytek) |
void | send_line | (int s,char *str) | posle retezec + CRLF na socket |
void | send_linef | (int sock,char *fmt,...) | jako send_line(), ale s formatovanym retezcem jako u printf |
void | set_nonblock | (int fd) | Nastavi non-blocking na file deskriptor |
void | sighup_handler | (int sig) | sighup handler: reload config |
int | smtp_handler | (int s,config *cfg) | SMTP proxy - start double pipe, pass input/output unchanged, if input is ^RCPT TO:(.*)$ then add $1 to whitelist (maybe: only if 250 response code received) if input is DATA, then wait for . |
char * | socket_getline | (charbuffer *b, int sock) | nacte radku ze socketu, zbyle znaky (za koncem radky) vrati do bufferu, pokud je radka jiz v bufferu, nic nenacita. Pri uzavreni spojeni vraci NULL |
int | str_beginwithi | (const char *s1,const char *s2) | vrati 1 pokud retezec s2 zacina retezcem s1 (case insensitive), jinak 0 |
void | str_free | (char *s) | odalokace retezce s kontrolou na NULL pointery |
text_token | token_create | (void *source,int size) | vytvori z danych dat parsovatelny token |
int | token_loadbinary | (text_token *t,void *i,int s) | nacte z tokenu kus binarnich dat |
int | token_readchar | (text_token *t,char c) | nacte znak z tokenu a odstrani ho. Vraci 1 pri uspechu, 0 pri chybe (je tam jiny znak, nebo tam neni zadny) |
int | token_readfloat | (text_token *t,double *f) | nacte z tokenu jeden float |
int | token_readint | (text_token *t,int *f) | nacte z tokenu jeden integer |
int | token_readkv_sep | (text_token *t,char **key,char **value,char separator) | ze zacatku tokenu nacte a odstrani zaznam ve formatu key=value. Misto = lze pouzit i jiny separator POZOR! dealokovat se musi jenom key, nikdy ne value, nebot to je jeden buffer |
char * | token_readline | (text_token *t) | nacte z tokenu jednu neprazdnou radku |
char * | token_readqstring | (text_token *t) | nacte retezec v uvozovkach z tokenu |
char * | token_readstring | (text_token *t) | nacte retezec z tokenu (znaky az do prvni whitespace nebo konce radky) |
void | token_remove_rest_of_line | (text_token *t) | preskoci vse v tokenu az do konce radky |
void | token_skip_trash | (text_token *t) | preskoci vsechny whitespacy a pokud narazi na komentar, tak i ten |
void | tree_add | (tree **t,const char *name,void *val1) | prida do stromu polozku se jmenem name a hodnovou val1, pokud je jiz obsazena, neprida nic (a pokud je zapnuty debug tak rovnou fatalne spadne) |
int | tree_count | (tree *t) | vrati pocet prvku stromu |
int | tree_del | (tree **t,const char *name) | odstrani ze stormu polozku name 1 - polozka byla odstranena 0 - polozka tam nebyla |
void * | tree_delv | (tree **t,const char *name) | odstrani ze stormu polozku name a vrati ji (nebo NULL, pokud tam neni) 1 - polozka byla odstranena 0 - polozka tam nebyla |
tree * | tree_dup | (const tree *t) | zduplikuje dany strom - vytvori novou kopii |
const tree * | tree_element | (const tree *t,int i) | vytahne ze stromu ukazatel na list s prvek s cislem i (i je mezi 0 a (poctem prvku ve stromu -1) Da se pouzit napr. pro prochazeni cleeho stropu, ackoliv tree_foreach / tree_foreach_p muze byt vhodnejsi Pokud nastane chyba nebo je prvek mimo rozsah, vrati NULL |
void | tree_foreach | (tree *t,tree_func *f) | zavola funkci na kazdy prvek stromu |
void | tree_foreach_p | (tree *t,tree_func_p *f,void *param) | zavola funkci na kazdy prvek stromu (s extra parametrem) |
void | tree_free | (tree *t) | odalokuje strom z pameti |
void * | tree_search | (const tree *t,const char *name) | prohleda strom jestli obsahuje polozku name a vrati ji, pokud neobsahuje, vraci 0 |
void | unlock_config | (config *c) | snizi refcount, eventuelne zlikviduje strukturu |
void | unlock_config_int | (config *c) | snizi refcount, eventuelne zlikviduje strukturu (bez zamykani) |