From 24e7601a9bac81b05fcbd18d2e1a78d6a26dc56f Mon Sep 17 00:00:00 2001 From: Ben Kibbey Date: Sat, 11 Apr 2009 18:12:32 -0400 Subject: [PATCH] Added pwmd_socket_type() which sets a parameter to PWMD_SOCKET_UDS or PWMD_SOCKET_SSH. Useful when you want to know how pwmd_connect_url() did the connection. --- NEWS | 3 ++- doc/libpwmd.3 | 42 ++++++++++++++++++++++++++++++++++++++++++ src/libpwmd.c | 20 ++++++++++++++++++++ src/libpwmd.h.in | 24 ++++++++++++++++++++++++ 4 files changed, 88 insertions(+), 1 deletion(-) diff --git a/NEWS b/NEWS index af23343d..e0b68335 100644 --- a/NEWS +++ b/NEWS @@ -15,7 +15,8 @@ how pwmd_process() works. Here are the API changes: pwmd_strdup_printf(),pwmd_open_async2(), pwmd_save_async2(), pwmd_ssh_connect(), pwmd_ssh_connect_async(), pwmd_get_hostkey(), pwmd_get_hostkey_async(), pwmd_strerror_r(), pwmd_open2(), - pwmd_save2(), pwmd_connect_url(), pwmd_connect_url_async() + pwmd_save2(), pwmd_connect_url(), pwmd_connect_url_async(), + pwmd_socket_type() Options removed: PWMD_OPTION_PINENTRY Options added: PWMD_OPTION_IP_VERSION diff --git a/doc/libpwmd.3 b/doc/libpwmd.3 index a6fe9db6..9a298c77 100644 --- a/doc/libpwmd.3 +++ b/doc/libpwmd.3 @@ -177,6 +177,9 @@ The following example will list the element tree of the data file specified in t .RI "enum \fBpwmd_ip_version_t\fP { \fBPWMD_IP_ANY\fP, \fBPWMD_IPV4\fP, \fBPWMD_IPV6\fP }" .br .ti -1c +.RI "enum \fBpwmd_socket_t\fP { \fBPWMD_SOCKET_UDS\fP, \fBPWMD_SOCKET_SSH\fP }" +.br +.ti -1c .RI "enum \fBpwmd_option_t\fP { \fBPWMD_OPTION_PASSPHRASE_CB\fP, \fBPWMD_OPTION_PASSPHRASE_DATA\fP, \fBPWMD_OPTION_PASSPHRASE\fP, \fBPWMD_OPTION_PINENTRY_TRIES\fP, \fBPWMD_OPTION_PINENTRY_PATH\fP, \fBPWMD_OPTION_PINENTRY_TTY\fP, \fBPWMD_OPTION_PINENTRY_TERM\fP, \fBPWMD_OPTION_PINENTRY_DISPLAY\fP, \fBPWMD_OPTION_PINENTRY_TITLE\fP, \fBPWMD_OPTION_PINENTRY_PROMPT\fP, \fBPWMD_OPTION_PINENTRY_DESC\fP, \fBPWMD_OPTION_PINENTRY_LC_CTYPE\fP, \fBPWMD_OPTION_PINENTRY_LC_MESSAGES\fP, \fBPWMD_OPTION_PINENTRY_TIMEOUT\fP, \fBPWMD_OPTION_STATUS_CB\fP, \fBPWMD_OPTION_STATUS_DATA\fP, \fBPWMD_OPTION_IP_VERSION\fP }" .br .in -1c @@ -259,6 +262,9 @@ The following example will list the element tree of the data file specified in t .RI "void \fBpwmd_close\fP (\fBpwm_t\fP *pwm)" .br .ti -1c +.RI "gpg_error_t \fBpwmd_socket_type\fP (\fBpwm_t\fP *pwm, \fBpwmd_socket_t\fP *type)" +.br +.ti -1c .RI "void \fBpwmd_free\fP (void *ptr)" .br .ti -1c @@ -540,6 +546,18 @@ This option must be set before a connection is made when not the default. .RE .PP +.SS "enum \fBpwmd_socket_t\fP" +.PP +For use with \fBpwmd_socket_type()\fP. +.PP +\fBEnumerator: \fP +.in +1c +.TP +\fB\fIPWMD_SOCKET_UDS \fP\fP +A UNIX domain socket. +.TP +\fB\fIPWMD_SOCKET_SSH \fP\fP +An SSH connection over a TCP socket. .SH "Function Documentation" .PP .SS "void* pwmd_calloc (size_t nmemb, size_t size)" @@ -1228,6 +1246,30 @@ See \fBpwmd_option_t\fP for option specific details. .RE .PP +.SS "gpg_error_t pwmd_socket_type (\fBpwm_t\fP * pwm, \fBpwmd_socket_t\fP * type)" +.PP +The type of connection a handle has. +.PP +Useful when you want to know what kind of connection a handle has. +.PP +\fBParameters:\fP +.RS 4 +\fIpwm\fP A handle. +.br +\fItype\fP The type of socket. +.RE +.PP +\fBReturns:\fP +.RS 4 +0 on success or an error code. +.RE +.PP +\fBSee also:\fP +.RS 4 +\fBpwmd_connect_url()\fP +.RE +.PP + .SS "gpg_error_t pwmd_ssh_connect (\fBpwm_t\fP * pwm, const char * host, int port, const char * identity, const char * user, const char * known_hosts)" .PP Establish a remote connection to a pwmd server. diff --git a/src/libpwmd.c b/src/libpwmd.c index 02e32078..cb2050b2 100644 --- a/src/libpwmd.c +++ b/src/libpwmd.c @@ -2161,6 +2161,26 @@ static gpg_error_t send_pinentry_options(pwm_t *pwm) return 0; } +gpg_error_t pwmd_socket_type(pwm_t *pwm, pwmd_socket_t *result) +{ + if (!pwm) + return GPG_ERR_INV_ARG; + +#ifdef WITH_TCP + if (pwm->fd == -1 && pwm->tcp_conn && pwm->tcp_conn->fd == -1) +#else + if (pwm->fd == -1) +#endif + return GPG_ERR_INV_STATE; + +#ifdef WITH_TCP + *result = pwm->tcp_conn ? PWMD_SOCKET_SSH : PWMD_SOCKET_UDS; +#else + *result = PWMD_SOCKET_UDS; +#endif + return 0; +} + static gpg_error_t do_pwmd_open(pwm_t *pwm, const char *filename, int nb, int local_pinentry) { diff --git a/src/libpwmd.h.in b/src/libpwmd.h.in index fc3f11b5..7a04dbaf 100644 --- a/src/libpwmd.h.in +++ b/src/libpwmd.h.in @@ -225,6 +225,18 @@ typedef struct { } pwmd_fd_t; +/*! \typedef pwmd_socket_t + * + * For use with \ref pwmd_socket_type(). + */ +typedef enum { + /*! A UNIX domain socket. */ + PWMD_SOCKET_UDS, + + /*! An SSH connection over a TCP socket. */ + PWMD_SOCKET_SSH +} pwmd_socket_t; + /*! \typedef pwmd_passphrase_cb_t * * The value of the option \ref PWMD_OPTION_PASSPHRASE_CB which is set with @@ -847,6 +859,18 @@ gpg_error_t pwmd_inquire(pwm_t *pwm, const char *cmd, pwmd_inquire_cb_t func, */ void pwmd_close(pwm_t *pwm); +/*! \brief The type of connection a handle has. + * + * Useful when you want to know what kind of connection a handle has. + * + * \param pwm A handle. + * \param[out] type The type of socket. + * \return 0 on success or an error code. + * \see pwmd_connect_url() + */ +gpg_error_t pwmd_socket_type(pwm_t *pwm, pwmd_socket_t *type) + __attribute__ ((warn_unused_result)); + /*! \brief Free a previously allocated pointer. * -- 2.11.4.GIT