qmail-local代码分析[8]

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

本文简介:

//指明从哪台主机接收来的可选部分。由于每个处理过这个消息的系统都会生成这个字段,所
//以它通常包括在信封数据下。
 if (!env_put2("UFLINE",foo.s)) temp_nomem();
//到空行的作用是:如果ext为"aa-bb-cc-dd",则依次把"EXT=aa-bb-cc-dd","EXT2=bb-cc-dd","EXT3=cc-dd","EXT4=dd"加入
//地址扩展 
 x = ext;
 if (!env_put2("EXT",x)) temp_nomem();
 x += str_chr(x,'-'); if (*x) ++x;
 if (!env_put2("EXT2",x)) temp_nomem();
 x += str_chr(x,'-'); if (*x) ++x;
 if (!env_put2("EXT3",x)) temp_nomem();
 x += str_chr(x,'-'); if (*x) ++x;
 if (!env_put2("EXT4",x)) temp_nomem();

 if (!stralloc_copys(&safeext,ext)) temp_nomem();
//将safeext中字符串转化为小写的 
 case_lowerb(safeext.s,safeext.len);
 for (i = 0;i < safeext.len;++i)
   if (safeext.s[i] == '.')
     safeext.s[i] = ':;';
//例如host为202.18.236.150,则"HOST2=202.18.236","HOST3=202.18","HOST4=202",加入其中
//接收地址的域名部分  
 i = str_len(host);
 i = byte_rchr(host,i,'.');
 if (!stralloc_copyb(&foo,host,i)) temp_nomem();
 if (!stralloc_0(&foo)) temp_nomem();
 if (!env_put2("HOST2",foo.s)) temp_nomem();
 i = byte_rchr(host,i,'.');
 if (!stralloc_copyb(&foo,host,i)) temp_nomem();
 if (!stralloc_0(&foo)) temp_nomem();
 if (!env_put2("HOST3",foo.s)) temp_nomem();
 i = byte_rchr(host,i,'.');
 if (!stralloc_copyb(&foo,host,i)) temp_nomem();
 if (!stralloc_0(&foo)) temp_nomem();
 if (!env_put2("HOST4",foo.s)) temp_nomem();

 flagforwardonly = 0;
 qmesearch(&fd,&flagforwardonly);
 if (fd == -1)/*文件没打开*/
   if (*dash)
     strerr_die1x(100,"Sorry, no mailbox here by that name. (#5.1.1)");

 if (!stralloc_copys(&ueo,sender)) temp_nomem();
 if (str_diff(sender,""))/*sender不空*/
   if (str_diff(sender,"#@[]"))/*sender和"#@[]"不同*/
     if (qmeox("-owner") == 0)
      {
       if (qmeox("-owner-default") == 0)
{
         if (!stralloc_copys(&ueo,local)) temp_nomem();
         if (!stralloc_cats(&ueo,"-owner-@")) temp_nomem();
         if (!stralloc_cats(&ueo,host)) temp_nomem();
         if (!stralloc_cats(&ueo,"-@[]")) temp_nomem();
}/*ueo为local+"-owner-@"+host+"-@[]"*/
       else
{
         if (!stralloc_copys(&ueo,local)) temp_nomem();
         if (!stralloc_cats(&ueo,"-owner@")) temp_nomem();
         if (!stralloc_cats(&ueo,host)) temp_nomem();
}/*ueo为local+"-owner@"+host*/
      }
 if (!stralloc_0(&ueo)) temp_nomem();
//转发的发送人地址 
 if (!env_put2("NEWSENDER",ueo.s)) temp_nomem();

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

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

go top