Move the buffers to the heap allocated client/private data structs.
---
daemon/libvirtd.c | 10 ++++++----
daemon/libvirtd.h | 1 +
src/remote/remote_driver.c | 8 +++++---
3 files changed, 12 insertions(+), 7 deletions(-)
diff --git a/daemon/libvirtd.c b/daemon/libvirtd.c
index 024f56f..42cbe5d 100644
--- a/daemon/libvirtd.c
+++ b/daemon/libvirtd.c
@@ -1766,15 +1766,17 @@ static ssize_t qemudClientReadSASL(struct qemud_client *client) {
/* Need to read some more data off the wire */
if (client->saslDecoded == NULL) {
int ret;
- char encoded[8192];
- ssize_t encodedLen = sizeof(encoded);
- encodedLen = qemudClientReadBuf(client, encoded, encodedLen);
+ ssize_t encodedLen;
+
+ encodedLen = qemudClientReadBuf(client, client->saslTemporary,
+ sizeof(client->saslTemporary));
if (encodedLen <= 0)
return encodedLen;
- ret = sasl_decode(client->saslconn, encoded, encodedLen,
+ ret = sasl_decode(client->saslconn, client->saslTemporary, encodedLen,
&client->saslDecoded,
&client->saslDecodedLength);
+
if (ret != SASL_OK) {
VIR_ERROR(_("failed to decode SASL data %s"),
sasl_errstring(ret, NULL, NULL));
diff --git a/daemon/libvirtd.h b/daemon/libvirtd.h
index 7da3cfd..d37c3fd 100644
--- a/daemon/libvirtd.h
+++ b/daemon/libvirtd.h
@@ -213,6 +213,7 @@ struct qemud_client {
unsigned int saslEncodedLength;
unsigned int saslEncodedOffset;
char *saslUsername;
+ char saslTemporary[8192]; /* temorary holds data to be decoded */
# endif
/* Count of meages in 'dx' or 'tx' queue
diff --git a/src/remote/remote_driver.c b/src/remote/remote_driver.c
index bf94e70..942ff4b 100644
--- a/src/remote/remote_driver.c
+++ b/src/remote/remote_driver.c
@@ -174,6 +174,8 @@ struct private_data {
const char *saslEncoded;
unsigned int saslEncodedLength;
unsigned int saslEncodedOffset;
+
+ char saslTemporary[8192]; /* temorary holds data to be decoded */
#endif
/* Buffer for incoming data packets
@@ -10063,15 +10065,15 @@ remoteIOReadMessage(struct private_data *priv) {
#if HAVE_SASL
if (priv->saslconn) {
if (priv->saslDecoded == NULL) {
- char encoded[8192];
int ret, err;
- ret = remoteIOReadBuffer(priv, encoded, sizeof(encoded));
+ ret = remoteIOReadBuffer(priv, priv->saslTemporary,
+ sizeof(priv->saslTemporary));
if (ret < 0)
return -1;
if (ret == 0)
return 0;
- err = sasl_decode(priv->saslconn, encoded, ret,
+ err = sasl_decode(priv->saslconn, priv->saslTemporary, ret,
&priv->saslDecoded,
&priv->saslDecodedLength);
if (err != SASL_OK) {
remoteError(VIR_ERR_INTERNAL_ERROR,
--
1.7.0.4