Changeset View
Changeset View
Standalone View
Standalone View
head/crypto/openssh/monitor_wrap.c
Show First 20 Lines • Show All 241 Lines • ▼ Show 20 Lines | mm_sshkey_sign(struct sshkey *key, u_char **sigp, size_t *lenp, | ||||
mm_request_receive_expect(pmonitor->m_recvfd, MONITOR_ANS_SIGN, m); | mm_request_receive_expect(pmonitor->m_recvfd, MONITOR_ANS_SIGN, m); | ||||
if ((r = sshbuf_get_string(m, sigp, lenp)) != 0) | if ((r = sshbuf_get_string(m, sigp, lenp)) != 0) | ||||
fatal("%s: buffer error: %s", __func__, ssh_err(r)); | fatal("%s: buffer error: %s", __func__, ssh_err(r)); | ||||
sshbuf_free(m); | sshbuf_free(m); | ||||
return (0); | return (0); | ||||
} | } | ||||
login_cap_t * | |||||
mm_login_getpwclass(const struct passwd *pwent) | |||||
{ | |||||
int r; | |||||
struct sshbuf *m; | |||||
char rc; | |||||
login_cap_t *lc; | |||||
debug3("%s entering", __func__); | |||||
if ((m = sshbuf_new()) == NULL) | |||||
fatal("%s: sshbuf_new failed", __func__); | |||||
if ((r = sshbuf_put_passwd(m, pwent)) != 0) | |||||
fatal("%s: buffer error: %s", __func__, ssh_err(r)); | |||||
mm_request_send(pmonitor->m_recvfd, MONITOR_REQ_GETPWCLASS, m); | |||||
debug3("%s: waiting for MONITOR_ANS_GETPWCLASS", __func__); | |||||
mm_request_receive_expect(pmonitor->m_recvfd, MONITOR_ANS_GETPWCLASS, m); | |||||
if ((r = sshbuf_get_u8(m, &rc)) != 0) | |||||
fatal("%s: buffer error: %s", __func__, ssh_err(r)); | |||||
if (rc == 0) { | |||||
lc = NULL; | |||||
goto out; | |||||
} | |||||
lc = xmalloc(sizeof(*lc)); | |||||
if ((r = sshbuf_get_cstring(m, &lc->lc_class, NULL)) != 0 || | |||||
(r = sshbuf_get_cstring(m, &lc->lc_cap, NULL)) != 0 || | |||||
(r = sshbuf_get_cstring(m, &lc->lc_style, NULL)) != 0) | |||||
fatal("%s: buffer error: %s", __func__, ssh_err(r)); | |||||
out: | |||||
sshbuf_free(m); | |||||
return (lc); | |||||
} | |||||
void | |||||
mm_login_close(login_cap_t *lc) | |||||
{ | |||||
if (lc == NULL) | |||||
return; | |||||
free(lc->lc_style); | |||||
free(lc->lc_class); | |||||
free(lc->lc_cap); | |||||
free(lc); | |||||
} | |||||
struct passwd * | struct passwd * | ||||
mm_getpwnamallow(const char *username) | mm_getpwnamallow(const char *username) | ||||
{ | { | ||||
struct ssh *ssh = active_state; /* XXX */ | struct ssh *ssh = active_state; /* XXX */ | ||||
struct sshbuf *m; | struct sshbuf *m; | ||||
struct passwd *pw; | struct passwd *pw; | ||||
size_t len; | size_t len; | ||||
u_int i; | u_int i; | ||||
Show All 16 Lines | mm_getpwnamallow(const char *username) | ||||
if ((r = sshbuf_get_u8(m, &ok)) != 0) | if ((r = sshbuf_get_u8(m, &ok)) != 0) | ||||
fatal("%s: buffer error: %s", __func__, ssh_err(r)); | fatal("%s: buffer error: %s", __func__, ssh_err(r)); | ||||
if (ok == 0) { | if (ok == 0) { | ||||
pw = NULL; | pw = NULL; | ||||
goto out; | goto out; | ||||
} | } | ||||
/* XXX don't like passing struct passwd like this */ | pw = sshbuf_get_passwd(m); | ||||
pw = xcalloc(sizeof(*pw), 1); | if (pw == NULL) | ||||
if ((r = sshbuf_get_string_direct(m, &p, &len)) != 0) | fatal("%s: receive get struct passwd failed", __func__); | ||||
fatal("%s: buffer error: %s", __func__, ssh_err(r)); | |||||
if (len != sizeof(*pw)) | |||||
fatal("%s: struct passwd size mismatch", __func__); | |||||
memcpy(pw, p, sizeof(*pw)); | |||||
if ((r = sshbuf_get_cstring(m, &pw->pw_name, NULL)) != 0 || | |||||
(r = sshbuf_get_cstring(m, &pw->pw_passwd, NULL)) != 0 || | |||||
#ifdef HAVE_STRUCT_PASSWD_PW_GECOS | |||||
(r = sshbuf_get_cstring(m, &pw->pw_gecos, NULL)) != 0 || | |||||
#endif | |||||
#ifdef HAVE_STRUCT_PASSWD_PW_CLASS | |||||
(r = sshbuf_get_cstring(m, &pw->pw_class, NULL)) != 0 || | |||||
#endif | |||||
(r = sshbuf_get_cstring(m, &pw->pw_dir, NULL)) != 0 || | |||||
(r = sshbuf_get_cstring(m, &pw->pw_shell, NULL)) != 0) | |||||
fatal("%s: buffer error: %s", __func__, ssh_err(r)); | |||||
out: | out: | ||||
/* copy options block as a Match directive may have changed some */ | /* copy options block as a Match directive may have changed some */ | ||||
if ((r = sshbuf_get_string_direct(m, &p, &len)) != 0) | if ((r = sshbuf_get_string_direct(m, &p, &len)) != 0) | ||||
fatal("%s: buffer error: %s", __func__, ssh_err(r)); | fatal("%s: buffer error: %s", __func__, ssh_err(r)); | ||||
if (len != sizeof(*newopts)) | if (len != sizeof(*newopts)) | ||||
fatal("%s: option block size mismatch", __func__); | fatal("%s: option block size mismatch", __func__); | ||||
newopts = xcalloc(sizeof(*newopts), 1); | newopts = xcalloc(sizeof(*newopts), 1); | ||||
▲ Show 20 Lines • Show All 698 Lines • Show Last 20 Lines |