Changeset 1249

Show
Ignore:
Timestamp:
03/15/10 15:33:34 (5 months ago)
Author:
Hugo
Message:

idnsOrg: added uPerRRTypeCheck()

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/unxsBind/interfaces/org/resource.c

    r1246 r1249  
    7676void CreatetResourceTest(void); 
    7777void PrepareTestData(void); 
     78unsigned uPerRRTypeCheck(void); 
    7879 
    7980 
     
    715716}//unsigned SelectRRType(char *cRRType) 
    716717 
     718 
    717719unsigned uRRExists(char *cZone,char *cRRType,char *cValue,char *cParam) 
    718720{ 
     
    747749{ 
    748750        register int i; 
    749         unsigned a=0,b=0,c=0,d=0;        
    750751         
    751752        //For all types check here 
     
    827828         
    828829        //Per Type checks 
     830        if(uPerRRTypeCheck()) 
     831                return(3); 
     832 
     833        PrepareTestData(); 
     834 
     835        if(OnLineZoneCheck()) 
     836        { 
     837                return(18); 
     838        } 
     839 
     840        return(0); 
     841 
     842}//void RRCheck(int uMode) 
     843 
     844 
     845unsigned uPerRRTypeCheck(void) 
     846{ 
     847        unsigned a=0,b=0,c=0,d=0;        
     848         
    829849        if(!strcmp(cRRType,"CNAME")) 
    830850        { 
     
    15541574                return(16); 
    15551575        } 
    1556  
    1557         PrepareTestData(); 
    1558  
    1559         if(OnLineZoneCheck()) 
    1560         { 
    1561                 return(18); 
    1562         } 
    1563  
     1576         
    15641577        return(0); 
    15651578 
    1566 }//void RRCheck(int uMode) 
     1579}//unsigned uPerRRTypeCheck(void) 
    15671580 
    15681581 
     
    19321945        { 
    19331946                register int i=0; 
    1934                 unsigned a=0,b=0,c=0,d=0; 
    19351947 
    19361948                LoadRRTypeLabels(); 
     
    20152027                                        sprintf(cParam2,"%.99s",gcQuery); 
    20162028                                } 
    2017  
    2018                                 if(!strcmp(cRRType,"CNAME")) 
    2019                                 { 
    2020                                         //cParam2 not used. Erased. 
    2021                                         cParam2[0]=0; 
    2022  
    2023                                 if(!cParam1[0]) 
    2024                                 { 
    2025                                         sprintf(cParam1,"%s.",gcZone); 
    2026                                         sprintf(gcQuery,"<blink>%s is required. Common CNAME default entry made for you, check/change if needed</blink>",cParam1Label); 
    2027                                         gcMessage=gcQuery; 
    2028                                         cParam1Style="type_fields_req"; 
     2029                                 
     2030                                if(uPerRRTypeCheck()) 
    20292031                                        htmlResourceWizard(uStep); 
    2030                                 } 
    2031                                 else 
    2032                                 { 
    2033                                         char cParam1Save[101]={""}; 
    2034                                         char cParam1Temp[101]={""}; 
    2035  
    2036                                         sprintf(cParam1Save,"%.100s",cParam1); 
    2037                                         //converts, eliminates illegal chars. 
    2038                                         //helpers try to format for you...lol 
    2039                                         FQDomainName(cParam1); 
    2040  
    2041                                         //Ticket #323 CNAME record pointing to itself 
    2042                                         if(!strcmp(cName,cParam1) || !strcmp(gcZone,cParam1)) 
    2043                                         { 
    2044                                                 gcMessage="<blink>Can't create a CNAME record pointing to itself</blink>"; 
    2045                                                 cParam1Style="type_fields_req"; 
    2046                                                 cNameStyle="type_fields_req"; 
    2047                                                 htmlResourceWizard(uStep); 
    2048                                         } 
    2049                                         if(strchr(cParam1,'.')) 
    2050                                         { 
    2051                                                 //FQDN 
    2052                                                 //Missing trailing dot 
    2053                                                 if(cParam1[strlen(cParam1)-1]!='.') 
    2054                                                 { 
    2055                                                         sprintf(cParam1Temp,"%.100s.",cParam1); 
    2056                                                         sprintf(cParam1,"%.99s",cParam1Temp); 
    2057                                                 } 
    2058                                                 if(strcmp(cParam1,cParam1Save)) 
    2059                                                 { 
    2060                                                         sprintf(gcQuery, 
    2061                                                                 "<blink>%s was changed check/fix</blink>", 
    2062                                                                 cParam1Label); 
    2063                                                         gcMessage=gcQuery; 
    2064                                                         cParam1Style="type_fields_req"; 
    2065                                                         htmlResourceWizard(uStep); 
    2066                                                 } 
    2067                                         } 
    2068                                         else 
    2069                                         { 
    2070                                                 //Not FQDN, but internal zone member or another zone? 
    2071  
    2072                                                 //TODO 
    2073                                                 //Advanced help not implemented yet. 
    2074                                                 //Check in this zone for A record. Should not be another CNAME. 
    2075                                                 //Check in tZone 
    2076  
    2077                                                 if(cParam1[strlen(cParam1)-1]!='.') 
    2078                                                 { 
    2079                                                         sprintf(cParam1Temp,"%.49s.%.49s.",cParam1,gcZone); 
    2080                                                         sprintf(cParam1,"%.99s",cParam1Temp); 
    2081                                                 } 
    2082                                                 if(strcmp(cParam1,cParam1Save)) 
    2083                                                 { 
    2084                                                         sprintf(gcQuery, 
    2085                                                                 "<blink>%s was changed check/fix</blink>", 
    2086                                                                 cParam1Label); 
    2087                                                         gcMessage=gcQuery; 
    2088                                                         cParam1Style="type_fields_req"; 
    2089                                                         htmlResourceWizard(uStep); 
    2090                                                 } 
    2091                                         } 
    2092  
    2093                                 } 
    2094                                 } 
    2095                                 else if(!strcmp(cRRType,"A")) 
    2096                                 { 
    2097  
    2098                                         if(!strcmp(gcZone+strlen(gcZone)-5,".arpa")) 
    2099                                         { 
    2100                                                 gcMessage="<blink>Can not add A records to arpa zones</blink>"; 
    2101                                                  
    2102                                                 htmlResourceWizard(uStep); 
    2103                                         } 
    2104                                         sscanf(cParam1,"%u.%u.%u.%u",&a,&b,&c,&d); 
    2105                                         if(a>254) a=0; 
    2106                                         if(b>254) b=0; 
    2107                                         if(c>255) c=0;   
    2108                                         if(d>254) d=0;   
    2109  
    2110                                         sprintf(cParam1,"%u.%u.%u.%u",a,b,c,d); 
    2111  
    2112                                         cParam2[0]=0; 
    2113                                         if(!a || !d) 
    2114                                         { 
    2115                                                 sprintf(gcQuery, 
    2116                                                         "<blink>Invalid IP Number for %s</blink>", 
    2117                                                         cParam1Label); 
    2118                                                 gcMessage=gcQuery; 
    2119                                                 cParam1Style="type_fields_req"; 
    2120                                                 htmlResourceWizard(uStep); 
    2121                                         } 
    2122                                         if(uRRExists(gcZone,cRRType,cName,cParam1)) 
    2123                                         { 
    2124                                                 gcMessage="<blink>Resource record already exists</blink>"; 
    2125                                                 cParam1Style="type_fields_req"; 
    2126                                                 htmlResourceWizard(uStep); 
    2127                                         } 
    2128                                 } 
    2129                                 else if(!strcmp(cRRType,"PTR")) 
    2130                                 { 
    2131                                         unsigned uPtr=0; 
    2132                                         unsigned uPtrLen=strlen(cName); 
    2133                                         //We only allow simple classC in-addr PTR 
    2134                                         if(strstr(gcZone,"in-addr.arpa")) 
    2135                                         { 
    2136                                                 sscanf(cName,"%u",&uPtr); 
    2137                                                 sprintf(cName,"%u",uPtr); 
    2138  
    2139                                                 if(!uPtr) 
    2140                                                 { 
    2141                                                         sprintf(gcQuery,"<blink>Class-C in-addr.arpa zone PTR must be the last octet of rev dns IP</blink>"); 
    2142                                                         gcMessage=gcQuery; 
    2143                                                         cNameStyle="type_fields_req"; 
    2144                                                         htmlResourceWizard(uStep); 
    2145                                                 } 
    2146  
    2147                                                 if(uPtr>254) 
    2148                                                 { 
    2149                                                         sprintf(gcQuery,"<blink>PTR value out of range (1-254 allowed only)</blink>"); 
    2150                                                         gcMessage=gcQuery; 
    2151                                                         cNameStyle="type_fields_req"; 
    2152                                                         htmlResourceWizard(uStep); 
    2153                                                 } 
    2154  
    2155                                                 if(uPtrLen!=strlen(cName)) 
    2156                                                 { 
    2157                                                         sprintf(gcQuery,"<blink>PTR was changed check</blink>"); 
    2158                                                         gcMessage=gcQuery; 
    2159                                                         cNameStyle="type_fields_req"; 
    2160                                                         htmlResourceWizard(uStep); 
    2161                                                 } 
    2162  
    2163                                                 sscanf(gcZone,"%u.%u.%u.in-adddr.arpa",&c,&b,&a); 
    2164                                                 if(!a) 
    2165                                                 { 
    2166                                                         sprintf(gcQuery, 
    2167                                                                 "<blink>Unexpected in-addr.arpa zone name format</blink>"); 
    2168                                                         gcMessage=gcQuery; 
    2169                                                         cNameStyle="type_fields_req"; 
    2170                                                         htmlResourceWizard(uStep); 
    2171                                                 } 
    2172  
    2173                                                 if(uRRExists(gcZone,cRRType,cName,cParam1)) 
    2174                                                 { 
    2175                                                         gcMessage="<blink>Resource record already exists</blink>"; 
    2176                                                         cNameStyle="type_fields_req"; 
    2177                                                         htmlResourceWizard(uStep); 
    2178                                                 } 
    2179  
    2180                                                 sprintf(cParam2,"%u.%u.%u.%u",a,b,c,uPtr); 
    2181                                                 if(!InMyBlocks(cParam2)) 
    2182                                                 { 
    2183                                                         gcMessage="<blink>IP Number not in any of your IP blocks</blink>"; 
    2184                                                         cNameStyle="type_fields_req"; 
    2185                                                         htmlResourceWizard(1); 
    2186                                                 } 
    2187                                                 cParam2[0]=0;//Was just a temp place holder 
    2188                                         } 
    2189  
    2190                                         //Non arpa PTR records. Should we allow? 
    2191                                         cParam2[0]=0; 
    2192                                         FQDomainName(cParam1); 
    2193                                         if(!cParam1[0]) 
    2194                                         { 
    2195                                                 sprintf(gcQuery,"<blink>%s is required</blink>",cParam1Label); 
    2196                                                 gcMessage=gcQuery; 
    2197                                                 cParam1Style="type_fields_req"; 
    2198                                                 htmlResourceWizard(uStep); 
    2199                                         } 
    2200                                         if(cParam1[strlen(cParam1)-1]!='.') strcat(cParam1,"."); 
    2201                                 } 
    2202                                 else if(!strcmp(cRRType,"MX")) 
    2203                                 { 
    2204                                         if(!strcmp(gcZone+strlen(gcZone)-5,".arpa")) 
    2205                                         { 
    2206                                                 gcMessage="<blink>Can not add MX records to arpa zones</blink>"; 
    2207                                                 cRRTypeStyle="type_fields_req"; 
    2208                                                 htmlResourceWizard(uStep); 
    2209                                         } 
    2210                                         sscanf(cParam1,"%u",&a); 
    2211                                         sprintf(cParam1,"%u",a); 
    2212                                         if(!a || a>1000) 
    2213                                         { 
    2214                                                 sprintf(gcQuery,"<blink>Invalid MX Priority Number for %s</blink>", 
    2215                                                         cParam1Label); 
    2216                                                 gcMessage=gcQuery; 
    2217                                                 cParam1Style="type_fields_req"; 
    2218                                                 htmlResourceWizard(uStep); 
    2219                                         } 
    2220                                         FQDomainName(cParam2); 
    2221                                         if(!cParam2[0]) 
    2222                                         { 
    2223                                                 sprintf(gcQuery,"<blink>%s is required</blink>",cParam2Label); 
    2224                                                 gcMessage=gcQuery; 
    2225                                                 cParam2Style="type_fields_req"; 
    2226                                                 htmlResourceWizard(uStep); 
    2227                                         } 
    2228                                         if(cParam2[strlen(cParam2)-1]!='.') strcat(cParam2,".");                 
    2229                                 } 
    2230                                 else if(!strcmp(cRRType,"NS")) 
    2231                                 { 
    2232                                         //All cases 
    2233                                         cParam2[0]=0; 
    2234                                         if(!cParam1[0]) 
    2235                                         { 
    2236                                                 sprintf(gcQuery,"<blink>%s is required</blink>",cParam1Label); 
    2237                                                 gcMessage=gcQuery; 
    2238                                                 cParam1Style="type_fields_req"; 
    2239                                                 htmlResourceWizard(uStep); 
    2240                                         } 
    2241                                         FQDomainName(cParam1); 
    2242                                         if(cParam1[strlen(cParam1)-1]!='.') strcat(cParam1,"."); 
    2243  
    2244                                         if(strcmp(gcZone+strlen(gcZone)-5,".arpa")) 
    2245                                         { 
    2246                                                 sprintf(cName,"%.255s.",gcZone); 
    2247                                         } 
    2248                                         //else no other rules for arpa zone for now TODO 
    2249                                 } 
    2250                                 else if(!strcmp(cRRType,"HINFO")) 
    2251                                 { 
    2252                                         if(!cParam1[0]) 
    2253                                         { 
    2254                                                 sprintf(gcQuery,"<blink>%s is required</blink>",cParam1Label); 
    2255                                                 gcMessage=gcQuery; 
    2256                                                 cParam1Style="type_fields_req"; 
    2257                                                 htmlResourceWizard(uStep); 
    2258                                         } 
    2259                                         if(cParam1[0]!='"' && cParam1[strlen(cParam1)-1]!='"') 
    2260                                         { 
    2261                                                 sprintf(gcQuery,"\"%.4095s\"",cParam1); 
    2262                                                 sprintf(cParam1,"%.99s",gcQuery); 
    2263                                         } 
    2264  
    2265                                         if(!cParam2[0]) 
    2266                                         { 
    2267                                                 sprintf(gcQuery,"<blink>%s is required</blink>",cParam2Label); 
    2268                                                 gcMessage=gcQuery; 
    2269                                                 cParam2Style="type_fields_req"; 
    2270                                                 htmlResourceWizard(uStep); 
    2271                                         } 
    2272                                         if(cParam2[0]!='"' && cParam1[strlen(cParam2)-1]!='"') 
    2273                                         { 
    2274                                                 sprintf(gcQuery,"\"%.4095s\"",cParam2); 
    2275                                                 sprintf(cParam2,"%.99s",gcQuery); 
    2276                                         } 
    2277                                 } 
    2278                                 else if(!strcmp(cRRType,"TXT")) 
    2279                                 { 
    2280                                         char *cp; 
    2281  
    2282                                         cParam2[0]=0; 
    2283                                         if(!cParam1[0]) 
    2284                                         { 
    2285                                                 sprintf(gcQuery,"<blink>%s is required</blink>",cParam1Label); 
    2286                                                 gcMessage=gcQuery; 
    2287                                                 cParam1Style="type_fields_req"; 
    2288                                                 htmlResourceWizard(uStep); 
    2289                                         } 
    2290                                         if(cParam1[0]!='"' && cParam1[strlen(cParam1)-1]!='"') 
    2291                                         { 
    2292                                                 sprintf(gcQuery,"\"%.4095s\"",cParam1); 
    2293                                                 sprintf(cParam1,"%.99s",gcQuery); 
    2294                                         } 
    2295                                         else if(cParam1[0]!='"' && cParam1[strlen(cParam1)-1]=='"') 
    2296                                         { 
    2297                                                 sprintf(gcQuery,"\"%.4095s",cParam1); 
    2298                                                 sprintf(cParam1,"%.99s",gcQuery); 
    2299                                         } 
    2300                                         else if(cParam1[0]=='"' && cParam1[strlen(cParam1)-1]!='"') 
    2301                                         { 
    2302                                                 sprintf(gcQuery,"%.4095s\"",cParam1); 
    2303                                                 sprintf(cParam1,"%.99s",gcQuery); 
    2304                                         } 
    2305                                         else if((cp=strchr(cParam1+1,'"'))) 
    2306                                         { 
    2307                                                 if(cp!=cParam1+strlen(cParam1)-1) 
    2308                                                 { 
    2309                                                         sprintf(gcQuery,"<blink>Stray \" in TXT value</blink>"); 
    2310                                                         gcMessage=gcQuery; 
    2311                                                         cParam1Style="type_fields_req"; 
    2312                                                         htmlResourceWizard(uStep); 
    2313                                                 } 
    2314                                         } 
    2315  
    2316                                 } 
    2317                                 else if(1) 
    2318                                 { 
    2319                                         gcMessage="<blink>Must select valid Resource Type (A,MX,PTR,TXT,NS,CNAME,HINFO)</blink>"; 
    2320                                         cRRTypeStyle="type_fields_req"; 
    2321                                         htmlResourceWizard(uStep); 
    2322                                 } 
    23232032 
    23242033                                break;