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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? qmail-smtpd.c

?? linux下qmail的源碼 本人加了一些注釋
?? C
?? 第 1 頁 / 共 2 頁
字號:
//	qmail-smtpd接受遠程主機的郵件并轉交給隊列處理程序qmail-queue來處理
//	由tcp-env.c啟動,完成郵件smtp命令的接收,并調用相應的處理程序
//	只接收郵件內容(mailfrom,mailto)并傳送給qmail-queue,并不對郵件進行轉發

#include "sig.h"#include "readwrite.h"#include "stralloc.h"#include "substdio.h"#include "alloc.h"#include "auto_qmail.h"#include "control.h"#include "received.h"#include "constmap.h"#include "error.h"#include "ipme.h"#include "ip.h"#include "qmail.h"#include "str.h"#include "fmt.h"#include "scan.h"#include "byte.h"#include "case.h"#include "env.h"#include "now.h"#include "exit.h"#include "rcpthosts.h"#include "timeoutread.h"#include "timeoutwrite.h"#include "commands.h"#define MAXHOPS 100unsigned int databytes = 0;		//郵件最大長度:0=無限int timeout = 1200;		//默認超時20分鐘
//	向網絡寫,超時值為control/timeoutsmtpd指定的值,沒有這個文件則取默認值20分鐘int safewrite(fd,buf,len) int fd; char *buf; int len;{  int r;  r = timeoutwrite(timeout,fd,buf,len);  if (r <= 0) _exit(1);  return r;}char ssoutbuf[512];substdio ssout = SUBSTDIO_FDBUF(safewrite,1,ssoutbuf,sizeof ssoutbuf);void flush() { substdio_flush(&ssout); }

//	void out(s) char *s 相當于 void out(char* s)void out(s) char *s; { substdio_puts(&ssout,s); }
//	錯誤處理函數void die_read() { _exit(1); }void die_alarm() { out("451 timeout (#4.4.2)\r\n"); flush(); _exit(1); }void die_nomem() { out("421 out of memory (#4.3.0)\r\n"); flush(); _exit(1); }void die_control() { out("421 unable to read controls (#4.3.0)\r\n"); flush(); _exit(1); }void die_ipme() { out("421 unable to figure out my IP addresses (#4.3.0)\r\n"); flush(); _exit(1); }void straynewline() { out("451 See http://pobox.com/~djb/docs/smtplf.html.\r\n"); flush(); _exit(1); }void err_bmf() { out("553 sorry, your envelope sender is in my badmailfrom list (#5.7.1)\r\n"); }void err_nogateway() { out("553 sorry, that domain isn't in my list of allowed rcpthosts (#5.7.1)\r\n"); }void err_unimpl() { out("502 unimplemented (#5.5.1)\r\n"); }void err_syntax() { out("555 syntax error (#5.5.4)\r\n"); }void err_wantmail() { out("503 MAIL first (#5.5.1)\r\n"); }void err_wantrcpt() { out("503 RCPT first (#5.5.1)\r\n"); }void err_noop() { out("250 ok\r\n"); }void err_vrfy() { out("252 send some mail, i'll try my best\r\n"); }void err_qqt() { out("451 qqt failure (#4.3.0)\r\n"); }stralloc greeting = {0};//end 錯誤處理函數
//	輸出提示信息*codevoid smtp_greet(code) char *code;{  substdio_puts(&ssout,code);  substdio_put(&ssout,greeting.s,greeting.len);}void smtp_help(){  out("214 qmail home page: http://pobox.com/~djb/qmail.html\r\n");}void smtp_quit(){  smtp_greet("221 "); out("\r\n"); flush(); _exit(0);}char *remoteip;	//遠端ip地址char *remotehost;	//遠端主機名char *remoteinfo;	//遠端信息char *local;	//本地主機char *relayclient;	//是否檢查rcpthosts文件stralloc helohost = {0};char *fakehelo; /* pointer into helohost, or 0 */void dohelo(arg) char *arg; {  if (!stralloc_copys(&helohost,arg)) die_nomem();   if (!stralloc_0(&helohost)) die_nomem(); 

  //fakehelo變量,如果helo參數指定的主機名與TCPREMOTEHOST環境變量中的主機名不同則
  //fakehelo的值為helo命令的參數指定的主機名。如果兩者相同則fekehelo為NULL;
  //data命令處理程式用到這個變量  fakehelo = case_diffs(remotehost,helohost.s) ? helohost.s : 0;}int liphostok = 0;stralloc liphost = {0};int bmfok = 0;

