aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--gpgme/ChangeLog3
-rw-r--r--gpgme/engine-gpgsm.c97
2 files changed, 53 insertions, 47 deletions
diff --git a/gpgme/ChangeLog b/gpgme/ChangeLog
index 9ca13c91..78586773 100644
--- a/gpgme/ChangeLog
+++ b/gpgme/ChangeLog
@@ -1,5 +1,8 @@
2004-03-11 Marcus Brinkmann <[email protected]>
+ * engine-gpgsm.c (gpgsm_new): Protect all tty related code with
+ isatty().
+
* rungpg.c (gpg_cancel): Set GPG->fd_data_map to NULL after
releasing it.
* engine-gpgsm.c (gpgsm_cancel): Only call assuan_disconnect if
diff --git a/gpgme/engine-gpgsm.c b/gpgme/engine-gpgsm.c
index bbcdb425..291af9b6 100644
--- a/gpgme/engine-gpgsm.c
+++ b/gpgme/engine-gpgsm.c
@@ -445,40 +445,20 @@ gpgsm_new (void **engine, const char *lc_ctype, const char *lc_messages)
}
}
- if (ttyname_r (1, dft_ttyname, sizeof (dft_ttyname)))
+ if (isatty (1))
{
- err = gpg_error_from_errno (errno);
- goto leave;
- }
- else
- {
- if (asprintf (&optstr, "OPTION ttyname=%s", dft_ttyname) < 0)
- {
- err = gpg_error_from_errno (errno);
- goto leave;
- }
- err = assuan_transact (gpgsm->assuan_ctx, optstr, NULL, NULL, NULL,
- NULL, NULL, NULL);
- free (optstr);
- if (err)
+ if (ttyname_r (1, dft_ttyname, sizeof (dft_ttyname)))
{
- err = map_assuan_error (err);
+ err = gpg_error_from_errno (errno);
goto leave;
}
-
- err = _gpgme_getenv ("TERM", &dft_ttytype);
- if (err)
- goto leave;
- if (dft_ttytype)
+ else
{
- if (asprintf (&optstr, "OPTION ttytype=%s", dft_ttytype) < 0)
+ if (asprintf (&optstr, "OPTION ttyname=%s", dft_ttyname) < 0)
{
- free (dft_ttytype);
err = gpg_error_from_errno (errno);
goto leave;
}
- free (dft_ttytype);
-
err = assuan_transact (gpgsm->assuan_ctx, optstr, NULL, NULL, NULL,
NULL, NULL, NULL);
free (optstr);
@@ -487,39 +467,62 @@ gpgsm_new (void **engine, const char *lc_ctype, const char *lc_messages)
err = map_assuan_error (err);
goto leave;
}
- }
- if (lc_ctype)
- {
- if (asprintf (&optstr, "OPTION lc-ctype=%s", lc_ctype) < 0)
- err = gpg_error_from_errno (errno);
- else
+ err = _gpgme_getenv ("TERM", &dft_ttytype);
+ if (err)
+ goto leave;
+ if (dft_ttytype)
{
+ if (asprintf (&optstr, "OPTION ttytype=%s", dft_ttytype) < 0)
+ {
+ free (dft_ttytype);
+ err = gpg_error_from_errno (errno);
+ goto leave;
+ }
+ free (dft_ttytype);
+
err = assuan_transact (gpgsm->assuan_ctx, optstr, NULL, NULL,
NULL, NULL, NULL, NULL);
free (optstr);
if (err)
- err = map_assuan_error (err);
+ {
+ err = map_assuan_error (err);
+ goto leave;
+ }
}
- }
- if (err)
- goto leave;
- if (lc_messages)
- {
- if (asprintf (&optstr, "OPTION lc-messages=%s", lc_messages) < 0)
- err = gpg_error_from_errno (errno);
- else
+ if (lc_ctype)
{
- err = assuan_transact (gpgsm->assuan_ctx, optstr, NULL, NULL,
- NULL, NULL, NULL, NULL);
- free (optstr);
- if (err)
- err = map_assuan_error (err);
+ if (asprintf (&optstr, "OPTION lc-ctype=%s", lc_ctype) < 0)
+ err = gpg_error_from_errno (errno);
+ else
+ {
+ err = assuan_transact (gpgsm->assuan_ctx, optstr, NULL, NULL,
+ NULL, NULL, NULL, NULL);
+ free (optstr);
+ if (err)
+ err = map_assuan_error (err);
+ }
}
+ if (err)
+ goto leave;
+
+ if (lc_messages)
+ {
+ if (asprintf (&optstr, "OPTION lc-messages=%s", lc_messages) < 0)
+ err = gpg_error_from_errno (errno);
+ else
+ {
+ err = assuan_transact (gpgsm->assuan_ctx, optstr, NULL, NULL,
+ NULL, NULL, NULL, NULL);
+ free (optstr);
+ if (err)
+ err = map_assuan_error (err);
+ }
+ }
+ if (err)
+ goto leave;
}
- if (err)
- goto leave;
}
if (!err