#include <windows.h>
#include <lm.h>
#include <stdio.h>
#include <stdlib.h>
#pragma hdrstop



#define MAXLEN 256
#define MAXGRP 256



int main( int argc, char *argv[] )
{
	wchar_t server[MAXLEN], user[MAXLEN], grp[MAXLEN];
	GROUP_USERS_INFO_0 buf[MAXGRP];
	DWORD num, rc;
	int i;

	if ( argc < 3 )
	{
		puts( "usage: nusg [\\\\server] user grp1 [grp2 ...]" );
		puts( "Note: a server name must be preceded by a double backslash." );
		puts( "If not, it will be taken to be a username." );
		return 1;
	}

	if ( argv[1][0] == '\\' && argv[1][1] == '\\' )
	{
		mbstowcs( user, argv[2], MAXLEN );
		mbstowcs( server, argv[1], MAXLEN );
		i = 3; // first group name
	}
	else
	{
		mbstowcs( user, argv[1], MAXLEN );
		server[0] = L'\0';
		i = 2; // first group name
	}

	for ( num = 0; i < argc; ++ i )
	{
		if ( num >= MAXGRP )
		{
			printf( "Sorry, %d groups max.\n", MAXGRP );
			exit( 1 );
		}
		mbstowcs( grp, argv[i], MAXLEN );
		buf[num].grui0_name = _wcsdup( grp );
		++ num;
	}

	rc = NetUserSetGroups( ( server[0] == L'\0'? NULL: server ),
		user, 0, (byte *) &buf[0], num );

	if ( rc != ERROR_SUCCESS )
		printf( "NUSG() returned %lu\n", rc );

	return 0;
}