//	badmailfrom 用來指定不喜歡的發見人的郵件地址或者是域名
//該地址給主機發送郵件時將得到code 553,告知其是不受歡迎的發件人stralloc bmf = {0};		struct constmap mapbmf;void setup(){  char *x;  unsigned long u;   if (control_init() == -1) die_control();	//control/me

  //讀入歡迎信息greeting,如果不存在則從me文件復制  if (control_rldef(&greeting,"control/smtpgreeting",1,(char *) 0) != 1)    die_control();

  //讀入localiphost,如果文件不存在則從me文件復制  liphostok = control_rldef(&liphost,"control/localiphost",1,(char *) 0);  if (liphostok == -1) die_control();

  //讀control/timeoutsmtpd存入timeout,用于控制超時的情況  if (control_readint(&timeout,"control/timeoutsmtpd") == -1) die_control();  if (timeout <= 0) timeout = 1;  if (rcpthosts_init() == -1) die_control();
  //讀入badmailfrom文件存入bmf  bmfok = control_readfile(&bmf,"control/badmailfrom",0);  if (bmfok == -1) die_control();  if (bmfok)    if (!constmap_init(&mapbmf,bmf.s,bmf.len,0)) die_nomem(); 
  //讀入databytes文件存入databytes,如果該文件不存在,則將databytes的值設為0.  if (control_readint(&databytes,"control/databytes") == -1) die_control();  x = env_get("DATABYTES");  if (x) { scan_ulong(x,&u); databytes = u; }  if (!(databytes + 1)) --databytes; 
  //取tcp-environ環境變量,如果環境變量沒有設置,將它的值設置為unknow
  //這些信息在tcp-env文件中  remoteip = env_get("TCPREMOTEIP");  if (!remoteip) remoteip = "unknown";  local = env_get("TCPLOCALHOST");  if (!local) local = env_get("TCPLOCALIP");  if (!local) local = "unknown";  remotehost = env_get("TCPREMOTEHOST");  if (!remotehost) remotehost = "unknown";  remoteinfo = env_get("TCPREMOTEINFO");

  //從環境變量RELAYCLIENT讀入,如果RELAYCLIENT變量沒有設置那么relayclient將會是NULL  relayclient = env_get("RELAYCLIENT");  dohelo(remotehost);}stralloc addr = {0}; /* will be 0-terminated, if addrparse returns 1 */
//對命令參數arg進行郵件地址分析,并將分離出的email地址存入全局緩存addr,成功返回值1,
//失敗返回0int addrparse(arg)char *arg;{  int i;  char ch;  char terminator;  struct ip_address ip;  int flagesc;  int flagquoted; 
  //分離出郵件地址,例如:arg="",或arg=": email@eg.org"
  //執行下面這段程序后arg="email@eg.org"  terminator = '>';  i = str_chr(arg,'<');  if (arg[i])    arg += i + 1;  else { /* partner should go read rfc 821 */    terminator = ' ';    arg += str_chr(arg,':');    if (*arg == ':') ++arg;    while (*arg == ' ') ++arg;  }  /* strip source route */  if (*arg == '@') while (*arg) if (*arg++ == ':') break;  if (!stralloc_copys(&addr,"")) die_nomem();  flagesc = 0;  flagquoted = 0;  for (i = 0;ch = arg[i];++i) { /* copy arg to addr, stripping quotes */    if (flagesc) {      if (!stralloc_append(&addr,&ch)) die_nomem();      flagesc = 0;    }    else {      if (!flagquoted && (ch == terminator)) break;      switch(ch) {        case '\\': flagesc = 1; break;        case '"': flagquoted = !flagquoted; break;        default: if (!stralloc_append(&addr,&ch)) die_nomem();      }    }  }  /* could check for termination failure here, but why bother? */  if (!stralloc_append(&addr,"")) die_nomem();
  //將ip地址轉換為主機名:
  //如test@[10.0.6.21]轉換為test@host.mydomain.org
  //依據是control/localiphost文件中有host.mydomain.org  if (liphostok) {    i = byte_rchr(addr.s,addr.len,'@');    if (i < addr.len) /* if not, partner should go read rfc 821 */      if (addr.s[i + 1] == '[')		//比較是否是用[]括起來的ip地址        if (!addr.s[i + 1 + ip_scanbracket(addr.s + i + 1,&ip)])          if (ipme_is(&ip)) {            addr.len = i + 1;            if (!stralloc_cat(&addr,&liphost)) die_nomem();            if (!stralloc_0(&addr)) die_nomem();          }  }  if (addr.len > 900) return 0;		//地址太長,出錯返回  return 1;		//成功返回}
