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

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

?? qmail-local.c

?? linux下qmail的源碼 本人加了一些注釋
?? C
?? 第 1 頁 / 共 2 頁
字號:
//向本地郵件系統(tǒng)上的用戶投遞消息

#include <sys/types.h>#include <sys/stat.h>#include "readwrite.h"#include "sig.h"#include "env.h"#include "byte.h"#include "exit.h"#include "fork.h"#include "open.h"#include "wait.h"#include "lock.h"#include "seek.h"#include "substdio.h"#include "getln.h"#include "strerr.h"#include "subfd.h"#include "sgetopt.h"#include "alloc.h"#include "error.h"#include "stralloc.h"#include "fmt.h"#include "str.h"#include "now.h"#include "case.h"#include "quote.h"#include "qmail.h"#include "slurpclose.h"#include "myctime.h"#include "gfrom.h"#include "auto_patrn.h"void usage() { strerr_die1x(100,"qmail-local: usage: qmail-local [ -nN ] user homedir local dash ext domain sender aliasempty"); }void temp_nomem() { strerr_die1x(111,"Out of memory. (#4.3.0)"); }void temp_rewind() { strerr_die1x(111,"Unable to rewind message. (#4.3.0)"); }void temp_childcrashed() { strerr_die1x(111,"Aack, child crashed. (#4.3.0)"); }void temp_fork() { strerr_die3x(111,"Unable to fork: ",error_str(errno),". (#4.3.0)"); }void temp_read() { strerr_die3x(111,"Unable to read message: ",error_str(errno),". (#4.3.0)"); }void temp_slowlock(){ strerr_die1x(111,"File has been locked for 30 seconds straight. (#4.3.0)"); }void temp_qmail(fn) char *fn;{ strerr_die5x(111,"Unable to open ",fn,": ",error_str(errno),". (#4.3.0)"); }int flagdoit;int flag99;char *user;char *homedir;char *local;char *dash;char *ext;char *host;char *sender;char *aliasempty;stralloc safeext = {0};stralloc ufline = {0};stralloc rpline = {0};stralloc envrecip = {0};stralloc dtline = {0};stralloc qme = {0};stralloc ueo = {0};stralloc cmds = {0};stralloc messline = {0};stralloc foo = {0};char buf[1024];char outbuf[1024];/* child process */char fntmptph[80 + FMT_ULONG * 2];char fnnewtph[80 + FMT_ULONG * 2];void tryunlinktmp() { unlink(fntmptph); }void sigalrm() { tryunlinktmp(); _exit(3); }void maildir_child(dir)char *dir;{ unsigned long pid; unsigned long time; char host[64]; char *s; int loop; struct stat st; int fd; substdio ss; substdio ssout; sig_alarmcatch(sigalrm); if (chdir(dir) == -1) { if (error_temp(errno)) _exit(1); _exit(2); } pid = getpid(); host[0] = 0; gethostname(host,sizeof(host)); for (loop = 0;;++loop)  {   time = now();   s = fntmptph;   s += fmt_str(s,"tmp/");   s += fmt_ulong(s,time); *s++ = '.';   s += fmt_ulong(s,pid); *s++ = '.';   s += fmt_strn(s,host,sizeof(host)); *s++ = 0;   if (stat(fntmptph,&st) == -1) if (errno == error_noent) break;   /* really should never get to this point */   if (loop == 2) _exit(1);   sleep(2);  } str_copy(fnnewtph,fntmptph); byte_copy(fnnewtph,3,"new"); alarm(86400); fd = open_excl(fntmptph); if (fd == -1) _exit(1); substdio_fdbuf(&ss,read,0,buf,sizeof(buf)); substdio_fdbuf(&ssout,write,fd,outbuf,sizeof(outbuf)); if (substdio_put(&ssout,rpline.s,rpline.len) == -1) goto fail; if (substdio_put(&ssout,dtline.s,dtline.len) == -1) goto fail; switch(substdio_copy(&ssout,&ss))  {   case -2: tryunlinktmp(); _exit(4);   case -3: goto fail;  } if (substdio_flush(&ssout) == -1) goto fail; if (fsync(fd) == -1) goto fail; if (close(fd) == -1) goto fail; /* NFS dorks */ if (link(fntmptph,fnnewtph) == -1) goto fail;   /* if it was error_exist, almost certainly successful; i hate NFS */ tryunlinktmp(); _exit(0); fail: tryunlinktmp(); _exit(1);}/* end child process */void maildir(fn)char *fn;{ int child; int wstat; if (seek_begin(0) == -1) temp_rewind(); switch(child = fork())  {   case -1:     temp_fork();   case 0:     maildir_child(fn);     _exit(111);  } wait_pid(&wstat,child); if (wait_crashed(wstat))   temp_childcrashed(); switch(wait_exitcode(wstat))  {   case 0: break;   case 2: strerr_die1x(111,"Unable to chdir to maildir. (#4.2.1)");   case 3: strerr_die1x(111,"Timeout on maildir delivery. (#4.3.0)");   case 4: strerr_die1x(111,"Unable to read message. (#4.3.0)");   default: strerr_die1x(111,"Temporary error on maildir delivery. (#4.3.0)");  }}void mailfile(fn)char *fn;{ int fd; substdio ss; substdio ssout; int match; seek_pos pos; int flaglocked; if (seek_begin(0) == -1) temp_rewind(); fd = open_append(fn); if (fd == -1)   strerr_die5x(111,"Unable to open ",fn,": ",error_str(errno),". (#4.2.1)"); sig_alarmcatch(temp_slowlock); alarm(30); flaglocked = (lock_ex(fd) != -1); alarm(0); sig_alarmdefault(); seek_end(fd); pos = seek_cur(fd); substdio_fdbuf(&ss,read,0,buf,sizeof(buf)); substdio_fdbuf(&ssout,write,fd,outbuf,sizeof(outbuf)); if (substdio_put(&ssout,ufline.s,ufline.len)) goto writeerrs; if (substdio_put(&ssout,rpline.s,rpline.len)) goto writeerrs; if (substdio_put(&ssout,dtline.s,dtline.len)) goto writeerrs; for (;;)  {   if (getln(&ss,&messline,&match,'\n') != 0)     {     strerr_warn3("Unable to read message: ",error_str(errno),". (#4.3.0)",0);     if (flaglocked) seek_trunc(fd,pos); close(fd);     _exit(111);    }   if (!match && !messline.len) break;   if (gfrom(messline.s,messline.len))     if (substdio_bput(&ssout,">",1)) goto writeerrs;   if (substdio_bput(&ssout,messline.s,messline.len)) goto writeerrs;   if (!match)    {     if (substdio_bputs(&ssout,"\n")) goto writeerrs;     break;    }  } if (substdio_bputs(&ssout,"\n")) goto writeerrs; if (substdio_flush(&ssout)) goto writeerrs; if (fsync(fd) == -1) goto writeerrs; close(fd); return; writeerrs: strerr_warn5("Unable to write ",fn,": ",error_str(errno),". (#4.3.0)",0); if (flaglocked) seek_trunc(fd,pos); close(fd); _exit(111);}void mailprogram(prog)char *prog;{ int child; char *(args[4]); int wstat; if (seek_begin(0) == -1) temp_rewind(); switch(child = fork())  {   case -1:     temp_fork();   case 0:     args[0] = "/bin/sh"; args[1] = "-c"; args[2] = prog; args[3] = 0;     sig_pipedefault();     execv(*args,args);     strerr_die3x(111,"Unable to run /bin/sh: ",error_str(errno),". (#4.3.0)");  } wait_pid(&wstat,child); if (wait_crashed(wstat))   temp_childcrashed(); switch(wait_exitcode(wstat))  {   case 100:   case 64: case 65: case 70: case 76: case 77: case 78: case 112: _exit(100);   case 0: break;   case 99: flag99 = 1; break;   default: _exit(111);  }}unsigned long mailforward_qp = 0;void mailforward(recips)char **recips;{ struct qmail qqt; char *qqx; substdio ss; int match; if (seek_begin(0) == -1) temp_rewind(); substdio_fdbuf(&ss,read,0,buf,sizeof(buf)); if (qmail_open(&qqt) == -1) temp_fork(); mailforward_qp = qmail_qp(&qqt); qmail_put(&qqt,dtline.s,dtline.len); do  {   if (getln(&ss,&messline,&match,'\n') != 0) { qmail_fail(&qqt); break; }   qmail_put(&qqt,messline.s,messline.len);  } while (match); qmail_from(&qqt,ueo.s); while (*recips) qmail_to(&qqt,*recips++); qqx = qmail_close(&qqt); if (!*qqx) return; strerr_die3x(*qqx == 'D' ? 100 : 111,"Unable to forward message: ",qqx + 1,".");}void bouncexf(){ int match; substdio ss; if (seek_begin(0) == -1) temp_rewind(); substdio_fdbuf(&ss,read,0,buf,sizeof(buf)); for (;;)  {   if (getln(&ss,&messline,&match,'\n') != 0) temp_read();   if (!match) break;   if (messline.len <= 1)     break;   if (messline.len == dtline.len)     if (!str_diffn(messline.s,dtline.s,dtline.len))       strerr_die1x(100,"This message is looping: it already has my Delivered-To line. (#5.4.6)");  }}void checkhome(){ struct stat st; if (stat(".",&st) == -1)   strerr_die3x(111,"Unable to stat home directory: ",error_str(errno),". (#4.3.0)"); if (st.st_mode & auto_patrn)   strerr_die1x(111,"Uh-oh: home directory is writable. (#4.7.0)"); if (st.st_mode & 01000)   if (flagdoit)     strerr_die1x(111,"Home directory is sticky: user is editing his .qmail file. (#4.2.1)");   else     strerr_warn1("Warning: home directory is sticky.",0);}int qmeox(dashowner)char *dashowner;{ struct stat st; if (!stralloc_copys(&qme,".qmail")) temp_nomem(); if (!stralloc_cats(&qme,dash)) temp_nomem(); if (!stralloc_cat(&qme,&safeext)) temp_nomem(); if (!stralloc_cats(&qme,dashowner)) temp_nomem(); if (!stralloc_0(&qme)) temp_nomem(); if (stat(qme.s,&st) == -1)  {   if (error_temp(errno)) temp_qmail(qme.s);   return -1;  } return 0;}int qmeexists(fd,cutable)int *fd;int *cutable;{  struct stat st;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一区中文日韩| 日韩精品影音先锋| 亚洲裸体xxx| 91蝌蚪porny成人天涯| 亚洲欧美日韩国产手机在线| av在线综合网| 亚洲国产成人av网| 在线电影国产精品| 久88久久88久久久| 中文字幕一区在线观看| 91成人看片片| 美女一区二区视频| 亚洲国产精品国自产拍av| 一本久道中文字幕精品亚洲嫩| 一区二区三区影院| 日韩免费观看高清完整版| 国产成人免费视| 亚洲精品美国一| 91精品国产综合久久久蜜臀粉嫩 | 久久久亚洲国产美女国产盗摄 | 欧美视频在线一区二区三区| 五月婷婷综合网| 久久综合久久综合久久综合| 白白色 亚洲乱淫| 午夜精品久久久久久久99樱桃| 精品三级在线观看| 色婷婷av一区二区三区gif| 日本免费新一区视频| 国产日产欧美一区二区三区| 欧美性淫爽ww久久久久无| 精品午夜一区二区三区在线观看| 国产精品久久久久aaaa| 日韩区在线观看| 一本色道久久综合亚洲aⅴ蜜桃| 捆绑调教美女网站视频一区| 国产精品视频第一区| 正在播放一区二区| 色哟哟一区二区三区| 极品少妇xxxx精品少妇偷拍| 一区二区三区中文字幕| 国产三级精品在线| 69堂亚洲精品首页| 91久久线看在观草草青青| 久久爱另类一区二区小说| 一二三四区精品视频| 亚洲国产精品精华液2区45| 欧美一区二区在线观看| 色婷婷香蕉在线一区二区| 国产成人av福利| 美女看a上一区| 亚洲福利视频一区二区| 国产精品久久久久久久久免费相片| 日韩亚洲欧美中文三级| 欧美吻胸吃奶大尺度电影| av网站一区二区三区| 激情小说欧美图片| 日产国产欧美视频一区精品| 一区二区三区高清不卡| 自拍偷拍国产精品| 欧美极品美女视频| 精品国产不卡一区二区三区| 91精品国产欧美日韩| 日本道免费精品一区二区三区| 成人免费视频视频| 国产乱码精品一区二区三区av | 一区二区欧美在线观看| 国产精品九色蝌蚪自拍| 国产日韩亚洲欧美综合| 久久久五月婷婷| 欧美电影免费观看高清完整版在| 在线观看欧美精品| 欧美吞精做爰啪啪高潮| 在线观看中文字幕不卡| 在线欧美小视频| 欧美伊人久久久久久久久影院| 91麻豆蜜桃一区二区三区| 99国产精品久| 色婷婷av一区二区三区大白胸| 在线视频欧美区| 欧美精品18+| 日韩一级免费一区| 精品福利一区二区三区 | 这里只有精品电影| 制服丝袜亚洲网站| 日韩欧美一级片| 久久精品综合网| 亚洲国产高清在线| 国产精品每日更新| 樱花影视一区二区| 亚洲一区二区免费视频| 亚洲成人激情av| 麻豆精品久久久| 国产suv精品一区二区6| 不卡一区二区三区四区| 欧美午夜寂寞影院| 欧美成人乱码一区二区三区| 欧美国产精品一区| 一片黄亚洲嫩模| 男男成人高潮片免费网站| 国产在线精品免费| 99国产精品久久久| 91精品午夜视频| 久久影音资源网| 国产精品久久久久永久免费观看 | 日韩欧美专区在线| 国产婷婷色一区二区三区四区| 国产精品国产三级国产aⅴ无密码| 亚洲综合999| 久久电影网站中文字幕 | 亚洲成人av在线电影| 久久97超碰色| 一本久久精品一区二区| 日韩一级免费观看| 亚洲欧美日韩国产综合在线| 日本不卡一区二区| 91在线高清观看| 日韩视频在线永久播放| 亚洲色图视频免费播放| 激情图片小说一区| 91亚洲精品久久久蜜桃网站| 日韩精品一区二区三区swag | 一色屋精品亚洲香蕉网站| 亚洲成人资源网| 波多野结衣欧美| 欧美一级理论片| 亚洲三级电影全部在线观看高清| 久久99精品久久只有精品| 在线免费观看成人短视频| 久久久久久麻豆| 日韩不卡手机在线v区| 91亚洲国产成人精品一区二区三| 欧美精品一区二区三区高清aⅴ | 国产亚洲午夜高清国产拍精品| 一区二区成人在线观看| 丰满白嫩尤物一区二区| 欧美v日韩v国产v| 亚洲一卡二卡三卡四卡无卡久久| 国产福利一区在线| 欧美一区二区三区思思人| 亚洲欧美日韩国产成人精品影院 | 亚洲第一搞黄网站| av电影在线观看完整版一区二区| 日韩欧美国产综合| 午夜精品久久久| 欧美最新大片在线看| 亚洲欧洲性图库| 国产不卡在线一区| 久久精品夜色噜噜亚洲a∨| 午夜精品久久久久久久久久 | 久久久影视传媒| 久久99精品网久久| 欧美电视剧免费观看| 天堂成人国产精品一区| 欧美日韩免费观看一区二区三区 | 亚洲午夜久久久久久久久电影院| 成人午夜在线播放| 欧美国产精品一区二区| 国产91丝袜在线18| 国产日产欧美一区二区视频| 国产福利91精品| 国产片一区二区| 高清国产一区二区三区| 国产亚洲欧美在线| 国产精品一区二区在线看| 久久久精品免费免费| 国产成人免费9x9x人网站视频| 久久夜色精品国产欧美乱极品| 黄色资源网久久资源365| 欧美精品一区二区三区久久久| 国产一区二区三区美女| 亚洲人成网站色在线观看| 99re8在线精品视频免费播放| 国产精品乱子久久久久| av资源网一区| 一区二区三区不卡视频 | 欧美哺乳videos| 国内精品伊人久久久久av影院| 久久综合色8888| 国产iv一区二区三区| 成人免费在线播放视频| 色悠悠亚洲一区二区| 天堂va蜜桃一区二区三区 | 成人午夜碰碰视频| 亚洲女与黑人做爰| 欧美日韩一二三区| 久久av老司机精品网站导航| 久久久噜噜噜久噜久久综合| 大白屁股一区二区视频| 亚洲精品国产品国语在线app| 欧美日韩一卡二卡| 久草中文综合在线| 中文字幕一区在线| 欧美在线视频你懂得| 免费欧美在线视频| 国产精品色哟哟| 欧美偷拍一区二区| 国产乱子伦视频一区二区三区 | 国产日韩成人精品| 91极品视觉盛宴| 老色鬼精品视频在线观看播放|