[BACK]Return to buffer.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / ssh

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: