250 lines
7.1 KiB
C
250 lines
7.1 KiB
C
/*
|
|
* Copyright 2006 Robert Reif
|
|
*
|
|
* netapi32 local group functions
|
|
*
|
|
* 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 St, Fifth Floor, Boston, MA 02110-1301, USA
|
|
*/
|
|
|
|
#include <stdarg.h>
|
|
|
|
#include "ntstatus.h"
|
|
#define WIN32_NO_STATUS
|
|
#include "windef.h"
|
|
#include "winbase.h"
|
|
#include "winerror.h"
|
|
#include "lmcons.h"
|
|
#include "lmaccess.h"
|
|
#include "lmapibuf.h"
|
|
#include "lmerr.h"
|
|
#include "winreg.h"
|
|
#include "ntsecapi.h"
|
|
#include "wine/debug.h"
|
|
#include "wine/unicode.h"
|
|
|
|
WINE_DEFAULT_DEBUG_CHANNEL(netapi32);
|
|
|
|
/************************************************************
|
|
* NetLocalGroupAdd (NETAPI32.@)
|
|
*/
|
|
NET_API_STATUS WINAPI NetLocalGroupAdd(
|
|
LPCWSTR servername,
|
|
DWORD level,
|
|
LPBYTE buf,
|
|
LPDWORD parm_err)
|
|
{
|
|
FIXME("(%s %d %p %p) stub!\n", debugstr_w(servername), level, buf,
|
|
parm_err);
|
|
return NERR_Success;
|
|
}
|
|
|
|
/************************************************************
|
|
* NetLocalGroupAddMember (NETAPI32.@)
|
|
*/
|
|
NET_API_STATUS WINAPI NetLocalGroupAddMember(
|
|
LPCWSTR servername,
|
|
LPCWSTR groupname,
|
|
PSID membersid)
|
|
{
|
|
FIXME("(%s %s %p) stub!\n", debugstr_w(servername),
|
|
debugstr_w(groupname), membersid);
|
|
return NERR_Success;
|
|
}
|
|
|
|
/************************************************************
|
|
* NetLocalGroupAddMembers (NETAPI32.@)
|
|
*/
|
|
NET_API_STATUS WINAPI NetLocalGroupAddMembers(
|
|
LPCWSTR servername,
|
|
LPCWSTR groupname,
|
|
DWORD level,
|
|
LPBYTE buf,
|
|
DWORD totalentries)
|
|
{
|
|
FIXME("(%s %s %d %p %d) stub!\n", debugstr_w(servername),
|
|
debugstr_w(groupname), level, buf, totalentries);
|
|
return NERR_Success;
|
|
}
|
|
|
|
/************************************************************
|
|
* NetLocalGroupDel (NETAPI32.@)
|
|
*/
|
|
NET_API_STATUS WINAPI NetLocalGroupDel(
|
|
LPCWSTR servername,
|
|
LPCWSTR groupname)
|
|
{
|
|
FIXME("(%s %s) stub!\n", debugstr_w(servername), debugstr_w(groupname));
|
|
return NERR_Success;
|
|
}
|
|
|
|
/************************************************************
|
|
* NetLocalGroupDelMember (NETAPI32.@)
|
|
*/
|
|
NET_API_STATUS WINAPI NetLocalGroupDelMember(
|
|
LPCWSTR servername,
|
|
LPCWSTR groupname,
|
|
PSID membersid)
|
|
{
|
|
FIXME("(%s %s %p) stub!\n", debugstr_w(servername),
|
|
debugstr_w(groupname), membersid);
|
|
return NERR_Success;
|
|
}
|
|
|
|
/************************************************************
|
|
* NetLocalGroupDelMembers (NETAPI32.@)
|
|
*/
|
|
NET_API_STATUS WINAPI NetLocalGroupDelMembers(
|
|
LPCWSTR servername,
|
|
LPCWSTR groupname,
|
|
DWORD level,
|
|
LPBYTE buf,
|
|
DWORD totalentries)
|
|
{
|
|
FIXME("(%s %s %d %p %d) stub!\n", debugstr_w(servername),
|
|
debugstr_w(groupname), level, buf, totalentries);
|
|
return NERR_Success;
|
|
}
|
|
|
|
/************************************************************
|
|
* NetLocalGroupEnum (NETAPI32.@)
|
|
*/
|
|
NET_API_STATUS WINAPI NetLocalGroupEnum(
|
|
LPCWSTR servername,
|
|
DWORD level,
|
|
LPBYTE* bufptr,
|
|
DWORD prefmaxlen,
|
|
LPDWORD entriesread,
|
|
LPDWORD totalentries,
|
|
PDWORD_PTR resumehandle)
|
|
{
|
|
FIXME("(%s %d %p %d %p %p %p) stub!\n", debugstr_w(servername),
|
|
level, bufptr, prefmaxlen, entriesread, totalentries, resumehandle);
|
|
*entriesread = 0;
|
|
*totalentries = 0;
|
|
return NERR_Success;
|
|
}
|
|
|
|
/************************************************************
|
|
* NetLocalGroupGetInfo (NETAPI32.@)
|
|
*/
|
|
NET_API_STATUS WINAPI NetLocalGroupGetInfo(
|
|
LPCWSTR servername,
|
|
LPCWSTR groupname,
|
|
DWORD level,
|
|
LPBYTE* bufptr)
|
|
{
|
|
static const WCHAR commentW[]={'N','o',' ','c','o','m','m','e','n','t',0};
|
|
LOCALGROUP_INFO_1* info;
|
|
DWORD size;
|
|
|
|
FIXME("(%s %s %d %p) semi-stub!\n", debugstr_w(servername),
|
|
debugstr_w(groupname), level, bufptr);
|
|
|
|
size = sizeof(*info) + sizeof(WCHAR) * (lstrlenW(groupname)+1) + sizeof(commentW);
|
|
NetApiBufferAllocate(size, (LPVOID*)&info);
|
|
|
|
info->lgrpi1_name = (LPWSTR)(info + 1);
|
|
lstrcpyW(info->lgrpi1_name, groupname);
|
|
|
|
info->lgrpi1_comment = info->lgrpi1_name + lstrlenW(groupname) + 1;
|
|
lstrcpyW(info->lgrpi1_comment, commentW);
|
|
|
|
*bufptr = (LPBYTE)info;
|
|
|
|
return NERR_Success;
|
|
}
|
|
|
|
/************************************************************
|
|
* NetLocalGroupGetMembers (NETAPI32.@)
|
|
*/
|
|
NET_API_STATUS WINAPI NetLocalGroupGetMembers(
|
|
LPCWSTR servername,
|
|
LPCWSTR localgroupname,
|
|
DWORD level,
|
|
LPBYTE* bufptr,
|
|
DWORD prefmaxlen,
|
|
LPDWORD entriesread,
|
|
LPDWORD totalentries,
|
|
PDWORD_PTR resumehandle)
|
|
{
|
|
FIXME("(%s %s %d %p %d, %p %p %p) stub!\n", debugstr_w(servername),
|
|
debugstr_w(localgroupname), level, bufptr, prefmaxlen, entriesread,
|
|
totalentries, resumehandle);
|
|
|
|
if (level == 3)
|
|
{
|
|
WCHAR userName[MAX_COMPUTERNAME_LENGTH + 1];
|
|
DWORD userNameLen;
|
|
DWORD len,needlen;
|
|
PLOCALGROUP_MEMBERS_INFO_3 ptr;
|
|
|
|
/* still a stub, current user is belonging to all groups */
|
|
|
|
*totalentries = 1;
|
|
*entriesread = 0;
|
|
|
|
userNameLen = MAX_COMPUTERNAME_LENGTH + 1;
|
|
GetUserNameW(userName,&userNameLen);
|
|
needlen = sizeof(LOCALGROUP_MEMBERS_INFO_3) +
|
|
(userNameLen+2) * sizeof(WCHAR);
|
|
if (prefmaxlen != MAX_PREFERRED_LENGTH)
|
|
len = min(prefmaxlen,needlen);
|
|
else
|
|
len = needlen;
|
|
|
|
NetApiBufferAllocate(len, (LPVOID *) bufptr);
|
|
if (len < needlen)
|
|
return ERROR_MORE_DATA;
|
|
|
|
ptr = (PLOCALGROUP_MEMBERS_INFO_3)*bufptr;
|
|
ptr->lgrmi3_domainandname = (LPWSTR)(*bufptr+sizeof(LOCALGROUP_MEMBERS_INFO_3));
|
|
lstrcpyW(ptr->lgrmi3_domainandname,userName);
|
|
|
|
*entriesread = 1;
|
|
}
|
|
|
|
return NERR_Success;
|
|
}
|
|
|
|
/************************************************************
|
|
* NetLocalGroupSetInfo (NETAPI32.@)
|
|
*/
|
|
NET_API_STATUS WINAPI NetLocalGroupSetInfo(
|
|
LPCWSTR servername,
|
|
LPCWSTR groupname,
|
|
DWORD level,
|
|
LPBYTE buf,
|
|
LPDWORD parm_err)
|
|
{
|
|
FIXME("(%s %s %d %p %p) stub!\n", debugstr_w(servername),
|
|
debugstr_w(groupname), level, buf, parm_err);
|
|
return NERR_Success;
|
|
}
|
|
|
|
/************************************************************
|
|
* NetLocalGroupSetMember (NETAPI32.@)
|
|
*/
|
|
NET_API_STATUS WINAPI NetLocalGroupSetMembers(
|
|
LPCWSTR servername,
|
|
LPCWSTR groupname,
|
|
DWORD level,
|
|
LPBYTE buf,
|
|
DWORD totalentries)
|
|
{
|
|
FIXME("(%s %s %d %p %d) stub!\n", debugstr_w(servername),
|
|
debugstr_w(groupname), level, buf, totalentries);
|
|
return NERR_Success;
|
|
}
|