当前位置:  技术问答>linux和unix

请教一下这几个qmail函数的作用

    来源: 互联网  发布时间:2016-02-13

    本文导语:  这三个函数大概是要实现一个什么功能呢? #define DNS_SOFT -1 #define DNS_HARD -2 #define DNS_MEM -3 int dns_cname(sa) stralloc *sa; {  int r;  int loop;  for (loop = 0;loop len) return loop;    if (sa->s[sa->len - 1] == ']') return loop;...

这三个函数大概是要实现一个什么功能呢?

#define DNS_SOFT -1
#define DNS_HARD -2
#define DNS_MEM -3

int dns_cname(sa)
stralloc *sa;
{
 int r;
 int loop;
 for (loop = 0;loop len) return loop;
   if (sa->s[sa->len - 1] == ']') return loop;
   if (sa->s[sa->len - 1] == '.') { --sa->len; continue; }
   switch(resolve(sa,T_ANY))
    {
     case DNS_MEM: return DNS_MEM;
     case DNS_SOFT: return DNS_SOFT;
     case DNS_HARD: return loop;
     default:
       while ((r = findname(T_CNAME)) != 2)
{
 if (r == DNS_SOFT) return DNS_SOFT;
 if (r == 1)
  {
   if (!stralloc_copys(sa,name)) return DNS_MEM;
   break;
  }
}
       if (r == 2) return loop;
    }
  }
 return DNS_HARD; /* alias loop */
}

=======================================================================


static int dns_ipplus(ia,sa,pref)
ipalloc *ia;
stralloc *sa;
int pref;
{
 int r;
 struct ip_mx ix;

 if (!stralloc_copy(&glue,sa)) return DNS_MEM;
 if (!stralloc_0(&glue)) return DNS_MEM;
 if (glue.s[0]) {
   ix.pref = 0;
   if (!glue.s[ip_scan(glue.s,&ix.ip)] || !glue.s[ip_scanbracket(glue.s,&ix.ip)])
    {
     if (!ipalloc_append(ia,&ix)) return DNS_MEM;
     return 0;
    }
 }

 switch(resolve(sa,T_A))
  {
   case DNS_MEM: return DNS_MEM;
   case DNS_SOFT: return DNS_SOFT;
   case DNS_HARD: return DNS_HARD;
  }
 while ((r = findip(T_A)) != 2)
  {
   ix.ip = ip;
   ix.pref = pref;
   if (r == DNS_SOFT) return DNS_SOFT;
   if (r == 1)
     if (!ipalloc_append(ia,&ix)) return DNS_MEM;
  }
 return 0;
}


=============================================================
这个函数好长啊~

