Beispiel #1
0
int GetPattern(struct sockaddr_in ServerID, char *patternbuf, int pattern_max, struct htx_data * stats)
{
    SOCKET ToServerSock;
    int rc;
    int i;
    struct CoordMsg CMsg;
    int pflength;
	char msg_text[1024]; 

    ToServerSock = SetUpConnect(&ServerID, stats, 0); 
    memset(&CMsg, '\0', sizeof(CMsg));
    CMsg.msg_type = htonl(CM_REQ_PATTERN);
    CMsg.ID.Wsize.size = htonl((uint32_t)pattern_max);
    rc = StreamWrite(ToServerSock, (char *) &CMsg, sizeof(CMsg));
    if(rc == -1) {
        sprintf(msg_text, "GetPattern: Error writing to Server - %s\n", STRERROR(errno));
        hxfmsg(stats, HTXERROR(EX_PATT1,ERRNO), HTX_HE_SOFT_ERROR, msg_text);
        HE_exit(EX_PAT1);
    }
    rc = StreamRead(ToServerSock, (char *) &CMsg, sizeof(CMsg));
    CMsg.msg_type = ntohl(CMsg.msg_type);
    if(CMsg.msg_type != CM_PATTERN) {
        sprintf(msg_text, "GetPattern: Unable to obtain pattern file - %s\n", STRERROR(errno));
        hxfmsg(stats, HTXERROR(EX_PATT2,ERRNO), HTX_HE_SOFT_ERROR, msg_text);
        HE_exit(EX_PAT2);
    }
    pflength = ntohl(CMsg.ID.Wsize.size);
    if(pflength > pattern_max || pflength <= 0) {
        sprintf(msg_text, "GetPattern: Server wrote too many characters - %s\n", STRERROR(errno));
        hxfmsg(stats, HTXERROR(EX_PATT3,ERRNO), HTX_HE_SOFT_ERROR, msg_text);
        HE_exit(EX_PAT3);
    }
    rc = StreamRead(ToServerSock, (char *) patternbuf, pflength);
    if(rc != pflength) {
        sprintf(msg_text, "GetPattern: Unable to receive pattern file - %s\n", STRERROR(errno));
        hxfmsg(stats, HTXERROR(EX_PATT4,ERRNO), HTX_HE_SOFT_ERROR, msg_text);
        HE_exit(EX_PAT4);
    }

    closesocket(ToServerSock);

/********************************************************************/
/* Fill remainder of patternbuf.                                    */
/********************************************************************/
    for(i=pflength; i<pattern_max; i++)
        patternbuf[i] = patternbuf[i%pflength];
    return pattern_max;
}
Beispiel #2
0
bool PNG_Pico_Loader::decode(ResourceLoadOptions& options)
{
	std::vector<byte> data;
	StreamRead((Stream*) &stream, data);

	if( data.empty() ) return false;

	uint32 width, height;
	std::vector<byte> buffer;
	
	decodePNG(buffer, width, height, &data[0], data.size());

	//flip( buffer, width, height );

	// Build our image with the data. The pixel format returned by picoPNG
	// is always the same, 32bits per pixel, RGBA 8 bits per component.

	Image* image = static_cast<Image*>( res );
	image->setPixelFormat( PixelFormat::R8G8B8A8 );
	image->setWidth( width );
	image->setHeight( height );
	image->setBuffer( buffer );

	return true;
}
Beispiel #3
0
void ntlm_read_ntlm_v2_client_challenge(PStream s, NTLMv2_CLIENT_CHALLENGE* challenge)
{
	size_t size;

	StreamRead_UINT8(s, challenge->RespType);
	StreamRead_UINT8(s, challenge->HiRespType);
	StreamRead_UINT16(s, challenge->Reserved1);
	StreamRead_UINT32(s, challenge->Reserved2);
	StreamRead(s, challenge->Timestamp, 8);
	StreamRead(s, challenge->ClientChallenge, 8);
	StreamRead_UINT32(s, challenge->Reserved3);

	size = StreamRemainingSize(s);
	challenge->AvPairs = (NTLM_AV_PAIR*) malloc(size);
	StreamRead(s, challenge->AvPairs, size);
}
Beispiel #4
0
char* CBuffer::readchars(int len)
{
	
	if(len < 0)return NULL;
	StreamRead(&retval, len);
	retval[len] = '\0';
	return retval;
}
Beispiel #5
0
void ntlm_read_version_info(PStream s, NTLM_VERSION_INFO* versionInfo)
{
	StreamRead_UINT8(s, versionInfo->ProductMajorVersion); /* ProductMajorVersion (1 byte) */
	StreamRead_UINT8(s, versionInfo->ProductMinorVersion); /* ProductMinorVersion (1 byte) */
	StreamRead_UINT16(s, versionInfo->ProductBuild); /* ProductBuild (2 bytes) */
	StreamRead(s, versionInfo->Reserved, sizeof(versionInfo->Reserved)); /* Reserved (3 bytes) */
	StreamRead_UINT8(s, versionInfo->NTLMRevisionCurrent); /* NTLMRevisionCurrent (1 byte) */
}
Beispiel #6
0
bool STB_Image_Loader::decode(ResourceLoadOptions& options)
{
	std::vector<uint8> data;
	StreamRead(options.stream, data);

	if( data.empty() ) return false;

	int width, height, comp;
	
	byte* pixelData = stbi_load_from_memory(
		&data[0], data.size(), &width, &height,
		&comp, 0 /* 0=auto-detect, 3=RGB, 4=RGBA */ );

	if( !pixelData )
	{
		const char* error = stbi_failure_reason();
		LogError("STB image error: %s", error);
		return false;
	}

	// Build our image with the pixel data returned by stb_image.
	PixelFormat pf = PixelFormat::Unknown;
	
	switch( comp )
	{
	case 0:
	case 1: break;
	case 3: pf = PixelFormat::R8G8B8; break;
	case 4: pf = PixelFormat::R8G8B8A8; break;
	}

	if( pf == PixelFormat::Unknown )
	{
		LogError( "Implement support for more pixel formats" );
		return false;
	}
	
	std::vector<byte> buffer;
	uint32 size = width*height*comp; 
	buffer.resize(size);
	
	memcpy(&buffer[0], pixelData, size);
	free(pixelData);

	Image* image = static_cast<Image*>( options.resource );
	image->setWidth( width );
	image->setHeight( height );
	image->setPixelFormat( pf );
	image->setBuffer( buffer );

	return true;
}
Beispiel #7
0
char* CBuffer::readstring()
{
	int i;
	for(i = readpos; i < count; i++)
	{
		if(data[i] == '\0')
			break;
	}
	if(i == count)return NULL;
	i-=readpos;
	i = min(20000, i);
	StreamRead(&retval, i+1);
	return retval;
}
Beispiel #8
0
void  CXMLObject::read ( RCFile f )  {
int i;
  FreeMemory();
  f.CreateRead ( objTag    );
  f.CreateRead ( objData   );
  f.ReadInt    ( &nObjects );
  nAlloc = nObjects;
  if (nObjects>0)  {
    object = new PCXMLObject[nObjects];
    for (i=0;i<nObjects;i++)  {
      object[i] = NULL;
      StreamRead ( f,object[i] );
    }
  }
}
Beispiel #9
0
void  CSSGraph::read ( RCFile f )  {
int i,Version;

  FreeMemory();

  f.ReadInt     ( &Version       );
  f.CreateRead  ( name           );
  f.ReadTerLine ( devChain,False );
  f.ReadInt     ( &nVertices     );
  if (nVertices>0)  {
    nVAlloc = nVertices;
    Vertex  = new PCSSVertex[nVertices];
    for (i=0;i<nVertices;i++)  {
      Vertex[i] = NULL;
      StreamRead ( f,Vertex[i] );
    }
  }

}
Beispiel #10
0
int  GetblkCallback(xd3_stream *stream, xd3_source *source, xoff_t blkno) {
	bindiff_p   in = (bindiff_p)source->ioh;
	stream_p    istream = ((bindiff_p)(in))->in1;
	diffdata_p  data = (diffdata_p)(((bindiff_p)(in))->userdata);
	int         retcode;
	int         offset = data->org_cur - data->org_last;
	if(offset > 0) offset -= BIN_DIFF_NUM_ORGBUFS;
	int         shift = offset + (int)source->getblkno - (int)source->curblkno;
	
	if(shift <= 0) {
		if(shift < 1-BIN_DIFF_NUM_ORGBUFS) return XD3_TOOFARBACK;
		data->org_cur = data->org_last+shift;
		if(data->org_cur < 0) data->org_cur += BIN_DIFF_NUM_ORGBUFS;
		source->curblkno += (shift-offset);
		source->curblk = (uint8_t*)data->orgbufs[data->org_cur];
		source->onblk = data->orgsizes[data->org_cur];
		return 0;
	} else {
		source->curblkno -= offset;
		while(shift--) {
			data->org_last++;
			if(data->org_last >= BIN_DIFF_NUM_ORGBUFS) data->org_last = 0;
			data->org_cur = data->org_last;
			retcode = StreamRead(istream, data->orgbufs[data->org_last], BIN_DIFF_WINDOW_SIZE);
			if(retcode != STREAM_EOF) {
				source->curblkno++;
				data->orgsizes[data->org_last] = retcode;
				source->onblk = retcode;
				source->curblk = (uint8_t*)data->orgbufs[data->org_last];
			} else {
				data->org_last--;
				if(data->org_last < 0) data->org_last += BIN_DIFF_NUM_ORGBUFS;
				data->org_cur = data->org_last;
				return 0;
			}
		}
		return 0;
	}
}
Beispiel #11
0
wxBitmap* ConvertImageToBitmap( Image* image, const Path& fullPath )
{
    if( !image || !image->isLoaded() )
        return nullptr;

    PixelFormat pf = image->getPixelFormat();

    if( pf != PixelFormat::R8G8B8A8 )
    {
        LogDebug("Invalid image format: %s", EnumGetValueName(ReflectionGetType(PixelFormat), (int32)pf));
        return nullptr;
    }

    //wxBitmap* bmp = new wxBitmap;
    //bmp->Create(&image->getBuffer(), wxBITMAP_TYPE_ANY, image->getWidth(), image->getHeight(), 4);

    Stream* stream = StreamCreateFromFile(AllocatorGetHeap(), fullPath, StreamOpenMode::Read);
    if( !stream ) return nullptr;

    std::vector<byte> data;
    StreamRead(stream, data);

    wxMemoryInputStream mem(&data[0], data.size());
    wxImage img(mem);
    img.Rescale(32, 32);

    StreamDestroy(stream);

#if 0
    const wxSize& size = GetSize();
    if( img.GetWidth() > size.GetWidth() || img.GetHeight() > size.GetHeight() )
    {
        img.Rescale( size.GetWidth(), size.GetHeight() );
    }
#endif

    wxBitmap* bmp = new wxBitmap(img);
    return bmp;
}
Beispiel #12
0
	void Body::Serialize(ISerializer& stream)
	{
		StreamRead(stream,Mass);
		StreamRead(stream,Friction);
		StreamRead(stream,Restitution);

		std::string shapeName;
		StreamRead(stream,shapeName);

		if( shapeName == "Circle" )
		{
			ShapeCircle * shape = new ShapeCircle();
			StreamRead(stream,shape->Radius);
			this->BodyShape = shape;
		}

		if( shapeName == "Box"  )
		{
			ShapeAAB * shape = new ShapeAAB();
			StreamRead(stream,shape->Extents);
			this->BodyShape  = shape;
		}

	}
Beispiel #13
0
int CBuffer::readint()
{
	int b;
	StreamRead(&b, 4);
	return b;
}
Beispiel #14
0
void ntlm_read_ntlm_v2_response(PStream s, NTLMv2_RESPONSE* response)
{
	StreamRead(s, response->Response, 16);
	ntlm_read_ntlm_v2_client_challenge(s, &(response->Challenge));
}
Beispiel #15
0
int GetRules(struct sockaddr_in ServerID, struct rule_format rule[], int max_rules, struct htx_data * stats)
{
    SOCKET ToServerSock;
    struct CoordMsg CMsg;
    int rc;
    int i;
    int NoStanzas;
	char msg[1024]; 
	errno = 0;     

    ToServerSock = SetUpConnect(&ServerID, stats, 0); 
    memset(&CMsg, '\0', sizeof(CMsg));
    CMsg.msg_type = htonl(CM_REQ_RULES);
    CMsg.ID.Wsize.size  = htonl((uint32_t)sizeof(struct rule_format));
    rc = StreamWrite(ToServerSock, (char *) &CMsg, sizeof(CMsg));
    if(rc == -1) {
        sprintf(msg, "GetRules: Error writing to Server - %s\n", STRERROR(errno));
        hxfmsg(stats, HTXERROR(EX_RULE1,ERRNO), HTX_HE_SOFT_ERROR, msg);
        HE_exit(EX_RULE1);
    }
    StreamRead(ToServerSock, (char *) &CMsg, sizeof(CMsg));
    CMsg.msg_type = ntohl(CMsg.msg_type);
    CMsg.ID.Wsize.size  = ntohl(CMsg.ID.Wsize.size);
    if(CMsg.msg_type != CM_RULES_STANZA) {
        sprintf(msg, "GetRules: Illegal Packet recvd.\n"); 
        hxfmsg(stats, HTXERROR(EX_RULE3,0), HTX_HE_SOFT_ERROR, msg);
        HE_exit(EX_RULE3);
    }
	#ifdef __DEBUG__
		sprintf(msg, "GetRules: Sock = %d, Recvd msg = %x of size = %#x, rule_format size = %x, pid = %d \n", ToServerSock, CMsg.msg_type, sizeof(CMsg), (uint32_t)sizeof(struct rule_format), getpid()); 
		hxfmsg(stats, 0, 7, msg); 
	#endif 
    memset(rule, '\0', sizeof(struct rule_format) * max_rules);
	memset(&CMsg, '\0', sizeof(CMsg));
    for(i=0; i < max_rules; i++) {

        rc = StreamRead(ToServerSock, (char *) &CMsg.msg_type, sizeof(CMsg.msg_type));
        CMsg.msg_type = ntohl(CMsg.msg_type);
	#ifdef __DEBUG__
		sprintf(msg, "i = %#x, GetRules: Recvd msg = %x, of size = %x \n", i, CMsg.msg_type, sizeof(CMsg.msg_type)); 
		hxfmsg(stats, 0, 7, msg); 
	#endif 
        if(CMsg.msg_type == CM_RULES_FINISHED)
            break;
		 
        if(CMsg.msg_type != CM_RULES_STANZA) {
            sprintf(msg, "GetRules: Unable to obtain rules - type %x\n", (int)CMsg.msg_type);
            hxfmsg(stats, HTXERROR(EX_RULE2,ERRNO), HTX_HE_SOFT_ERROR, msg);
            HE_exit(EX_RULE2);
        }
		 
        rc = StreamRead(ToServerSock, (char*) &rule[i], sizeof(struct rule_format));
        if(rc != sizeof(struct rule_format)) {
            sprintf(msg, "GetRules: Unable to read rules from server - %s\n", STRERROR(errno));
            hxfmsg(stats, HTXERROR(EX_RULE4,ERRNO), HTX_HE_SOFT_ERROR, msg);
			HE_exit(EX_RULE3); 

        }

        NetToHostRules(&rule[i]);
    }
    NoStanzas = i;
    closesocket(ToServerSock);
    return NoStanzas;
}
Beispiel #16
0
void ntlm_input_av_pairs(NTLM_CONTEXT* context, PStream s)
{
	AV_ID AvId;
	UINT16 AvLen;
	BYTE* value;
	AV_PAIRS* av_pairs = context->av_pairs;

#ifdef WITH_DEBUG_NTLM
	printf("AV_PAIRS = {\n");
#endif

	do
	{
		value = NULL;
		StreamRead_UINT16(s, AvId);
		StreamRead_UINT16(s, AvLen);

		if (AvLen > 0)
		{
			if (AvId != MsvAvFlags)
			{
				value = malloc(AvLen);
				StreamRead(s, value, AvLen);
			}
			else
			{
				StreamRead_UINT32(s, av_pairs->Flags);
			}
		}

		switch (AvId)
		{
			case MsvAvNbComputerName:
				av_pairs->NbComputerName.length = AvLen;
				av_pairs->NbComputerName.value = value;
				break;

			case MsvAvNbDomainName:
				av_pairs->NbDomainName.length = AvLen;
				av_pairs->NbDomainName.value = value;
				break;

			case MsvAvDnsComputerName:
				av_pairs->DnsComputerName.length = AvLen;
				av_pairs->DnsComputerName.value = value;
				break;

			case MsvAvDnsDomainName:
				av_pairs->DnsDomainName.length = AvLen;
				av_pairs->DnsDomainName.value = value;
				break;

			case MsvAvDnsTreeName:
				av_pairs->DnsTreeName.length = AvLen;
				av_pairs->DnsTreeName.value = value;
				break;

			case MsvAvTimestamp:
				av_pairs->Timestamp.length = AvLen;
				av_pairs->Timestamp.value = value;
				break;

			case MsvAvRestrictions:
				av_pairs->Restrictions.length = AvLen;
				av_pairs->Restrictions.value = value;
				break;

			case MsvAvTargetName:
				av_pairs->TargetName.length = AvLen;
				av_pairs->TargetName.value = value;
				break;

			case MsvChannelBindings:
				av_pairs->ChannelBindings.length = AvLen;
				av_pairs->ChannelBindings.value = value;
				break;

			default:
				if (value != NULL)
					free(value);
				break;
		}

#ifdef WITH_DEBUG_NTLM
		if (AvId < 10)
			printf("\tAvId: %s, AvLen: %d\n", AV_PAIRS_STRINGS[AvId], AvLen);
		else
			printf("\tAvId: %s, AvLen: %d\n", "Unknown", AvLen);

		winpr_HexDump(value, AvLen);
#endif
	}
	while (AvId != MsvAvEOL);

#ifdef WITH_DEBUG_NTLM
	printf("}\n");
#endif
}
Beispiel #17
0
unsigned char CBuffer::readbyte()
{
	unsigned char b;
	StreamRead(&b, 1);
	return b;
}
Beispiel #18
0
short CBuffer::readshort()
{
	short b;
	StreamRead(&b, 2);
	return b;
}
Beispiel #19
0
HRESULT LegacySyncSetProduct(
    __in CFGDB_STRUCT *pcdb,
    __inout LEGACY_SYNC_SESSION *pSyncSession,
    __in LPCWSTR wzName
    )
{
    HRESULT hr = S_OK;
    LEGACY_SYNC_PRODUCT_SESSION *pSyncProductSession = &pSyncSession->syncProductSession;
    LEGACY_FILE *pFile = NULL;
    LEGACY_FILE_SPECIAL *pFileSpecial = NULL;
    LEGACY_INI_FILE *pIniFile = NULL;
    CONFIG_VALUE cvManifestContents = { };
    CONFIG_VALUE cvManifestConvertedToBlob = { };
    SCE_ROW_HANDLE sceManifestValueRow = NULL;
    LPWSTR sczManifestValueName = NULL;
    BOOL fWasRegistered = FALSE;
    BYTE *pbManifestBuffer = NULL;
    SIZE_T iManifestBuffer = 0;
    LPWSTR sczBlobManifestAsString = NULL;

    if (pSyncSession->fInSceTransaction)
    {
        SceRollbackTransaction(pcdb->psceDb);
        pSyncSession->fInSceTransaction = FALSE;
    }

    hr = ProductGetLegacyManifestValueName(wzName, &sczManifestValueName);
    ExitOnFailure(hr, "Failed to get legacy manifest value name");

    ManifestFreeProductStruct(&pSyncProductSession->product);
    ZeroMemory(&pSyncProductSession->product, sizeof(pSyncProductSession->product));

    for (DWORD i = 0; i < pSyncProductSession->cIniFiles; ++i)
    {
        IniFree(pSyncProductSession->rgIniFiles + i);
    }
    ReleaseNullMem(pSyncProductSession->rgIniFiles);
    pSyncProductSession->cIniFiles = 0;

    ReleaseNullDict(pSyncProductSession->shDictValuesSeen);
    ReleaseNullDict(pSyncProductSession->shIniFilesByNamespace);

    hr = DictCreateStringList(&pSyncProductSession->shDictValuesSeen, 0, DICT_FLAG_CASEINSENSITIVE);
    ExitOnFailure(hr, "Failed to create dictionary of values seen");

    hr = DictCreateWithEmbeddedKey(&pSyncProductSession->shIniFilesByNamespace, 0, reinterpret_cast<void **>(&pSyncProductSession->rgIniFiles), offsetof(LEGACY_INI_FILE, sczNamespace), DICT_FLAG_CASEINSENSITIVE);
    ExitOnFailure(hr, "Failed to create ini file dictionary");

    hr = DictCreateWithEmbeddedKey(&pSyncProductSession->product.detect.shCachedDetectionPropertyValues, offsetof(LEGACY_CACHED_DETECTION_RESULT, sczPropertyName), reinterpret_cast<void **>(&pSyncProductSession->product.detect.rgCachedDetectionProperties), 0, DICT_FLAG_CASEINSENSITIVE);
    ExitOnFailure(hr, "Failed to create cached detection property values dictionary");

    hr = ValueFindRow(pcdb, pcdb->dwCfgAppID, sczManifestValueName, &sceManifestValueRow);
    ExitOnFailure(hr, "Failed to find config value for legacy manifest (AppID: %u, Config Value named: %ls)", pcdb->dwCfgAppID, sczManifestValueName);

    hr = ValueRead(pcdb, sceManifestValueRow, &cvManifestContents);
    ExitOnFailure(hr, "Failed to read manifest contents");

    // TODO: someday remove this temporary conversion code when we feel confident nobody has old databases with old manifests laying around
    if (VALUE_STRING == cvManifestContents.cvType)
    {
        LogStringLine(REPORT_STANDARD, "Converting manifest value named %ls from string to blob value", sczManifestValueName);

        hr = ValueSetBlob(reinterpret_cast<BYTE *>(cvManifestContents.string.sczValue), lstrlenW(cvManifestContents.string.sczValue) * sizeof(WCHAR), FALSE, NULL, pcdb->sczGuid, &cvManifestConvertedToBlob);
        ExitOnFailure(hr, "Failed to set converted manifest value in memory");

        hr = ValueWrite(pcdb, pcdb->dwCfgAppID, sczManifestValueName, &cvManifestConvertedToBlob, TRUE, NULL);
        ExitOnFailure(hr, "Failed to set converted manifest blob: %ls", sczManifestValueName);

        ReleaseNullSceRow(sceManifestValueRow);
        ReleaseNullCfgValue(cvManifestContents);
        hr = ValueFindRow(pcdb, pcdb->dwCfgAppID, sczManifestValueName, &sceManifestValueRow);
        ExitOnFailure(hr, "Failed to find config value for legacy manifest after conversion (AppID: %u, Config Value named: %ls)", pcdb->dwCfgAppID, sczManifestValueName);

        hr = ValueRead(pcdb, sceManifestValueRow, &cvManifestContents);
        ExitOnFailure(hr, "Failed to read converted manifest contents");
    }

    if (VALUE_BLOB != cvManifestContents.cvType)
    {
        hr = HRESULT_FROM_WIN32(ERROR_DATATYPE_MISMATCH);
        ExitOnFailure(hr, "Stored manifest value was not of type blob");
    }

    if (CFG_BLOB_DB_STREAM != cvManifestContents.blob.cbType)
    {
        hr = HRESULT_FROM_WIN32(ERROR_DATATYPE_MISMATCH);
        ExitOnFailure(hr, "Stored manifest blob was not a database stream");
    }

    hr = StreamRead(pcdb, cvManifestContents.blob.dbstream.dwContentID, NULL, &pbManifestBuffer, &iManifestBuffer);
    ExitOnFailure(hr, "Failed to get binary content of blob named: %ls, with content ID: %u", sczManifestValueName, pcdb->dwCfgAppID);

    hr = StrAllocString(&sczBlobManifestAsString, reinterpret_cast<LPWSTR>(pbManifestBuffer), iManifestBuffer / sizeof(WCHAR));
    ExitOnFailure(hr, "Failed to add null terminator to manifest blob");

    hr = ParseManifest(sczBlobManifestAsString, &pSyncProductSession->product);
    ExitOnFailure(hr, "Failed to parse manifest");

    hr = ProductSet(pcdb, wzName, wzLegacyVersion, wzLegacyPublicKey, FALSE, NULL);
    ExitOnFailure(hr, "Failed to set product");

    hr = ProductIsRegistered(pcdb, pcdb->sczProductName, wzLegacyVersion, wzLegacyPublicKey, &fWasRegistered);
    ExitOnFailure(hr, "Failed to check if product is registered");

    hr = DetectProduct(pcdb, !pSyncSession->fDetect, &pSyncSession->arpProducts, &pSyncSession->exeProducts, pSyncProductSession);
    ExitOnFailure(hr, "Failed to detect product with AppID: %u", pcdb->dwAppID);

    // Don't bother writing new registration state data to the database if detect is disabled
    if (pSyncSession->fDetect)
    {
        hr = UpdateProductRegistrationState(pcdb, pSyncProductSession, pcdb->sczProductName, wzLegacyVersion, wzLegacyPublicKey);
        ExitOnFailure(hr, "Failed to update product registration state");
    }

    hr = ProductIsRegistered(pcdb, pcdb->sczProductName, wzLegacyVersion, wzLegacyPublicKey, &pSyncProductSession->fRegistered);
    ExitOnFailure(hr, "Failed to check if product is registered");

    pSyncProductSession->fNewlyRegistered = (!fWasRegistered && pSyncProductSession->fRegistered);

    for (DWORD i = 0; i < pSyncProductSession->product.cFiles; ++i)
    {
        pFile = pSyncProductSession->product.rgFiles + i;

        hr = UtilExpandLegacyPath(pFile->sczLocation, &pSyncProductSession->product.detect, &pFile->sczExpandedPath);
        if (E_NOTFOUND == hr)
        {
            hr = S_OK;
        }

        if (NULL != pFile->sczExpandedPath)
        {
            for (DWORD j = 0; j < pFile->cFileSpecials; ++j)
            {
                pFileSpecial = pFile->rgFileSpecials + j;

                if (0 < pFileSpecial->cIniInfo)
                {
                    hr = MemEnsureArraySize(reinterpret_cast<void **>(&pSyncProductSession->rgIniFiles), pSyncProductSession->cIniFiles + 1, sizeof(LEGACY_INI_FILE), 5);
                    ExitOnFailure(hr, "Failed to grow active IniFiles array");

                    pIniFile = pSyncProductSession->rgIniFiles + pSyncProductSession->cIniFiles;

                    hr = IniFileOpen(pFile, pFileSpecial, pFileSpecial->rgIniInfo, pIniFile);
                    ExitOnFailure(hr, "Failed to parse INI file");

                    hr = DictAddValue(pSyncProductSession->shIniFilesByNamespace, pIniFile);
                    ExitOnFailure(hr, "Failed to add INI file to dict for namespace: %ls", pIniFile->sczNamespace);

                    ++pSyncProductSession->cIniFiles;
                }
            }
        }
    }

    // IMPORTANT: Put all legacy database actions into a separate transaction
    // for each product. In the case of any kind of failure, it's OK to leave
    // changes written to local machine registry / file system, but not the
    // legacy database - they'll just appear as local machine changes on next
    // sync, and everything will be happy. The other way around is NOT happy,
    // because every sync would create another history entry, ad infinitum!
    hr = SceBeginTransaction(pcdb->psceDb);
    ExitOnFailure(hr, "Failed to begin transaction");
    pSyncSession->fInSceTransaction = TRUE;

LExit:
    ReleaseSceRow(sceManifestValueRow);
    ReleaseCfgValue(cvManifestContents);
    ReleaseCfgValue(cvManifestConvertedToBlob);
    ReleaseStr(sczManifestValueName);
    ReleaseMem(pbManifestBuffer);
    ReleaseStr(sczBlobManifestAsString);

    return hr;
}
Beispiel #20
0
int  BinDiff(void *in, void *buffer, size_t size) {
	stream_p    modified = ((bindiff_p)(in))->in2;
	diffdata_p  data = (diffdata_p)(((bindiff_p)(in))->userdata);
	int         retcode;
	int         len_done = 0;
	
	// Alloc resources if needed
	if(data == NULL)
	{
		data = malloc(sizeof(diffdata_t));
		xd3_init_config(&data->config, 0);
		data->config.winsize = BIN_DIFF_WINDOW_SIZE;
		data->config.getblk = &GetblkCallback;
		retcode = xd3_config_stream(&data->stream, &data->config);
		if (retcode != 0) return STREAM_EOF;
		
		data->source.ioh = in;
		data->source.curblkno = (xoff_t) -1;
		data->source.curblk = NULL;
		data->source.blksize = BIN_DIFF_WINDOW_SIZE;
		retcode = xd3_set_source(&data->stream, &data->source);
		
		if (retcode != 0) return STREAM_EOF;
		
		data->haveData = 0;
		data->reachedEOF = 0;
		data->org_cur = data->org_last = 0;
		((bindiff_p)(in))->userdata = data;
	}
	
	if(data->haveData) {
		if((size_t)data->haveData >= size) {
			memcpy (buffer, &data->stream.next_out[data->stream.avail_out-data->haveData], size);
			data->haveData = data->haveData - size;
			return size;
		} else {
			memcpy (buffer, &data->stream.next_out[data->stream.avail_out-data->haveData], data->haveData);
			len_done = data->haveData;
			data->stream.avail_out = 0;
			data->haveData = 0;
		}
	}
	
	do {
		if(((bindiff_p)(in))->isPatch) retcode = xd3_decode_input(&data->stream);
		else retcode = xd3_encode_input(&data->stream);
		switch (retcode) {
		case XD3_INPUT:
			if(data->reachedEOF) return len_done ? len_done : STREAM_EOF;
			retcode = StreamRead(modified, data->inbuf, BIN_DIFF_WINDOW_SIZE);
			//fprintf(stderr,"\tXD3_INPUT (%i)\n", retcode);
			if (retcode == STREAM_EOF) {
				xd3_set_flags (&data->stream, XD3_FLUSH);
				data->reachedEOF = 1;
				retcode = 0;
			}
			xd3_avail_input(&data->stream, (uint8_t*)data->inbuf, retcode);
			continue;
		case XD3_OUTPUT:
			//fprintf(stderr,"\tXD3_OUTPUT (%i)\n", data->stream.avail_out);
			if(data->stream.avail_out >= (size-len_done)) {
				memcpy (((char *)buffer)+len_done, data->stream.next_out, size-len_done);
				data->haveData = data->stream.avail_out - size+len_done;
				return size;
			} else {
				memcpy (((char *)buffer)+len_done, data->stream.next_out, data->stream.avail_out);
				len_done += data->stream.avail_out;
				data->stream.avail_out = 0;
				data->haveData = 0;
				continue;
			}
		case XD3_GETSRCBLK:
		case XD3_GOTHEADER:
		case XD3_WINSTART:
		case XD3_WINFINISH:
		    continue;
		default:
			//fprintf(stderr,"\terror: %s\n", data->stream.msg);
		    return STREAM_EOF;
		}
	} while (1);
}
Beispiel #21
0
double CBuffer::readdouble()
{
	double b;
	StreamRead(&b, 8);
	return b;
}
Beispiel #22
0
float CBuffer::readfloat()
{
	float b;
	StreamRead(&b, 4);
	return b;
}
Beispiel #23
0
unsigned int CBuffer::readuint()
{
	unsigned int b;
	StreamRead(&b, 4);
	return b;
}
Beispiel #24
0
extern "C" HRESULT RegDefaultWriteValue(
    __in LEGACY_PRODUCT *pProduct,
    __in_z LPCWSTR wzName,
    __in const CONFIG_VALUE *pcvValue,
    __out BOOL *pfHandled
    )
{
    HRESULT hr = S_OK;
    LPWSTR sczValue = NULL;
    LPWSTR sczRegKey = NULL;
    LPWSTR sczRegValueName = NULL;
    BYTE *pbBuffer = NULL;
    SIZE_T cbBuffer = 0;
    BOOL fReleaseBuffer = FALSE;
    DWORD dwRoot = DWORD_MAX;
    HKEY hk = NULL;

    hr = MapCfgNameToRegValue(pProduct, wzName, &dwRoot, &sczRegKey, &sczRegValueName);
    if (E_INVALIDARG == hr)
    {
        *pfHandled = FALSE;
        // Not a regkey, so just ignore
        ExitFunction1(hr = S_OK);
    }
    ExitOnFailure(hr, "Failed to convert value name to registry information");
    *pfHandled = TRUE;

    hr = RegOpen(ManifestConvertToRootKey(dwRoot), sczRegKey, KEY_SET_VALUE, &hk);
    if (E_FILENOTFOUND == hr)
    {
        hr = S_OK;

        // The key doesn't exist, so no need to proceed with deleting the value
        if (VALUE_DELETED == pcvValue->cvType)
        {
            ExitFunction1(hr = S_OK);
        }
        hr = RegCreate(ManifestConvertToRootKey(dwRoot), sczRegKey, KEY_SET_VALUE, &hk);
        ExitOnFailure(hr, "Failed to create regkey: %ls", sczRegKey);
    }
    ExitOnFailure(hr, "Failed to open regkey: %ls", sczRegKey);

    switch (pcvValue->cvType)
    {
    case VALUE_DELETED:
        hr = RegWriteString(hk, sczRegValueName, NULL);
        ExitOnFailure(hr, "Failed to delete existing value");
        break;

    case VALUE_BLOB:
        switch (pcvValue->blob.cbType)
        {
        case CFG_BLOB_POINTER:
            pbBuffer = const_cast<BYTE *>(pcvValue->blob.pointer.pbValue);
            cbBuffer = pcvValue->blob.cbValue;
            break;
        case CFG_BLOB_DB_STREAM:
            fReleaseBuffer = TRUE;
            hr = StreamRead(pcvValue->blob.dbstream.pcdb, pcvValue->blob.dbstream.dwContentID, NULL, &pbBuffer, &cbBuffer);
            ExitOnFailure(hr, "Failed to read stream from database while writing binary to the registry");
            break;
        default:
            hr = E_INVALIDARG;
            ExitOnFailure(hr, "Invalid blob type encountered");
            break;
        }
        hr = RegWriteBinary(hk, sczRegValueName, pbBuffer, cbBuffer);
        ExitOnFailure(hr, "Failed to write binary value to registry");
        break;

    case VALUE_STRING:
        hr = RegWriteString(hk, sczRegValueName, pcvValue->string.sczValue);
        ExitOnFailure(hr, "Failed to write string to registry");
        break;

    case VALUE_DWORD:
        hr = RegWriteNumber(hk, sczRegValueName, pcvValue->dword.dwValue);
        ExitOnFailure(hr, "Failed to write dword to registry");
        break;

    case VALUE_QWORD:
        hr = RegWriteQword(hk, sczRegValueName, pcvValue->qword.qwValue);
        ExitOnFailure(hr, "Failed to write qword to registry");
        break;

    default:
        ExitFunction1(hr = E_INVALIDARG);
    }

LExit:
    ReleaseRegKey(hk);
    ReleaseStr(sczValue);
    ReleaseStr(sczRegKey);
    ReleaseStr(sczRegValueName);
    if (fReleaseBuffer)
    {
        ReleaseMem(pbBuffer);
    }

    return hr;
}
Beispiel #25
0
unsigned short CBuffer::readushort()
{
	unsigned short b;
	StreamRead(&b, 2);
	return b;
}