diff options
Diffstat (limited to 'monitor_wrap.c')
-rw-r--r-- | monitor_wrap.c | 53 |
1 files changed, 52 insertions, 1 deletions
diff --git a/monitor_wrap.c b/monitor_wrap.c index 732fb3476..1865a122a 100644 --- a/monitor_wrap.c +++ b/monitor_wrap.c | |||
@@ -984,7 +984,7 @@ mm_ssh_gssapi_checkmic(Gssctxt *ctx, gss_buffer_t gssbuf, gss_buffer_t gssmic) | |||
984 | } | 984 | } |
985 | 985 | ||
986 | int | 986 | int |
987 | mm_ssh_gssapi_userok(char *user) | 987 | mm_ssh_gssapi_userok(char *user, struct passwd *pw) |
988 | { | 988 | { |
989 | struct sshbuf *m; | 989 | struct sshbuf *m; |
990 | int r, authenticated = 0; | 990 | int r, authenticated = 0; |
@@ -1003,4 +1003,55 @@ mm_ssh_gssapi_userok(char *user) | |||
1003 | debug3("%s: user %sauthenticated",__func__, authenticated ? "" : "not "); | 1003 | debug3("%s: user %sauthenticated",__func__, authenticated ? "" : "not "); |
1004 | return (authenticated); | 1004 | return (authenticated); |
1005 | } | 1005 | } |
1006 | |||
1007 | OM_uint32 | ||
1008 | mm_ssh_gssapi_sign(Gssctxt *ctx, gss_buffer_desc *data, gss_buffer_desc *hash) | ||
1009 | { | ||
1010 | struct sshbuf *m; | ||
1011 | OM_uint32 major; | ||
1012 | int r; | ||
1013 | |||
1014 | if ((m = sshbuf_new()) == NULL) | ||
1015 | fatal("%s: sshbuf_new failed", __func__); | ||
1016 | if ((r = sshbuf_put_string(m, data->value, data->length)) != 0) | ||
1017 | fatal("%s: buffer error: %s", __func__, ssh_err(r)); | ||
1018 | |||
1019 | mm_request_send(pmonitor->m_recvfd, MONITOR_REQ_GSSSIGN, m); | ||
1020 | mm_request_receive_expect(pmonitor->m_recvfd, MONITOR_ANS_GSSSIGN, m); | ||
1021 | |||
1022 | if ((r = sshbuf_get_u32(m, &major)) != 0 || | ||
1023 | (r = ssh_gssapi_get_buffer_desc(m, hash)) != 0) | ||
1024 | fatal("%s: buffer error: %s", __func__, ssh_err(r)); | ||
1025 | |||
1026 | sshbuf_free(m); | ||
1027 | |||
1028 | return(major); | ||
1029 | } | ||
1030 | |||
1031 | int | ||
1032 | mm_ssh_gssapi_update_creds(ssh_gssapi_ccache *store) | ||
1033 | { | ||
1034 | struct sshbuf *m; | ||
1035 | int r, ok; | ||
1036 | |||
1037 | if ((m = sshbuf_new()) == NULL) | ||
1038 | fatal("%s: sshbuf_new failed", __func__); | ||
1039 | if ((r = sshbuf_put_cstring(m, | ||
1040 | store->filename ? store->filename : "")) != 0 || | ||
1041 | (r = sshbuf_put_cstring(m, | ||
1042 | store->envvar ? store->envvar : "")) != 0 || | ||
1043 | (r = sshbuf_put_cstring(m, | ||
1044 | store->envval ? store->envval : "")) != 0) | ||
1045 | fatal("%s: buffer error: %s", __func__, ssh_err(r)); | ||
1046 | |||
1047 | mm_request_send(pmonitor->m_recvfd, MONITOR_REQ_GSSUPCREDS, m); | ||
1048 | mm_request_receive_expect(pmonitor->m_recvfd, MONITOR_ANS_GSSUPCREDS, m); | ||
1049 | |||
1050 | if ((r = sshbuf_get_u32(m, &ok)) != 0) | ||
1051 | fatal("%s: buffer error: %s", __func__, ssh_err(r)); | ||
1052 | sshbuf_free(m); | ||
1053 | |||
1054 | return (ok); | ||
1055 | } | ||
1056 | |||
1006 | #endif /* GSSAPI */ | 1057 | #endif /* GSSAPI */ |