View | Details | Raw Unified | Return to bug 632
Collapse All | Expand All

(-)auth-pam.c (-11 / +22 lines)
Lines 156-164 Link Here
156
		case PAM_PROMPT_ECHO_OFF:
156
		case PAM_PROMPT_ECHO_OFF:
157
			buffer_put_cstring(&buffer, 
157
			buffer_put_cstring(&buffer, 
158
			    PAM_MSG_MEMBER(msg, i, msg));
158
			    PAM_MSG_MEMBER(msg, i, msg));
159
			ssh_msg_send(ctxt->pam_csock, 
159
			if (ssh_msg_send(ctxt->pam_csock, 
160
			    PAM_MSG_MEMBER(msg, i, msg_style), &buffer);
160
			    PAM_MSG_MEMBER(msg, i, msg_style), &buffer) == -1)
161
			ssh_msg_recv(ctxt->pam_csock, &buffer);
161
				goto fail;
162
			if (ssh_msg_recv(ctxt->pam_csock, &buffer) == -1) 
163
				goto fail;
162
			if (buffer_get_char(&buffer) != PAM_AUTHTOK)
164
			if (buffer_get_char(&buffer) != PAM_AUTHTOK)
163
				goto fail;
165
				goto fail;
164
			reply[i].resp = buffer_get_string(&buffer, NULL);
166
			reply[i].resp = buffer_get_string(&buffer, NULL);
Lines 166-174 Link Here
166
		case PAM_PROMPT_ECHO_ON:
168
		case PAM_PROMPT_ECHO_ON:
167
			buffer_put_cstring(&buffer, 
169
			buffer_put_cstring(&buffer, 
168
			    PAM_MSG_MEMBER(msg, i, msg));
170
			    PAM_MSG_MEMBER(msg, i, msg));
169
			ssh_msg_send(ctxt->pam_csock, 
171
			if (ssh_msg_send(ctxt->pam_csock, 
170
			    PAM_MSG_MEMBER(msg, i, msg_style), &buffer);
172
			    PAM_MSG_MEMBER(msg, i, msg_style), &buffer) == -1)
171
			ssh_msg_recv(ctxt->pam_csock, &buffer);
173
				goto fail;
174
			if (ssh_msg_recv(ctxt->pam_csock, &buffer) == -1)
175
				goto fail;
172
			if (buffer_get_char(&buffer) != PAM_AUTHTOK)
176
			if (buffer_get_char(&buffer) != PAM_AUTHTOK)
173
				goto fail;
177
				goto fail;
174
			reply[i].resp = buffer_get_string(&buffer, NULL);
178
			reply[i].resp = buffer_get_string(&buffer, NULL);
Lines 176-189 Link Here
176
		case PAM_ERROR_MSG:
180
		case PAM_ERROR_MSG:
177
			buffer_put_cstring(&buffer, 
181
			buffer_put_cstring(&buffer, 
178
			    PAM_MSG_MEMBER(msg, i, msg));
182
			    PAM_MSG_MEMBER(msg, i, msg));
179
			ssh_msg_send(ctxt->pam_csock, 
183
			if (ssh_msg_send(ctxt->pam_csock, 
180
			    PAM_MSG_MEMBER(msg, i, msg_style), &buffer);
184
			    PAM_MSG_MEMBER(msg, i, msg_style), &buffer) == -1)
185
				goto fail;
181
			break;
186
			break;
182
		case PAM_TEXT_INFO:
187
		case PAM_TEXT_INFO:
183
			buffer_put_cstring(&buffer, 
188
			buffer_put_cstring(&buffer, 
184
			    PAM_MSG_MEMBER(msg, i, msg));
189
			    PAM_MSG_MEMBER(msg, i, msg));
185
			ssh_msg_send(ctxt->pam_csock, 
190
			if (ssh_msg_send(ctxt->pam_csock, 
186
			    PAM_MSG_MEMBER(msg, i, msg_style), &buffer);
191
			    PAM_MSG_MEMBER(msg, i, msg_style), &buffer) == -1)
192
				goto fail;
187
			break;
193
			break;
188
		default:
194
		default:
189
			goto fail;
195
			goto fail;
Lines 232-237 Link Here
232
	if (sshpam_err != PAM_SUCCESS)
238
	if (sshpam_err != PAM_SUCCESS)
233
		goto auth_fail;
239
		goto auth_fail;
234
	buffer_put_cstring(&buffer, "OK");
240
	buffer_put_cstring(&buffer, "OK");
241
	/* XXX - can't do much about an error here */
235
	ssh_msg_send(ctxt->pam_csock, sshpam_err, &buffer);
242
	ssh_msg_send(ctxt->pam_csock, sshpam_err, &buffer);
236
	buffer_free(&buffer);
243
	buffer_free(&buffer);
237
	pthread_exit(NULL);
244
	pthread_exit(NULL);
Lines 239-244 Link Here
239
 auth_fail:
246
 auth_fail:
240
	buffer_put_cstring(&buffer,
247
	buffer_put_cstring(&buffer,
241
	    pam_strerror(sshpam_handle, sshpam_err));
248
	    pam_strerror(sshpam_handle, sshpam_err));
249
	/* XXX - can't do much about an error here */
242
	ssh_msg_send(ctxt->pam_csock, PAM_AUTH_ERR, &buffer);
250
	ssh_msg_send(ctxt->pam_csock, PAM_AUTH_ERR, &buffer);
243
	buffer_free(&buffer);
251
	buffer_free(&buffer);
244
	pthread_exit(NULL);
252
	pthread_exit(NULL);
Lines 474-480 Link Here
474
	}
482
	}
475
	buffer_init(&buffer);
