qmail-local代码分析[7]

[入库:2005年9月21日] [更新:2007年3月24日]

本文简介:

 if (!stralloc_cats(&envrecip,"@")) temp_nomem();
 if (!stralloc_cats(&envrecip,host)) temp_nomem();
//将envrecip->s加'Z'拷到foo->s.
 if (!stralloc_copy(&foo,&envrecip)) temp_nomem();
//#define stralloc_0(sa) stralloc_append(sa,"")
//GEN_ALLOC_append(stralloc,char,s,len,a,i,n,x,30,stralloc_readyplus,stralloc_append) 
//struct stralloc{char *s;int len;int a;},len是s的长度,a是总共分配的空间。 
//stralloc_ready(x,n)作用是:x没有分配空间就分配n大小空间。已分配了且空间小于n就扩大空间 
//stralloc_readyplus(x,n)作用是:x没有分配空间就分配n大小空间。分配给x的空间小于x->len+n,就扩大空间 
 if (!stralloc_0(&foo)) temp_nomem();
//将"RECIPIENT"和foo.s结合为"RECIPIENT="+foo.s,加到environ后面。下同
//信封上接收者的地址  
 if (!env_put2("RECIPIENT",foo.s)) temp_nomem();
//邮件头Delivered-To部分 
 if (!stralloc_copys(&dtline,"Delivered-To:; ")) temp_nomem();
 if (!stralloc_cat(&dtline,&envrecip)) temp_nomem();
 for (i = 0;i < dtline.len;++i) if (dtline.s[i] == '\n') dtline.s[i] = '_';
 if (!stralloc_cats(&dtline,"\n")) temp_nomem();

 if (!stralloc_copy(&foo,&dtline)) temp_nomem();
 if (!stralloc_0(&foo)) temp_nomem();
 if (!env_put2("DTLINE",foo.s)) temp_nomem();

 if (flagdoit)
   bouncexf();
//将"SENDER"和sender结合为"SENDER="+sender,加到environ后面。
// 信封上发送者地址  
 if (!env_put2("SENDER",sender)) temp_nomem();
//将"RPLINE"和"Return-Path:;<"+"SENDER"+sender+">\n"结合后加入environ
 if (!quote2(&foo,sender)) temp_nomem();
 if (!stralloc_copys(&rpline,"Return-Path:; <")) temp_nomem();
 if (!stralloc_cat(&rpline,&foo)) temp_nomem();
 for (i = 0;i < rpline.len;++i) if (rpline.s[i] == '\n') rpline.s[i] = '_';
 if (!stralloc_cats(&rpline,">\n")) temp_nomem();

 if (!stralloc_copy(&foo,&rpline)) temp_nomem();
 if (!stralloc_0(&foo)) temp_nomem();
//邮件头返回路径  
 if (!env_put2("RPLINE",foo.s)) temp_nomem();
//将"From"+*sender拷到ufline中。*sender为空,则将"From"+"MAILER-DAEMON"拷进去  
 if (!stralloc_copys(&ufline,"From ")) temp_nomem();
 if (*sender)
  {
   int len; int i; char ch;

   len = str_len(sender);
   if (!stralloc_readyplus(&ufline,len)) temp_nomem();
   for (i = 0;i < len;++i)
    {
     ch = sender[i];
     if ((ch == ' ') || (ch == '\t') || (ch == '\n')) ch = '-';
     ufline.s[ufline.len + i] = ch;
    }
   ufline.len += len;
  }
 else
   if (!stralloc_cats(&ufline,"MAILER-DAEMON")) temp_nomem();
 if (!stralloc_cats(&ufline," ")) temp_nomem();
 //在ufline后面加上现在时间。
 starttime = now();
 if (!stralloc_cats(&ufline,myctime(starttime))) temp_nomem();

 if (!stralloc_copy(&foo,&ufline)) temp_nomem();
 if (!stralloc_0(&foo)) temp_nomem();
//UUCP风格的"From"行它包含消息所参与的UUCP大宗
//路径形式的路由、最后一台接收消息的机器处理消息的时间和日期以及一

本文关键:qmail-local代码分析
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top