//簡單的垃圾郵件檢查,檢查全局緩沖區addr中的地址是否有在badmailfrom中定義,如果
//有則返回1,否則返回0.int bmfcheck(){  int j;  if (!bmfok) return 0;  if (constmap(&mapbmf,addr.s,addr.len - 1)) return 1;  j = byte_rchr(addr.s,addr.len,'@');  if (j < addr.len)    if (constmap(&mapbmf,addr.s + j,addr.len - j - 1)) return 1;  return 0;}
//檢查全局緩存addr中的郵件地址是否要進行轉發(依據control/rcpthosts文件)
//可以進行轉發返回1,拒絕轉發返回0int addrallowed(){  int r;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99re6这里只有精品视频在线观看| 五月激情综合婷婷| 国产激情视频一区二区在线观看 | 精品久久久久久无| 视频一区免费在线观看| 欧美视频一区二| 亚洲综合一区二区| 欧洲精品一区二区三区在线观看| 最新高清无码专区| 91性感美女视频| 亚洲日本欧美天堂| 日本高清不卡视频| 亚洲精品视频在线观看网站| 91老师国产黑色丝袜在线| 中文字幕av免费专区久久| 国产91清纯白嫩初高中在线观看| 国产欧美在线观看一区| 丰满白嫩尤物一区二区| 国产精品私房写真福利视频| 成人av电影在线网| 亚洲欧美日韩中文字幕一区二区三区| 91老师国产黑色丝袜在线| 一区二区三区在线视频播放| 欧美日韩视频在线一区二区| 日本中文字幕一区二区有限公司| 日韩欧美精品在线视频| 国精产品一区一区三区mba桃花| 久久久三级国产网站| 国产福利一区二区三区视频 | 中文字幕一区av| 欧美专区日韩专区| 亚洲伊人伊色伊影伊综合网| 91精品国产一区二区人妖| 老司机免费视频一区二区三区| 久久精品男人的天堂| 91美女蜜桃在线| 青青草原综合久久大伊人精品优势 | 欧美久久久久免费| 国内精品久久久久影院一蜜桃| 国产精品国产三级国产专播品爱网| 91亚洲国产成人精品一区二区三| 亚洲一区二区影院| 久久综合久久99| 色综合天天狠狠| 日本aⅴ精品一区二区三区 | 成人一区二区三区视频在线观看| 一区二区三区国产精品| 精品黑人一区二区三区久久| 91在线观看地址| 奇米一区二区三区| 亚洲美女电影在线| 久久综合九色综合97婷婷女人 | 日韩在线卡一卡二| 中文字幕精品一区| 5858s免费视频成人| 成人久久久精品乱码一区二区三区| 亚洲午夜久久久久中文字幕久| 2017欧美狠狠色| 欧美日韩高清一区二区不卡 | 亚洲天堂免费看| 欧美电影免费观看高清完整版在线| 91在线丨porny丨国产| 蜜乳av一区二区| 中文字幕在线不卡视频| 91激情五月电影| 国产91对白在线观看九色| 日韩高清在线电影| 亚洲视频精选在线| 精品国产一区二区精华| 色综合视频在线观看| 国产成人鲁色资源国产91色综| 午夜精品一区二区三区免费视频| 久久影院视频免费| 欧美日韩一区视频| 不卡视频在线看| 日av在线不卡| 亚洲精品第1页| 国产三级久久久| 欧美日韩一区二区三区四区五区| www.欧美日韩| 国产成人亚洲精品狼色在线| 久久99精品国产麻豆不卡| 男人的天堂久久精品| 亚洲主播在线观看| 一区二区三区四区不卡在线| 亚洲欧美激情一区二区| 欧美精品一区二区三区久久久 | 欧美巨大另类极品videosbest | 国产精品久久久久久亚洲毛片 | 激情文学综合丁香| 免费观看91视频大全| 亚洲二区视频在线| 樱花草国产18久久久久| 亚洲免费观看在线观看| 国产精品大尺度| 欧美mv和日韩mv国产网站| 7777精品伊人久久久大香线蕉的| 色综合网色综合| 99久久精品国产一区二区三区| www.亚洲色图.com| av一区二区不卡| 国产成人av网站| 国产一区999| 成人自拍视频在线观看| av在线不卡电影| 日本精品视频一区二区| 欧洲人成人精品| 在线播放欧美女士性生活| 欧美群妇大交群中文字幕| 91精品国产欧美一区二区| 日韩一区二区电影| 亚洲精品一线二线三线| 国产日韩欧美综合一区| 亚洲丝袜自拍清纯另类| 亚洲丝袜制服诱惑| 日本不卡一区二区三区| 日韩精品每日更新| 日精品一区二区三区| 老司机精品视频线观看86| 精品一区二区三区蜜桃| 狠狠色综合色综合网络| av一区二区三区在线| 7777精品伊人久久久大香线蕉的| 日韩欧美在线一区二区三区| 国产调教视频一区| 一区二区三区在线高清| 日韩精品一级中文字幕精品视频免费观看 | 久久精品一级爱片| 亚洲天堂免费看| 日本不卡一区二区三区| 国产成人精品影院| 欧美男人的天堂一二区| 久久色在线视频| 一区二区三区四区精品在线视频| 美女国产一区二区| 91啪在线观看| 2023国产精品视频| 一二三四区精品视频| 国产一区福利在线| 91视频www| 精品久久久久一区二区国产| 国产日韩欧美精品一区| 午夜国产精品一区| 成人黄色小视频| 日韩欧美www| 欧美国产一区二区| 日本vs亚洲vs韩国一区三区二区 | 亚洲精品免费一二三区| 麻豆一区二区三区| 欧美自拍偷拍午夜视频| 国产丝袜欧美中文另类| 免费欧美高清视频| 欧美影视一区在线| 中文字幕欧美区| 毛片一区二区三区| 欧美日韩在线一区二区| 亚洲私人黄色宅男| 国产jizzjizz一区二区| 欧美酷刑日本凌虐凌虐| 亚洲人成伊人成综合网小说| 国产综合久久久久影院| 欧美精三区欧美精三区| 国产精品福利一区| 狠狠色丁香久久婷婷综合_中| 欧美人妇做爰xxxⅹ性高电影| 国产精品福利一区二区三区| 国产主播一区二区| 宅男在线国产精品| 亚洲欧美自拍偷拍色图| 奇米影视一区二区三区| 精品视频一区三区九区| 国产精品国模大尺度视频| 国产原创一区二区三区| 日韩欧美你懂的| 天天免费综合色| 欧美伦理电影网| 亚洲第一成人在线| 欧美影视一区在线| 亚洲综合小说图片| 色综合中文字幕| 一区二区三区不卡视频 | 国产精品久久久久久久久图文区| 激情文学综合插| 精品日韩在线观看| 激情综合五月婷婷| 久久久亚洲综合| 夫妻av一区二区| 国产精品网曝门| 99精品欧美一区| 亚洲精品国产a久久久久久| 久久电影网电视剧免费观看| 欧美一卡二卡在线观看| 国产在线精品免费| 国产精品丝袜一区| 色哟哟一区二区三区| 日本在线观看不卡视频| 国产亚洲精品精华液| 91黄色激情网站| 免费观看一级特黄欧美大片| 中文字幕精品三区|