diff options
| author | Werner Koch <[email protected]> | 2025-10-27 13:21:49 +0000 |
|---|---|---|
| committer | Werner Koch <[email protected]> | 2025-10-27 13:23:01 +0000 |
| commit | eba8776a3f590d964430e515a030145236c0da33 (patch) | |
| tree | 0350387bdffd02c1dfb3b84eba00093ddf25d85b | |
| parent | Slight changes to comments and trace output. (diff) | |
| download | gpgme-eba8776a3f590d964430e515a030145236c0da33.tar.gz gpgme-eba8776a3f590d964430e515a030145236c0da33.zip | |
* src/engine-gpgsm.c (gpgsm_assuan_simple_command): More tracing
calls.
| -rw-r--r-- | src/engine-gpgsm.c | 34 |
1 files changed, 29 insertions, 5 deletions
diff --git a/src/engine-gpgsm.c b/src/engine-gpgsm.c index b482918c..ff77c8fc 100644 --- a/src/engine-gpgsm.c +++ b/src/engine-gpgsm.c @@ -709,6 +709,8 @@ gpgsm_assuan_simple_command (engine_gpgsm_t gpgsm, const char *cmd, nfds++; } + TRACE (DEBUG_CTX, "gpgsm_assuan_simple_command", gpgsm, + "Sending cmd: %s", cmd); err = assuan_write_line (ctx, cmd); if (err) return err; @@ -736,7 +738,12 @@ gpgsm_assuan_simple_command (engine_gpgsm_t gpgsm, const char *cmd, err = assuan_read_line (ctx, &line, &linelen); if (err) - break; + { + TRACE (DEBUG_CTX, "gpgsm_assuan_simple_command", gpgsm, + "error from assuan (%d) getting line: %s", + err, gpg_strerror (err)); + break; + } if (*line == '#' || !linelen) continue; @@ -744,22 +751,35 @@ gpgsm_assuan_simple_command (engine_gpgsm_t gpgsm, const char *cmd, if (linelen >= 2 && line[0] == 'O' && line[1] == 'K' && (line[2] == '\0' || line[2] == ' ')) - break; + { + TRACE (DEBUG_CTX, "gpgsm_assuan_simple_command", gpgsm, + "OK line seen"); + break; + } else if (linelen >= 4 && line[0] == 'E' && line[1] == 'R' && line[2] == 'R' && line[3] == ' ') { + err = atoi (&line[4]); + TRACE (DEBUG_CTX, "gpgsm_assuan_simple_command", gpgsm, + "ERR line seen: err=%s, cb_err=%s", + gpg_strerror (err), cb_err? gpg_strerror (cb_err):"none"); /* We prefer a callback generated error because that one is more related to gpgme and thus probably more important than the error returned by the engine. */ - err = cb_err? cb_err : atoi (&line[4]); - cb_err = 0; + if (cb_err) + { + err = cb_err; + cb_err = 0; + } } else if (linelen >= 2 && line[0] == 'S' && line[1] == ' ') { /* After an error from a status callback we skip all further status lines. */ + TRACE (DEBUG_CTX, "gpgsm_assuan_simple_command", gpgsm, + "S line seen: line='%s'", line); if (!cb_err) { char *rest; @@ -782,6 +802,8 @@ gpgsm_assuan_simple_command (engine_gpgsm_t gpgsm, const char *cmd, if (r >= 0 && status_fnc && !cb_err) cb_err = status_fnc (status_fnc_value, r, rest); + TRACE (DEBUG_CTX, "gpgsm_assuan_simple_command", gpgsm, + "S line yields cb_err=%s", gpg_strerror (cb_err)); } } else @@ -789,6 +811,8 @@ gpgsm_assuan_simple_command (engine_gpgsm_t gpgsm, const char *cmd, /* Invalid line or INQUIRY. We can't do anything else than to stop. As with ERR we prefer a status callback generated error code, though. */ + TRACE (DEBUG_CTX, "gpgsm_assuan_simple_command", gpgsm, + "Invalid line seen: %s", line); err = cb_err ? cb_err : gpg_error (GPG_ERR_GENERAL); cb_err = 0; } @@ -961,7 +985,7 @@ status_handler (void *opaque, int fd) /* Try our best to terminate the connection friendly. */ /* assuan_write_line (gpgsm->assuan_ctx, "BYE"); */ TRACE (DEBUG_CTX, "gpgme:status_handler", gpgsm, - "fd 0x%x: error from assuan (%d) getting status line : %s", + "fd 0x%x: error from assuan (%d) getting line : %s", fd, err, gpg_strerror (err)); } else if (linelen >= 3 |