483
	buffer_init(&buffer);
476
	buffer_put_cstring(&buffer, *resp);
484
	buffer_put_cstring(&buffer, *resp);
477
	ssh_msg_send(ctxt->pam_psock, PAM_AUTHTOK, &buffer);
485
	if (ssh_msg_send(ctxt->pam_psock, PAM_AUTHTOK, &buffer) == -1) {
486
		buffer_free(&buffer);
487
		return (-1);
488
	}
478
	buffer_free(&buffer);
489
	buffer_free(&buffer);
479
	return (1);
490
	return (1);
480
}
491
}
(-)msg.c (-13 / +22 lines)
Lines 30-36 Link Here
30
#include "atomicio.h"
30
#include "atomicio.h"
31
#include "msg.h"
31
#include "msg.h"
32
32
33
void
33
int
34
ssh_msg_send(int fd, u_char type, Buffer *m)
34
ssh_msg_send(int fd, u_char type, Buffer *m)
35
{
35
{
36
	u_char buf[5];
36
	u_char buf[5];
Lines 40-49 Link Here
40
40
41
	PUT_32BIT(buf, mlen + 1);
41
	PUT_32BIT(buf, mlen + 1);
42
	buf[4] = type;		/* 1st byte of payload is mesg-type */
42
	buf[4] = type;		/* 1st byte of payload is mesg-type */
43
	if (atomicio(vwrite, fd, buf, sizeof(buf)) != sizeof(buf))
43
	if (atomicio(vwrite, fd, buf, sizeof(buf)) != sizeof(buf)) {
44
		fatal("ssh_msg_send: write");
44
		error("ssh_msg_send: write");
45
	if (atomicio(vwrite, fd, buffer_ptr(m), mlen) != mlen)
45
		return (-1);
46
		fatal("ssh_msg_send: write");
46
	}
47
	if (atomicio(vwrite, fd, buffer_ptr(m), mlen) != mlen) {
48
		error("ssh_msg_send: write");
49
		return (-1);
50
	}
51
	return (0);
47
}
52
}
48
53
49
int
54
int
Lines 57-73 Link Here
57
62
58
	res = atomicio(read, fd, buf, sizeof(buf));
63
	res = atomicio(read, fd, buf, sizeof(buf));
59
	if (res != sizeof(buf)) {
64
	if (res != sizeof(buf)) {
60
		if (res == 0)
65
		if (res != 0)
61
			return -1;
66
			error("ssh_msg_recv: read: header %ld", (long)res);
62
		fatal("ssh_msg_recv: read: header %ld", (long)res);
67
		return (-1);
63
	}
68
	}
64
	msg_len = GET_32BIT(buf);
69
	msg_len = GET_32BIT(buf);
65
	if (msg_len > 256 * 1024)
70
	if (msg_len > 256 * 1024) {
66
		fatal("ssh_msg_recv: read: bad msg_len %u", msg_len);
71
		error("ssh_msg_recv: read: bad msg_len %u", msg_len);
72
		return (-1);
73
	}
67
	buffer_clear(m);
74
	buffer_clear(m);
68
	buffer_append_space(m, msg_len);
75
	buffer_append_space(m, msg_len);
69
	res = atomicio(read, fd, buffer_ptr(m), msg_len);
76
	res = atomicio(read, fd, buffer_ptr(m), msg_len);
70
	if (res != msg_len)
77
	if (res != msg_len) {
71
		fatal("ssh_msg_recv: read: %ld != msg_len", (long)res);
78
		error("ssh_msg_recv: read: %ld != msg_len", (long)res);
72
	return 0;
79
		return (-1);
80
	}
81
	return (0);
73
}
82
}
(-)msg.h (-1 / +1 lines)
Lines 25-31 Link Here
25
#ifndef SSH_MSG_H
25
#ifndef SSH_MSG_H
26
#define SSH_MSG_H
26
#define SSH_MSG_H
27
27
28
void	 ssh_msg_send(int, u_char, Buffer *);
28
int	 ssh_msg_send(int, u_char, Buffer *);
29
int	 ssh_msg_recv(int, Buffer *);
29
int	 ssh_msg_recv(int, Buffer *);
30
30
31
#endif
31
#endif
(-)ssh-keysign.c (-1 / +2 lines)
Lines 233-239 Link Here
233
	/* send reply */
233
	/* send reply */
234
	buffer_clear(&b);
234
	buffer_clear(&b);
235
	buffer_put_string(&b, signature, slen);
235
	buffer_put_string(&b, signature, slen);
236
	ssh_msg_send(STDOUT_FILENO, version, &b);
236
	if (ssh_msg_send(STDOUT_FILENO, version, &b) == -1)
237
		fatal("ssh_msg_send failed");
237
238
238
	return (0);
239
	return (0);
239
}
240
}
(-)sshconnect2.c (-1 / +2 lines)
Lines 1248-1254 Link Here
1248
	buffer_init(&b);
1248
	buffer_init(&b);
1249
	buffer_put_int(&b, packet_get_connection_in()); /* send # of socket */
1249
	buffer_put_int(&b, packet_get_connection_in()); /* send # of socket */
1250
	buffer_put_string(&b, data, datalen);
1250
	buffer_put_string(&b, data, datalen);
1251
	ssh_msg_send(to[1], version, &b);
1251
	if (ssh_msg_send(to[1], version, &b) == -1)
1252
		fatal("ssh_keysign: couldn't send request");
1252
1253
1253
	if (ssh_msg_recv(from[0], &b) < 0) {
1254
	if (ssh_msg_recv(from[0], &b) < 0) {
1254
		error("ssh_keysign: no reply");
1255
		error("ssh_keysign: no reply");

Return to bug 632