From: Volker Lendecke Date: Thu, 21 Sep 2023 14:40:43 +0000 (-0700) Subject: libsmb: Remove reparse_symlink.c X-Git-Tag: tevent-0.16.0~517 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=af5756df6c51537e4adf36ca524d4ca671a191ee;p=thirdparty%2Fsamba.git libsmb: Remove reparse_symlink.c Makes reparse_buffer_marshall static to reparse.c Signed-off-by: Volker Lendecke Reviewed-by: Jeremy Allison --- diff --git a/libcli/smb/py_reparse_symlink.c b/libcli/smb/py_reparse_symlink.c index 52fcc487f40..93e5cf8f049 100644 --- a/libcli/smb/py_reparse_symlink.c +++ b/libcli/smb/py_reparse_symlink.c @@ -22,7 +22,7 @@ #include "python/py3compat.h" #include "libcli/util/pyerrors.h" #include "reparse.h" -#include "reparse_symlink.h" +#include "lib/util/iov_buf.h" #include "smb_constants.h" static PyObject *py_reparse_put(PyObject *module, PyObject *args) diff --git a/libcli/smb/reparse.c b/libcli/smb/reparse.c index 77ef7fb715b..1a6feff17e1 100644 --- a/libcli/smb/reparse.c +++ b/libcli/smb/reparse.c @@ -17,7 +17,7 @@ #include "replace.h" #include "libcli/smb/reparse.h" -#include "libcli/smb/reparse_symlink.h" +#include "lib/util/iov_buf.h" #include "libcli/smb/smb_constants.h" #include "libcli/util/error.h" #include "lib/util/debug.h" @@ -349,6 +349,38 @@ char *reparse_data_buffer_str(TALLOC_CTX *mem_ctx, return s; } +static ssize_t reparse_buffer_marshall(uint32_t reparse_tag, + uint16_t reserved, + const struct iovec *iov, + int iovlen, + uint8_t *buf, + size_t buflen) +{ + ssize_t reparse_data_length = iov_buflen(iov, iovlen); + size_t needed; + + if (reparse_data_length == -1) { + return -1; + } + if (reparse_data_length > UINT16_MAX) { + return -1; + } + + needed = reparse_data_length + 8; + if (needed < reparse_data_length) { + return -1; + } + + if (buflen >= needed) { + PUSH_LE_U32(buf, 0, reparse_tag); + PUSH_LE_U16(buf, 4, reparse_data_length); + PUSH_LE_U16(buf, 6, reserved); + iov_buf(iov, iovlen, buf + 8, buflen - 8); + } + + return needed; +} + static ssize_t reparse_data_buffer_marshall_syml(const struct symlink_reparse_struct *src, uint8_t *buf, diff --git a/libcli/smb/reparse_symlink.c b/libcli/smb/reparse_symlink.c deleted file mode 100644 index b99cca261d7..00000000000 --- a/libcli/smb/reparse_symlink.c +++ /dev/null @@ -1,167 +0,0 @@ -/* - * Unix SMB/CIFS implementation. - * - * Implementation of - * http://msdn.microsoft.com/en-us/library/cc232006%28v=PROT.13%29.aspx - * - * Copyright (C) Volker Lendecke 2011 - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include "replace.h" -#include "reparse_symlink.h" -#include "lib/util/charset/charset.h" -#include "lib/util/bytearray.h" -#include "libcli/smb/smb_constants.h" -#include "libcli/smb/smb_util.h" -#include "lib/util/debug.h" - -ssize_t reparse_buffer_marshall( - uint32_t reparse_tag, - uint16_t reserved, - const struct iovec *iov, - int iovlen, - uint8_t *buf, - size_t buflen) -{ - ssize_t reparse_data_length = iov_buflen(iov, iovlen); - size_t needed; - - if (reparse_data_length == -1) { - return -1; - } - if (reparse_data_length > UINT16_MAX) { - return -1; - } - - needed = reparse_data_length + 8; - if (needed < reparse_data_length) { - return -1; - } - - if (buflen >= needed) { - PUSH_LE_U32(buf, 0, reparse_tag); - PUSH_LE_U16(buf, 4, reparse_data_length); - PUSH_LE_U16(buf, 6, reserved); - iov_buf(iov, iovlen, buf+8, buflen-8); - } - - return needed; -} - -bool symlink_reparse_buffer_marshall( - const char *substitute, - const char *printname, - uint16_t unparsed_path_length, - uint32_t flags, - TALLOC_CTX *mem_ctx, - uint8_t **pdst, - size_t *pdstlen) -{ - uint8_t sbuf[12]; - struct iovec iov[3]; - uint8_t *dst = NULL; - ssize_t dst_len; - uint8_t *subst_utf16 = NULL; - uint8_t *print_utf16 = NULL; - size_t subst_len = 0; - size_t print_len = 0; - bool ret = false; - bool ok; - - if (substitute == NULL) { - return false; - } - if (printname == NULL) { - printname = substitute; - } - - iov[0] = (struct iovec) { .iov_base = sbuf, .iov_len = sizeof(sbuf), }; - - ok = convert_string_talloc( - mem_ctx, - CH_UNIX, - CH_UTF16, - substitute, - strlen(substitute), - &subst_utf16, - &subst_len); - if (!ok) { - goto fail; - } - if (subst_len > UINT16_MAX) { - goto fail; - } - iov[1] = (struct iovec) { - .iov_base = subst_utf16, .iov_len = subst_len, - }; - - ok = convert_string_talloc( - mem_ctx, - CH_UNIX, - CH_UTF16, - printname, - strlen(printname), - &print_utf16, - &print_len); - if (!ok) { - goto fail; - } - if (print_len > UINT16_MAX) { - goto fail; - } - iov[2] = (struct iovec) { - .iov_base = print_utf16, .iov_len = print_len, - }; - - PUSH_LE_U16(sbuf, 0, 0); /* SubstituteNameOffset */ - PUSH_LE_U16(sbuf, 2, subst_len); /* SubstituteNameLength */ - PUSH_LE_U16(sbuf, 4, subst_len); /* PrintNameOffset */ - PUSH_LE_U16(sbuf, 6, print_len); /* PrintNameLength */ - PUSH_LE_U32(sbuf, 8, flags); /* Flags */ - - dst_len = reparse_buffer_marshall( - IO_REPARSE_TAG_SYMLINK, - unparsed_path_length, - iov, - ARRAY_SIZE(iov), - NULL, - 0); - if (dst_len == -1) { - goto fail; - } - - dst = talloc_array(mem_ctx, uint8_t, dst_len); - if (dst == NULL) { - goto fail; - } - - reparse_buffer_marshall( - IO_REPARSE_TAG_SYMLINK, - unparsed_path_length, - iov, - ARRAY_SIZE(iov), - dst, - dst_len); - - *pdst = dst; - *pdstlen = dst_len; - ret = true; - -fail: - TALLOC_FREE(subst_utf16); - TALLOC_FREE(print_utf16); - return ret; -} diff --git a/libcli/smb/reparse_symlink.h b/libcli/smb/reparse_symlink.h deleted file mode 100644 index 322bf734748..00000000000 --- a/libcli/smb/reparse_symlink.h +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Unix SMB/CIFS implementation. - * - * Implementation of - * http://msdn.microsoft.com/en-us/library/cc232006%28v=PROT.13%29.aspx - * - * Copyright (C) Volker Lendecke 2011 - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#ifndef __REPARSE_SYMLINK_H__ -#define __REPARSE_SYMLINK_H__ - -#include "replace.h" -#include -#include "lib/util/iov_buf.h" - -ssize_t reparse_buffer_marshall( - uint32_t reparse_tag, - uint16_t reserved, - const struct iovec *iov, - int iovlen, - uint8_t *buf, - size_t buflen); - -bool symlink_reparse_buffer_marshall( - const char *substitute, - const char *printname, - uint16_t unparsed_path_length, - uint32_t flags, - TALLOC_CTX *mem_ctx, - uint8_t **pdst, - size_t *pdstlen); - -#endif diff --git a/libcli/smb/wscript b/libcli/smb/wscript index 3c7848716f3..45d8cdb8bb5 100644 --- a/libcli/smb/wscript +++ b/libcli/smb/wscript @@ -45,7 +45,6 @@ def build(bld): smb2cli_echo.c smb2_posix.c tstream_smbXcli_np.c - reparse_symlink.c reparse.c ''', deps=''' diff --git a/source3/libsmb/clisymlink.c b/source3/libsmb/clisymlink.c index d13332b11bd..81d8646afcc 100644 --- a/source3/libsmb/clisymlink.c +++ b/source3/libsmb/clisymlink.c @@ -28,7 +28,6 @@ #include "libcli/security/security.h" #include "../libcli/smb/smbXcli_base.h" #include "libcli/smb/reparse.h" -#include "libcli/smb/reparse_symlink.h" struct cli_create_reparse_point_state { struct tevent_context *ev; diff --git a/source3/libsmb/pylibsmb.c b/source3/libsmb/pylibsmb.c index faef47de49d..deda81d16b4 100644 --- a/source3/libsmb/pylibsmb.c +++ b/source3/libsmb/pylibsmb.c @@ -52,7 +52,6 @@ c = libsmb.Conn("127.0.0.1", #include "libcli/smb/smbXcli_base.h" #include "libcli/smb/smb2_negotiate_context.h" #include "libcli/smb/reparse.h" -#include "libcli/smb/reparse_symlink.h" #include "libsmb/libsmb.h" #include "libcli/security/security.h" #include "system/select.h"