int dns_mxip(ia,sa,random)
ipalloc *ia;
stralloc *sa;
unsigned long random;
{
 int r;
 struct mx { stralloc sa; unsigned short p; } *mx;
 struct ip_mx ix;
 int nummx;
 int i;
 int j;
 int flagsoft;

 if (!ipalloc_readyplus(ia,0)) return DNS_MEM;
 ia->len = 0;

 if (!stralloc_copy(&glue,sa)) return DNS_MEM;
 if (!stralloc_0(&glue)) return DNS_MEM;
 if (glue.s[0]) {
   ix.pref = 0;
   if (!glue.s[ip_scan(glue.s,&ix.ip)] || !glue.s[ip_scanbracket(glue.s,&ix.ip)])
    {
     if (!ipalloc_append(ia,&ix)) return DNS_MEM;
     return 0;
    }
 }

 switch(resolve(sa,T_MX))
  {
   case DNS_MEM: return DNS_MEM;
   case DNS_SOFT: return DNS_SOFT;
   case DNS_HARD: return dns_ip(ia,sa);
  }

 mx = (struct mx *) alloc(numanswers * sizeof(struct mx));
 if (!mx) return DNS_MEM;
 nummx = 0;

 while ((r = findmx(T_MX)) != 2)
  {
   if (r == DNS_SOFT) { alloc_free(mx); return DNS_SOFT; }
   if (r == 1)
    {
     mx[nummx].p = pref;
     mx[nummx].sa.s = 0;
     if (!stralloc_copys(&mx[nummx].sa,name))
      {
       while (nummx > 0) alloc_free(mx[--nummx].sa.s);
       alloc_free(mx); return DNS_MEM;
      }
     ++nummx;
    }
  }

 if (!nummx) return dns_ip(ia,sa); /* e.g., CNAME -> A */

 flagsoft = 0;
 while (nummx > 0)
  {
   unsigned long numsame;

   i = 0;
   numsame = 1;
   for (j = 1;j s[sa->len - 1] ==  '.') { --sa->len; continue; } 
   switch(resolve(sa,T_ANY)) /*把sa以ns_t_any格式查字典得出得值*/
    { 
     case DNS_MEM: return DNS_MEM; 
     case DNS_SOFT: return DNS_SOFT; 
     case DNS_HARD: return loop; 
     default: 
       while ((r = findname(T_CNAME)) != 2) /*用findname函数查找ns_t_cname,需要看看具体的findname函数,ns_t_不是全局变量,就是枚举类型*/
{ /*如果返回为2退出*/
  if (r == DNS_SOFT) return DNS_SOFT; 
  if (r == 1) 
   { 
    if (!stralloc_copys(sa,name)) return DNS_MEM; /*如果把name拷贝到sa中成功,就返回DNS_MEM否则就返回loop*/
    break; /*name应该是全局变量,代码还真麻烦:)*/
   } 

       if (r == 2) return loop; 
    } 
  } 
 return DNS_HARD; /* alias loop */ /*如果大于10次了即sa->s[sa->len-1]从0-sa->len都为'.'返回 DNS_HARD*/

=====================================================================
/*函数的大概整体意思是在stralloc *sa的指针里查找DNS的三种状态,如果不成功返回或为DNS_HARD返回loop,当findname返回1时候,把name返回给sa指针成功本报告DNS_MEM*/

    
 
 

您可能感兴趣的文章:

  • 高分请教:怎样在Kdevelop不能够Trace构造函数?(其他函数可以Trace)
  • 请教:javascript 里有没有时间循环执行的函数,如我按住鼠标触发mousedown 事件函数时,反复执行我写的一个函数?
  • 请教semop()函数的用法、含义
  • 请教套接字中的select()函数问题
  • 请教一个函数入口处的汇编问题(压栈问题)
  • 请教一个关于ftw函数的问题!
  • 100分请教高手一个bash函数
  • 请教signal函数的用法!
  • 请教exec系列函数的用法
  • 请教UNIX C字符输入的检测函数?
  • 请教关于dlopen,动态库连接程序的输出函数
  • 请教select函数
  • (菜鸟请教)还有修改/etc/passwd文件用什么函数呢?
  • linux下time函数问题请教高手
  • 请教一个网络编程问题,accept函数的,在线等,急。。。
  • 请教一个取时间的函数,急!!!!!!!!!!!!!!!!
  • 请教,JavaScript中能不能调用JSP写的函数?
  • 请教:clock_gettime函数的使用问题
  • 请教 变量= { function:函数名};什么意思
  • signal 函数请教
  • 请教一段shell语句的作用
  • 请教:system.out.println("a="+a),a是int类型的,那个+号到底起什么作用呢?
  • 各位老大,可以提供一个EJB(BMP)的例子吗? 同时请教PK类的作用?(给例子就有分)
  • linux下ulimit命令的具体作用,不是很明白,请教一下
  • 请教apt-get install x-window-system-core gnome-core synaptic的"synaptic"有什么作用
  • 请教:linux 2.6内核汇编中的.size起什么作用?
  • linux下time函数问题请教高手 iis7站长之家
  • 请教:整合apache/tomcat时设置JAVA_HOME/TOMCAT_HOME环境变量起什么作用?没有用到啊?
  • 请教,关于JAVA中变量的作用域的问题!
  • 请教:有了JRUN了,为什么还要装个APACHE,APACHE这个软件起什么作用的呢?
  • 【请教】libc.so的具体作用
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 请教,请教,这个问题是为什么????
  • 请教本地硬盘安装问题请教本地硬盘安装问题
  • ■请教■请教redhat最基本的问题!
  • 请教一个 shell 问题,我用下面这个 shell 语句总是失败,请教
  • 高分请教,各位大侠,请教一个问题,理论高手请进??谢谢
  • 请教Linux下pgadmin3-1.0.2的编译和安装!!高分请教!
  • 各位大虾,请教装了REDHAT9操作系统后,启动时无法引导到LINUX,请教该如何解决啊
  • 请教,请教,,,一定要看!!一定要看!!
  • 请教高手,小弟打印width=1500,height=600(A3纸)的Applet,在预览中是该区域是黑的,打印出来也是黑的,请教高手解决一下
  • :请教高手,小弟打印width=1500,height=600(A3纸)的Applet,在预览中是该区域是黑的,打印出来也是黑的,请教高手解决一下
  • 请教象我这样的硬盘应如何安装Linux,我昨天试装了,但有问题。(老问题了,也看了前面的帖子,但还是来请教,请多指教)
  • 请教这种循环的执行过程
  • 请教两个redhat9问题
  • 请教如何在指定目录下查找包含指定文字的文件
  • 请教局域网中如何通过ip地址得到主机名
  • 请教kdevelop的问题
  • 请教linux 下的adsl拨号问题.
  • 请教,如何用虚拟订机安装liux
  • 【请教】LINUX 下SNMP的MIB开发
  • 请教一个opengl的问题


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3