| 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 | | } |