1/* 2 Unix SMB/CIFS implementation. 3 4 routines for marshalling/unmarshalling DCOM string arrays 5 6 Copyright (C) Jelmer Vernooij 2004 7 8 This program is free software; you can redistribute it and/or modify 9 it under the terms of the GNU General Public License as published by 10 the Free Software Foundation; either version 2 of the License, or 11 (at your option) any later version. 12 13 This program is distributed in the hope that it will be useful, 14 but WITHOUT ANY WARRANTY; without even the implied warranty of 15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 GNU General Public License for more details. 17 18 You should have received a copy of the GNU General Public License 19 along with this program; if not, write to the Free Software 20 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 21*/ 22//#define NDR_CHECK_DEBUG 23#include "includes.h" 24#include "librpc/gen_ndr/ndr_dcom.h" 25#include "librpc/gen_ndr/ndr_wmi.h" 26#include "librpc/ndr/ndr_wmi.h" 27 28// Just for debugging 29int NDR_CHECK_depth = 0; 30int NDR_CHECK_shift = 0x18; 31 32enum ndr_err_code ndr_push_BSTR(struct ndr_push *ndr, int ndr_flags, const struct BSTR *r) 33{ 34 uint32_t len; 35 uint32_t flags; 36 enum ndr_err_code status; 37 len = strlen(r->data); 38 if (ndr_flags & NDR_SCALARS) { 39 NDR_CHECK(ndr_push_align(ndr, 4)); 40 NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0x72657355)); 41 NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, len)); 42 NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 2*len)); 43 flags = ndr->flags; 44 ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NOTERM | LIBNDR_FLAG_STR_SIZE4); 45 status = ndr_push_string(ndr, NDR_SCALARS, r->data); 46 ndr->flags = flags; 47 return status; 48 } 49 return NDR_ERR_SUCCESS; 50} 51 52enum ndr_err_code ndr_pull_BSTR(struct ndr_pull *ndr, int ndr_flags, struct BSTR *r) 53{ 54 return NDR_ERR_BAD_SWITCH; 55} 56 57void ndr_print_BSTR(struct ndr_print *ndr, const char *name, const struct BSTR *r) 58{ 59 ndr->print(ndr, "%-25s: BSTR(\"%s\")", name, r->data); 60} 61