Changeset 1250

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

vOrg: added uPerRRTypeCheck()

Files:
1 modified

Legend:

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

    r1247 r1250  
    7474void CreatetResourceTest(void); 
    7575void PrepareTestData(void); 
     76unsigned uPerRRTypeCheck(void); 
    7677 
    7778char *cGetViewLabel(void); //zone.c 
     
    754755{ 
    755756        register int i; 
    756         unsigned a=0,b=0,c=0,d=0;        
    757757        char cZone[256]={""}; 
    758758 
     
    837837         
    838838        //Per Type checks 
     839        if(uPerRRTypeCheck()) 
     840                return(3); 
     841 
     842        PrepareTestData(); 
     843 
     844        if(OnLineZoneCheck()) 
     845        { 
     846                return(18); 
     847        } 
     848 
     849        return(0); 
     850 
     851}//void RRCheck(int uMode) 
     852 
     853 
     854unsigned uPerRRTypeCheck(void) 
     855{ 
     856        unsigned a=0,b=0,c=0,d=0;        
     857        char cZone[256]={""}; 
     858 
     859        sprintf(cZone,"%.255s",ForeignKey("tZone","cZone",guZone)); 
     860 
    839861        if(!strcmp(cRRType,"CNAME")) 
    840862        { 
     
    15571579 
    15581580        } 
    1559  
     1581         
    15601582        else if(1) 
    15611583        { 
    1562                 gcMessage="<blink>Must select valid Resource Type (A,MX,PTR,TXT,NS,CNAME,HINFO)</blink>"; 
     1584                gcMessage="<blink>Must select valid Resource Type (A,MX,PTR,TXT,NS,CNAME,HINFO,NAPTR,AAAA)</blink>"; 
    15631585                cRRTypeStyle="type_fields_req"; 
    15641586                return(16); 
    15651587        } 
    1566  
    1567         PrepareTestData(); 
    1568  
    1569         if(OnLineZoneCheck()) 
    1570         { 
    1571                 return(18); 
    1572         } 
    1573  
     1588         
    15741589        return(0); 
    15751590 
    1576 }//void RRCheck(int uMode) 
     1591}//unsigned uPerRRTypeCheck(void) 
    15771592 
    15781593 
     
    18951910        { 
    18961911                register int i=0; 
    1897                 unsigned a=0,b=0,c=0,d=0; 
    18981912                char cZone[256]={""}; 
    18991913 
     
    19091923                        case 1: 
    19101924                                 
    1911                                 if(!strcmp(cRRType,"SRV")) 
    1912                                 { 
    1913                                         gcMessage="<blink>Error: </blink>SRV records are not supported by this wizard."; 
    1914                                         htmlResourceWizard(uStep); 
    1915                                 } 
    19161925                                //remove extra chars 
    19171926                                if(cName[0]) 
     
    19811990                                        sprintf(cParam2,"%.99s",gcQuery); 
    19821991                                } 
    1983  
    1984                                 if(!strcmp(cRRType,"CNAME")) 
    1985                                 { 
    1986                                         //cParam2 not used. Erased. 
    1987                                         cParam2[0]=0; 
    1988  
    1989                                 if(!cParam1[0]) 
    1990                                 { 
    1991                                         sprintf(cParam1,"%s.",cZone); 
    1992                                         sprintf(gcQuery,"<blink>%s is required. Common CNAME default entry made for you, check/change if needed</blink>",cParam1Label); 
    1993                                         gcMessage=gcQuery; 
    1994                                         cParam1Style="type_fields_req"; 
     1992                                if(uPerRRTypeCheck()) 
    19951993                                        htmlResourceWizard(uStep); 
    1996                                 } 
    1997                                 else 
    1998                                 { 
    1999                                         char cParam1Save[101]={""}; 
    2000                                         char cParam1Temp[101]={""}; 
    2001  
    2002                                         sprintf(cParam1Save,"%.100s",cParam1); 
    2003                                         //converts, eliminates illegal chars. 
    2004                                         //helpers try to format for you...lol 
    2005                                         FQDomainName(cParam1); 
    2006  
    2007                                         //Ticket #323 CNAME record pointing to itself 
    2008                                         if(!strcmp(cName,cParam1) || !strcmp(cZone,cParam1)) 
    2009                                         { 
    2010                                                 gcMessage="<blink>Can't create a CNAME record pointing to itself</blink>"; 
    2011                                                 cParam1Style="type_fields_req"; 
    2012                                                 cNameStyle="type_fields_req"; 
    2013                                                 htmlResourceWizard(uStep); 
    2014                                         } 
    2015                                         if(strchr(cParam1,'.')) 
    2016                                         { 
    2017                                                 //FQDN 
    2018                                                 //Missing trailing dot 
    2019                                                 if(cParam1[strlen(cParam1)-1]!='.') 
    2020                                                 { 
    2021                                                         sprintf(cParam1Temp,"%.100s.",cParam1); 
    2022                                                         sprintf(cParam1,"%.99s",cParam1Temp); 
    2023                                                 } 
    2024                                                 if(strcmp(cParam1,cParam1Save)) 
    2025                                                 { 
    2026                                                         sprintf(gcQuery, 
    2027                                                                 "<blink>%s was changed check/fix</blink>", 
    2028                                                                 cParam1Label); 
    2029                                                         gcMessage=gcQuery; 
    2030                                                         cParam1Style="type_fields_req"; 
    2031                                                         htmlResourceWizard(uStep); 
    2032                                                 } 
    2033                                         } 
    2034                                         else 
    2035                                         { 
    2036                                                 //Not FQDN, but internal zone member or another zone? 
    2037  
    2038                                                 //TODO 
    2039                                                 //Advanced help not implemented yet. 
    2040                                                 //Check in this zone for A record. Should not be another CNAME. 
    2041                                                 //Check in tZone 
    2042  
    2043                                                 if(cParam1[strlen(cParam1)-1]!='.') 
    2044                                                 { 
    2045                                                         sprintf(cParam1Temp,"%.49s.%.49s.",cParam1,cZone); 
    2046                                                         sprintf(cParam1,"%.99s",cParam1Temp); 
    2047                                                 } 
    2048                                                 if(strcmp(cParam1,cParam1Save)) 
    2049                                                 { 
    2050                                                         sprintf(gcQuery, 
    2051                                                                 "<blink>%s was changed check/fix</blink>", 
    2052                                                                 cParam1Label); 
    2053                                                         gcMessage=gcQuery; 
    2054                                                         cParam1Style="type_fields_req"; 
    2055                                                         htmlResourceWizard(uStep); 
    2056                                                 } 
    2057                                         } 
    2058  
    2059                                 } 
    2060                                 } 
    2061                                 else if(!strcmp(cRRType,"A")) 
    2062                                 { 
    2063  
    2064                                         if(!strcmp(cZone+strlen(cZone)-5,".arpa")) 
    2065                                         { 
    2066                                                 gcMessage="<blink>Can not add A records to arpa zones</blink>"; 
    2067                                                  
    2068                                                 htmlResourceWizard(uStep); 
    2069                                         } 
    2070                                         sscanf(cParam1,"%u.%u.%u.%u",&a,&b,&c,&d); 
    2071                                         if(a>254) a=0; 
    2072                                         if(b>254) b=0; 
    2073                                         if(c>255) c=0;   
    2074                                         if(d>254) d=0;   
    2075  
    2076                                         sprintf(cParam1,"%u.%u.%u.%u",a,b,c,d); 
    2077  
    2078                                         cParam2[0]=0; 
    2079                                         if(!a || !d) 
    2080                                         { 
    2081                                                 sprintf(gcQuery, 
    2082                                                         "<blink>Invalid IP Number for %s</blink>", 
    2083                                                         cParam1Label); 
    2084                                                 gcMessage=gcQuery; 
    2085                                                 cParam1Style="type_fields_req"; 
    2086                                                 htmlResourceWizard(uStep); 
    2087                                         } 
    2088                                         if(uRRExists(cZone,cRRType,cName,cParam1)) 
    2089                                         { 
    2090                                                 gcMessage="<blink>Resource record already exists</blink>"; 
    2091                                                 cParam1Style="type_fields_req"; 
    2092                                                 htmlResourceWizard(uStep); 
    2093                                         } 
    2094                                 } 
    2095                                 else if(!strcmp(cRRType,"PTR")) 
    2096                                 { 
    2097                                         unsigned uPtr=0; 
    2098                                         unsigned uPtrLen=strlen(cName); 
    2099                                         //We only allow simple classC in-addr PTR 
    2100                                         if(strstr(cZone,"in-addr.arpa")) 
    2101                                         { 
    2102                                                 sscanf(cName,"%u",&uPtr); 
    2103                                                 sprintf(cName,"%u",uPtr); 
    2104  
    2105                                                 if(!uPtr) 
    2106                                                 { 
    2107                                                         sprintf(gcQuery,"<blink>Class-C in-addr.arpa zone PTR must be the last octet of rev dns IP</blink>"); 
    2108                                                         gcMessage=gcQuery; 
    2109                                                         cNameStyle="type_fields_req"; 
    2110                                                         htmlResourceWizard(uStep); 
    2111                                                 } 
    2112  
    2113                                                 if(uPtr>254) 
    2114                                                 { 
    2115                                                         sprintf(gcQuery,"<blink>PTR value out of range (1-254 allowed only)</blink>"); 
    2116                                                         gcMessage=gcQuery; 
    2117                                                         cNameStyle="type_fields_req"; 
    2118                                                         htmlResourceWizard(uStep); 
    2119                                                 } 
    2120  
    2121                                                 if(uPtrLen!=strlen(cName)) 
    2122                                                 { 
    2123                                                         sprintf(gcQuery,"<blink>PTR was changed check</blink>"); 
    2124                                                         gcMessage=gcQuery; 
    2125                                                         cNameStyle="type_fields_req"; 
    2126                                                         htmlResourceWizard(uStep); 
    2127                                                 } 
    2128  
    2129                                                 sscanf(cZone,"%u.%u.%u.in-adddr.arpa",&c,&b,&a); 
    2130                                                 if(!a) 
    2131                                                 { 
    2132                                                         sprintf(gcQuery, 
    2133                                                                 "<blink>Unexpected in-addr.arpa zone name format</blink>"); 
    2134                                                         gcMessage=gcQuery; 
    2135                                                         cNameStyle="type_fields_req"; 
    2136                                                         htmlResourceWizard(uStep); 
    2137                                                 } 
    2138  
    2139                                                 if(uRRExists(cZone,cRRType,cName,cParam1)) 
    2140                                                 { 
    2141                                                         gcMessage="<blink>Resource record already exists</blink>"; 
    2142                                                         cNameStyle="type_fields_req"; 
    2143                                                         htmlResourceWizard(uStep); 
    2144                                                 } 
    2145  
    2146                                                 sprintf(cParam2,"%u.%u.%u.%u",a,b,c,uPtr); 
    2147                                                 if(!InMyBlocks(cParam2)) 
    2148                                                 { 
    2149                                                         gcMessage="<blink>IP Number not in any of your IP blocks</blink>"; 
    2150                                                         cNameStyle="type_fields_req"; 
    2151                                                         htmlResourceWizard(1); 
    2152                                                 } 
    2153                                                 cParam2[0]=0;//Was just a temp place holder 
    2154                                         } 
    2155  
    2156                                         //Non arpa PTR records. Should we allow? 
    2157                                         cParam2[0]=0; 
    2158                                         FQDomainName(cParam1); 
    2159                                         if(!cParam1[0]) 
    2160                                         { 
    2161                                                 sprintf(gcQuery,"<blink>%s is required</blink>",cParam1Label); 
    2162                                                 gcMessage=gcQuery; 
    2163                                                 cParam1Style="type_fields_req"; 
    2164                                                 htmlResourceWizard(uStep); 
    2165                                         } 
    2166                                         if(cParam1[strlen(cParam1)-1]!='.') strcat(cParam1,"."); 
    2167                                 } 
    2168                                 else if(!strcmp(cRRType,"MX")) 
    2169                                 { 
    2170                                         if(!strcmp(cZone+strlen(cZone)-5,".arpa")) 
    2171                                         { 
    2172                                                 gcMessage="<blink>Can not add MX records to arpa zones</blink>"; 
    2173                                                 cRRTypeStyle="type_fields_req"; 
    2174                                                 htmlResourceWizard(uStep); 
    2175                                         } 
    2176                                         sscanf(cParam1,"%u",&a); 
    2177                                         sprintf(cParam1,"%u",a); 
    2178                                         if(!a || a>1000) 
    2179                                         { 
    2180                                                 sprintf(gcQuery,"<blink>Invalid MX Priority Number for %s</blink>", 
    2181                                                         cParam1Label); 
    2182                                                 gcMessage=gcQuery; 
    2183                                                 cParam1Style="type_fields_req"; 
    2184                                                 htmlResourceWizard(uStep); 
    2185                                         } 
    2186                                         FQDomainName(cParam2); 
    2187                                         if(!cParam2[0]) 
    2188                                         { 
    2189                                                 sprintf(gcQuery,"<blink>%s is required</blink>",cParam2Label); 
    2190                                                 gcMessage=gcQuery; 
    2191                                                 cParam2Style="type_fields_req"; 
    2192                                                 htmlResourceWizard(uStep); 
    2193                                         } 
    2194                                         if(cParam2[strlen(cParam2)-1]!='.') strcat(cParam2,".");                 
    2195                                 } 
    2196                                 else if(!strcmp(cRRType,"NS")) 
    2197                                 { 
    2198                                         //All cases 
    2199                                         cParam2[0]=0; 
    2200                                         if(!cParam1[0]) 
    2201                                         { 
    2202                                                 sprintf(gcQuery,"<blink>%s is required</blink>",cParam1Label); 
    2203                                                 gcMessage=gcQuery; 
    2204                                                 cParam1Style="type_fields_req"; 
    2205                                                 htmlResourceWizard(uStep); 
    2206                                         } 
    2207                                         FQDomainName(cParam1); 
    2208                                         if(cParam1[strlen(cParam1)-1]!='.') strcat(cParam1,"."); 
    2209  
    2210                                         if(strcmp(cZone+strlen(cZone)-5,".arpa")) 
    2211                                         { 
    2212                                                 sprintf(cName,"%.255s.",cZone); 
    2213                                         } 
    2214                                         //else no other rules for arpa zone for now TODO 
    2215                                 } 
    2216                                 else if(!strcmp(cRRType,"HINFO")) 
    2217                                 { 
    2218                                         if(!cParam1[0]) 
    2219                                         { 
    2220                                                 sprintf(gcQuery,"<blink>%s is required</blink>",cParam1Label); 
    2221                                                 gcMessage=gcQuery; 
    2222                                                 cParam1Style="type_fields_req"; 
    2223                                                 htmlResourceWizard(uStep); 
    2224                                         } 
    2225                                         if(cParam1[0]!='"' && cParam1[strlen(cParam1)-1]!='"') 
    2226                                         { 
    2227                                                 sprintf(gcQuery,"\"%.4095s\"",cParam1); 
    2228                                                 sprintf(cParam1,"%.99s",gcQuery); 
    2229                                         } 
    2230  
    2231                                         if(!cParam2[0]) 
    2232                                         { 
    2233                                                 sprintf(gcQuery,"<blink>%s is required</blink>",cParam2Label); 
    2234                                                 gcMessage=gcQuery; 
    2235                                                 cParam2Style="type_fields_req"; 
    2236                                                 htmlResourceWizard(uStep); 
    2237                                         } 
    2238                                         if(cParam2[0]!='"' && cParam1[strlen(cParam2)-1]!='"') 
    2239                                         { 
    2240                                                 sprintf(gcQuery,"\"%.4095s\"",cParam2); 
    2241                                                 sprintf(cParam2,"%.99s",gcQuery); 
    2242                                         } 
    2243                                 } 
    2244                                 else if(!strcmp(cRRType,"TXT")) 
    2245                                 { 
    2246                                         char *cp; 
    2247  
    2248                                         cParam2[0]=0; 
    2249                                         if(!cParam1[0]) 
    2250                                         { 
    2251                                                 sprintf(gcQuery,"<blink>%s is required</blink>",cParam1Label); 
    2252                                                 gcMessage=gcQuery; 
    2253                                                 cParam1Style="type_fields_req"; 
    2254                                                 htmlResourceWizard(uStep); 
    2255                                         } 
    2256                                         if(cParam1[0]!='"' && cParam1[strlen(cParam1)-1]!='"') 
    2257                                         { 
    2258                                                 sprintf(gcQuery,"\"%.4095s\"",cParam1); 
    2259                                                 sprintf(cParam1,"%.99s",gcQuery); 
    2260                                         } 
    2261                                         else if(cParam1[0]!='"' && cParam1[strlen(cParam1)-1]=='"') 
    2262                                         { 
    2263                                                 sprintf(gcQuery,"\"%.4095s",cParam1); 
    2264                                                 sprintf(cParam1,"%.99s",gcQuery); 
    2265                                         } 
    2266                                         else if(cParam1[0]=='"' && cParam1[strlen(cParam1)-1]!='"') 
    2267                                         { 
    2268                                                 sprintf(gcQuery,"%.4095s\"",cParam1); 
    2269                                                 sprintf(cParam1,"%.99s",gcQuery); 
    2270                                         } 
    2271                                         else if((cp=strchr(cParam1+1,'"'))) 
    2272                                         { 
    2273                                                 if(cp!=cParam1+strlen(cParam1)-1) 
    2274                                                 { 
    2275                                                         sprintf(gcQuery,"<blink>Stray \" in TXT value</blink>"); 
    2276                                                         gcMessage=gcQuery; 
    2277                                                         cParam1Style="type_fields_req"; 
    2278                                                         htmlResourceWizard(uStep); 
    2279                                                 } 
    2280                                         } 
    2281  
    2282                                 } 
    2283                                 else if(1) 
    2284                                 { 
    2285                                         gcMessage="<blink>Must select valid Resource Type (A,MX,PTR,TXT,NS,CNAME,HINFO)</blink>"; 
    2286                                         cRRTypeStyle="type_fields_req"; 
    2287                                         htmlResourceWizard(uStep); 
    2288                                 } 
    2289  
    22901994                                break; 
    22911995                }//switch(uStep)