- User properties:

Fix a memory leak.
  Enable the Apply button when the users full name or description is changed.
- Group properties:
  The group description can be changed.
  Update the group list when the group description changes.
  

svn path=/trunk/; revision=33901
This commit is contained in:
Eric Kohl 2008-06-08 13:34:42 +00:00
parent 8db6f07370
commit 5736c65128
3 changed files with 113 additions and 10 deletions

View file

@ -61,7 +61,8 @@ GetTextSid(PSID pSid,
static VOID static VOID
GetGroupData(HWND hwndDlg, LPTSTR lpGroupName) GetGeneralGroupData(HWND hwndDlg,
PGENERAL_GROUP_DATA pGroupData)
{ {
PLOCALGROUP_INFO_1 groupInfo = NULL; PLOCALGROUP_INFO_1 groupInfo = NULL;
PLOCALGROUP_MEMBERS_INFO_1 membersInfo = NULL; PLOCALGROUP_MEMBERS_INFO_1 membersInfo = NULL;
@ -101,15 +102,15 @@ GetGroupData(HWND hwndDlg, LPTSTR lpGroupName)
(void)ListView_InsertColumn(hwndLV, 0, &column); (void)ListView_InsertColumn(hwndLV, 0, &column);
/* Set group name */ /* Set group name */
SetDlgItemText(hwndDlg, IDC_GROUP_GENERAL_NAME, lpGroupName); SetDlgItemText(hwndDlg, IDC_GROUP_GENERAL_NAME, pGroupData->szGroupName);
/* Set group description */ /* Set group description */
NetLocalGroupGetInfo(NULL, lpGroupName, 1, (LPBYTE*)&groupInfo); NetLocalGroupGetInfo(NULL, pGroupData->szGroupName, 1, (LPBYTE*)&groupInfo);
SetDlgItemText(hwndDlg, IDC_GROUP_GENERAL_DESCRIPTION, groupInfo->lgrpi1_comment); SetDlgItemText(hwndDlg, IDC_GROUP_GENERAL_DESCRIPTION, groupInfo->lgrpi1_comment);
NetApiBufferFree(groupInfo); NetApiBufferFree(groupInfo);
/* Set group members */ /* Set group members */
NetLocalGroupGetMembers(NULL, lpGroupName, 1, (LPBYTE*)&membersInfo, NetLocalGroupGetMembers(NULL, pGroupData->szGroupName, 1, (LPBYTE*)&membersInfo,
MAX_PREFERRED_LENGTH, &dwRead, &dwTotal, MAX_PREFERRED_LENGTH, &dwRead, &dwTotal,
&resumeHandle); &resumeHandle);
@ -130,7 +131,6 @@ GetGroupData(HWND hwndDlg, LPTSTR lpGroupName)
wsprintf(szGroupName, wsprintf(szGroupName,
TEXT("%s\\%s (%s)"), TEXT("%s\\%s (%s)"),
membersInfo[i].lgrmi1_name, membersInfo[i].lgrmi1_name,
szSid); szSid);
@ -144,27 +144,91 @@ GetGroupData(HWND hwndDlg, LPTSTR lpGroupName)
} }
static BOOL
SetGeneralGroupData(HWND hwndDlg,
PGENERAL_GROUP_DATA pGroupData)
{
LOCALGROUP_INFO_1 groupInfo;
LPTSTR pszComment = NULL;
INT nLength;
NET_API_STATUS status;
DWORD dwIndex;
/* Get the group description */
nLength = GetWindowTextLength(GetDlgItem(hwndDlg, IDC_GROUP_GENERAL_DESCRIPTION));
if (nLength == 0)
{
groupInfo.lgrpi1_comment = NULL;
}
else
{
pszComment = HeapAlloc(GetProcessHeap(), 0, (nLength + 1) * sizeof(TCHAR));
GetDlgItemText(hwndDlg, IDC_GROUP_GENERAL_DESCRIPTION, pszComment, nLength + 1);
groupInfo.lgrpi1_comment = pszComment;
}
status = NetLocalGroupSetInfo(NULL, pGroupData->szGroupName, 1, (LPBYTE)&groupInfo, &dwIndex);
if (status != NERR_Success)
{
DebugPrintf(_T("Status: %lu Index: %lu"), status, dwIndex);
}
if (pszComment)
HeapFree(GetProcessHeap(), 0, pszComment);
return TRUE;
}
INT_PTR CALLBACK INT_PTR CALLBACK
GroupGeneralPageProc(HWND hwndDlg, GroupGeneralPageProc(HWND hwndDlg,
UINT uMsg, UINT uMsg,
WPARAM wParam, WPARAM wParam,
LPARAM lParam) LPARAM lParam)
{ {
PGENERAL_GROUP_DATA pGroupData;
UNREFERENCED_PARAMETER(lParam); UNREFERENCED_PARAMETER(lParam);
UNREFERENCED_PARAMETER(wParam); UNREFERENCED_PARAMETER(wParam);
UNREFERENCED_PARAMETER(hwndDlg); UNREFERENCED_PARAMETER(hwndDlg);
pGroupData= (PGENERAL_GROUP_DATA)GetWindowLongPtr(hwndDlg, DWLP_USER);
switch (uMsg) switch (uMsg)
{ {
case WM_INITDIALOG: case WM_INITDIALOG:
GetGroupData(hwndDlg, pGroupData = (PGENERAL_GROUP_DATA)HeapAlloc(GetProcessHeap(),
(LPTSTR)((PROPSHEETPAGE *)lParam)->lParam); HEAP_ZERO_MEMORY,
sizeof(GENERAL_GROUP_DATA) +
lstrlen((LPTSTR)((PROPSHEETPAGE *)lParam)->lParam) * sizeof(TCHAR));
lstrcpy(pGroupData->szGroupName, (LPTSTR)((PROPSHEETPAGE *)lParam)->lParam);
SetWindowLongPtr(hwndDlg, DWLP_USER, (INT_PTR)pGroupData);
GetGeneralGroupData(hwndDlg,
pGroupData);
break; break;
case WM_COMMAND: case WM_COMMAND:
switch (LOWORD(wParam))
{
case IDC_GROUP_GENERAL_DESCRIPTION:
if (HIWORD(wParam) == EN_CHANGE)
PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
break;
}
break;
case WM_NOTIFY:
if (((LPPSHNOTIFY)lParam)->hdr.code == PSN_APPLY)
{
SetGeneralGroupData(hwndDlg, pGroupData);
return TRUE;
}
break; break;
case WM_DESTROY: case WM_DESTROY:
HeapFree(GetProcessHeap(), 0, pGroupData);
break; break;
} }

View file

@ -87,6 +87,35 @@ UpdateGroupsList(HWND hwndListView)
} }
static VOID
UpdateGroupProperties(HWND hwndDlg)
{
TCHAR szGroupName[UNLEN];
INT iItem;
HWND hwndLV;
NET_API_STATUS status;
PLOCALGROUP_INFO_1 pGroupInfo = NULL;
hwndLV = GetDlgItem(hwndDlg, IDC_GROUPS_LIST);
iItem = ListView_GetNextItem(hwndLV, -1, LVNI_SELECTED);
if (iItem == -1)
return;
/* Get the group name */
ListView_GetItemText(hwndLV,
iItem, 0,
szGroupName,
UNLEN);
status = NetLocalGroupGetInfo(NULL, szGroupName, 1, (LPBYTE*)&pGroupInfo);
ListView_SetItemText(hwndLV, iItem, 1,
pGroupInfo->lgrpi1_comment);
NetApiBufferFree(pGroupInfo);
}
INT_PTR CALLBACK INT_PTR CALLBACK
NewGroupDlgProc(HWND hwndDlg, NewGroupDlgProc(HWND hwndDlg,
UINT uMsg, UINT uMsg,
@ -461,7 +490,8 @@ GroupsPageProc(HWND hwndDlg,
break; break;
case IDM_GROUP_PROPERTIES: case IDM_GROUP_PROPERTIES:
GroupProperties(hwndDlg); if (GroupProperties(hwndDlg) == IDOK)
UpdateGroupProperties(hwndDlg);
break; break;
} }
break; break;

View file

@ -310,6 +310,9 @@ SetGeneralUserData(HWND hwndDlg,
if (pszFullName) if (pszFullName)
HeapFree(GetProcessHeap(), 0, pszFullName); HeapFree(GetProcessHeap(), 0, pszFullName);
if (pszComment)
HeapFree(GetProcessHeap(), 0, pszComment);
NetApiBufferFree(pUserInfo); NetApiBufferFree(pUserInfo);
return (status == NERR_Success); return (status == NERR_Success);
@ -339,15 +342,21 @@ UserGeneralPageProc(HWND hwndDlg,
lstrlen((LPTSTR)((PROPSHEETPAGE *)lParam)->lParam) * sizeof(TCHAR)); lstrlen((LPTSTR)((PROPSHEETPAGE *)lParam)->lParam) * sizeof(TCHAR));
lstrcpy(pUserData->szUserName, (LPTSTR)((PROPSHEETPAGE *)lParam)->lParam); lstrcpy(pUserData->szUserName, (LPTSTR)((PROPSHEETPAGE *)lParam)->lParam);
SetWindowLongPtr(hwndDlg, DWLP_USER, (INT_PTR)pUserData);
GetGeneralUserData(hwndDlg, GetGeneralUserData(hwndDlg,
pUserData); pUserData);
SetWindowLongPtr(hwndDlg, DWLP_USER, (INT_PTR)pUserData);
break; break;
case WM_COMMAND: case WM_COMMAND:
switch (LOWORD(wParam)) switch (LOWORD(wParam))
{ {
case IDC_USER_GENERAL_FULL_NAME:
case IDC_USER_GENERAL_DESCRIPTION:
if (HIWORD(wParam) == EN_CHANGE)
PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
break;
case IDC_USER_GENERAL_FORCE_CHANGE: case IDC_USER_GENERAL_FORCE_CHANGE:
pUserData->dwPasswordExpired = !pUserData->dwPasswordExpired; pUserData->dwPasswordExpired = !pUserData->dwPasswordExpired;
UpdateUserOptions(hwndDlg, pUserData, FALSE); UpdateUserOptions(hwndDlg, pUserData, FALSE);