345 lines
7.9 KiB
C
345 lines
7.9 KiB
C
/*++
|
|
|
|
Copyright (c) 1997 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
adddom.c
|
|
|
|
Abstract:
|
|
|
|
Domain Name System (DNS) Server
|
|
|
|
Test Code for adding a Zone
|
|
|
|
Author:
|
|
|
|
Ram Viswanathan (ramv) 14th March 1997
|
|
|
|
Revision History:
|
|
|
|
Ram Viswanathan (ramv) 14th March 1997 Created
|
|
|
|
5th May 1997 Added Callback function testing
|
|
--*/
|
|
|
|
|
|
|
|
#include <windows.h>
|
|
|
|
//
|
|
// ********* CRunTime Includes
|
|
//
|
|
|
|
#include <stdlib.h>
|
|
#include <limits.h>
|
|
#include <io.h>
|
|
#include <stdio.h>
|
|
#include "dns.h"
|
|
#include "dnsapi.h"
|
|
#include "dnslib.h"
|
|
|
|
INT __cdecl
|
|
main (int argc, char *argv[])
|
|
{
|
|
DWORD dwRes;
|
|
|
|
LPSTR pszMapFile = NULL;
|
|
INT i;
|
|
BOOL fDownLevel =FALSE;
|
|
DWORD dwOperation = DYNDNS_ADD_ENTRY;
|
|
LPSTR lpTemp = NULL;
|
|
DWORD Part1, Part2, Part3, Part4;
|
|
FILE *fp = NULL;
|
|
CHAR szInputString[MAX_PATH];
|
|
CHAR szAddr[20];
|
|
LPSTR pszAddr = NULL;
|
|
CHAR szName[50];
|
|
CHAR c;
|
|
DWORD dwFlags = 0;
|
|
char seps[]=" ,\t\n";
|
|
CHAR AdapterName[50];
|
|
CHAR HostName[50];
|
|
CHAR DomainName[50];
|
|
INT ipAddrCount;
|
|
REGISTER_HOST_ENTRY HostAddrs[5];
|
|
char *token;
|
|
|
|
//
|
|
// 1st argument is a/d (for add or delete)
|
|
// 2nd argument is f/n (register forwards/not register forwards)
|
|
// 3rd argument is filename
|
|
|
|
// Note that no optional parameters are set
|
|
//
|
|
|
|
if (argc != 2){
|
|
|
|
printf("Usage is %s filename \n", argv[0]);
|
|
exit(-1);
|
|
}
|
|
|
|
|
|
pszMapFile = argv[1];
|
|
|
|
//
|
|
// set up stuff for registration
|
|
//
|
|
|
|
dwRes = DnsAsyncRegisterInit(NULL);
|
|
|
|
if (dwRes){
|
|
printf("Init failed with %x\n", dwRes);
|
|
}
|
|
|
|
|
|
if (!(fp = fopen (pszMapFile, "r+"))){
|
|
printf(" Could not open map file %s \n", pszMapFile);
|
|
}
|
|
|
|
while (fgets (szInputString, MAX_PATH, fp) != NULL){
|
|
//
|
|
// parse the input string
|
|
//
|
|
token = strtok(szInputString, seps);
|
|
|
|
strcpy (AdapterName, token);
|
|
|
|
token =strtok(NULL, seps);
|
|
strcpy (HostName, token);
|
|
|
|
token =strtok(NULL, seps);
|
|
strcpy (DomainName, token);
|
|
|
|
ipAddrCount = 0;
|
|
|
|
token =strtok(NULL, seps);
|
|
while ( token != NULL){
|
|
strcpy (szAddr, token);
|
|
|
|
lpTemp = strtok( szAddr, "." );
|
|
Part1 = atoi( lpTemp );
|
|
lpTemp = strtok( NULL, "." );
|
|
Part2 = atoi( lpTemp );
|
|
lpTemp = strtok( NULL, "." );
|
|
Part3 = atoi( lpTemp );
|
|
lpTemp = strtok( NULL, "." );
|
|
Part4 = atoi( lpTemp );
|
|
|
|
|
|
printf( "\nRegistering DNS record for:\n" );
|
|
printf("AdapterName = %s\n", AdapterName);
|
|
printf("HostName = %s\n", HostName);
|
|
printf("DomainName = %s\n", DomainName);
|
|
|
|
printf( "Address: %d.%d.%d.%d\n", Part1, Part2, Part3, Part4 );
|
|
|
|
HostAddrs[ipAddrCount].dwOptions = REGISTER_HOST_PTR;
|
|
|
|
HostAddrs[ipAddrCount].Addr.ipAddr = (DWORD)(Part1) + (DWORD)(Part2 << 8) +
|
|
(DWORD)(Part3 << 16) + (DWORD)(Part4 << 24);
|
|
|
|
|
|
ipAddrCount++;
|
|
token =strtok(NULL, seps);
|
|
|
|
}
|
|
|
|
|
|
dwRes = DnsAsyncRegisterHostAddrs_A (
|
|
AdapterName,
|
|
HostName,
|
|
HostAddrs,
|
|
ipAddrCount,
|
|
NULL,
|
|
0,
|
|
DomainName,
|
|
NULL,
|
|
40,
|
|
0
|
|
);
|
|
|
|
if (dwRes){
|
|
printf("Host Name registration failed with %x\n", dwRes);
|
|
}
|
|
|
|
}
|
|
|
|
fclose(fp);
|
|
|
|
printf("Hit Enter to do the ipconfig /release now! \n");
|
|
c = getchar();
|
|
|
|
|
|
//
|
|
// do the releases now
|
|
//
|
|
|
|
|
|
if (!(fp = fopen (pszMapFile, "r+"))){
|
|
printf(" Could not open map file %s \n", pszMapFile);
|
|
}
|
|
|
|
while (fgets (szInputString, MAX_PATH, fp) != NULL){
|
|
//
|
|
// parse the input string
|
|
//
|
|
token = strtok(szInputString, seps);
|
|
|
|
strcpy (AdapterName, token);
|
|
|
|
token =strtok(NULL, seps);
|
|
strcpy (HostName, token);
|
|
|
|
token =strtok(NULL, seps);
|
|
strcpy (DomainName, token);
|
|
|
|
ipAddrCount = 0;
|
|
|
|
token =strtok(NULL, seps);
|
|
while ( token != NULL){
|
|
strcpy (szAddr, token);
|
|
|
|
lpTemp = strtok( szAddr, "." );
|
|
Part1 = atoi( lpTemp );
|
|
lpTemp = strtok( NULL, "." );
|
|
Part2 = atoi( lpTemp );
|
|
lpTemp = strtok( NULL, "." );
|
|
Part3 = atoi( lpTemp );
|
|
lpTemp = strtok( NULL, "." );
|
|
Part4 = atoi( lpTemp );
|
|
|
|
|
|
printf( "\nRegistering DNS record for:\n" );
|
|
printf("AdapterName = %s\n", AdapterName);
|
|
printf("HostName = %s\n", HostName);
|
|
printf("DomainName = %s\n", DomainName);
|
|
|
|
printf( "Address: %d.%d.%d.%d\n", Part1, Part2, Part3, Part4 );
|
|
|
|
HostAddrs[ipAddrCount].dwOptions = REGISTER_HOST_PTR;
|
|
|
|
HostAddrs[ipAddrCount].Addr.ipAddr = (DWORD)(Part1) + (DWORD)(Part2 << 8) +
|
|
(DWORD)(Part3 << 16) + (DWORD)(Part4 << 24);
|
|
|
|
|
|
ipAddrCount++;
|
|
token =strtok(NULL, seps);
|
|
|
|
}
|
|
|
|
|
|
dwRes = DnsAsyncRegisterHostAddrs_A (
|
|
AdapterName,
|
|
HostName,
|
|
HostAddrs,
|
|
ipAddrCount,
|
|
NULL,
|
|
0,
|
|
DomainName,
|
|
NULL,
|
|
40,
|
|
DYNDNS_DEL_ENTRY
|
|
);
|
|
|
|
if (dwRes){
|
|
printf("Host Name registration failed with %x\n", dwRes);
|
|
}
|
|
|
|
}
|
|
|
|
fclose(fp);
|
|
|
|
printf("Hit Enter to do the ipconfig /renew now! \n");
|
|
c = getchar();
|
|
|
|
|
|
|
|
if (!(fp = fopen (pszMapFile, "r+"))){
|
|
printf(" Could not open map file %s \n", pszMapFile);
|
|
}
|
|
|
|
while (fgets (szInputString, MAX_PATH, fp) != NULL){
|
|
//
|
|
// parse the input string
|
|
//
|
|
token = strtok(szInputString, seps);
|
|
|
|
strcpy (AdapterName, token);
|
|
|
|
token =strtok(NULL, seps);
|
|
strcpy (HostName, token);
|
|
|
|
token =strtok(NULL, seps);
|
|
strcpy (DomainName, token);
|
|
|
|
ipAddrCount = 0;
|
|
|
|
token =strtok(NULL, seps);
|
|
while ( token != NULL){
|
|
strcpy (szAddr, token);
|
|
|
|
lpTemp = strtok( szAddr, "." );
|
|
Part1 = atoi( lpTemp );
|
|
lpTemp = strtok( NULL, "." );
|
|
Part2 = atoi( lpTemp );
|
|
lpTemp = strtok( NULL, "." );
|
|
Part3 = atoi( lpTemp );
|
|
lpTemp = strtok( NULL, "." );
|
|
Part4 = atoi( lpTemp );
|
|
|
|
|
|
printf( "\nRegistering DNS record for:\n" );
|
|
printf("AdapterName = %s\n", AdapterName);
|
|
printf("HostName = %s\n", HostName);
|
|
printf("DomainName = %s\n", DomainName);
|
|
|
|
printf( "Address: %d.%d.%d.%d\n", Part1, Part2, Part3, Part4 );
|
|
|
|
HostAddrs[ipAddrCount].dwOptions = REGISTER_HOST_PTR;
|
|
|
|
HostAddrs[ipAddrCount].Addr.ipAddr = (DWORD)(Part1) + (DWORD)(Part2 << 8) +
|
|
(DWORD)(Part3 << 16) + (DWORD)(Part4 << 24);
|
|
|
|
|
|
ipAddrCount++;
|
|
token =strtok(NULL, seps);
|
|
|
|
}
|
|
|
|
|
|
dwRes = DnsAsyncRegisterHostAddrs_A (
|
|
AdapterName,
|
|
HostName,
|
|
HostAddrs,
|
|
ipAddrCount,
|
|
NULL,
|
|
0,
|
|
DomainName,
|
|
NULL,
|
|
40,
|
|
0
|
|
);
|
|
|
|
if (dwRes){
|
|
printf("Host Name registration failed with %x\n", dwRes);
|
|
}
|
|
|
|
}
|
|
|
|
fclose(fp);
|
|
|
|
c = getchar();
|
|
dwRes = DnsAsyncRegisterTerm();
|
|
|
|
if (dwRes){
|
|
printf("Termination failed with %x\n", dwRes);
|
|
}
|
|
|
|
c = getchar();
|
|
error:
|
|
return(1);
|
|
|
|
}
|
|
|