- Check that the user name does not contain any illegal characters.
authorEric Kohl <eric.kohl@reactos.org>
Wed, 14 May 2008 17:02:17 +0000 (17:02 +0000)
committerEric Kohl <eric.kohl@reactos.org>
Wed, 14 May 2008 17:02:17 +0000 (17:02 +0000)
- Check that both passwords are the same.
- Limit the maximum user name length to 20 characters.

svn path=/trunk/; revision=33516

reactos/dll/cpl/usrmgr/users.c

index 5868b68..43c206f 100644 (file)
@@ -10,8 +10,6 @@
 /*\r
  * TODO:\r
  *  - Add new user to the users group.\r
 /*\r
  * TODO:\r
  *  - Add new user to the users group.\r
- *  - Check a new users name for illegal characters.\r
- *  - Check whether both passwords are the same for a new user.\r
  *  - Remove a user from all groups.\r
  *  - Implement user property pages.\r
  *  - Use localized messages.\r
  *  - Remove a user from all groups.\r
  *  - Implement user property pages.\r
  *  - Use localized messages.\r
@@ -58,6 +56,31 @@ CheckPasswords(HWND hwndDlg,
 }\r
 \r
 \r
 }\r
 \r
 \r
+static BOOL\r
+CheckUserName(HWND hwndDlg,\r
+              INT nIdDlgItem)\r
+{\r
+    TCHAR szUserName[256];\r
+    UINT uLen;\r
+\r
+    uLen = GetDlgItemText(hwndDlg, nIdDlgItem, szUserName, 256);\r
+\r
+    /* Check the user name */\r
+    if (uLen > 0 && _tcspbrk(szUserName, TEXT("\"*+,/\\:;<=>?[]|")) != NULL)\r
+    {\r
+        MessageBox(hwndDlg,\r
+                   TEXT("The user name you entered is invalid! A user name must not contain the following charecters: *+,/:;<=>?[\\]|"),\r
+                   TEXT("ERROR"),\r
+                   MB_OK | MB_ICONERROR);\r
+        return FALSE;\r
+    }\r
+\r
+\r
+    return TRUE;\r
+}\r
+\r
+\r
+\r
 INT_PTR CALLBACK\r
 ChangePasswordDlgProc(HWND hwndDlg,\r
                       UINT uMsg,\r
 INT_PTR CALLBACK\r
 ChangePasswordDlgProc(HWND hwndDlg,\r
                       UINT uMsg,\r
@@ -108,6 +131,7 @@ NewUserDlgProc(HWND hwndDlg,
     {\r
         case WM_INITDIALOG:\r
             SetWindowLongPtr(hwndDlg, DWLP_USER, lParam);\r
     {\r
         case WM_INITDIALOG:\r
             SetWindowLongPtr(hwndDlg, DWLP_USER, lParam);\r
+            SendDlgItemMessage(hwndDlg, IDC_USER_NEW_NAME, EM_SETLIMITTEXT, 20, 0);\r
             CheckDlgButton(hwndDlg, IDC_USER_NEW_FORCE_CHANGE, BST_CHECKED);\r
             break;\r
 \r
             CheckDlgButton(hwndDlg, IDC_USER_NEW_FORCE_CHANGE, BST_CHECKED);\r
             break;\r
 \r
@@ -123,6 +147,20 @@ NewUserDlgProc(HWND hwndDlg,
                     break;\r
 \r
                 case IDOK:\r
                     break;\r
 \r
                 case IDOK:\r
+                    if (!CheckUserName(hwndDlg, IDC_USER_NEW_NAME))\r
+                    {\r
+                        SetFocus(GetDlgItem(hwndDlg, IDC_USER_NEW_NAME));\r
+                        SendDlgItemMessage(hwndDlg, IDC_USER_NEW_NAME, EM_SETSEL, 0, -1);\r
+                        break;\r
+                    }\r
+\r
+                    if (!CheckPasswords(hwndDlg, IDC_USER_NEW_PASSWORD1, IDC_USER_NEW_PASSWORD2))\r
+                    {\r
+                        SetDlgItemText(hwndDlg, IDC_USER_NEW_PASSWORD1, TEXT(""));\r
+                        SetDlgItemText(hwndDlg, IDC_USER_NEW_PASSWORD2, TEXT(""));\r
+                        break;\r
+                    }\r
+\r
                     userInfo = (LPUSER_INFO_3)GetWindowLongPtr(hwndDlg, DWLP_USER);\r
 \r
                     nLength = SendDlgItemMessage(hwndDlg, IDC_USER_NEW_NAME, WM_GETTEXTLENGTH, 0, 0);\r
                     userInfo = (LPUSER_INFO_3)GetWindowLongPtr(hwndDlg, DWLP_USER);\r
 \r
                     nLength = SendDlgItemMessage(hwndDlg, IDC_USER_NEW_NAME, WM_GETTEXTLENGTH, 0, 0);\r