diff options
author | Gerald Carter <jerry@samba.org> | 2006-11-17 21:46:26 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 12:15:53 -0500 |
commit | c2aae726ea3f697c50f8d2304e2a9e69c56ab90f (patch) | |
tree | 0c05a34d585fa27282a3a106863c99e24237957f /source3/libaddns/dnsuprequest.c | |
parent | 9a88644bb5834b526085fad7536a02e333bf8c3c (diff) | |
download | samba-c2aae726ea3f697c50f8d2304e2a9e69c56ab90f.tar.gz samba-c2aae726ea3f697c50f8d2304e2a9e69c56ab90f.tar.bz2 samba-c2aae726ea3f697c50f8d2304e2a9e69c56ab90f.zip |
r19762: libaddns/*[ch] code fixes donated by Centeris Corporation
(http://www.centeris.com/) under my copyright.
* Rework error reporting to use DNS_ERROR instead
of int32
* Convert memory allocation to use talloc()
* Generalize the DNS request/response packet marshalling
* Fix the secure update requests
(This used to be commit c78798333616c3f823514df0f58da2eb3a30a988)
Diffstat (limited to 'source3/libaddns/dnsuprequest.c')
-rw-r--r-- | source3/libaddns/dnsuprequest.c | 428 |
1 files changed, 0 insertions, 428 deletions
diff --git a/source3/libaddns/dnsuprequest.c b/source3/libaddns/dnsuprequest.c deleted file mode 100644 index 9de5ec88ae..0000000000 --- a/source3/libaddns/dnsuprequest.c +++ /dev/null @@ -1,428 +0,0 @@ -/* - Linux DNS client library implementation - - Copyright (C) 2006 Krishna Ganugapati <krishnag@centeris.com> - Copyright (C) 2006 Gerald Carter <jerry@samba.org> - - ** NOTE! The following LGPL license applies to the libaddns - ** library. This does NOT imply that all of Samba is released - ** under the LGPL - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301 USA -*/ - -#include "dns.h" - -/********************************************************************* -*********************************************************************/ - -static int32 DNSUpdateMarshallZoneSection( HANDLE hSendBuffer, - DNS_ZONE_RECORD ** ppDNSZoneRecords, - int16 wZones ) -{ - int32 dwError = 0; - int32 i = 0; - int32 dwRead = 0; - DNS_ZONE_RECORD *pDNSZoneRecord = NULL; - int16 wnZoneType = 0; - int16 wnZoneClass = 0; - - for ( i = 0; i < wZones; i++ ) { - - pDNSZoneRecord = *( ppDNSZoneRecords + i ); - dwError = - DNSMarshallDomainName( hSendBuffer, - pDNSZoneRecord->pDomainName ); - BAIL_ON_ERROR( dwError ); - - wnZoneType = htons( pDNSZoneRecord->wZoneType ); - dwError = - DNSMarshallBuffer( hSendBuffer, - ( uint8 * ) & wnZoneType, - ( int32 ) sizeof( int16 ), - &dwRead ); - BAIL_ON_ERROR( dwError ); - - wnZoneClass = htons( pDNSZoneRecord->wZoneClass ); - dwError = - DNSMarshallBuffer( hSendBuffer, - ( uint8 * ) & wnZoneClass, - ( int32 ) sizeof( int16 ), - &dwRead ); - BAIL_ON_ERROR( dwError ); - - pDNSZoneRecord++; - } - - error: - - return dwError; -} - -/********************************************************************* -*********************************************************************/ - -static int32 DNSUpdateMarshallPRSection( HANDLE hSendBuffer, - DNS_RR_RECORD ** ppDNSPRRRRecords, int16 wPRs ) -{ - int32 dwError = 0; - int32 i = 0; - DNS_RR_RECORD *pDNSPRRRRecord = NULL; - - - for ( i = 0; i < wPRs; i++ ) { - - pDNSPRRRRecord = *( ppDNSPRRRRecords + i ); - - dwError = DNSMarshallRRHeader( hSendBuffer, pDNSPRRRRecord ); - BAIL_ON_ERROR( dwError ); - - if ( pDNSPRRRRecord->RRHeader.wRDataSize ) { - dwError = - DNSMarshallRData( hSendBuffer, - pDNSPRRRRecord ); - BAIL_ON_ERROR( dwError ); - } - } - error: - - return dwError; -} - -/********************************************************************* -*********************************************************************/ - -static int32 DNSUpdateMarshallUpdateSection( HANDLE hSendBuffer, - DNS_RR_RECORD ** ppDNSUpdateRRRecords, - int16 wZones ) -{ - int32 dwError = 0; - int32 i = 0; - DNS_RR_RECORD *pDNSUpdateRRRecord = NULL; - - for ( i = 0; i < wZones; i++ ) { - - pDNSUpdateRRRecord = *( ppDNSUpdateRRRecords + i ); - - dwError = - DNSMarshallRRHeader( hSendBuffer, - pDNSUpdateRRRecord ); - - if ( pDNSUpdateRRRecord->RRHeader.wRDataSize ) { - dwError = DNSMarshallRData( hSendBuffer, - pDNSUpdateRRRecord ); - BAIL_ON_ERROR( dwError ); - } - - } - error: - - return dwError; -} - -/********************************************************************* -*********************************************************************/ - -static int32 DNSUpdateMarshallAdditionalSection( HANDLE hSendBuffer, - DNS_RR_RECORD ** - ppDNSAdditionalsRRRecords, - int16 wAdditionals ) -{ - int32 dwError = 0; - int32 i = 0; - DNS_RR_RECORD *pDNSAdditionalRRRecord = NULL; - - for ( i = 0; i < wAdditionals; i++ ) { - - pDNSAdditionalRRRecord = *( ppDNSAdditionalsRRRecords + i ); - - dwError = - DNSMarshallRRHeader( hSendBuffer, - pDNSAdditionalRRRecord ); - BAIL_ON_ERROR( dwError ); - - if ( pDNSAdditionalRRRecord->RRHeader.wRDataSize ) { - dwError = DNSMarshallRData( hSendBuffer, - pDNSAdditionalRRRecord ); - BAIL_ON_ERROR( dwError ); - } - } - - error: - - return dwError; -} - -/********************************************************************* -*********************************************************************/ - -int32 DNSUpdateSendUpdateRequest2( HANDLE hDNSServer, - DNS_UPDATE_REQUEST * pDNSRequest ) -{ - int32 dwError = 0; - int32 dwBytesSent = 0; - HANDLE hSendBuffer = ( HANDLE ) NULL; - - dwError = DNSUpdateBuildRequestMessage( pDNSRequest, &hSendBuffer ); - BAIL_ON_ERROR( dwError ); - - dwError = - DNSSendBufferContext( hDNSServer, hSendBuffer, &dwBytesSent ); - BAIL_ON_ERROR( dwError ); - - error: - - if ( hSendBuffer ) { - DNSFreeSendBufferContext( hSendBuffer ); - } - - return dwError; -} - -/********************************************************************* -*********************************************************************/ - -int32 DNSUpdateBuildRequestMessage( DNS_UPDATE_REQUEST * pDNSRequest, - HANDLE * phSendBuffer ) -{ - int32 dwError = 0; - char DNSMessageHeader[12]; - int16 wnIdentification = 0; - int16 wnParameter = 0; - int16 wnZones = 0; - int16 wnPRs = 0; - int16 wnUpdates = 0; - int16 wnAdditionals = 0; - int32 dwRead = 0; - HANDLE hSendBuffer = ( HANDLE ) NULL; - - dwError = DNSCreateSendBuffer( &hSendBuffer ); - BAIL_ON_ERROR( dwError ); - - wnIdentification = htons( pDNSRequest->wIdentification ); - memcpy( DNSMessageHeader, ( char * ) &wnIdentification, 2 ); - - wnParameter = htons( pDNSRequest->wParameter ); - memcpy( DNSMessageHeader + 2, ( char * ) &wnParameter, 2 ); - - wnZones = htons( pDNSRequest->wZones ); - memcpy( DNSMessageHeader + 4, ( char * ) &wnZones, 2 ); - - wnPRs = htons( pDNSRequest->wPRs ); - memcpy( DNSMessageHeader + 6, ( char * ) &wnPRs, 2 ); - - wnUpdates = htons( pDNSRequest->wUpdates ); - memcpy( DNSMessageHeader + 8, ( char * ) &wnUpdates, 2 ); - - wnAdditionals = htons( pDNSRequest->wAdditionals ); - memcpy( DNSMessageHeader + 10, ( char * ) &wnAdditionals, 2 ); - - dwError = - DNSMarshallBuffer( hSendBuffer, ( uint8 * ) DNSMessageHeader, - 12, &dwRead ); - BAIL_ON_ERROR( dwError ); - - if ( pDNSRequest->wZones ) { - dwError = - DNSUpdateMarshallZoneSection( hSendBuffer, - pDNSRequest-> - ppZoneRRSet, - pDNSRequest->wZones ); - BAIL_ON_ERROR( dwError ); - } - - if ( pDNSRequest->wPRs ) { - dwError = - DNSUpdateMarshallPRSection( hSendBuffer, - pDNSRequest->ppPRRRSet, - pDNSRequest->wPRs ); - BAIL_ON_ERROR( dwError ); - } - - if ( pDNSRequest->wUpdates ) { - dwError = - DNSUpdateMarshallUpdateSection( hSendBuffer, - pDNSRequest-> - ppUpdateRRSet, - pDNSRequest-> - wUpdates ); - BAIL_ON_ERROR( dwError ); - } - - if ( pDNSRequest->wAdditionals ) { - dwError = - DNSUpdateMarshallAdditionalSection( hSendBuffer, - pDNSRequest-> - ppAdditionalRRSet, - pDNSRequest-> - wAdditionals ); - BAIL_ON_ERROR( dwError ); - } -#if 0 - DNSDumpSendBufferContext( hSendBuffer ); -#endif - - *phSendBuffer = hSendBuffer; - - return dwError; - - error: - - if ( hSendBuffer ) { - DNSFreeSendBufferContext( hSendBuffer ); - } - - *phSendBuffer = ( HANDLE ) NULL; - return dwError; -} - - -/********************************************************************* -*********************************************************************/ - -void DNSUpdateFreeRequest( DNS_UPDATE_REQUEST * pDNSRequest ) -{ - return; -} - -/********************************************************************* -*********************************************************************/ - -int32 DNSUpdateAddZoneSection( DNS_UPDATE_REQUEST * pDNSRequest, - DNS_ZONE_RECORD * pDNSZone ) -{ - int32 dwNumZones = 0; - int32 dwError = 0; - - dwNumZones = pDNSRequest->wZones; - - dwError = DNSReallocMemory( ( uint8 * ) pDNSRequest->ppZoneRRSet, - ( void * ) &pDNSRequest->ppZoneRRSet, - ( dwNumZones + - 1 ) * sizeof( DNS_ZONE_RECORD * ) - ); - BAIL_ON_ERROR( dwError ); - - *( pDNSRequest->ppZoneRRSet + dwNumZones ) = pDNSZone; - - pDNSRequest->wZones += 1; - - error: - - return dwError; -} - -/********************************************************************* -*********************************************************************/ - -int32 DNSUpdateAddAdditionalSection( DNS_UPDATE_REQUEST * pDNSRequest, - DNS_RR_RECORD * pDNSRecord ) -{ - int32 dwNumAdditionals = 0; - int32 dwError = 0; - - dwNumAdditionals = pDNSRequest->wAdditionals; - dwError = DNSReallocMemory( pDNSRequest->ppAdditionalRRSet, - ( void * ) &pDNSRequest-> - ppAdditionalRRSet, - ( dwNumAdditionals + - 1 ) * sizeof( DNS_RR_RECORD * ) ); - BAIL_ON_ERROR( dwError ); - - *( pDNSRequest->ppAdditionalRRSet + dwNumAdditionals ) = pDNSRecord; - - pDNSRequest->wAdditionals += 1; - - error: - return dwError; -} - -int32 DNSUpdateAddPRSection( DNS_UPDATE_REQUEST * pDNSRequest, - DNS_RR_RECORD * pDNSRecord ) -{ - int32 dwNumPRs = 0; - int32 dwError = 0; - - dwNumPRs = pDNSRequest->wPRs; - dwError = DNSReallocMemory( pDNSRequest->ppPRRRSet, - ( void * ) &pDNSRequest->ppPRRRSet, - ( dwNumPRs + - 1 ) * sizeof( DNS_RR_RECORD * ) ); - BAIL_ON_ERROR( dwError ); - - *( pDNSRequest->ppPRRRSet + dwNumPRs ) = pDNSRecord; - - pDNSRequest->wPRs += 1; - - error: - return dwError; -} - - -/********************************************************************* -*********************************************************************/ - -int32 DNSUpdateAddUpdateSection( DNS_UPDATE_REQUEST * pDNSRequest, - DNS_RR_RECORD * pDNSRecord ) -{ - int32 dwError = 0; - int16 wNumUpdates = 0; - - wNumUpdates = pDNSRequest->wUpdates; - dwError = DNSReallocMemory( pDNSRequest->ppUpdateRRSet, - ( void * ) &pDNSRequest->ppUpdateRRSet, - ( wNumUpdates + - 1 ) * sizeof( DNS_RR_RECORD * ) ); - BAIL_ON_ERROR( dwError ); - - *( pDNSRequest->ppUpdateRRSet + wNumUpdates ) = pDNSRecord; - - pDNSRequest->wUpdates += 1; - - error: - return dwError; -} - -/********************************************************************* -*********************************************************************/ - -int32 DNSUpdateCreateUpdateRequest( DNS_UPDATE_REQUEST ** ppDNSRequest ) -{ - int32 dwError = 0; - DNS_UPDATE_REQUEST *pDNSRequest = NULL; - - dwError = - DNSAllocateMemory( sizeof( DNS_UPDATE_REQUEST ), - ( void * ) &pDNSRequest ); - BAIL_ON_ERROR( dwError ); - - dwError = DNSGenerateIdentifier( &pDNSRequest->wIdentification ); - BAIL_ON_ERROR( dwError ); - - pDNSRequest->wParameter = 0x2800; - - *ppDNSRequest = pDNSRequest; - - return dwError; - - error: - - if ( pDNSRequest ) { - DNSUpdateFreeRequest( pDNSRequest ); - } - *ppDNSRequest = NULL; - return dwError; -} |