1 // PropFile.cpp : implementation file
12 #include "WINNT\talocale.h"
13 #include "afs_shl_ext.h"
14 #include "set_afs_acl.h"
15 #include "clear_acl_dlg.h"
16 #include "add_acl_entry_dlg.h"
17 #include "copy_acl_dlg.h"
18 #include "make_mount_point_dlg.h"
19 #include "make_symbolic_link_dlg.h"
24 BOOL
CPropFile::PropPageProc( HWND hwnd
, UINT uMessage
, WPARAM wParam
, LPARAM lParam
)
30 CPropFile
* sheetpage
= (CPropFile
*) ((LPPROPSHEETPAGE
) lParam
)->lParam
;
31 SetWindowLongPtr (hwnd
, GWLP_USERDATA
, (LONG_PTR
) sheetpage
);
32 sheetpage
->SetHwnd(hwnd
);
33 AfxSetResourceHandle(m_hInst
);
37 if (filenames
.GetCount() <= 0) {
39 ShowWindow(GetDlgItem(m_hwnd
, IDC_REMOVEMOUNTPOINT
), SW_HIDE
);
40 ShowWindow(GetDlgItem(m_hwnd
, IDC_SYMLINK_LABEL
), SW_HIDE
);
41 ShowWindow(GetDlgItem(m_hwnd
, IDC_MOUNTPOINT_LABEL
), SW_HIDE
);
42 EnableUnixMode(FALSE
);
45 else if(filenames
.GetCount() > 1) {
46 // multiple items selected
47 LoadString(sText
, IDS_PROP_MULTIPLEITEMS
);
48 SetDlgItemText(hwnd
, IDC_PROP_TYPE
, sText
);
50 ShowWindow(GetDlgItem(m_hwnd
, IDC_REMOVEMOUNTPOINT
), SW_HIDE
);
51 ShowWindow(GetDlgItem(m_hwnd
, IDC_SYMLINK_LABEL
), SW_HIDE
);
52 ShowWindow(GetDlgItem(m_hwnd
, IDC_MOUNTPOINT_LABEL
), SW_HIDE
);
53 EnableUnixMode(FALSE
);
55 sText
= GetCellName(filenames
.GetAt(0), FALSE
);
57 SetDlgItemText(hwnd
, IDC_PROP_CELL
, sText
);
61 LoadString(sText
, IDS_PROP_TYPEMOUNTPOINT
);
62 else if (m_bIsSymlink
)
63 LoadString(sText
, IDS_PROP_TYPESYMLINK
);
65 LoadString(sText
, IDS_PROP_TYPEDIRECTORY
);
67 LoadString(sText
, IDS_PROP_TYPEFILE
);
69 SetDlgItemText(hwnd
, IDC_PROP_TYPE
, sText
);
71 if (m_bIsMountpoint
) {
72 ShowWindow(GetDlgItem(m_hwnd
, IDC_REMOVEMOUNTPOINT
), SW_SHOW
);
75 ShowWindow(GetDlgItem(m_hwnd
, IDC_SYMLINK_LABEL
), SW_HIDE
);
77 if (!m_bIsMountpoint
) {
78 ShowWindow(GetDlgItem(m_hwnd
, IDC_MOUNTPOINT_LABEL
), SW_HIDE
);
81 if (!m_bIsMountpoint
&& !m_bIsSymlink
) {
82 ShowWindow(GetDlgItem(m_hwnd
, IDC_EDIT
), SW_HIDE
);
86 ShowWindow(GetDlgItem(m_hwnd
, IDC_REMOVESYMLINK
), SW_SHOW
);
89 CString user
, group
, other
, suid
;
91 GetUnixModeBits(filenames
.GetAt(0), user
, group
, other
, suid
);
92 ShowUnixMode(user
, group
, other
, suid
);
94 SetDlgItemText(hwnd
, IDC_PROP_FILENAME
, filenames
.GetAt(0));
95 if (!GetFID(filenames
.GetAt(0), sText
, TRUE
))
96 sText
= _T("(unknown)");
97 SetDlgItemText(hwnd
, IDC_PROP_FID
, sText
);
98 sText
= GetOwner(filenames
.GetAt(0));
99 SetDlgItemText(hwnd
, IDC_PROP_OWNER
, sText
);
100 sText
= GetGroup(filenames
.GetAt(0));
101 SetDlgItemText(hwnd
, IDC_PROP_GROUP
, sText
);
103 if (m_bIsMountpoint
){
104 sText
= GetMountpoint(filenames
.GetAt(0));
105 sText
= sText
.Mid(sText
.Find('\t')+1);
106 SetDlgItemText(hwnd
, IDC_PROP_SMINFO
, sText
);
109 sText
= GetSymlink(filenames
.GetAt(0));
110 sText
= sText
.Mid(sText
.Find('\t')+1);
111 SetDlgItemText(hwnd
, IDC_PROP_SMINFO
, sText
);
114 sText
= GetCellName(filenames
.GetAt(0));
116 SetDlgItemText(hwnd
, IDC_PROP_CELL
, sText
);
123 LPNMHDR point
= (LPNMHDR
)lParam
;
124 int code
= point
->code
;
130 CString user
, group
, other
, suid
;
131 MakeUnixModeString(user
, group
, other
, suid
);
132 SetUnixModeBits(filenames
, user
, group
, other
, suid
);
133 // Return PSNRET_NOERROR to allow the sheet to close if the user clicked OK.
134 SetWindowLongPtr(m_hwnd
, DWLP_MSGRESULT
, PSNRET_NOERROR
);
138 SetWindowLongPtr(m_hwnd
, DWLP_MSGRESULT
, FALSE
);
143 switch (HIWORD(wParam
))
146 switch (LOWORD(wParam
))
151 case IDC_REMOVESYMLINK
:
153 int nChoice
= ShowMessageBox(IDS_REALLY_REMOVE_SYMLINK
, MB_ICONQUESTION
| MB_YESNO
, IDS_REALLY_REMOVE_SYMLINK
);
154 if (nChoice
== IDYES
)
155 RemoveSymlink(filenames
.GetAt(0));
158 case IDC_REMOVEMOUNTPOINT
:
160 int nChoice
= ShowMessageBox(IDS_REALLY_DEL_MOUNT_POINTS
, MB_ICONQUESTION
| MB_YESNO
, IDS_REALLY_DEL_MOUNT_POINTS
);
161 if (nChoice
== IDYES
)
162 RemoveMount(filenames
);
167 if (m_bIsMountpoint
){
168 CMakeMountPointDlg dlg
;
169 dlg
.SetDir(filenames
.GetAt(0));
170 dlg
.SetCell(m_cellName
);
171 dlg
.SetVol(m_volName
);
175 CMakeSymbolicLinkDlg dlg
;
176 CStringA
msg(filenames
.GetAt(0));
178 if ((i
=msg
.ReverseFind('\\'))>0)
180 else if ((i
=msg
.ReverseFind(':'))>0)
181 msg
=msg
.Left(i
+1)+"\\";
183 dlg
.m_strDir
= filenames
.GetAt(0);
184 dlg
.m_strName
= GetSymlink(filenames
.GetAt(0));
188 case IDC_ATTR_USER_READ
:
189 case IDC_ATTR_USER_WRITE
:
190 case IDC_ATTR_USER_EXECUTE
:
191 case IDC_ATTR_GROUP_READ
:
192 case IDC_ATTR_GROUP_WRITE
:
193 case IDC_ATTR_GROUP_EXECUTE
:
194 case IDC_ATTR_OTHER_READ
:
195 case IDC_ATTR_OTHER_WRITE
:
196 case IDC_ATTR_OTHER_EXECUTE
:
197 SendMessage(GetParent(m_hwnd
), PSM_CHANGED
, (WPARAM
)m_hwnd
, 0); // enable the "apply" button
208 void CPropFile::ShowUnixMode(const CString
& strUserRights
, const CString
& strGroupRights
, const CString
& strOtherRights
, const CString
& strSuidRights
)
210 SendDlgItemMessage(m_hwnd
, IDC_ATTR_USER_READ
, BM_SETCHECK
, (strUserRights
.Find(_T("r")) == -1) ? BST_UNCHECKED
: BST_CHECKED
, 0);
211 SendDlgItemMessage(m_hwnd
, IDC_ATTR_USER_WRITE
, BM_SETCHECK
, (strUserRights
.Find(_T("w")) == -1) ? BST_UNCHECKED
: BST_CHECKED
, 0);
212 SendDlgItemMessage(m_hwnd
, IDC_ATTR_USER_EXECUTE
, BM_SETCHECK
, (strUserRights
.Find(_T("x")) == -1) ? BST_UNCHECKED
: BST_CHECKED
, 0);
214 SendDlgItemMessage(m_hwnd
, IDC_ATTR_GROUP_READ
, BM_SETCHECK
, (strGroupRights
.Find(_T("r")) == -1) ? BST_UNCHECKED
: BST_CHECKED
, 0);
215 SendDlgItemMessage(m_hwnd
, IDC_ATTR_GROUP_WRITE
, BM_SETCHECK
, (strGroupRights
.Find(_T("w")) == -1) ? BST_UNCHECKED
: BST_CHECKED
, 0);
216 SendDlgItemMessage(m_hwnd
, IDC_ATTR_GROUP_EXECUTE
, BM_SETCHECK
, (strGroupRights
.Find(_T("x")) == -1) ? BST_UNCHECKED
: BST_CHECKED
, 0);
218 SendDlgItemMessage(m_hwnd
, IDC_ATTR_OTHER_READ
, BM_SETCHECK
, (strOtherRights
.Find(_T("r")) == -1) ? BST_UNCHECKED
: BST_CHECKED
, 0);
219 SendDlgItemMessage(m_hwnd
, IDC_ATTR_OTHER_WRITE
, BM_SETCHECK
, (strOtherRights
.Find(_T("w")) == -1) ? BST_UNCHECKED
: BST_CHECKED
, 0);
220 SendDlgItemMessage(m_hwnd
, IDC_ATTR_OTHER_EXECUTE
, BM_SETCHECK
, (strOtherRights
.Find(_T("x")) == -1) ? BST_UNCHECKED
: BST_CHECKED
, 0);
222 SendDlgItemMessage(m_hwnd
, IDC_ATTR_SUID_UID
, BM_SETCHECK
, (strSuidRights
.Find(_T("s")) == -1) ? BST_UNCHECKED
: BST_CHECKED
, 0);
223 SendDlgItemMessage(m_hwnd
, IDC_ATTR_SUID_GID
, BM_SETCHECK
, (strSuidRights
.Find(_T("g")) == -1) ? BST_UNCHECKED
: BST_CHECKED
, 0);
224 SendDlgItemMessage(m_hwnd
, IDC_ATTR_SUID_VTX
, BM_SETCHECK
, (strSuidRights
.Find(_T("v")) == -1) ? BST_UNCHECKED
: BST_CHECKED
, 0);
227 void CPropFile::EnableUnixMode(BOOL bEnable
)
229 EnableWindow(GetDlgItem(m_hwnd
, IDC_ATTR_USER_READ
), bEnable
);
230 EnableWindow(GetDlgItem(m_hwnd
, IDC_ATTR_USER_WRITE
), bEnable
);
231 EnableWindow(GetDlgItem(m_hwnd
, IDC_ATTR_USER_EXECUTE
), bEnable
);
233 EnableWindow(GetDlgItem(m_hwnd
, IDC_ATTR_GROUP_READ
), bEnable
);
234 EnableWindow(GetDlgItem(m_hwnd
, IDC_ATTR_GROUP_WRITE
), bEnable
);
235 EnableWindow(GetDlgItem(m_hwnd
, IDC_ATTR_GROUP_EXECUTE
), bEnable
);
237 EnableWindow(GetDlgItem(m_hwnd
, IDC_ATTR_OTHER_READ
), bEnable
);
238 EnableWindow(GetDlgItem(m_hwnd
, IDC_ATTR_OTHER_WRITE
), bEnable
);
239 EnableWindow(GetDlgItem(m_hwnd
, IDC_ATTR_OTHER_EXECUTE
), bEnable
);
241 EnableWindow(GetDlgItem(m_hwnd
, IDC_ATTR_SUID_UID
), bEnable
);
242 EnableWindow(GetDlgItem(m_hwnd
, IDC_ATTR_SUID_GID
), bEnable
);
243 EnableWindow(GetDlgItem(m_hwnd
, IDC_ATTR_SUID_VTX
), bEnable
);
246 void CPropFile::MakeUnixModeString(CString
& userRights
, CString
& groupRights
, CString
& otherRights
, CString
& suidRights
)
253 if (SendDlgItemMessage(m_hwnd
, IDC_ATTR_USER_READ
, BM_GETCHECK
, 0,0) == BST_CHECKED
)
254 userRights
+= _T("r");
255 if (SendDlgItemMessage(m_hwnd
, IDC_ATTR_USER_WRITE
, BM_GETCHECK
, 0,0) == BST_CHECKED
)
256 userRights
+= _T("w");
257 if (SendDlgItemMessage(m_hwnd
, IDC_ATTR_USER_EXECUTE
, BM_GETCHECK
, 0,0) == BST_CHECKED
)
258 userRights
+= _T("x");
260 if (SendDlgItemMessage(m_hwnd
, IDC_ATTR_GROUP_READ
, BM_GETCHECK
, 0,0) == BST_CHECKED
)
261 groupRights
+= _T("r");
262 if (SendDlgItemMessage(m_hwnd
, IDC_ATTR_GROUP_WRITE
, BM_GETCHECK
, 0,0) == BST_CHECKED
)
263 groupRights
+= _T("w");
264 if (SendDlgItemMessage(m_hwnd
, IDC_ATTR_GROUP_EXECUTE
, BM_GETCHECK
, 0,0) == BST_CHECKED
)
265 groupRights
+= _T("x");
267 if (SendDlgItemMessage(m_hwnd
, IDC_ATTR_OTHER_READ
, BM_GETCHECK
, 0,0) == BST_CHECKED
)
268 otherRights
+= _T("r");
269 if (SendDlgItemMessage(m_hwnd
, IDC_ATTR_OTHER_WRITE
, BM_GETCHECK
, 0,0) == BST_CHECKED
)
270 otherRights
+= _T("w");
271 if (SendDlgItemMessage(m_hwnd
, IDC_ATTR_OTHER_EXECUTE
, BM_GETCHECK
, 0,0) == BST_CHECKED
)
272 otherRights
+= _T("x");
274 if (SendDlgItemMessage(m_hwnd
, IDC_ATTR_SUID_UID
, BM_GETCHECK
, 0,0) == BST_CHECKED
)
275 suidRights
+= _T("s");
276 if (SendDlgItemMessage(m_hwnd
, IDC_ATTR_SUID_GID
, BM_GETCHECK
, 0,0) == BST_CHECKED
)
277 suidRights
+= _T("g");
278 if (SendDlgItemMessage(m_hwnd
, IDC_ATTR_SUID_VTX
, BM_GETCHECK
, 0,0) == BST_CHECKED
)
279 suidRights
+= _T("v");