openssh-portable/contrib/win32/win32compat/lsastring.c

153 lines
3.5 KiB
C

/*
* Author: NoMachine <developers@nomachine.com>
*
* Copyright (c) 2009, 2011 NoMachine
* All rights reserved
*
* Support functions and system calls' replacements needed to let the
* software run on Win32 based operating systems.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "LsaString.h"
/*
* Allocate UNICODE_STRING's buffer and initializes it with
* given string.
*
* lsaStr - UNICODE_STRING to initialize (IN/OUT)
* wstr - string, which will be copied to lsaStr (IN)
*
* RETURNS: 0 if OK.
*/
int InitUnicodeString(UNICODE_STRING *lsaStr, const wchar_t *wstr)
{
int exitCode = 1;
int size = (wstr) ? wcslen(wstr) * 2 : 0;
lsaStr -> Length = size;
lsaStr -> MaximumLength = size + 2;
lsaStr -> Buffer = (wchar_t *) malloc(size + 2);
FAIL(lsaStr -> Buffer == NULL);
memcpy(lsaStr -> Buffer, wstr, size);
lsaStr -> Buffer[size / 2] = 0;
exitCode = 0;
fail:
if (exitCode)
{
printf("ERROR. Cannot initialize UNICODE_STRING...");
}
return exitCode;
}
/*
* Allocate LSA_STRING's buffer and initializes it with
* given string.
*
* lsaStr - LSA_STRING to initialize (IN/OUT)
* str - string, which will be copied to lsaStr (IN)
*
* RETURNS: 0 if OK.
*/
int InitLsaString(LSA_STRING *lsaStr, const char *str)
{
int exitCode = 1;
int len = (str) ? strlen(str) : 0;
lsaStr -> Length = len;
lsaStr -> MaximumLength = len + 1;
lsaStr -> Buffer = (char *) malloc(len + 1);
FAIL(lsaStr -> Buffer == NULL);
memcpy(lsaStr -> Buffer, str, len);
lsaStr -> Buffer[len] = 0;
exitCode = 0;
fail:
if (exitCode)
{
printf("ERROR. Cannot initialize LSA_STRING...");
}
return exitCode;
}
/*
* Clear LSA_STRING's buffer.
*
* lsaStr - LSA_STRING to clear (IN/OUT)
*/
void ClearLsaString(LSA_STRING *lsaStr)
{
if (lsaStr)
{
if (lsaStr -> Buffer)
{
free(lsaStr -> Buffer);
lsaStr -> Buffer = NULL;
}
lsaStr -> MaximumLength = 0;
lsaStr -> Length = 0;
}
}
/*
* Clear UNICODE_STRING's buffer.
*
* lsaStr - UNICODE_STRING to clear (IN/OUT)
*/
void ClearUnicodeString(UNICODE_STRING *lsaStr)
{
if (lsaStr)
{
if (lsaStr -> Buffer)
{
free(lsaStr -> Buffer);
lsaStr -> Buffer = NULL;
}
lsaStr -> MaximumLength = 0;
lsaStr -> Length = 0;
}
}