librpc/ndr/ndr_misc.c

ソースコードを見る。

関数

NTSTATUS ndr_push_GUID (struct ndr_push *ndr, int ndr_flags, const struct GUID *r)
NTSTATUS ndr_pull_GUID (struct ndr_pull *ndr, int ndr_flags, struct GUID *r)
size_t ndr_size_GUID (const struct GUID *r, int flags)
NTSTATUS GUID_from_string (const char *s, struct GUID *guid)
 build a GUID from a string
GUID GUID_random (void)
 generate a random GUID
GUID GUID_zero (void)
 generate an empty GUID
BOOL all_zero (const uint8_t *ptr, size_t size)
 see if a range of memory is all zero.
BOOL GUID_all_zero (const struct GUID *u)
BOOL GUID_equal (const struct GUID *u1, const struct GUID *u2)
char * GUID_string (TALLOC_CTX *mem_ctx, const struct GUID *guid)
 its useful to be able to display these in debugging messages
char * GUID_string2 (TALLOC_CTX *mem_ctx, const struct GUID *guid)
void ndr_print_GUID (struct ndr_print *ndr, const char *name, const struct GUID *guid)
BOOL policy_handle_empty (struct policy_handle *h)
NTSTATUS ndr_push_policy_handle (struct ndr_push *ndr, int ndr_flags, const struct policy_handle *r)
NTSTATUS ndr_pull_policy_handle (struct ndr_pull *ndr, int ndr_flags, struct policy_handle *r)
void ndr_print_policy_handle (struct ndr_print *ndr, const char *name, const struct policy_handle *r)
NTSTATUS ndr_push_server_id (struct ndr_push *ndr, int ndr_flags, const struct server_id *r)
NTSTATUS ndr_pull_server_id (struct ndr_pull *ndr, int ndr_flags, struct server_id *r)
void ndr_print_server_id (struct ndr_print *ndr, const char *name, const struct server_id *r)


関数

NTSTATUS ndr_push_GUID ( struct ndr_push ndr,
int  ndr_flags,
const struct GUID r 
)

ndr_misc.c28 行で定義されています。

参照先 GUID::clock_seqndr_push_align()ndr_push_array_uint8()ndr_push_uint16()ndr_push_uint32()GUID::nodeGUID::time_hi_and_versionGUID::time_lowGUID::time_mid.

参照元 ndr_push_policy_handle()ndr_push_security_ace_object_inherited_type()ndr_push_security_ace_object_type()ndr_size_GUID().

00029 {
00030         if (ndr_flags & NDR_SCALARS) {
00031                 NDR_CHECK(ndr_push_align(ndr, 4));
00032                 NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->time_low));
00033                 NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->time_mid));
00034                 NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->time_hi_and_version));
00035                 NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->clock_seq, 2));
00036                 NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->node, 6));
00037         }
00038         if (ndr_flags & NDR_BUFFERS) {
00039         }
00040         return NT_STATUS_OK;
00041 }

NTSTATUS ndr_pull_GUID ( struct ndr_pull ndr,
int  ndr_flags,
struct GUID r 
)

ndr_misc.c43 行で定義されています。

参照先 GUID::clock_seqndr_pull_align()ndr_pull_array_uint8()ndr_pull_uint16()ndr_pull_uint32()GUID::nodeGUID::time_hi_and_versionGUID::time_lowGUID::time_mid.

参照元 ndr_pull_policy_handle()ndr_pull_security_ace_object_inherited_type()ndr_pull_security_ace_object_type().

00044 {
00045         if (ndr_flags & NDR_SCALARS) {
00046                 NDR_CHECK(ndr_pull_align(ndr, 4));
00047                 NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->time_low));
00048                 NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->time_mid));
00049                 NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->time_hi_and_version));
00050                 NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->clock_seq, 2));
00051                 NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->node, 6));
00052         }
00053         if (ndr_flags & NDR_BUFFERS) {
00054         }
00055         return NT_STATUS_OK;
00056 }

size_t ndr_size_GUID ( const struct GUID r,
int  flags 
)

ndr_misc.c58 行で定義されています。

参照先 ndr_push_GUID().

00059 {
00060         return ndr_size_struct(r, flags, (ndr_push_flags_fn_t)ndr_push_GUID);
00061 }

NTSTATUS GUID_from_string ( const char *  s,
struct GUID guid 
)

build a GUID from a string

ndr_misc.c66 行で定義されています。

参照先 GUID::clock_seqGUID::nodestatusGUID::time_hi_and_versionGUID::time_lowGUID::time_mid.

参照元 cmd_netlogon_dsr_getdcname()cmd_netlogon_dsr_getdcnameex()cmd_netlogon_dsr_getdcnameex2().

