| /* |
| * 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; |
| if (!GetUserNameW(userName,&userNameLen)) |
| return ERROR_NOT_ENOUGH_MEMORY; |
| |
| 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; |
| } |