亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? qmail-inject.c

?? linux下qmail的源碼 本人加了一些注釋
?? C
?? 第 1 頁 / 共 2 頁
字號:
//	接受本地郵件消息后檢測郵件頭是否符合RFC822標(biāo)準(zhǔn),并傳送給qmail-queue排進(jìn)隊列

#include "sig.h"#include "substdio.h"#include "stralloc.h"#include "subfd.h"#include "sgetopt.h"#include "getln.h"#include "alloc.h"#include "str.h"#include "fmt.h"#include "hfield.h"#include "token822.h"#include "control.h"#include "env.h"#include "gen_alloc.h"#include "gen_allocdefs.h"#include "error.h"#include "qmail.h"#include "now.h"#include "exit.h"#include "quote.h"#include "headerbody.h"#include "auto_qmail.h"#include "newfield.h"#include "constmap.h"#define LINELEN 80datetime_sec starttime;char *qmopts;int flagdeletesender = 0;int flagdeletefrom = 0;int flagdeletemessid = 0;int flagnamecomment = 0;int flaghackmess = 0;int flaghackrecip = 0;char *mailhost;char *mailuser;int mailusertokentype;char *mailrhost;char *mailruser;stralloc control_idhost = {0};stralloc control_defaultdomain = {0};stralloc control_defaulthost = {0};stralloc control_plusdomain = {0};stralloc sender = {0};stralloc envsbuf = {0};token822_alloc envs = {0};int flagrh;int flagqueue;struct qmail qqt;void put(s,len) char *s; int len;{ if (flagqueue) qmail_put(&qqt,s,len); else substdio_put(subfdout,s,len); }void puts(s) char *s; { put(s,str_len(s)); }void perm() { _exit(100); }void temp() { _exit(111); }void die_nomem() { substdio_putsflush(subfderr,"qmail-inject: fatal: out of memory\n"); temp(); }void die_invalid(sa) stralloc *sa; { substdio_putsflush(subfderr,"qmail-inject: fatal: invalid header field: "); substdio_putflush(subfderr,sa->s,sa->len); perm(); }void die_qqt() { substdio_putsflush(subfderr,"qmail-inject: fatal: unable to run qmail-queue\n"); temp(); }void die_chdir() { substdio_putsflush(subfderr,"qmail-inject: fatal: internal bug\n"); temp(); }void die_read() { if (errno == error_nomem) die_nomem(); substdio_putsflush(subfderr,"qmail-inject: fatal: read error\n"); temp(); }void doordie(sa,r) stralloc *sa; int r; { if (r == 1) return; if (r == -1) die_nomem(); substdio_putsflush(subfderr,"qmail-inject: fatal: unable to parse this line:\n"); substdio_putflush(subfderr,sa->s,sa->len); perm(); }GEN_ALLOC_typedef(saa,stralloc,sa,len,a)GEN_ALLOC_readyplus(saa,stralloc,sa,len,a,i,n,x,10,saa_readyplus)static stralloc sauninit = {0};saa savedh = {0};saa hrlist = {0};saa tocclist = {0};saa hrrlist = {0};saa reciplist = {0};int flagresent;void exitnicely(){ char *qqx; if (!flagqueue) substdio_flush(subfdout); if (flagqueue)  {   int i;   if (!stralloc_0(&sender)) die_nomem();   qmail_from(&qqt,sender.s);   for (i = 0;i < reciplist.len;++i)    {     if (!stralloc_0(&reciplist.sa[i])) die_nomem();     qmail_to(&qqt,reciplist.sa[i].s);    }   if (flagrh)     if (flagresent)       for (i = 0;i < hrrlist.len;++i)	{         if (!stralloc_0(&hrrlist.sa[i])) die_nomem();	 qmail_to(&qqt,hrrlist.sa[i].s);	}     else       for (i = 0;i < hrlist.len;++i)	{         if (!stralloc_0(&hrlist.sa[i])) die_nomem();	 qmail_to(&qqt,hrlist.sa[i].s);	}   qqx = qmail_close(&qqt);   if (*qqx)     if (*qqx == 'D') {       substdio_puts(subfderr,"qmail-inject: fatal: ");       substdio_puts(subfderr,qqx + 1);       substdio_puts(subfderr,"\n");       substdio_flush(subfderr);       perm();     }     else {       substdio_puts(subfderr,"qmail-inject: fatal: ");       substdio_puts(subfderr,qqx + 1);       substdio_puts(subfderr,"\n");       substdio_flush(subfderr);       temp();     }  } _exit(0);}void savedh_append(h)stralloc *h;{ if (!saa_readyplus(&savedh,1)) die_nomem(); savedh.sa[savedh.len] = sauninit; if (!stralloc_copy(savedh.sa + savedh.len,h)) die_nomem(); ++savedh.len;}void savedh_print(){ int i; for (i = 0;i < savedh.len;++i)   put(savedh.sa[i].s,savedh.sa[i].len);}stralloc defaultdomainbuf = {0};

