summaryrefslogtreecommitdiff
path: root/monitor_wrap.c
diff options
context:
space:
mode:
Diffstat (limited to 'monitor_wrap.c')
-rw-r--r--monitor_wrap.c41
1 files changed, 24 insertions, 17 deletions
diff --git a/monitor_wrap.c b/monitor_wrap.c
index ee2dc2027..0d7a0e3bd 100644
--- a/monitor_wrap.c
+++ b/monitor_wrap.c
@@ -25,7 +25,7 @@
25 */ 25 */
26 26
27#include "includes.h" 27#include "includes.h"
28RCSID("$OpenBSD: monitor_wrap.c,v 1.35 2003/11/17 11:06:07 markus Exp $"); 28RCSID("$OpenBSD: monitor_wrap.c,v 1.39 2004/07/17 05:31:41 dtucker Exp $");
29 29
30#include <openssl/bn.h> 30#include <openssl/bn.h>
31#include <openssl/dh.h> 31#include <openssl/dh.h>
@@ -70,6 +70,7 @@ extern z_stream incoming_stream;
70extern z_stream outgoing_stream; 70extern z_stream outgoing_stream;
71extern struct monitor *pmonitor; 71extern struct monitor *pmonitor;
72extern Buffer input, output; 72extern Buffer input, output;
73extern Buffer loginmsg;
73extern ServerOptions options; 74extern ServerOptions options;
74 75
75int 76int
@@ -83,7 +84,7 @@ mm_is_monitor(void)
83} 84}
84 85
85void 86void
86mm_request_send(int socket, enum monitor_reqtype type, Buffer *m) 87mm_request_send(int sock, enum monitor_reqtype type, Buffer *m)
87{ 88{
88 u_int mlen = buffer_len(m); 89 u_int mlen = buffer_len(m);
89 u_char buf[5]; 90 u_char buf[5];
@@ -92,14 +93,14 @@ mm_request_send(int socket, enum monitor_reqtype type, Buffer *m)
92 93
93 PUT_32BIT(buf, mlen + 1); 94 PUT_32BIT(buf, mlen + 1);
94 buf[4] = (u_char) type; /* 1st byte of payload is mesg-type */ 95 buf[4] = (u_char) type; /* 1st byte of payload is mesg-type */
95 if (atomicio(vwrite, socket, buf, sizeof(buf)) != sizeof(buf)) 96 if (atomicio(vwrite, sock, buf, sizeof(buf)) != sizeof(buf))
96 fatal("%s: write", __func__); 97 fatal("%s: write", __func__);
97 if (atomicio(vwrite, socket, buffer_ptr(m), mlen) != mlen) 98 if (atomicio(vwrite, sock, buffer_ptr(m), mlen) != mlen)
98 fatal("%s: write", __func__); 99 fatal("%s: write", __func__);
99} 100}
100 101
101void 102void
102mm_request_receive(int socket, Buffer *m) 103mm_request_receive(int sock, Buffer *m)
103{ 104{
104 u_char buf[4]; 105 u_char buf[4];
105 u_int msg_len; 106 u_int msg_len;
@@ -107,7 +108,7 @@ mm_request_receive(int socket, Buffer *m)
107 108
108 debug3("%s entering", __func__); 109 debug3("%s entering", __func__);
109 110
110 res = atomicio(read, socket, buf, sizeof(buf)); 111 res = atomicio(read, sock, buf, sizeof(buf));
111 if (res != sizeof(buf)) { 112 if (res != sizeof(buf)) {
112 if (res == 0) 113 if (res == 0)
113 cleanup_exit(255); 114 cleanup_exit(255);
@@ -118,19 +119,19 @@ mm_request_receive(int socket, Buffer *m)
118 fatal("%s: read: bad msg_len %d", __func__, msg_len); 119 fatal("%s: read: bad msg_len %d", __func__, msg_len);
119 buffer_clear(m); 120 buffer_clear(m);
120 buffer_append_space(m, msg_len); 121 buffer_append_space(m, msg_len);
121 res = atomicio(read, socket, buffer_ptr(m), msg_len); 122 res = atomicio(read, sock, buffer_ptr(m), msg_len);
122 if (res != msg_len) 123 if (res != msg_len)
123 fatal("%s: read: %ld != msg_len", __func__, (long)res); 124 fatal("%s: read: %ld != msg_len", __func__, (long)res);
124} 125}
125 126
126void 127void
127mm_request_receive_expect(int socket, enum monitor_reqtype type, Buffer *m) 128mm_request_receive_expect(int sock, enum monitor_reqtype type, Buffer *m)
128{ 129{
129 u_char rtype; 130 u_char rtype;
130 131
131 debug3("%s entering: type %d", __func__, type); 132 debug3("%s entering: type %d", __func__, type);
132 133
133 mm_request_receive(socket, m); 134 mm_request_receive(sock, m);
134 rtype = buffer_get_char(m); 135 rtype = buffer_get_char(m);
135 if (rtype != type) 136 if (rtype != type)
136 fatal("%s: read: rtype %d != type %d", __func__, 137 fatal("%s: read: rtype %d != type %d", __func__,
@@ -194,7 +195,7 @@ mm_key_sign(Key *key, u_char **sigp, u_int *lenp, u_char *data, u_int datalen)
194} 195}
195 196
196struct passwd * 197struct passwd *
197mm_getpwnamallow(const char *login) 198mm_getpwnamallow(const char *username)
198{ 199{
199 Buffer m; 200 Buffer m;
200 struct passwd *pw; 201 struct passwd *pw;
@@ -203,7 +204,7 @@ mm_getpwnamallow(const char *login)
203 debug3("%s entering", __func__); 204 debug3("%s entering", __func__);
204 205
205 buffer_init(&m); 206 buffer_init(&m);
206 buffer_put_cstring(&m, login); 207 buffer_put_cstring(&m, username);
207 208
208 mm_request_send(pmonitor->m_recvfd, MONITOR_REQ_PWNAM, &m); 209 mm_request_send(pmonitor->m_recvfd, MONITOR_REQ_PWNAM, &m);
209 210
@@ -544,7 +545,7 @@ mm_send_kex(Buffer *m, Kex *kex)
544} 545}
545 546
546void 547void
547mm_send_keystate(struct monitor *pmonitor) 548mm_send_keystate(struct monitor *monitor)
548{ 549{
549 Buffer m; 550 Buffer m;
550 u_char *blob, *p; 551 u_char *blob, *p;
@@ -580,7 +581,7 @@ mm_send_keystate(struct monitor *pmonitor)
580 goto skip; 581 goto skip;
581 } else { 582 } else {
582 /* Kex for rekeying */ 583 /* Kex for rekeying */
583 mm_send_kex(&m, *pmonitor->m_pkex); 584 mm_send_kex(&m, *monitor->m_pkex);
584 } 585 }
585 586
586 debug3("%s: Sending new keys: %p %p", 587 debug3("%s: Sending new keys: %p %p",
@@ -632,7 +633,7 @@ mm_send_keystate(struct monitor *pmonitor)
632 buffer_put_string(&m, buffer_ptr(&input), buffer_len(&input)); 633 buffer_put_string(&m, buffer_ptr(&input), buffer_len(&input));
633 buffer_put_string(&m, buffer_ptr(&output), buffer_len(&output)); 634 buffer_put_string(&m, buffer_ptr(&output), buffer_len(&output));
634 635
635 mm_request_send(pmonitor->m_recvfd, MONITOR_REQ_KEYEXPORT, &m); 636 mm_request_send(monitor->m_recvfd, MONITOR_REQ_KEYEXPORT, &m);
636 debug3("%s: Finished sending state", __func__); 637 debug3("%s: Finished sending state", __func__);
637 638
638 buffer_free(&m); 639 buffer_free(&m);
@@ -642,7 +643,7 @@ int
642mm_pty_allocate(int *ptyfd, int *ttyfd, char *namebuf, int namebuflen) 643mm_pty_allocate(int *ptyfd, int *ttyfd, char *namebuf, int namebuflen)
643{ 644{
644 Buffer m; 645 Buffer m;
645 char *p; 646 char *p, *msg;
646 int success = 0; 647 int success = 0;
647 648
648 buffer_init(&m); 649 buffer_init(&m);
@@ -658,11 +659,15 @@ mm_pty_allocate(int *ptyfd, int *ttyfd, char *namebuf, int namebuflen)
658 return (0); 659 return (0);
659 } 660 }
660 p = buffer_get_string(&m, NULL); 661 p = buffer_get_string(&m, NULL);
662 msg = buffer_get_string(&m, NULL);
661 buffer_free(&m); 663 buffer_free(&m);
662 664
663 strlcpy(namebuf, p, namebuflen); /* Possible truncation */ 665 strlcpy(namebuf, p, namebuflen); /* Possible truncation */
664 xfree(p); 666 xfree(p);
665 667
668 buffer_append(&loginmsg, msg, strlen(msg));
669 xfree(msg);
670
666 *ptyfd = mm_receive_fd(pmonitor->m_recvfd); 671 *ptyfd = mm_receive_fd(pmonitor->m_recvfd);
667 *ttyfd = mm_receive_fd(pmonitor->m_recvfd); 672 *ttyfd = mm_receive_fd(pmonitor->m_recvfd);
668 673
@@ -914,6 +919,7 @@ mm_bsdauth_respond(void *ctx, u_int numresponses, char **responses)
914 return ((authok == 0) ? -1 : 0); 919 return ((authok == 0) ? -1 : 0);
915} 920}
916 921
922#ifdef SKEY
917int 923int
918mm_skey_query(void *ctx, char **name, char **infotxt, 924mm_skey_query(void *ctx, char **name, char **infotxt,
919 u_int *numprompts, char ***prompts, u_int **echo_on) 925 u_int *numprompts, char ***prompts, u_int **echo_on)
@@ -977,6 +983,7 @@ mm_skey_respond(void *ctx, u_int numresponses, char **responses)
977 983
978 return ((authok == 0) ? -1 : 0); 984 return ((authok == 0) ? -1 : 0);
979} 985}
986#endif /* SKEY */
980 987
981void 988void
982mm_ssh1_session_id(u_char session_id[16]) 989mm_ssh1_session_id(u_char session_id[16])
@@ -1093,7 +1100,7 @@ mm_auth_rsa_verify_response(Key *key, BIGNUM *p, u_char response[16])
1093 1100
1094#ifdef GSSAPI 1101#ifdef GSSAPI
1095OM_uint32 1102OM_uint32
1096mm_ssh_gssapi_server_ctx(Gssctxt **ctx, gss_OID oid) 1103mm_ssh_gssapi_server_ctx(Gssctxt **ctx, gss_OID goid)
1097{ 1104{
1098 Buffer m; 1105 Buffer m;
1099 OM_uint32 major; 1106 OM_uint32 major;
@@ -1102,7 +1109,7 @@ mm_ssh_gssapi_server_ctx(Gssctxt **ctx, gss_OID oid)
1102 *ctx = NULL; 1109 *ctx = NULL;
1103 1110
1104 buffer_init(&m); 1111 buffer_init(&m);
1105 buffer_put_string(&m, oid->elements, oid->length); 1112 buffer_put_string(&m, goid->elements, goid->length);
1106 1113
1107 mm_request_send(pmonitor->m_recvfd, MONITOR_REQ_GSSSETUP, &m); 1114 mm_request_send(pmonitor->m_recvfd, MONITOR_REQ_GSSSETUP, &m);
1108 mm_request_receive_expect(pmonitor->m_recvfd, MONITOR_ANS_GSSSETUP, &m); 1115 mm_request_receive_expect(pmonitor->m_recvfd, MONITOR_ANS_GSSSETUP, &m);