00067 {
00068         NTSTATUS status = NT_STATUS_INVALID_PARAMETER;
00069         uint32_t time_low;
00070         uint32_t time_mid, time_hi_and_version;
00071         uint32_t clock_seq[2];
00072         uint32_t node[6];
00073         int i;
00074 
00075         if (s == NULL) {
00076                 return NT_STATUS_INVALID_PARAMETER;
00077         }
00078 
00079         if (11 == sscanf(s, "%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x",
00080                          &time_low, &time_mid, &time_hi_and_version, 
00081                          &clock_seq[0], &clock_seq[1],
00082                          &node[0], &node[1], &node[2], &node[3], &node[4], &node[5])) {
00083                 status = NT_STATUS_OK;
00084         } else if (11 == sscanf(s, "{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}",
00085                                 &time_low, &time_mid, &time_hi_and_version, 
00086                                 &clock_seq[0], &clock_seq[1],
00087                                 &node[0], &node[1], &node[2], &node[3], &node[4], &node[5])) {
00088                 status = NT_STATUS_OK;
00089         }
00090 
00091         if (!NT_STATUS_IS_OK(status)) {
00092                 return status;
00093         }
00094 
00095         guid->time_low = time_low;
00096         guid->time_mid = time_mid;
00097         guid->time_hi_and_version = time_hi_and_version;
00098         guid->clock_seq[0] = clock_seq[0];
00099         guid->clock_seq[1] = clock_seq[1];
00100         for (i=0;i<6;i++) {
00101                 guid->node[i] = node[i];
00102         }
00103 
00104         return NT_STATUS_OK;
00105 }

struct GUID GUID_random ( void   ) 

generate a random GUID

ndr_misc.c110 行で定義されています。

参照先 generate_random_buffer().

00111 {
00112         struct GUID guid;
00113 
00114         generate_random_buffer((uint8_t *)&guid, sizeof(guid));
00115         guid.clock_seq[0] = (guid.clock_seq[0] & 0x3F) | 0x80;
00116         guid.time_hi_and_version = (guid.time_hi_and_version & 0x0FFF) | 0x4000;
00117 
00118         return guid;
00119 }

struct GUID GUID_zero ( void   ) 

generate an empty GUID

ndr_misc.c124 行で定義されています。

参照元 cmd_netlogon_dsr_getdcname()cmd_netlogon_dsr_getdcnameex()cmd_netlogon_dsr_getdcnameex2().

00125 {
00126         struct GUID guid;
00127 
00128         ZERO_STRUCT(guid);
00129 
00130         return guid;
00131 }

BOOL all_zero ( const uint8_t *  ptr,
size_t  size 
)

see if a range of memory is all zero.

A NULL pointer is considered to be all zero

ndr_misc.c137 行で定義されています。

参照元 GUID_all_zero().

00138 {
00139         int i;
00140         if (!ptr) return True;
00141         for (i=0;i<size;i++) {
00142                 if (ptr[i]) return False;
00143         }
00144         return True;
00145 }

BOOL GUID_all_zero ( const struct GUID u  ) 

ndr_misc.c148 行で定義されています。

参照先 all_zero()GUID::clock_seqGUID::nodeGUID::time_hi_and_versionGUID::time_lowGUID::time_mid.

参照元 policy_handle_empty().

00149 {
00150         if (u->time_low != 0 ||
00151             u->time_mid != 0 ||
00152             u->time_hi_and_version != 0 ||
00153             u->clock_seq[0] != 0 ||
00154             u->clock_seq[1] != 0 ||
00155             !all_zero(u->node, 6)) {
00156                 return False;
00157         }
00158         return True;
00159 }

BOOL GUID_equal ( const struct GUID u1,
const struct GUID u2 
)

ndr_misc.c161 行で定義されています。

参照先 GUID::clock_seqGUID::nodeGUID::time_hi_and_versionGUID::time_lowGUID::time_mid.

00162 {
00163         if (u1->time_low != u2->time_low ||
00164             u1->time_mid != u2->time_mid ||
00165             u1->time_hi_and_version != u2->time_hi_and_version ||
00166             u1->clock_seq[0] != u2->clock_seq[0] ||
00167             u1->clock_seq[1] != u2->clock_seq[1] ||
00168             memcmp(u1->node, u2->node, 6) != 0) {
00169                 return False;
00170         }
00171         return True;
00172 }

char* GUID_string ( TALLOC_CTX mem_ctx,
const struct GUID guid 
)

its useful to be able to display these in debugging messages

ndr_misc.c177 行で定義されています。

参照先 GUID::clock_seqGUID::nodetalloc_asprintf()GUID::time_hi_and_versionGUID::time_lowGUID::time_mid.

参照元 display_ds_domain_controller_info()GUID_string2()ndr_print_GUID().

00178 {
00179         return talloc_asprintf(mem_ctx, 
00180                                "%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x",
00181                                guid->time_low, guid->time_mid,
00182                                guid->time_hi_and_version,
00183                                guid->clock_seq[0],
00184                                guid->clock_seq[1],
00185                                guid->node[0], guid->node[1],
00186                                guid->node[2], guid->node[3],
00187                                guid->node[4], guid->node[5]);
00188 }

char* GUID_string2 ( TALLOC_CTX mem_ctx,
const struct GUID guid 
)

ndr_misc.c190 行で定義されています。

参照先 GUID_string()talloc_asprintf()talloc_free().