//	defaultdomain 用來向那些沒有使用正確的username@hostname.domain格式的郵件中增加
//郵件地址的,默認(rèn)情況下,如果主機地址中沒有結(jié)束符".",qmail-inject將給主機名后面
//添加defaultdomain的內(nèi)容,如果該文件不存在,將使用me文件中的值代替token822_alloc defaultdomain = {0};stralloc defaulthostbuf = {0};

//	用來定義主機名,用來向地址中不含主機名的郵件補足郵件地址的。類似與defaultdomaintoken822_alloc defaulthost = {0};stralloc plusdomainbuf = {0};

//	用來將其值添加在任何一個以一個+號結(jié)尾的地址token822_alloc plusdomain = {0};void rwroute(addr)token822_alloc *addr;{ if (addr->t[addr->len - 1].type == TOKEN822_AT)   while (addr->len)     if (addr->t[--addr->len].type == TOKEN822_COLON)       return;}void rwextraat(addr)token822_alloc *addr;{ int i; if (addr->t[0].type == TOKEN822_AT)  {   --addr->len;   for (i = 0;i < addr->len;++i)     addr->t[i] = addr->t[i + 1];  }}void rwextradot(addr)token822_alloc *addr;{ int i; if (addr->t[0].type == TOKEN822_DOT)  {   --addr->len;   for (i = 0;i < addr->len;++i)     addr->t[i] = addr->t[i + 1];  }}void rwnoat(addr)token822_alloc *addr;{ int i; int shift; for (i = 0;i < addr->len;++i)   if (addr->t[i].type == TOKEN822_AT)     return; shift = defaulthost.len; if (!token822_readyplus(addr,shift)) die_nomem(); for (i = addr->len - 1;i >= 0;--i)   addr->t[i + shift] = addr->t[i]; addr->len += shift; for (i = 0;i < shift;++i)   addr->t[i] = defaulthost.t[shift - 1 - i];}void rwnodot(addr)token822_alloc *addr;{ int i; int shift; for (i = 0;i < addr->len;++i)  {   if (addr->t[i].type == TOKEN822_DOT)     return;   if (addr->t[i].type == TOKEN822_AT)     break;  } for (i = 0;i < addr->len;++i)  {   if (addr->t[i].type == TOKEN822_LITERAL)     return;   if (addr->t[i].type == TOKEN822_AT)     break;  } shift = defaultdomain.len; if (!token822_readyplus(addr,shift)) die_nomem(); for (i = addr->len - 1;i >= 0;--i)   addr->t[i + shift] = addr->t[i]; addr->len += shift; for (i = 0;i < shift;++i)   addr->t[i] = defaultdomain.t[shift - 1 - i];}void rwplus(addr)token822_alloc *addr;{ int i; int shift; if (addr->t[0].type != TOKEN822_ATOM) return; if (!addr->t[0].slen) return; if (addr->t[0].s[addr->t[0].slen - 1] != '+') return; --addr->t[0].slen; /* remove + */ shift = plusdomain.len; if (!token822_readyplus(addr,shift)) die_nomem(); for (i = addr->len - 1;i >= 0;--i)   addr->t[i + shift] = addr->t[i]; addr->len += shift; for (i = 0;i < shift;++i)   addr->t[i] = plusdomain.t[shift - 1 - i];}void rwgeneric(addr)token822_alloc *addr;{ if (!addr->len) return; /* don't rewrite <> */ if (addr->len >= 2)   if (addr->t[1].type == TOKEN822_AT)     if (addr->t[0].type == TOKEN822_LITERAL)       if (!addr->t[0].slen) /* don't rewrite <foo@[]> */	 return; rwroute(addr); if (!addr->len) return; /* <@foo:> -> <> */ rwextradot(addr); if (!addr->len) return; /* <.> -> <> */ rwextraat(addr); if (!addr->len) return; /* <@> -> <> */ rwnoat(addr); rwplus(addr); rwnodot(addr);}int setreturn(addr)token822_alloc *addr;{ if (!sender.s)  {   token822_reverse(addr);   if (token822_unquote(&sender,addr) != 1) die_nomem();   if (flaghackrecip)     if (!stralloc_cats(&sender,"-@[]")) die_nomem();   token822_reverse(addr);  } return 1;}int rwreturn(addr)token822_alloc *addr;{ rwgeneric(addr); setreturn(addr); return 1;}int rwsender(addr)token822_alloc *addr;{ rwgeneric(addr); return 1;}void rwappend(addr,xl)token822_alloc *addr;saa *xl;{ token822_reverse(addr); if (!saa_readyplus(xl,1)) die_nomem(); xl->sa[xl->len] = sauninit; if (token822_unquote(&xl->sa[xl->len],addr) != 1) die_nomem(); ++xl->len; token822_reverse(addr);}int rwhrr(addr) token822_alloc *addr;{ rwgeneric(addr); rwappend(addr,&hrrlist); return 1; }int rwhr(addr) token822_alloc *addr;{ rwgeneric(addr); rwappend(addr,&hrlist); return 1; }int rwtocc(addr) token822_alloc *addr;{ rwgeneric(addr); rwappend(addr,&hrlist); rwappend(addr,&tocclist); return 1; }int htypeseen[H_NUM];stralloc hfbuf = {0};token822_alloc hfin = {0};token822_alloc hfrewrite = {0};token822_alloc hfaddr = {0};void doheaderfield(h)stralloc *h;{  int htype;  int (*rw)() = 0;   htype = hfield_known(h->s,h->len);  if (flagdeletefrom) if (htype == H_FROM) return;  if (flagdeletemessid) if (htype == H_MESSAGEID) return;  if (flagdeletesender) if (htype == H_RETURNPATH) return;   if (htype)    htypeseen[htype] = 1;  else    if (!hfield_valid(h->s,h->len))      die_invalid(h);   switch(htype) {    case H_TO: case H_CC:      rw = rwtocc; break;    case H_BCC: case H_APPARENTLYTO:      rw = rwhr; break;    case H_R_TO: case H_R_CC: case H_R_BCC:      rw = rwhrr; break;    case H_RETURNPATH:      rw = rwreturn; break;    case H_SENDER: case H_FROM: case H_REPLYTO:    case H_RETURNRECEIPTTO: case H_ERRORSTO:    case H_R_SENDER: case H_R_FROM: case H_R_REPLYTO:      rw = rwsender; break;  }  if (rw) {    doordie(h,token822_parse(&hfin,h,&hfbuf));    doordie(h,token822_addrlist(&hfrewrite,&hfaddr,&hfin,rw));    if (token822_unparse(h,&hfrewrite,LINELEN) != 1)      die_nomem();  }   if (htype == H_BCC) return;  if (htype == H_R_BCC) return;  if (htype == H_RETURNPATH) return;  if (htype == H_CONTENTLENGTH) return; /* some things are just too stupid */  savedh_append(h);}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美精品vⅰdeose4hd| 五月婷婷久久综合| 五月天亚洲精品| 国产不卡一区视频| 中文字幕一区二区在线播放| 一区二区三区四区激情| 国产乱码精品一区二区三区忘忧草 | 欧美性猛交xxxx乱大交退制版| 国产亚洲精品超碰| 日本在线观看不卡视频| 美女脱光内衣内裤视频久久影院| 国产一区二区三区观看| 欧美色图片你懂的| 国产精品色婷婷| 99re视频精品| 91麻豆成人久久精品二区三区| 欧美日韩mp4| 久久成人免费电影| 欧美日韩国产天堂| 一区二区三区欧美视频| 欧美三级中文字幕在线观看| 精品国产乱码久久久久久老虎| 久久99久久99| 国产精品青草久久| 欧美亚洲丝袜传媒另类| 国产精品国产三级国产普通话蜜臀 | 国产成人日日夜夜| 欧美a一区二区| 亚洲第一福利一区| 一级特黄大欧美久久久| 亚洲国产岛国毛片在线| 久久青草国产手机看片福利盒子| 日韩一区二区精品在线观看| 欧洲一区二区三区免费视频| 色婷婷综合久久| 91在线播放网址| 91丨九色丨尤物| 91色porny| 一本大道久久a久久精二百| 成人av电影免费观看| 丁香六月久久综合狠狠色| 国产99久久久久久免费看农村| 国产一区激情在线| 国产一区二区三区四| 国产一区二区精品在线观看| 国产在线国偷精品免费看| 久久99久久99| 国产一区二三区| 国产精一区二区三区| 国产成人在线看| 波多野结衣亚洲| 99精品国产视频| 色综合激情五月| 欧洲生活片亚洲生活在线观看| 欧美专区亚洲专区| 欧美一区二区三区色| 欧美mv日韩mv国产网站| 国产亚洲精品7777| 亚洲欧美另类久久久精品2019| 亚洲综合视频在线| 日韩高清在线不卡| 国产精品亚洲一区二区三区在线 | 久久久久亚洲蜜桃| 国产精品热久久久久夜色精品三区| 国产精品欧美一区喷水| 亚洲男人电影天堂| 日韩制服丝袜av| 国产乱码精品一品二品| 91视频com| 制服视频三区第一页精品| 久久久影院官网| 亚洲欧美中日韩| 亚洲国产aⅴ成人精品无吗| 日本不卡123| 东方欧美亚洲色图在线| 91久久人澡人人添人人爽欧美 | 久久日韩精品一区二区五区| 国产精品素人一区二区| 亚洲一区在线观看视频| 精品亚洲成a人在线观看 | 91精品国产免费| 久久久精品影视| 亚洲午夜久久久久久久久久久| 蜜臀99久久精品久久久久久软件| 丁香六月综合激情| 欧美一级日韩一级| 国产精品国产三级国产普通话三级 | 国产亚洲综合在线| 一区二区三区中文在线观看| 麻豆精品视频在线| 色一情一乱一乱一91av| 欧美videossexotv100| 亚洲免费av在线| 国产精品一区二区在线看| 欧亚洲嫩模精品一区三区| 久久久99精品久久| 亚洲mv在线观看| 99re热这里只有精品免费视频| 制服丝袜激情欧洲亚洲| 亚洲人午夜精品天堂一二香蕉| 日本视频一区二区| 在线观看不卡视频| 国产精品成人午夜| 国产综合久久久久久鬼色 | 日本成人在线电影网| 99久久99久久免费精品蜜臀| 精品成人私密视频| 首页国产欧美久久| 日本道在线观看一区二区| 国产日韩欧美一区二区三区综合| 五月激情综合色| 欧美一区二区精品在线| 日本伊人午夜精品| k8久久久一区二区三区 | 91高清视频在线| 国产婷婷色一区二区三区四区| 亚洲丰满少妇videoshd| 99re在线精品| 国产欧美日韩精品在线| 免费成人性网站| 欧美日韩亚洲综合一区二区三区| 国产精品久久久久久久久久久免费看 | 国产精品一级黄| 精品少妇一区二区三区视频免付费| 亚洲高清三级视频| 色一情一伦一子一伦一区| 亚洲欧美综合网| 不卡的av中国片| 国产精品美女久久久久久久久久久 | 国产成人高清在线| 久久久久久久久蜜桃| 九色|91porny| 精品国产一区二区精华| 美女视频一区二区| 欧美一区二区精品在线| 免费成人小视频| 精品三级av在线| 精品一区二区三区在线播放视频| 欧美一卡2卡3卡4卡| 免费观看在线色综合| 日韩三级伦理片妻子的秘密按摩| 亚洲第一狼人社区| 欧美日本一区二区三区| 日韩中文欧美在线| 精品欧美久久久| 国产麻豆精品95视频| 国产欧美日韩激情| kk眼镜猥琐国模调教系列一区二区| 国产精品亲子乱子伦xxxx裸| 99久久精品99国产精品| 一区二区三区欧美在线观看| 欧美三级韩国三级日本一级| 午夜av区久久| 精品国产乱码久久久久久图片 | 日韩欧美在线综合网| 久久97超碰色| 欧美经典一区二区| 99re这里只有精品视频首页| 亚洲一二三区在线观看| 91精品国产91久久综合桃花 | www.亚洲色图| 亚洲综合清纯丝袜自拍| 欧美美女网站色| 精品午夜久久福利影院| 欧美激情在线看| 在线一区二区三区| 青娱乐精品在线视频| 国产女人水真多18毛片18精品视频 | 日韩一区二区三| 国产91丝袜在线观看| 伊人一区二区三区| 日韩一区二区三区在线视频| 国产成人h网站| 亚洲尤物视频在线| 欧美tk—视频vk| 色综合中文字幕| 美女视频黄频大全不卡视频在线播放| 精品国产免费视频| 91麻豆免费视频| 久久精品久久久精品美女| 国产精品成人网| 欧美电影免费观看完整版| 99久久伊人网影院| 日韩高清不卡一区二区| 中文字幕中文字幕在线一区| 欧美日韩一本到| 成人av中文字幕| 日韩激情一二三区| 亚洲欧洲国产专区| 精品国产网站在线观看| 色婷婷激情综合| 国产suv精品一区二区三区| 午夜视频一区在线观看| 欧美经典一区二区| 91精品国产黑色紧身裤美女| 91啪在线观看| 国产精品系列在线播放| 婷婷六月综合网| 亚洲视频一二区| 久久久亚洲午夜电影|