librpc/ndr/ndr.c

ソースコードを見る。

関数

size_t ndr_align_size (uint32_t offset, size_t n)
ndr_pullndr_pull_init_blob (const DATA_BLOB *blob, TALLOC_CTX *mem_ctx)
NTSTATUS ndr_pull_advance (struct ndr_pull *ndr, uint32_t size)
static NTSTATUS ndr_pull_set_offset (struct ndr_pull *ndr, uint32_t ofs)
void ndr_pull_save (struct ndr_pull *ndr, struct ndr_pull_save *save)
void ndr_pull_restore (struct ndr_pull *ndr, struct ndr_pull_save *save)
ndr_pushndr_push_init_ctx (TALLOC_CTX *mem_ctx)
ndr_pushndr_push_init (void)
void ndr_push_free (struct ndr_push *ndr)
DATA_BLOB ndr_push_blob (struct ndr_push *ndr)
NTSTATUS ndr_push_expand (struct ndr_push *ndr, uint32_t extra_size)
void ndr_print_debug_helper (struct ndr_print *ndr, const char *format,...) _PRINTF_ATTRIBUTE(2

変数

dcerpc_syntax_id ndr_transfer_syntax
dcerpc_syntax_id ndr64_transfer_syntax


関数

size_t ndr_align_size ( uint32_t  offset,
size_t  n 
)

ndr.c48 行で定義されています。

00049 {
00050         if ((offset & (n-1)) == 0) return 0;
00051         return n - (offset & (n-1));
00052 }

struct ndr_pull* ndr_pull_init_blob ( const DATA_BLOB blob,
TALLOC_CTX mem_ctx 
)

ndr.c57 行で定義されています。

参照先 ndr_pull::current_mem_ctxdata_blob_::datandr_pull::datandr_pull::data_sizedata_blob_::length.

参照元 api_wkssvc_NetrAddAlternateComputerName()api_WKSSVC_NETRENUMERATECOMPUTERNAMES()api_WKSSVC_NETRGETJOINABLEOUS()api_WKSSVC_NETRGETJOINABLEOUS2()api_WKSSVC_NETRGETJOININFORMATION()api_WKSSVC_NETRJOINDOMAIN()api_wkssvc_NetrJoinDomain2()api_WKSSVC_NETRLOGONDOMAINNAMEADD()api_WKSSVC_NETRLOGONDOMAINNAMEDEL()api_WKSSVC_NETRMESSAGEBUFFERSEND()api_wkssvc_NetrRemoveAlternateComputerName()api_WKSSVC_NETRRENAMEMACHINEINDOMAIN()api_wkssvc_NetrRenameMachineInDomain2()api_WKSSVC_NETRSETPRIMARYCOMPUTERNAME()api_WKSSVC_NETRUNJOINDOMAIN()api_wkssvc_NetrUnjoinDomain2()api_WKSSVC_NETRUSEADD()api_WKSSVC_NETRUSEDEL()api_WKSSVC_NETRUSEENUM()api_WKSSVC_NETRUSEGETINFO()api_WKSSVC_NETRVALIDATENAME()api_WKSSVC_NETRVALIDATENAME2()api_WKSSVC_NETRWKSTATRANSPORTADD()api_WKSSVC_NETRWKSTATRANSPORTDEL()api_WKSSVC_NETRWKSTAUSERGETINFO()api_WKSSVC_NETRWKSTAUSERSETINFO()api_WKSSVC_NETRWORKSTATIONSTATISTICSGET()api_wkssvc_NetWkstaEnumUsers()api_wkssvc_NetWkstaGetInfo()api_wkssvc_NetWkstaSetInfo()api_wkssvc_NetWkstaTransportEnum()cli_do_rpc_ndr().

00058 {
00059         struct ndr_pull *ndr;
00060 
00061         ndr = talloc_zero(mem_ctx, struct ndr_pull);
00062         if (!ndr) return NULL;
00063         ndr->current_mem_ctx = mem_ctx;
00064 
00065         ndr->data = blob->data;
00066         ndr->data_size = blob->length;
00067 
00068         return ndr;
00069 }

NTSTATUS ndr_pull_advance ( struct ndr_pull ndr,
uint32_t  size 
)

ndr.c74 行で定義されています。

参照先 ndr_pull::data_sizeNDR_ERR_BUFSIZEndr_pull::offset.

参照元 ndr_check_string_terminator()ndr_pull_charset()ndr_pull_dom_sid28()ndr_pull_string().

00075 {
00076         ndr->offset += size;
00077         if (ndr->offset > ndr->data_size) {
00078                 return ndr_pull_error(ndr, NDR_ERR_BUFSIZE, 
00079                                       "ndr_pull_advance by %u failed",
00080                                       size);
00081         }
00082         return NT_STATUS_OK;
00083 }

static NTSTATUS ndr_pull_set_offset ( struct ndr_pull ndr,
uint32_t  ofs 
) [static]

ndr.c88 行で定義されています。

参照先 ndr_pull::data_sizeNDR_ERR_BUFSIZEndr_pull::offset.

00089 {
00090         ndr->offset = ofs;
00091         if (ndr->offset > ndr->data_size) {
00092                 return ndr_pull_error(ndr, NDR_ERR_BUFSIZE, 
00093                                       "ndr_pull_set_offset %u failed",
00094                                       ofs);
00095         }
00096         return NT_STATUS_OK;
00097 }

void ndr_pull_save ( struct ndr_pull ndr,
struct ndr_pull_save save 
)

ndr.c100 行で定義されています。

参照先 ndr_pull::data_sizendr_pull_save::data_sizendr_pull::offsetndr_pull_save::offset.

参照元 ndr_check_string_terminator()ndr_pull_security_descriptor().

00101 {
00102         save->offset = ndr->offset;
00103         save->data_size = ndr->data_size;
00104 }

void ndr_pull_restore ( struct ndr_pull ndr,
struct ndr_pull_save save 
)

ndr.c107 行で定義されています。

参照先 ndr_pull_save::data_sizendr_pull::data_sizendr_pull_save::offsetndr_pull::offset.

参照元 ndr_check_string_terminator()ndr_pull_security_descriptor().

00108 {
00109         ndr->offset = save->offset;
00110         ndr->data_size = save->data_size;
00111 }

struct ndr_push* ndr_push_init_ctx ( TALLOC_CTX mem_ctx  ) 

ndr.c115 行で定義されています。

参照先 ndr_push::alloc_sizendr_push::datandr_push::flags.

参照元 api_wkssvc_NetrAddAlternateComputerName()api_WKSSVC_NETRENUMERATECOMPUTERNAMES()api_WKSSVC_NETRGETJOINABLEOUS()api_WKSSVC_NETRGETJOINABLEOUS2()api_WKSSVC_NETRGETJOININFORMATION()api_WKSSVC_NETRJOINDOMAIN()api_wkssvc_NetrJoinDomain2()api_WKSSVC_NETRLOGONDOMAINNAMEADD()api_WKSSVC_NETRLOGONDOMAINNAMEDEL()api_WKSSVC_NETRMESSAGEBUFFERSEND()api_wkssvc_NetrRemoveAlternateComputerName()api_WKSSVC_NETRRENAMEMACHINEINDOMAIN()api_wkssvc_NetrRenameMachineInDomain2()api_WKSSVC_NETRSETPRIMARYCOMPUTERNAME()api_WKSSVC_NETRUNJOINDOMAIN()api_wkssvc_NetrUnjoinDomain2()api_WKSSVC_NETRUSEADD()api_WKSSVC_NETRUSEDEL()api_WKSSVC_NETRUSEENUM()api_WKSSVC_NETRUSEGETINFO()api_WKSSVC_NETRVALIDATENAME()api_WKSSVC_NETRVALIDATENAME2()api_WKSSVC_NETRWKSTATRANSPORTADD()api_WKSSVC_NETRWKSTATRANSPORTDEL()api_WKSSVC_NETRWKSTAUSERGETINFO()api_WKSSVC_NETRWKSTAUSERSETINFO()api_WKSSVC_NETRWORKSTATIONSTATISTICSGET()api_wkssvc_NetWkstaEnumUsers()api_wkssvc_NetWkstaGetInfo()api_wkssvc_NetWkstaSetInfo()api_wkssvc_NetWkstaTransportEnum()cli_do_rpc_ndr()ndr_push_init().

00116 {
00117         struct ndr_push *ndr;
00118 
00119         ndr = talloc_zero(mem_ctx, struct ndr_push);
00120         if (!ndr) {
00121                 return NULL;
00122         }
00123 
00124         ndr->flags = 0;
00125         ndr->alloc_size = NDR_BASE_MARSHALL_SIZE;
00126         ndr->data = talloc_array(ndr, uint8_t, ndr->alloc_size);
00127         if (!ndr->data) {
00128                 return NULL;
00129         }
00130 
00131         return ndr;
00132 }

struct ndr_push* ndr_push_init ( void   ) 

ndr.c136 行で定義されています。

参照先 ndr_push_init_ctx().

00137 {
00138         return ndr_push_init_ctx(NULL);
00139 }

void ndr_push_free ( struct ndr_push ndr  ) 

ndr.c142 行で定義されています。

参照先 talloc_free().

00143 {
00144         talloc_free(ndr);
00145 }

DATA_BLOB ndr_push_blob ( struct ndr_push ndr  ) 

ndr.c149 行で定義されています。

参照先 ndr_push::alloc_sizendr_push::datadata_blob_::datadata_blob_::freedata_blob_::lengthndr_push::offset.

参照元 api_wkssvc_NetrAddAlternateComputerName()api_WKSSVC_NETRENUMERATECOMPUTERNAMES()api_WKSSVC_NETRGETJOINABLEOUS()api_WKSSVC_NETRGETJOINABLEOUS2()api_WKSSVC_NETRGETJOININFORMATION()api_WKSSVC_NETRJOINDOMAIN()api_wkssvc_NetrJoinDomain2()api_WKSSVC_NETRLOGONDOMAINNAMEADD()api_WKSSVC_NETRLOGONDOMAINNAMEDEL()api_WKSSVC_NETRMESSAGEBUFFERSEND()api_wkssvc_NetrRemoveAlternateComputerName()api_WKSSVC_NETRRENAMEMACHINEINDOMAIN()api_wkssvc_NetrRenameMachineInDomain2()api_WKSSVC_NETRSETPRIMARYCOMPUTERNAME()api_WKSSVC_NETRUNJOINDOMAIN()api_wkssvc_NetrUnjoinDomain2()api_WKSSVC_NETRUSEADD()api_WKSSVC_NETRUSEDEL()api_WKSSVC_NETRUSEENUM()api_WKSSVC_NETRUSEGETINFO()api_WKSSVC_NETRVALIDATENAME()api_WKSSVC_NETRVALIDATENAME2()api_WKSSVC_NETRWKSTATRANSPORTADD()api_WKSSVC_NETRWKSTATRANSPORTDEL()api_WKSSVC_NETRWKSTAUSERGETINFO()api_WKSSVC_NETRWKSTAUSERSETINFO()api_WKSSVC_NETRWORKSTATIONSTATISTICSGET()api_wkssvc_NetWkstaEnumUsers()api_wkssvc_NetWkstaGetInfo()api_wkssvc_NetWkstaSetInfo()api_wkssvc_NetWkstaTransportEnum()cli_do_rpc_ndr().

00150 {
00151         DATA_BLOB blob;
00152         blob.data = ndr->data;
00153         blob.length = ndr->offset;
00154         blob.free = NULL;
00155         if (ndr->alloc_size > ndr->offset) {
00156                 ndr->data[ndr->offset] = 0;
00157         }
00158         return blob;
00159 }

NTSTATUS ndr_push_expand ( struct ndr_push ndr,
uint32_t  extra_size 
)

ndr.c165 行で定義されています。

参照先 ndr_push::alloc_sizendr_push::dataNDR_ERR_ALLOCNDR_ERR_BUFSIZEndr_push::offsetsize.

00166 {
00167         uint32_t size = extra_size + ndr->offset;
00168 
00169         if (size < ndr->offset) {
00170                 /* extra_size overflowed the offset */
00171                 return ndr_push_error(ndr, NDR_ERR_BUFSIZE, "Overflow in push_expand to %u",
00172                                         size);
00173         }
00174 
00175         if (ndr->alloc_size > size) {
00176                 return NT_STATUS_OK;
00177         }
00178 
00179         ndr->alloc_size += NDR_BASE_MARSHALL_SIZE;
00180         if (size+1 > ndr->alloc_size) {
00181                 ndr->alloc_size = size+1;
00182         }
00183         ndr->data = talloc_realloc(ndr, ndr->data, uint8_t, ndr->alloc_size);
00184         if (!ndr->data) {
00185                 return ndr_push_error(ndr, NDR_ERR_ALLOC, "Failed to push_expand to %u",
00186                                       ndr->alloc_size);
00187         }
00188 
00189         return NT_STATUS_OK;
00190 }

void ndr_print_debug_helper ( struct ndr_print ndr,
const char *  format,
  ... 
)


変数

struct dcerpc_syntax_id ndr_transfer_syntax

初期値:

 {
  { 0x8a885d04, 0x1ceb, 0x11c9, {0x9f, 0xe8}, {0x08,0x00,0x2b,0x10,0x48,0x60} },
  2
}

ndr.c35 行で定義されています。

struct dcerpc_syntax_id ndr64_transfer_syntax

初期値:

 {
  { 0x71710533, 0xbeba, 0x4937, {0x83, 0x19}, {0xb5,0xdb,0xef,0x9c,0xcc,0x36} },
  1
}

ndr.c40 行で定義されています。


Sambaに対してSat Aug 29 21:23:45 2009に生成されました。  doxygen 1.4.7