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 + -
显示快捷键?