tt.tmp~

来自「此dns服务器是在mydns基础上改写」· TMP~ 代码 · 共 225 行

TMP~
225
字号
void select_matched_zone(sqlConn sql, 				/*perl DBI sql connection*/MYDNS_SOA **rptr, 		/*MYDNS_SOA structure pointer*/char *name, 					/*domain name(label)*/char *origin,				/*origin name*/ const char *ipchs			/*requestor ip section*/){	/* Construct query */   if (name)   {      if (origin)      {   {      if (namelen && name[namelen - 1] == '.')         name[namelen-1] = '\0';      else         namelen = 0;   }#endif   /* Construct query */   if (name)   {      if (origin)      {         if (!name[0])            snprintf(namequery, sizeof(namequery), "(name='' OR name='%s')", origin);         else         {#ifdef DN_COLUMN_NAMES            snprintf(namequery, sizeof(namequery), "name='%s'", name);#else            snprintf(namequery, sizeof(namequery), "(name='%s' OR name='%s.%s')", name, name, origin);#endif         }      }      else         snprintf(namequery, sizeof(namequery), "name='%s'", name);   }#ifdef DN_COLUMN_NAMES   if (originlen)      origin[originlen - 1] = '.';                    /* Readd dot to origin for DN */   if (name)   {      if (namelen)         name[namelen - 1] = '.';   }#endifquerylen = snprintf(query, sizeof(query),      "SELECT "MYDNS_RR_FIELDS"%s FROM %s WHERE "#ifdef DN_COLUMN_NAMES         "zone_id=%u%s"#else         "zone=%u%s"#endif         "%s%s%s%s",         (mydns_rr_use_active ? ",active" : ""),         mydns_rr_table_name,         zone, wheretype,         (namequery[0]) ? " AND " : "",         namequery,         (mydns_rr_where_clause) ? " AND " : "",         (mydns_rr_where_clause) ? mydns_rr_where_clause : "");   /* Submit query */   if (!(res = sql_query(sqlConn, query, querylen)))      return (-1);#if DEBUG_ENABLED && DEBUG_LIB_RR   {      int numresults = sql_num_rows(res);      Debug("RR query: %d row%s: %s", numresults, S(numresults), query);   }#endif}void select_matched_zone(SQL	*sqlConn, 			/*perl DBI sql connection*/MYDNS_SOA **rptr, 		/*MYDNS_SOA structure pointer*/dns_qtype_t type,			/*dns query type*/char *name, 					/*domain name(label)*/char *origin,				/*origin name*/ const char *ipchs			/*requestor ip section*/){	size_t	querylen;	uchar	query[DNS_QUERYBUFSIZ] = "";	uchar 	namequery[DNS_MAXNAMELEN + DNS_MAXNAMELEN + DNS_MAXNAMELEN + 25] = "";	int		namelen = name ? strlen(name) : 0;	uchar		*wheretype;   	/* Verify args */	if (!sqlConn || !rptr)	{		errno = EINVAL;		return (-1);	}	/* Get the type='XX' part of the WHERE clause */	switch (type)	{#if ALIAS_ENABLED		case DNS_QTYPE_A:		wheretype = " AND (type='A' OR type='ALIAS')"; break;#else		case DNS_QTYPE_A:		wheretype = " AND type='A'"; break;#endif		case DNS_QTYPE_AAAA:		wheretype = " AND type='AAAA'"; break;		case DNS_QTYPE_CNAME:	wheretype = " AND type='CNAME'"; break;		case DNS_QTYPE_HINFO:	wheretype = " AND type='HINFO'"; break;		case DNS_QTYPE_MX:		wheretype = " AND type='MX'"; break;		case DNS_QTYPE_NAPTR:	wheretype = " AND type='NAPTR'"; break;		case DNS_QTYPE_NS:		wheretype = " AND type='NS'"; break;		case DNS_QTYPE_PTR:		wheretype = " AND type='PTR'"; break;		case DNS_QTYPE_SOA:		wheretype = " AND type='SOA'"; break;		case DNS_QTYPE_SRV:		wheretype = " AND type='SRV'"; break;		case DNS_QTYPE_TXT:		wheretype = " AND type='TXT'"; break;		case DNS_QTYPE_ANY:		wheretype = ""; break;		default:			errno = EINVAL;			return (-1);	}	/* Construct query */   if (name)   {      if (origin)      {   {      if (namelen && name[namelen - 1] == '.')         name[namelen-1] = '\0';      else         namelen = 0;   }   /* Construct query */   if (name)   {      if (origin)      {         if (!name[0])            snprintf(namequery, sizeof(namequery), "(name='' OR name='%s')", origin);         else         {#ifdef DN_COLUMN_NAMES            snprintf(namequery, sizeof(namequery), "name='%s'", name);#else            snprintf(namequery, sizeof(namequery), "(name='%s' OR name='%s.%s')", name, name, origin);#endif         }      }      else         snprintf(namequery, sizeof(namequery), "name='%s'", name);   }#ifdef DN_COLUMN_NAMES   if (originlen)      origin[originlen - 1] = '.';                    /* Readd dot to origin for DN */   if (name)   {      if (namelen)         name[namelen - 1] = '.';   }#endifquerylen = snprintf(query, sizeof(query),      "SELECT "MYDNS_RR_FIELDS"%s FROM %s WHERE "#ifdef DN_COLUMN_NAMES         "zone_id=%u%s"#else         "zone=%u%s"#endif         "%s%s%s%s",         (mydns_rr_use_active ? ",active" : ""),         mydns_rr_table_name,         zone, wheretype,         (namequery[0]) ? " AND " : "",         namequery,         (mydns_rr_where_clause) ? " AND " : "",         (mydns_rr_where_clause) ? mydns_rr_where_clause : "");   /* Submit query */   if (!(res = sql_query(sqlConn, query, querylen)))      return (-1);#if DEBUG_ENABLED && DEBUG_LIB_RR   {      int numresults = sql_num_rows(res);      Debug("[*%s*][*%s*]%s RR query: %d row%s: %s", __FILE__,__LINE__, numresults, S(numresults), query);   }#endif}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?