Annotation of src/usr.bin/ssh/buffer.c, Revision 1.36
1.36 ! djm 1: /* $OpenBSD$ */
! 2:
1.1 deraadt 3: /*
1.36 ! djm 4: * Copyright (c) 2012 Damien Miller <djm@mindrot.org>
! 5: *
! 6: * Permission to use, copy, modify, and distribute this software for any
! 7: * purpose with or without fee is hereby granted, provided that the above
! 8: * copyright notice and this permission notice appear in all copies.
1.6 markus 9: *
1.36 ! djm 10: * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
! 11: * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
! 12: * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
! 13: * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
! 14: * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
! 15: * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
! 16: * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
1.3 deraadt 17: */
1.1 deraadt 18:
1.36 ! djm 19: /* Emulation wrappers for legacy OpenSSH buffer API atop sshbuf */
1.28 stevesk 20:
1.36 ! djm 21: #include <sys/types.h>
1.1 deraadt 22:
23: #include "buffer.h"
1.10 markus 24: #include "log.h"
1.36 ! djm 25: #include "ssherr.h"
1.1 deraadt 26:
1.6 markus 27: void
1.36 ! djm 28: buffer_append(Buffer *buffer, const void *data, u_int len)
1.1 deraadt 29: {
1.36 ! djm 30: int ret;
1.1 deraadt 31:
1.36 ! djm 32: if ((ret = sshbuf_put(buffer, data, len)) != 0)
! 33: fatal("%s: %s", __func__, ssh_err(ret));
1.27 djm 34: }
35:
1.14 stevesk 36: void *
37: buffer_append_space(Buffer *buffer, u_int len)
1.1 deraadt 38: {
1.36 ! djm 39: int ret;
! 40: u_char *p;
1.14 stevesk 41:
1.36 ! djm 42: if ((ret = sshbuf_reserve(buffer, len, &p)) != 0)
! 43: fatal("%s: %s", __func__, ssh_err(ret));
! 44: return p;
1.27 djm 45: }
46:
47: int
48: buffer_check_alloc(Buffer *buffer, u_int len)
49: {
1.36 ! djm 50: int ret = sshbuf_check_reserve(buffer, len);
1.1 deraadt 51:
1.36 ! djm 52: if (ret == 0)
! 53: return 1;
! 54: if (ret == SSH_ERR_NO_BUFFER_SPACE)
! 55: return 0;
! 56: fatal("%s: %s", __func__, ssh_err(ret));
1.1 deraadt 57: }
58:
1.22 djm 59: int
60: buffer_get_ret(Buffer *buffer, void *buf, u_int len)
1.1 deraadt 61: {
1.36 ! djm 62: int ret;
! 63:
! 64: if ((ret = sshbuf_get(buffer, buf, len)) != 0) {
! 65: error("%s: %s", __func__, ssh_err(ret));
! 66: return -1;
1.22 djm 67: }
1.36 ! djm 68: return 0;
1.22 djm 69: }
70:
71: void
72: buffer_get(Buffer *buffer, void *buf, u_int len)
73: {
74: if (buffer_get_ret(buffer, buf, len) == -1)
1.36 ! djm 75: fatal("%s: buffer error", __func__);
1.1 deraadt 76: }
77:
1.22 djm 78: int
79: buffer_consume_ret(Buffer *buffer, u_int bytes)
80: {
1.36 ! djm 81: int ret = sshbuf_consume(buffer, bytes);
! 82:
! 83: if (ret == 0)
! 84: return 0;
! 85: if (ret == SSH_ERR_MESSAGE_INCOMPLETE)
! 86: return -1;
! 87: fatal("%s: %s", __func__, ssh_err(ret));
1.22 djm 88: }
89:
1.6 markus 90: void
1.9 markus 91: buffer_consume(Buffer *buffer, u_int bytes)
1.1 deraadt 92: {
1.22 djm 93: if (buffer_consume_ret(buffer, bytes) == -1)
1.36 ! djm 94: fatal("%s: buffer error", __func__);
1.2 markus 95: }
1.1 deraadt 96:
1.22 djm 97: int
98: buffer_consume_end_ret(Buffer *buffer, u_int bytes)
99: {
1.36 ! djm 100: int ret = sshbuf_consume_end(buffer, bytes);
! 101:
! 102: if (ret == 0)
! 103: return 0;
! 104: if (ret == SSH_ERR_MESSAGE_INCOMPLETE)
! 105: return -1;
! 106: fatal("%s: %s", __func__, ssh_err(ret));
1.22 djm 107: }
108:
1.6 markus 109: void
1.9 markus 110: buffer_consume_end(Buffer *buffer, u_int bytes)
1.1 deraadt 111: {
1.22 djm 112: if (buffer_consume_end_ret(buffer, bytes) == -1)
1.36 ! djm 113: fatal("%s: buffer error", __func__);
1.2 markus 114: }
1.1 deraadt 115:
116: