aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMoritz Schulte <[email protected]>2004-07-19 17:35:27 +0000
committerMoritz Schulte <[email protected]>2004-07-19 17:35:27 +0000
commit57f0fbdaf28e82c41a07c2f73df2ed6c3e68c158 (patch)
tree2b4d6dd7963348a6733033b737b653b23aae1d94
parent2004-07-19 Moritz Schulte <[email protected]> (diff)
downloadgnupg-57f0fbdaf28e82c41a07c2f73df2ed6c3e68c158.tar.gz
gnupg-57f0fbdaf28e82c41a07c2f73df2ed6c3e68c158.zip
2004-07-19 Moritz Schulte <[email protected]>
* command-ssh.c: Only log debugging message if asked to do so. * command-ssh.c (gpg_stream_copy): Remove function. Update Libgpg-stream.
-rw-r--r--agent/ChangeLog5
-rw-r--r--agent/buffer.c3
-rw-r--r--agent/command-ssh.c87
-rw-r--r--agent/gpg-stream.c34
-rw-r--r--agent/gpg-stream.h3
5 files changed, 73 insertions, 59 deletions
diff --git a/agent/ChangeLog b/agent/ChangeLog
index c71833f9d..8391743f4 100644
--- a/agent/ChangeLog
+++ b/agent/ChangeLog
@@ -1,5 +1,10 @@
2004-07-19 Moritz Schulte <[email protected]>
+ * command-ssh.c: Only log debugging message if asked to do so.
+
+ * command-ssh.c (gpg_stream_copy): Remove function.
+ Update Libgpg-stream.
+
* command-ssh.c: Fix handling of iqmp vs. u.
* command-ssh.c (ssh_identity_register): passphrase must not be freed.
diff --git a/agent/buffer.c b/agent/buffer.c
index bd441060e..6b0a2ec7f 100644
--- a/agent/buffer.c
+++ b/agent/buffer.c
@@ -157,6 +157,9 @@ buffer_read (buffer_t buffer,
size_t data_read = 0;
size_t data_to_copy = 0;
+ if (! (buffer->flags & BUFFER_FLAG_DIRTY))
+ err = buffer_flush_do (buffer);
+
while ((bytes_to_read - data_read) && (! err))
{
if (buffer->buffer_in.data_offset == buffer->buffer_in.data_size)
diff --git a/agent/command-ssh.c b/agent/command-ssh.c
index 9b855cac2..c877c6ec7 100644
--- a/agent/command-ssh.c
+++ b/agent/command-ssh.c
@@ -159,27 +159,6 @@ static uint32_t lifetime_default;
/* Primitive I/O functions. */
static gpg_err_code_t
-gpg_stream_copy (gpg_stream_t dest, gpg_stream_t src)
-{
- gpg_err_code_t err = GPG_ERR_NO_ERROR;
- unsigned char buffer[STREAM_BLOCK_SIZE];
- size_t bytes_read = 0;
-
- while (1)
- {
- err = gpg_stream_read (src, buffer, sizeof (buffer), &bytes_read);
- if (err || (! bytes_read))
- break;
-
- err = gpg_stream_write (dest, buffer, bytes_read, NULL);
- if (err)
- break;
- }
-
- return err;
-}
-
-static gpg_err_code_t
gpg_stream_read_byte (gpg_stream_t stream, byte_t *b)
{
gpg_err_code_t err = GPG_ERR_NO_ERROR;
@@ -648,10 +627,6 @@ ssh_extract_key_public_from_blob (unsigned char *blob, size_t blob_size,
if (err)
goto out;
- err = gpg_stream_flush (blob_stream);
- if (err)
- goto out;
-
err = gpg_stream_seek (blob_stream, 0, SEEK_SET);
if (err)
goto out;
@@ -687,10 +662,6 @@ ssh_convert_key_to_blob (unsigned char **blob, size_t *blob_size,
if (err)
goto out;
- err = gpg_stream_flush (blob_stream);
- if (err)
- goto out;
-
err = gpg_stream_seek (blob_stream, 0, SEEK_SET);
if (err)
goto out;
@@ -959,9 +930,6 @@ ssh_handler_request_identities (ctrl_t ctrl,
break;
}
- err = gpg_stream_flush (key_blobs);
- if (err)
- goto out;
err = gpg_stream_seek (key_blobs, 0, SEEK_SET);
if (err)
goto out;
@@ -1063,10 +1031,6 @@ data_sign (CTRL ctrl, unsigned char **sig, size_t *sig_n)
if (err)
goto out;
- err = gpg_stream_flush (stream);
- if (err)
- goto out;
-
err = gpg_stream_seek (stream, 0, SEEK_SET);
if (err)
goto out;
@@ -1126,7 +1090,8 @@ ssh_handler_sign_request (ctrl_t ctrl,
size_t sig_n = 0;
uint32_t flags = 0;
- log_debug ("[ssh-agent] sign request\n");
+ if (DBG_COMMAND)
+ log_debug ("[ssh-agent] sign request\n");
/* Receive key. */
@@ -1295,7 +1260,8 @@ ssh_identity_register (ssh_key_secret_t *key, int ttl)
char passphrase[100] = { 0 };
int ret = 0;
- log_debug ("[ssh-agent] registering identity `%s'\n", key_grip);
+ if (DBG_COMMAND)
+ log_debug ("[ssh-agent] registering identity `%s'\n", key_grip);
err = ssh_key_grip (NULL, key, key_grip);
if (err)
@@ -1340,7 +1306,8 @@ ssh_identity_drop (ssh_key_public_t *key)
/* FIXME */
- log_debug ("[ssh-agent] dropping identity `%s'\n", key_grip);
+ if (DBG_COMMAND)
+ log_debug ("[ssh-agent] dropping identity `%s'\n", key_grip);
out:
@@ -1358,7 +1325,8 @@ ssh_handler_add_identity (ctrl_t ctrl,
int confirm = 0;
int death = 0;
- log_debug ("[ssh-agent] add identity\n");
+ if (DBG_COMMAND)
+ log_debug ("[ssh-agent] add identity\n");
err = ssh_receive_key_secret (request, &key);
if (err)
@@ -1434,7 +1402,8 @@ ssh_handler_remove_identity (ctrl_t ctrl,
/* Receive key. */
- log_debug ("[ssh-agent] remove identity\n");
+ if (DBG_COMMAND)
+ log_debug ("[ssh-agent] remove identity\n");
err = gpg_stream_read_string (request, &key_blob, NULL);
if (err)
@@ -1463,7 +1432,8 @@ ssh_identities_remove_all (void)
{
gpg_err_code_t err = GPG_ERR_NO_ERROR;
- log_debug ("[ssh-agent] remove all identities\n");
+ if (DBG_COMMAND)
+ log_debug ("[ssh-agent] remove all identities\n");
/* FIXME: shall we remove _all_ cache entries or only those
registered through the ssh emulation? */
@@ -1489,8 +1459,9 @@ static gpg_err_code_t
ssh_lock (void)
{
gpg_err_code_t err = GPG_ERR_NOT_IMPLEMENTED;
-
- log_debug ("[ssh-agent] lock\n");
+
+ if (DBG_COMMAND)
+ log_debug ("[ssh-agent] lock\n");
return err;
}
@@ -1500,7 +1471,8 @@ ssh_unlock (void)
{
gpg_err_code_t err = GPG_ERR_NOT_IMPLEMENTED;
- log_debug ("[ssh-agent] unlock\n");
+ if (DBG_COMMAND)
+ log_debug ("[ssh-agent] unlock\n");
return err;
}
@@ -1563,7 +1535,8 @@ ssh_request_process (ctrl_t ctrl, gpg_stream_t request, gpg_stream_t response)
if (err)
goto out;
- log_debug ("[ssh-agent] request: %u\n", request_type);
+ if (DBG_COMMAND)
+ log_debug ("[ssh-agent] request: %u\n", request_type);
for (i = 0; i < DIM (request_specs); i++)
if (request_specs[i].type == request_type)
@@ -1609,7 +1582,8 @@ start_command_handler_ssh (int sock_client)
/* Setup control structure. */
- log_debug ("[ssh-agent] Starting command handler\n");
+ if (DBG_COMMAND)
+ log_debug ("[ssh-agent] Starting command handler\n");
ctrl.connection_fd = sock_client;
@@ -1645,17 +1619,15 @@ start_command_handler_ssh (int sock_client)
if (err)
break;
- log_debug ("[ssh-agent] Received request of length: %u\n", request_size);
+ if (DBG_COMMAND)
+ log_debug ("[ssh-agent] Received request of length: %u\n",
+ request_size);
/* Write request data to request stream. */
err = gpg_stream_write (stream_request, request, request_size, NULL);
if (err)
break;
- err = gpg_stream_flush (stream_request);
- if (err)
- break;
-
err = gpg_stream_seek (stream_request, 0, SEEK_SET);
if (err)
break;
@@ -1664,15 +1636,12 @@ start_command_handler_ssh (int sock_client)
err = ssh_request_process (&ctrl, stream_request, stream_response);
if (err)
break;
- err = gpg_stream_flush (stream_response);
- if (err)
- break;
-
+
/* Figure out size of response data. */
err = gpg_stream_seek (stream_response, 0, SEEK_SET);
if (err)
break;
- err = gpg_stream_peek (stream_response, NULL, &size);
+ err = gpg_stream_stat (stream_response, &size);
if (err)
break;
@@ -1687,7 +1656,6 @@ start_command_handler_ssh (int sock_client)
err = gpg_stream_flush (stream_sock);
if (err)
break;
-
};
if (err)
goto out;
@@ -1700,7 +1668,8 @@ start_command_handler_ssh (int sock_client)
gpg_stream_destroy (stream_response);
free (request);
- log_debug ("[ssh-agent] Leaving ssh command handler: %s\n", gpg_strerror (err));
+ if (DBG_COMMAND)
+ log_debug ("[ssh-agent] Leaving ssh command handler: %s\n", gpg_strerror (err));
/* fixme: make sure that stream_destroy closes client socket. */
}
diff --git a/agent/gpg-stream.c b/agent/gpg-stream.c
index f8d34e1ff..1139cbe3d 100644
--- a/agent/gpg-stream.c
+++ b/agent/gpg-stream.c
@@ -912,3 +912,37 @@ gpg_stream_stat (gpg_stream_t stream,
return err;
}
+
+
+static gpg_error_t
+gpg_stream_copy_do (gpg_stream_t dst,
+ gpg_stream_t src)
+{
+ gpg_error_t err = GPG_ERR_NO_ERROR;
+ unsigned char buffer[STREAM_BLOCK_SIZE];
+ size_t bytes_read = 0;
+
+ while (1)
+ {
+ err = gpg_stream_read (src, buffer, sizeof (buffer), &bytes_read);
+ if (err || (! bytes_read))
+ break;
+
+ err = gpg_stream_write (dst, buffer, bytes_read, NULL);
+ if (err)
+ break;
+ }
+
+ return err;
+}
+
+gpg_error_t
+gpg_stream_copy (gpg_stream_t dst,
+ gpg_stream_t src)
+{
+ gpg_error_t err = GPG_ERR_NO_ERROR;
+
+ err = gpg_stream_copy_do (dst, src);
+
+ return err;
+}
diff --git a/agent/gpg-stream.h b/agent/gpg-stream.h
index d9c30f8bf..c7db5f0b6 100644
--- a/agent/gpg-stream.h
+++ b/agent/gpg-stream.h
@@ -121,6 +121,9 @@ gpg_error_t gpg_stream_seek (gpg_stream_t stream,
gpg_error_t gpg_stream_stat (gpg_stream_t stream,
size_t *size);
+gpg_error_t gpg_stream_copy (gpg_stream_t dst,
+ gpg_stream_t src);
+
typedef struct gpg_stream_spec_mem
{
char *memory;