Changeset 1248

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

idnsAdmin: added uPerRRTypeCheck()

Files:
1 modified

Legend:

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

    r1238 r1248  
    9292void CreatetResourceTest(void); 
    9393void PrepareTestData(void); 
     94unsigned uPerRRTypeCheck(void); 
    9495 
    9596 
     
    942943{ 
    943944        register int i; 
    944         unsigned a=0,b=0,c=0,d=0;        
    945945         
    946946        //For all types check here 
     
    10231023         
    10241024        //Per Type checks 
     1025        if(uPerRRTypeCheck()) 
     1026                return(3); 
     1027 
     1028        if(OnLineZoneCheck()) 
     1029        { 
     1030                return(18); 
     1031        } 
     1032 
     1033        return(0); 
     1034 
     1035}//void RRCheck(int uMode) 
     1036 
     1037 
     1038unsigned uPerRRTypeCheck(void) 
     1039{ 
     1040        //Per Type checks 
     1041        unsigned a=0,b=0,c=0,d=0; 
     1042 
    10251043        if(!strcmp(cRRType,"CNAME")) 
    10261044        { 
     
    17571775        else if(1) 
    17581776        { 
    1759                 gcMessage="<blink>Error: </blink>Must select valid Resource Type (A,MX,PTR,TXT,NS,CNAME,HINFO,SRV)"; 
     1777                gcMessage="<blink>Error: </blink>Must select valid Resource Type (A,MX,PTR,TXT,NS,CNAME,HINFO,SRV,AAAA,NAPTR)"; 
    17601778                cRRTypeStyle="type_fields_req"; 
    17611779                return(16); 
    17621780        } 
    17631781 
    1764         if(OnLineZoneCheck()) 
    1765         { 
    1766                 return(18); 
    1767         } 
    1768  
    17691782        return(0); 
    17701783 
    1771 }//void RRCheck(int uMode) 
     1784}//unsigned uPerRRTypeCheck(void) 
    17721785 
    17731786 
     
    19561969                { 
    19571970        if(uStep) 
    1958                 fprintf(fp,"<option value='&cRRType=PTR&cZone=%s&gcFunction=%s&uResource=%u&uStep=%u&uView=%s'",gcZone,gcFunction,uResource,uStep,cuView); 
     1971                fprintf(fp,"<option value='&cRRType=PTR&cZone=%s&gcFunction=%s&uResource=%u&uStep=%u&uView=%s'", 
     1972                                gcZone 
     1973                                ,gcFunction 
     1974                                ,uResource 
     1975                                ,uStep 
     1976                                ,cuView); 
    19591977        else 
    1960                 fprintf(fp,"<option value='&cRRType=PTR&cZone=%s&gcFunction=%s&uResource=%u&uView=%s'",gcZone,gcFunction,uResource,cuView); 
     1978                fprintf(fp,"<option value='&cRRType=PTR&cZone=%s&gcFunction=%s&uResource=%u&uView=%s'", 
     1979                                gcZone 
     1980                                ,gcFunction 
     1981                                ,uResource 
     1982                                ,cuView); 
    19611983                } 
    19621984                else 
     
    19671989                                sprintf(gcFunction,"Modify Confirm"); 
    19681990        if(uStep) 
    1969                 fprintf(fp,"<option value='&cRRType=PTR&cZone=%s&gcFunction=%s&uResource=%u&uStep=%u&uView=%s'",gcZone,gcFunction,uResource,uStep,cuView); 
     1991                fprintf(fp,"<option value='&cRRType=PTR&cZone=%s&gcFunction=%s&uResource=%u&uStep=%u&uView=%s'" 
     1992                                ,gcZone 
     1993                                ,gcFunction 
     1994                                ,uResource 
     1995                                ,uStep 
     1996                                ,cuView); 
    19701997        else 
    1971                 fprintf(fp,"<option value='&cRRType=PTR&cZone=%s&gcFunction=%s&uResource=%u&uView=%s'",gcZone,gcFunction,uResource,cuView); 
     1998                fprintf(fp,"<option value='&cRRType=PTR&cZone=%s&gcFunction=%s&uResource=%u&uView=%s'", 
     1999                                gcZone 
     2000                                ,gcFunction 
     2001                                ,uResource 
     2002                                ,cuView); 
    19722003} 
    19732004                if(!strcmp(cRRType,"PTR")) 
     
    19932024                        { 
    19942025        if(uStep) 
    1995                 fprintf(fp,"<option value='&cRRType=%s&cZone=%s&gcFunction=%s&uResource=%u&uStep=%u&uView=%s'",field[0],gcZone,gcFunction,uResource,uStep,cuView); 
     2026                fprintf(fp,"<option value='&cRRType=%s&cZone=%s&gcFunction=%s&uResource=%u&uStep=%u&uView=%s'", 
     2027                                field[0] 
     2028                                ,gcZone 
     2029                                ,gcFunction 
     2030                                ,uResource 
     2031                                ,uStep 
     2032                                ,cuView); 
    19962033        else 
    1997                 fprintf(fp,"<option value='&cRRType=%s&cZone=%s&gcFunction=%s&uResource=%u&uView=%s'",field[0],gcZone,gcFunction,uResource,cuView); 
     2034                fprintf(fp,"<option value='&cRRType=%s&cZone=%s&gcFunction=%s&uResource=%u&uView=%s'", 
     2035                                field[0] 
     2036                                ,gcZone 
     2037                                ,gcFunction 
     2038                                ,uResource 
     2039                                ,cuView); 
    19982040                        } 
    19992041                        else 
     
    20042046                                        sprintf(gcFunction,"Modify Confirm"); 
    20052047        if(uStep) 
    2006                 fprintf(fp,"<option value='&cRRType=%s&cZone=%s&gcFunction=%s&uResource=%u&uStep=%u&uView=%s'",field[0],gcZone,gcFunction,uResource,uStep,cuView); 
     2048                fprintf(fp,"<option value='&cRRType=%s&cZone=%s&gcFunction=%s&uResource=%u&uStep=%u&uView=%s'", 
     2049                                field[0] 
     2050                                ,gcZone 
     2051                                ,gcFunction 
     2052                                ,uResource 
     2053                                ,uStep 
     2054                                ,cuView); 
    20072055        else 
    2008                 fprintf(fp,"<option value='&cRRType=%s&cZone=%s&gcFunction=%s&uResource=%u&uView=%s'",field[0],gcZone,gcFunction,uResource,cuView); 
     2056                fprintf(fp,"<option value='&cRRType=%s&cZone=%s&gcFunction=%s&uResource=%u&uView=%s'", 
     2057                                field[0] 
     2058                                ,gcZone 
     2059                                ,gcFunction 
     2060                                ,uResource 
     2061                                ,cuView); 
    20092062                        } 
    20102063                        if(!strcmp(cRRType,field[0])) 
     
    20292082                sprintf(cRRType,"A"); 
    20302083 
    2031         sprintf(gcQuery,"SELECT cParam1Label,cParam1Tip,cParam2Label,cParam2Tip,cNameLabel,cNameTip,cParam3Label,cParam3Tip,cParam4Label,cParam4Tip FROM tRRType WHERE cLabel='%s'",cRRType); 
     2084        sprintf(gcQuery,"SELECT cParam1Label,cParam1Tip,cParam2Label,cParam2Tip,cNameLabel," 
     2085                        "cNameTip,cParam3Label,cParam3Tip,cParam4Label,cParam4Tip FROM " 
     2086                        "tRRType WHERE cLabel='%s'",cRRType); 
    20322087        mysql_query(&gMysql,gcQuery); 
    20332088        if(mysql_errno(&gMysql)) 
     
    22392294        { 
    22402295                register int i=0; 
    2241                 unsigned a=0,b=0,c=0,d=0; 
    22422296 
    22432297                LoadRRTypeLabels(); 
     
    22942348                                                cName[i]!='_') 
    22952349                                        { 
    2296                                                 gcMessage="<blink>Error: </blink>Name can be empty or have only letters, numbers, the default origin @ symbol. Or dashes (-) and periods (.)"; 
     2350                                                gcMessage="<blink>Error: </blink>Name can be empty or have only " 
     2351                                                        "letters, numbers, the default origin @ symbol. Or dashes (-) and periods (.)"; 
    22972352                                                cNameStyle="type_fields_req"; 
    22982353                                                htmlResourceWizard(uStep); 
     
    23162371                                        sprintf(cParam2,"%.99s",gcQuery); 
    23172372                                } 
    2318                                 if(!strcmp(cRRType,"CNAME")) 
    2319                                 { 
    2320                                         //cParam2 not used. Erased. 
    2321                                         cParam2[0]=0; 
    2322  
    2323                                 if(!cParam1[0]) 
    2324                                 { 
    2325                                         sprintf(cParam1,"%s.",gcZone); 
    2326                                         sprintf(gcQuery,"<blink>Error: </blink>%s is required. Common CNAME default entry made for you, check/change if needed",cParam1Label); 
    2327                                         gcMessage=gcQuery; 
    2328                                         cParam1Style="type_fields_req"; 
     2373                                 
     2374                                if(uPerRRTypeCheck()) 
    23292375                                        htmlResourceWizard(uStep); 
    2330                                 } 
    2331                                 else 
    2332                                 { 
    2333                                         char cParam1Save[101]={""}; 
    2334                                         char cParam1Temp[101]={""}; 
    2335  
    2336                                         sprintf(cParam1Save,"%.100s",cParam1); 
    2337                                         //converts, eliminates illegal chars. 
    2338                                         //helpers try to format for you...lol 
    2339                                         FQDomainName(cParam1); 
    2340  
    2341                                         //Ticket #323 CNAME record pointing to itself 
    2342                                         if(!strcmp(cName,cParam1) || !strcmp(gcZone,cParam1)) 
    2343                                         { 
    2344                                                 gcMessage="<blink>Error: </blink>Can't create a CNAME record pointing to itself"; 
    2345                                                 cParam1Style="type_fields_req"; 
    2346                                                 cNameStyle="type_fields_req"; 
    2347                                                 htmlResourceWizard(uStep); 
    2348                                         } 
    2349  
    2350                                         if(strchr(cParam1,'.')) 
    2351                                         { 
    2352                                                 //FQDN 
    2353                                                 //Missing trailing dot 
    2354                                                 if(cParam1[strlen(cParam1)-1]!='.') 
    2355                                                 { 
    2356                                                         sprintf(cParam1Temp,"%.100s.",cParam1); 
    2357                                                         sprintf(cParam1,"%.99s",cParam1Temp); 
    2358                                                 } 
    2359                                                 if(strcmp(cParam1,cParam1Save)) 
    2360                                                 { 
    2361                                                         sprintf(gcQuery, 
    2362                                                                 "<blink>Error: </blink>%s was changed check/fix", 
    2363                                                                 cParam1Label); 
    2364                                                         gcMessage=gcQuery; 
    2365                                                         cParam1Style="type_fields_req"; 
    2366                                                         htmlResourceWizard(uStep); 
    2367                                                 } 
    2368                                         } 
    2369                                         else 
    2370                                         { 
    2371                                                 //Not FQDN, but internal zone member or another zone? 
    2372  
    2373                                                 //TODO 
    2374                                                 //Advanced help not implemented yet. 
    2375                                                 //Check in this zone for A record. Should not be another CNAME. 
    2376                                                 //Check in tZone 
    2377  
    2378                                                 if(cParam1[strlen(cParam1)-1]!='.') 
    2379                                                 { 
    2380                                                         sprintf(cParam1Temp,"%.49s.%.49s.",cParam1,gcZone); 
    2381                                                         sprintf(cParam1,"%.99s",cParam1Temp); 
    2382                                                 } 
    2383                                                 if(strcmp(cParam1,cParam1Save)) 
    2384                                                 { 
    2385                                                         sprintf(gcQuery, 
    2386                                                                 "<blink>Error: </blink>%s was changed check/fix", 
    2387                                                                 cParam1Label); 
    2388                                                         gcMessage=gcQuery; 
    2389                                                         cParam1Style="type_fields_req"; 
    2390                                                         htmlResourceWizard(uStep); 
    2391                                                 } 
    2392                                         } 
    2393  
    2394                                 } 
    2395                                 } 
    2396                                 else if(!strcmp(cRRType,"A")) 
    2397                                 { 
    2398  
    2399                                         if(!strcmp(gcZone+strlen(gcZone)-5,".arpa")) 
    2400                                         { 
    2401                                                 gcMessage="<blink>Error: </blink>Can not add A records to arpa zones"; 
    2402                                                  
    2403                                                 htmlResourceWizard(uStep); 
    2404                                         } 
    2405                                         sscanf(cParam1,"%u.%u.%u.%u",&a,&b,&c,&d); 
    2406                                         if(a>254) a=0; 
    2407                                         if(b>254) b=0; 
    2408                                         if(c>255) c=0;   
    2409                                         if(d>254) d=0;   
    2410  
    2411                                         sprintf(cParam1,"%u.%u.%u.%u",a,b,c,d); 
    2412  
    2413                                         cParam2[0]=0; 
    2414                                         if(!a || !d) 
    2415                                         { 
    2416                                                 sprintf(gcQuery, 
    2417                                                         "<blink>Error: </blink>Invalid IP Number for %s", 
    2418                                                         cParam1Label); 
    2419                                                 gcMessage=gcQuery; 
    2420                                                 cParam1Style="type_fields_req"; 
    2421                                                 htmlResourceWizard(uStep); 
    2422                                         } 
    2423                                         if(uRRExists(gcZone,cRRType,cName,cParam1)) 
    2424                                         { 
    2425                                                 gcMessage="<blink>Error: </blink>Resource record already exists"; 
    2426                                                 cParam1Style="type_fields_req"; 
    2427                                                 htmlResourceWizard(uStep); 
    2428                                         } 
    2429                                 } 
    2430                                 else if(!strcmp(cRRType,"PTR")) 
    2431                                 { 
    2432                                         unsigned uPtr=0; 
    2433                                         unsigned uPtrLen=strlen(cName); 
    2434                                         //We only allow simple classC in-addr PTR 
    2435                                         if(strstr(gcZone,"in-addr.arpa")) 
    2436                                         { 
    2437                                                 sscanf(cName,"%u",&uPtr); 
    2438                                                 sprintf(cName,"%u",uPtr); 
    2439  
    2440                                                 if(!uPtr) 
    2441                                                 { 
    2442                                                         sprintf(gcQuery,"<blink>Error: </blink>Class-C in-addr.arpa zone PTR must be the last octet of rev dns IP"); 
    2443                                                         gcMessage=gcQuery; 
    2444                                                         cNameStyle="type_fields_req"; 
    2445                                                         htmlResourceWizard(uStep); 
    2446                                                 } 
    2447  
    2448                                                 if(uPtr>254) 
    2449                                                 { 
    2450                                                         sprintf(gcQuery,"<blink>Error: </blink>PTR value out of range (1-254 allowed only)"); 
    2451                                                         gcMessage=gcQuery; 
    2452                                                         cNameStyle="type_fields_req"; 
    2453                                                         htmlResourceWizard(uStep); 
    2454                                                 } 
    2455  
    2456                                                 if(uPtrLen!=strlen(cName)) 
    2457                                                 { 
    2458                                                         sprintf(gcQuery,"<blink>Error: </blink>PTR was changed check"); 
    2459                                                         gcMessage=gcQuery; 
    2460                                                         cNameStyle="type_fields_req"; 
    2461                                                         htmlResourceWizard(uStep); 
    2462                                                 } 
    2463  
    2464                                                 sscanf(gcZone,"%u.%u.%u.in-adddr.arpa",&c,&b,&a); 
    2465                                                 if(!a) 
    2466                                                 { 
    2467                                                         sprintf(gcQuery, 
    2468                                                                 "<blink>Error: </blink>Unexpected in-addr.arpa zone name format"); 
    2469                                                         gcMessage=gcQuery; 
    2470                                                         cNameStyle="type_fields_req"; 
    2471                                                         htmlResourceWizard(uStep); 
    2472                                                 } 
    2473  
    2474                                                 if(uRRExists(gcZone,cRRType,cName,cParam1)) 
    2475                                                 { 
    2476                                                         gcMessage="<blink>Error: </blink>Resource record already exists"; 
    2477                                                         cNameStyle="type_fields_req"; 
    2478                                                         htmlResourceWizard(uStep); 
    2479                                                 } 
    2480                                                  
    2481                                                 // 
    2482                                                 //See comment above 
    2483                                                 /*sprintf(cParam2,"%u.%u.%u.%u",a,b,c,uPtr); 
    2484                                                 if(!InMyBlocks(cParam2)) 
    2485                                                 { 
    2486                                                         gcMessage="<blink>Error: </blink>IP Number not in any of your IP blocks"; 
    2487                                                         cNameStyle="type_fields_req"; 
    2488                                                         htmlResourceWizard(1); 
    2489                                                 } 
    2490                                                 */ 
    2491                                                 cParam2[0]=0;//Was just a temp place holder 
    2492                                         } 
    2493  
    2494                                         //Non arpa PTR records. Should we allow? 
    2495                                         cParam2[0]=0; 
    2496                                         FQDomainName(cParam1); 
    2497                                         if(!cParam1[0]) 
    2498                                         { 
    2499                                                 sprintf(gcQuery,"<blink>Error: </blink>%s is required",cParam1Label); 
    2500                                                 gcMessage=gcQuery; 
    2501                                                 cParam1Style="type_fields_req"; 
    2502                                                 htmlResourceWizard(uStep); 
    2503                                         } 
    2504                                         if(cParam1[strlen(cParam1)-1]!='.') strcat(cParam1,"."); 
    2505                                 } 
    2506                                 else if(!strcmp(cRRType,"MX")) 
    2507                                 { 
    2508                                         if(!strcmp(gcZone+strlen(gcZone)-5,".arpa")) 
    2509                                         { 
    2510                                                 gcMessage="<blink>Error: </blink>Can not add MX records to arpa zones"; 
    2511                                                 cRRTypeStyle="type_fields_req"; 
    2512                                                 htmlResourceWizard(uStep); 
    2513                                         } 
    2514                                         sscanf(cParam1,"%u",&a); 
    2515                                         sprintf(cParam1,"%.99u",a); 
    2516                                         if(!a || a>1000) 
    2517                                         { 
    2518                                                 sprintf(gcQuery,"<blink>Error: </blink>Invalid MX Priority Number for %s", 
    2519                                                         cParam1Label); 
    2520                                                 gcMessage=gcQuery; 
    2521                                                 cParam1Style="type_fields_req"; 
    2522                                                 htmlResourceWizard(uStep); 
    2523                                         } 
    2524                                         FQDomainName(cParam2); 
    2525                                         if(!cParam2[0]) 
    2526                                         { 
    2527                                                 sprintf(gcQuery,"<blink>Error: </blink>%s is required",cParam2Label); 
    2528                                                 gcMessage=gcQuery; 
    2529                                                 cParam2Style="type_fields_req"; 
    2530                                                 htmlResourceWizard(uStep); 
    2531                                         } 
    2532                                         if(cParam2[strlen(cParam2)-1]!='.') strcat(cParam2,".");                 
    2533                                 } 
    2534                                 else if(!strcmp(cRRType,"NS")) 
    2535                                 { 
    2536                                         //All cases 
    2537                                         cParam2[0]=0; 
    2538                                         if(!cParam1[0]) 
    2539                                         { 
    2540                                                 sprintf(gcQuery,"<blink>Error: </blink>%s is required",cParam1Label); 
    2541                                                 gcMessage=gcQuery; 
    2542                                                 cParam1Style="type_fields_req"; 
    2543                                                 htmlResourceWizard(uStep); 
    2544                                         } 
    2545                                         FQDomainName(cParam1); 
    2546                                         if(cParam1[strlen(cParam1)-1]!='.') strcat(cParam1,"."); 
    2547  
    2548                                         if(strcmp(gcZone+strlen(gcZone)-5,".arpa")) 
    2549                                         { 
    2550                                                 sprintf(cName,"%.255s.",gcZone); 
    2551                                         } 
    2552                                         //else no other rules for arpa zone for now TODO 
    2553                                 } 
    2554                                 else if(!strcmp(cRRType,"HINFO")) 
    2555                                 { 
    2556                                         if(!cParam1[0]) 
    2557                                         { 
    2558                                                 sprintf(gcQuery,"<blink>Error: </blink>%s is required",cParam1Label); 
    2559                                                 gcMessage=gcQuery; 
    2560                                                 cParam1Style="type_fields_req"; 
    2561                                                 htmlResourceWizard(uStep); 
    2562                                         } 
    2563                                         if(cParam1[0]!='"' && cParam1[strlen(cParam1)-1]!='"') 
    2564                                         { 
    2565                                                 sprintf(gcQuery,"\"%.4095s\"",cParam1); 
    2566                                                 sprintf(cParam1,"%.99s",gcQuery); 
    2567                                         } 
    2568  
    2569                                         if(!cParam2[0]) 
    2570                                         { 
    2571                                                 sprintf(gcQuery,"<blink>Error: </blink>%s is required",cParam2Label); 
    2572                                                 gcMessage=gcQuery; 
    2573                                                 cParam2Style="type_fields_req"; 
    2574                                                 htmlResourceWizard(uStep); 
    2575                                         } 
    2576                                         if(cParam2[0]!='"' && cParam1[strlen(cParam2)-1]!='"') 
    2577                                         { 
    2578                                                 sprintf(gcQuery,"\"%.4095s\"",cParam2); 
    2579                                                 sprintf(cParam2,"%.99s",gcQuery); 
    2580                                         } 
    2581                                 } 
    2582                                 else if(!strcmp(cRRType,"TXT")) 
    2583                                 { 
    2584                                         char *cp; 
    2585  
    2586                                         cParam2[0]=0; 
    2587                                         if(!cParam1[0]) 
    2588                                         { 
    2589                                                 sprintf(gcQuery,"<blink>Error: </blink>%s is required",cParam1Label); 
    2590                                                 gcMessage=gcQuery; 
    2591                                                 cParam1Style="type_fields_req"; 
    2592                                                 htmlResourceWizard(uStep); 
    2593                                         } 
    2594                                         if(cParam1[0]!='"' && cParam1[strlen(cParam1)-1]!='"') 
    2595                                         { 
    2596                                                 sprintf(gcQuery,"\"%.4095s\"",cParam1); 
    2597                                                 sprintf(cParam1,"%.99s",gcQuery); 
    2598                                         } 
    2599                                         else if(cParam1[0]!='"' && cParam1[strlen(cParam1)-1]=='"') 
    2600                                         { 
    2601                                                 sprintf(gcQuery,"\"%.4095s",cParam1); 
    2602                                                 sprintf(cParam1,"%.99s",gcQuery); 
    2603                                         } 
    2604                                         else if(cParam1[0]=='"' && cParam1[strlen(cParam1)-1]!='"') 
    2605                                         { 
    2606                                                 sprintf(gcQuery,"%.4095s\"",cParam1); 
    2607                                                 sprintf(cParam1,"%.99s",gcQuery); 
    2608                                         } 
    2609                                         else if((cp=strchr(cParam1+1,'"'))) 
    2610                                         { 
    2611                                                 if(cp!=cParam1+strlen(cParam1)-1) 
    2612                                                 { 
    2613                                                         sprintf(gcQuery,"<blink>Error: </blink>Stray \" in TXT value"); 
    2614                                                         gcMessage=gcQuery; 
    2615                                                         cParam1Style="type_fields_req"; 
    2616                                                         htmlResourceWizard(uStep); 
    2617                                                 } 
    2618                                         } 
    2619  
    2620                                 } 
    2621                                 else if(1) 
    2622                                 { 
    2623                                         gcMessage="<blink>Error: </blink>Must select valid Resource Type (A,MX,PTR,TXT,NS,CNAME,HINFO)"; 
    2624                                         cRRTypeStyle="type_fields_req"; 
    2625                                         htmlResourceWizard(uStep); 
    2626                                 } 
    26272376 
    26282377                                break;