netapi32: Add helpers to initialize and destroy a libnetapi context.

This commit is contained in:
Hans Leidekker 2013-11-20 10:30:01 +01:00 committed by Alexandre Julliard
parent 7e72985358
commit 499eed087e
1 changed files with 40 additions and 28 deletions

View File

@ -85,10 +85,48 @@ static NET_API_STATUS (*pNetShareAdd)(const char *, unsigned int, unsigned char
static NET_API_STATUS (*pNetShareDel)(const char *, const char *, unsigned int);
static NET_API_STATUS (*pNetWkstaGetInfo)(const char *, unsigned int, unsigned char **);
static void destroy_context(void)
{
TRACE( "destroying %p\n", libnetapi_ctx );
plibnetapi_free( libnetapi_ctx );
libnetapi_ctx = NULL;
}
static BOOL init_context(void)
{
DWORD status;
if ((status = plibnetapi_init( &libnetapi_ctx )))
{
ERR( "Failed to initialize context %u\n", status );
return FALSE;
}
if (TRACE_ON( netapi32 ) && (status = plibnetapi_set_debuglevel( libnetapi_ctx, "10" )))
{
ERR( "Failed to set debug level %u\n", status );
destroy_context();
return FALSE;
}
/* perform an anonymous login by default (avoids a password prompt) */
if ((status = plibnetapi_set_username( libnetapi_ctx, "Guest" )))
{
ERR( "Failed to set username %u\n", status );
destroy_context();
return FALSE;
}
if ((status = plibnetapi_set_password( libnetapi_ctx, "" )))
{
ERR( "Failed to set password %u\n", status );
destroy_context();
return FALSE;
}
TRACE( "using %p\n", libnetapi_ctx );
return TRUE;
}
static BOOL libnetapi_init(void)
{
char buf[200];
DWORD status;
if (libnetapi_handle) return TRUE;
if (!(libnetapi_handle = wine_dlopen( SONAME_LIBNETAPI, RTLD_NOW, buf, sizeof(buf) )))
@ -118,35 +156,9 @@ static BOOL libnetapi_init(void)
LOAD_FUNCPTR(NetWkstaGetInfo)
#undef LOAD_FUNCPTR
if ((status = plibnetapi_init( &libnetapi_ctx )))
{
ERR( "Failed to initialize context %u\n", status );
goto error;
}
if (TRACE_ON( netapi32 ) && (status = plibnetapi_set_debuglevel( libnetapi_ctx, "10" )))
{
ERR( "Failed to set debug level %u\n", status );
goto error;
}
/* perform an anonymous login by default (avoids a password prompt) */
if ((status = plibnetapi_set_username( libnetapi_ctx, "Guest" )))
{
ERR( "Failed to set username %u\n", status );
goto error;
}
if ((status = plibnetapi_set_password( libnetapi_ctx, "" )))
{
ERR( "Failed to set password %u\n", status );
goto error;
}
return TRUE;
if (init_context()) return TRUE;
error:
if (libnetapi_ctx)
{
plibnetapi_free( libnetapi_ctx );
libnetapi_ctx = NULL;
}
wine_dlclose( libnetapi_handle, NULL, 0 );
libnetapi_handle = NULL;
return FALSE;