00191 {
00192         char *ret, *s = GUID_string(mem_ctx, guid);
00193         ret = talloc_asprintf(mem_ctx, "{%s}", s);
00194         talloc_free(s);
00195         return ret;
00196 }

void ndr_print_GUID ( struct ndr_print ndr,
const char *  name,
const struct GUID guid 
)

ndr_misc.c198 行で定義されています。

参照先 GUID_string()ndr_print::print.

参照元 ndr_print_policy_handle()ndr_print_security_ace_object_inherited_type()ndr_print_security_ace_object_type().

00199 {
00200         ndr->print(ndr, "%-25s: %s", name, GUID_string(ndr, guid));
00201 }

BOOL policy_handle_empty ( struct policy_handle h  ) 

ndr_misc.c203 行で定義されています。

参照先 GUID_all_zero()policy_handle::handle_typepolicy_handle::uuid.

00204 {
00205         return (h->handle_type == 0 && GUID_all_zero(&h->uuid));
00206 }

NTSTATUS ndr_push_policy_handle ( struct ndr_push ndr,
int  ndr_flags,
const struct policy_handle r 
)

ndr_misc.c208 行で定義されています。

参照先 policy_handle::handle_typendr_push_align()ndr_push_GUID()ndr_push_uint32()policy_handle::uuid.

00209 {
00210         if (ndr_flags & NDR_SCALARS) {
00211                 NDR_CHECK(ndr_push_align(ndr, 4));
00212                 NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->handle_type));
00213                 NDR_CHECK(ndr_push_GUID(ndr, NDR_SCALARS, &r->uuid));
00214         }
00215         if (ndr_flags & NDR_BUFFERS) {
00216         }
00217         return NT_STATUS_OK;
00218 }

NTSTATUS ndr_pull_policy_handle ( struct ndr_pull ndr,
int  ndr_flags,
struct policy_handle r 
)

ndr_misc.c220 行で定義されています。

参照先 policy_handle::handle_typendr_pull_align()ndr_pull_GUID()ndr_pull_uint32()policy_handle::uuid.

00221 {
00222         if (ndr_flags & NDR_SCALARS) {
00223                 NDR_CHECK(ndr_pull_align(ndr, 4));
00224                 NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->handle_type));
00225                 NDR_CHECK(ndr_pull_GUID(ndr, NDR_SCALARS, &r->uuid));
00226         }
00227         if (ndr_flags & NDR_BUFFERS) {
00228         }
00229         return NT_STATUS_OK;
00230 }

void ndr_print_policy_handle ( struct ndr_print ndr,
const char *  name,
const struct policy_handle r 
)

ndr_misc.c232 行で定義されています。

参照先 ndr_print::depthpolicy_handle::handle_typendr_print_GUID()ndr_print_struct()ndr_print_uint32()policy_handle::uuid.

00233 {
00234         ndr_print_struct(ndr, name, "policy_handle");
00235         ndr->depth++;
00236         ndr_print_uint32(ndr, "handle_type", r->handle_type);
00237         ndr_print_GUID(ndr, "uuid", &r->uuid);
00238         ndr->depth--;
00239 }

NTSTATUS ndr_push_server_id ( struct ndr_push ndr,
int  ndr_flags,
const struct server_id r 
)

ndr_misc.c241 行で定義されています。

参照先 server_id::idndr_push_align()ndr_push_uint32()process_id::pid.

参照元 ndr_push_notify_entry().

00242 {
00243         if (ndr_flags & NDR_SCALARS) {
00244                 NDR_CHECK(ndr_push_align(ndr, 4));
00245                 NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS,
00246                                           (uint32_t)r->id.pid));
00247         }
00248         if (ndr_flags & NDR_BUFFERS) {
00249         }
00250         return NT_STATUS_OK;
00251 }

NTSTATUS ndr_pull_server_id ( struct ndr_pull ndr,
int  ndr_flags,
struct server_id r 
)

ndr_misc.c253 行で定義されています。

参照先 server_id::idndr_pull_align()ndr_pull_uint32()process_id::pid.

参照元 ndr_pull_notify_entry().

00254 {
00255         if (ndr_flags & NDR_SCALARS) {
00256                 uint32_t pid;
00257                 NDR_CHECK(ndr_pull_align(ndr, 4));
00258                 NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &pid));
00259                 r->id.pid = (pid_t)pid;
00260         }
00261         if (ndr_flags & NDR_BUFFERS) {
00262         }
00263         return NT_STATUS_OK;
00264 }

void ndr_print_server_id ( struct ndr_print ndr,
const char *  name,
const struct server_id r 
)

ndr_misc.c266 行で定義されています。

参照先 ndr_print::depthserver_id::idndr_print_struct()ndr_print_uint32()process_id::pid.

参照元 ndr_print_notify_entry().

00267 {
00268         ndr_print_struct(ndr, name, "server_id");
00269         ndr->depth++;
00270         ndr_print_uint32(ndr, "id", (uint32_t)r->id.pid);
00271         ndr->depth--;
00272 }


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