local_flags = (flags & ~O_ACCMODE)|O_RDWR;
}
- if ((open_access_mask & (FILE_READ_DATA|FILE_WRITE_DATA|FILE_APPEND_DATA|FILE_EXECUTE)) ||
+ if ((open_access_mask & (FILE_READ_DATA|FILE_WRITE_DATA|
+ FILE_APPEND_DATA|FILE_EXECUTE|
+ WRITE_DAC_ACCESS|WRITE_OWNER_ACCESS|
+ READ_CONTROL_ACCESS))||
(!file_existed && (local_flags & O_CREAT)) ||
((local_flags & O_TRUNC) == O_TRUNC) ) {
const char *wild;
goto out;
}
- /* Open a handle on the symlink. */
+ /* Open a handle on the symlink for SD set/get should fail. */
status = cli_ntcreate(cli,
sname,
0,
&fnum,
NULL);
+ if (NT_STATUS_IS_OK(status)) {
+ printf("Symlink open for getsd/setsd of %s "
+ "succeeded (should fail)\n",
+ sname);
+ goto out;
+ }
+
+ /* Open a handle on the symlink. */
+ status = cli_ntcreate(cli,
+ sname,
+ 0,
+ FILE_READ_ATTRIBUTES|FILE_WRITE_ATTRIBUTES,
+ 0,
+ FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE,
+ FILE_OPEN,
+ 0x0,
+ 0x0,
+ &fnum,
+ NULL);
+
if (!NT_STATUS_IS_OK(status)) {
printf("cli_posix_open of %s failed (%s)\n",
sname,