Exemplo n.º 1
0
ssize_t write_data(int fd, const char *buffer, size_t N)
{
	struct iovec iov;

	iov.iov_base = discard_const_p(void, buffer);
	iov.iov_len = N;
	return write_data_iov(fd, &iov, 1);
}
Exemplo n.º 2
0
bool cli_send_smb_direct_writeX(struct cli_state *cli,
				const char *p,
				size_t extradata)
{
	/* First length to send is the offset to the data. */
	size_t len = SVAL(cli->outbuf,smb_vwv11) + 4;
	size_t nwritten=0;
	struct iovec iov[2];

	/* fd == -1 causes segfaults -- Tom ([email protected]) */
	if (cli->fd == -1) {
		return false;
	}

	if (client_is_signing_on(cli)) {
		DEBUG(0,("cli_send_smb_large: cannot send signed packet.\n"));
		return false;
	}

	iov[0].iov_base = (void *)cli->outbuf;
	iov[0].iov_len = len;
	iov[1].iov_base = CONST_DISCARD(void *, p);
	iov[1].iov_len = extradata;

	nwritten = write_data_iov(cli->fd, iov, 2);
	if (nwritten < (len + extradata)) {
		close(cli->fd);
		cli->fd = -1;
		cli->smb_rw_error = SMB_WRITE_ERROR;
		DEBUG(0,("Error writing %d bytes to client. (%s)\n",
			 (int)(len+extradata), strerror(errno)));
		return false;
	}

	/* Increment the mid so we can tell between responses. */
	cli->mid++;
	if (!cli->mid)
		cli->mid++;
	return true;
}