void device_image_interface::determine_open_plan(int is_create, UINT32 *open_plan) { int i = 0; /* emit flags */ if (!is_create && is_readable() && is_writeable()) open_plan[i++] = OPEN_FLAG_READ | OPEN_FLAG_WRITE; if (!is_create && !is_readable() && is_writeable()) open_plan[i++] = OPEN_FLAG_WRITE; if (!is_create && is_readable()) open_plan[i++] = OPEN_FLAG_READ; if (is_writeable() && is_creatable()) open_plan[i++] = OPEN_FLAG_READ | OPEN_FLAG_WRITE | OPEN_FLAG_CREATE; open_plan[i] = 0; }
std::vector<UINT32> device_image_interface::determine_open_plan(bool is_create) { std::vector<UINT32> open_plan; // emit flags into a vector if (!is_create && is_readable() && is_writeable()) open_plan.push_back(OPEN_FLAG_READ | OPEN_FLAG_WRITE); if (!is_create && !is_readable() && is_writeable()) open_plan.push_back(OPEN_FLAG_WRITE); if (!is_create && is_readable()) open_plan.push_back(OPEN_FLAG_READ); if (is_create && is_writeable() && is_creatable()) open_plan.push_back(OPEN_FLAG_READ | OPEN_FLAG_WRITE | OPEN_FLAG_CREATE); return open_plan; }
static PyObject * mmap_write_byte_method(mmap_object *self, PyObject *args) { char value; CHECK_VALID(NULL); if (!PyArg_ParseTuple(args, "c:write_byte", &value)) return(NULL); if (!is_writeable(self)) return NULL; *(self->data+self->pos) = value; self->pos += 1; Py_INCREF(Py_None); return Py_None; }
static PyObject * mmap_write_method(mmap_object *self, PyObject *args) { Py_ssize_t length; char *data; CHECK_VALID(NULL); if (!PyArg_ParseTuple(args, "s#:write", &data, &length)) return(NULL); if (!is_writeable(self)) return NULL; if ((self->pos + length) > self->size) { PyErr_SetString(PyExc_ValueError, "data out of range"); return NULL; } memcpy(self->data+self->pos, data, length); self->pos = self->pos+length; Py_INCREF(Py_None); return Py_None; }
static PyObject * mmap_write_byte_method(mmap_object *self, PyObject *args) { char value; CHECK_VALID(NULL); if (!PyArg_ParseTuple(args, "c:write_byte", &value)) return(NULL); if (!is_writeable(self)) return NULL; if (self->pos < self->size) { *(self->data+self->pos) = value; self->pos += 1; Py_INCREF(Py_None); return Py_None; } else { PyErr_SetString(PyExc_ValueError, "write byte out of range"); return NULL; } }
bool torture_samba3_hide(struct torture_context *torture) { struct smbcli_state *cli; const char *fname = "test.txt"; int fnum; NTSTATUS status; struct smbcli_tree *hideunread; struct smbcli_tree *hideunwrite; if (!torture_open_connection_share( torture, &cli, torture, torture_setting_string(torture, "host", NULL), torture_setting_string(torture, "share", NULL), torture->ev)) { torture_fail(torture, "torture_open_connection_share failed\n"); } status = torture_second_tcon(torture, cli->session, "hideunread", &hideunread); torture_assert_ntstatus_ok(torture, status, "second_tcon(hideunread) failed\n"); status = torture_second_tcon(torture, cli->session, "hideunwrite", &hideunwrite); torture_assert_ntstatus_ok(torture, status, "second_tcon(hideunwrite) failed\n"); status = smbcli_unlink(cli->tree, fname); if (NT_STATUS_EQUAL(status, NT_STATUS_CANNOT_DELETE)) { smbcli_setatr(cli->tree, fname, 0, -1); smbcli_unlink(cli->tree, fname); } fnum = smbcli_open(cli->tree, fname, O_RDWR|O_CREAT, DENY_NONE); if (fnum == -1) { torture_fail(torture, talloc_asprintf(torture, "Failed to create %s - %s\n", fname, smbcli_errstr(cli->tree))); } smbcli_close(cli->tree, fnum); if (!smbcli_file_exists(cli->tree, fname)) { torture_fail(torture, talloc_asprintf(torture, "%s does not exist\n", fname)); } /* R/W file should be visible everywhere */ status = smbcli_chmod(cli->tree, fname, UNIX_R_USR|UNIX_W_USR); torture_assert_ntstatus_ok(torture, status, "smbcli_chmod failed\n"); if (!is_writeable(torture, cli->tree, fname)) { torture_fail(torture, "File not writable\n"); } if (!is_readable(cli->tree, fname)) { torture_fail(torture, "File not readable\n"); } if (!is_visible(cli->tree, fname)) { torture_fail(torture, "r/w file not visible via normal share\n"); } if (!is_visible(hideunread, fname)) { torture_fail(torture, "r/w file not visible via hide unreadable\n"); } if (!is_visible(hideunwrite, fname)) { torture_fail(torture, "r/w file not visible via hide unwriteable\n"); } /* R/O file should not be visible via hide unwriteable files */ status = smbcli_chmod(cli->tree, fname, UNIX_R_USR); torture_assert_ntstatus_ok(torture, status, "smbcli_chmod failed\n"); if (is_writeable(torture, cli->tree, fname)) { torture_fail(torture, "r/o is writable\n"); } if (!is_readable(cli->tree, fname)) { torture_fail(torture, "r/o not readable\n"); } if (!is_visible(cli->tree, fname)) { torture_fail(torture, "r/o file not visible via normal share\n"); } if (!is_visible(hideunread, fname)) { torture_fail(torture, "r/o file not visible via hide unreadable\n"); } if (is_visible(hideunwrite, fname)) { torture_fail(torture, "r/o file visible via hide unwriteable\n"); } /* inaccessible file should be only visible on normal share */ status = smbcli_chmod(cli->tree, fname, 0); torture_assert_ntstatus_ok(torture, status, "smbcli_chmod failed\n"); if (is_writeable(torture, cli->tree, fname)) { torture_fail(torture, "inaccessible file is writable\n"); } if (is_readable(cli->tree, fname)) { torture_fail(torture, "inaccessible file is readable\n"); } if (!is_visible(cli->tree, fname)) { torture_fail(torture, "inaccessible file not visible via normal share\n"); } if (is_visible(hideunread, fname)) { torture_fail(torture, "inaccessible file visible via hide unreadable\n"); } if (is_visible(hideunwrite, fname)) { torture_fail(torture, "inaccessible file visible via hide unwriteable\n"); } smbcli_chmod(cli->tree, fname, UNIX_R_USR|UNIX_W_USR); smbcli_unlink(cli->tree, fname); return true; }