関数 | |
size_t | ndr_size_dom_sid (const struct dom_sid *sid) |
size_t | ndr_length_dom_sid (const struct dom_sid *sid) |
size_t | ndr_size_security_ace (const struct security_ace *ace) |
size_t | ndr_size_security_acl (const struct security_acl *acl) |
size_t | ndr_size_security_descriptor (const struct security_descriptor *sd) |
void | ndr_print_dom_sid (struct ndr_print *ndr, const char *name, const struct dom_sid *sid) |
void | ndr_print_dom_sid2 (struct ndr_print *ndr, const char *name, const struct dom_sid *sid) |
void | ndr_print_dom_sid28 (struct ndr_print *ndr, const char *name, const struct dom_sid *sid) |
char * | dom_sid_string (TALLOC_CTX *mem_ctx, const struct dom_sid *sid) |
NTSTATUS | ndr_pull_dom_sid2 (struct ndr_pull *ndr, int ndr_flags, struct dom_sid *sid) |
NTSTATUS | ndr_push_dom_sid2 (struct ndr_push *ndr, int ndr_flags, const struct dom_sid *sid) |
NTSTATUS | ndr_pull_dom_sid28 (struct ndr_pull *ndr, int ndr_flags, struct dom_sid *sid) |
NTSTATUS | ndr_push_dom_sid28 (struct ndr_push *ndr, int ndr_flags, const struct dom_sid *sid) |
size_t ndr_size_dom_sid | ( | const struct dom_sid * | sid | ) |
size_t ndr_length_dom_sid | ( | const struct dom_sid * | sid | ) |
size_t ndr_size_security_ace | ( | const struct security_ace * | ace | ) |
size_t ndr_size_security_acl | ( | const struct security_acl * | acl | ) |
size_t ndr_size_security_descriptor | ( | const struct security_descriptor * | sd | ) |
ndr_sec_helper.c の 79 行で定義されています。
参照先 dom_sid_string()・ndr_print::print.
参照元 ndr_print_dom_sid2()・ndr_print_dom_sid28()・ndr_print_security_ace()・ndr_print_security_descriptor().
00080 { 00081 ndr->print(ndr, "%-25s: %s", name, dom_sid_string(ndr, sid)); 00082 }
ndr_sec_helper.c の 84 行で定義されています。
参照先 ndr_print_dom_sid().
00085 { 00086 ndr_print_dom_sid(ndr, name, sid); 00087 }
ndr_sec_helper.c の 89 行で定義されています。
参照先 ndr_print_dom_sid().
00090 { 00091 ndr_print_dom_sid(ndr, name, sid); 00092 }
char* dom_sid_string | ( | TALLOC_CTX * | mem_ctx, | |
const struct dom_sid * | sid | |||
) |
参照先 dom_sid::id_auth・dom_sid::num_auths・dom_sid::sid_rev_num・snprintf()・dom_sid::sub_auths・talloc_strdup().
参照元 ndr_print_dom_sid().
00066 { 00067 int i, ofs, maxlen; 00068 uint32_t ia; 00069 char *ret; 00070 00071 if (!sid) { 00072 return talloc_strdup(mem_ctx, "(NULL SID)"); 00073 } 00074 00075 maxlen = sid->num_auths * 11 + 25; 00076 ret = (char *)talloc_size(mem_ctx, maxlen); 00077 if (!ret) return talloc_strdup(mem_ctx, "(SID ERR)"); 00078 00079 ia = (sid->id_auth[5]) + 00080 (sid->id_auth[4] << 8 ) + 00081 (sid->id_auth[3] << 16) + 00082 (sid->id_auth[2] << 24); 00083 00084 ofs = snprintf(ret, maxlen, "S-%u-%lu", 00085 (unsigned int)sid->sid_rev_num, (unsigned long)ia); 00086 00087 for (i = 0; i < sid->num_auths; i++) { 00088 ofs += snprintf(ret + ofs, maxlen - ofs, "-%lu", (unsigned long)sid->sub_auths[i]); 00089 } 00090 00091 return ret; 00092 }
参照先 NDR_ERR_ARRAY_SIZE・ndr_pull_dom_sid()・ndr_pull_uint32()・dom_sid::num_auths.
00098 { 00099 uint32_t num_auths; 00100 if (!(ndr_flags & NDR_SCALARS)) { 00101 return NT_STATUS_OK; 00102 } 00103 NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &num_auths)); 00104 NDR_CHECK(ndr_pull_dom_sid(ndr, ndr_flags, sid)); 00105 if (sid->num_auths != num_auths) { 00106 return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, 00107 "Bad array size %u should exceed %u", 00108 num_auths, sid->num_auths); 00109 } 00110 return NT_STATUS_OK; 00111 }
参照先 ndr_push_dom_sid()・ndr_push_uint32()・dom_sid::num_auths.
00117 { 00118 if (!(ndr_flags & NDR_SCALARS)) { 00119 return NT_STATUS_OK; 00120 } 00121 NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, sid->num_auths)); 00122 return ndr_push_dom_sid(ndr, ndr_flags, sid); 00123 }
参照先 ndr_pull::current_mem_ctx・ndr_pull::data・ndr_pull::data_size・ndr_pull::flags・ndr_pull_advance()・ndr_pull_dom_sid()・ndr_pull::offset・status.
00129 { 00130 NTSTATUS status; 00131 struct ndr_pull *subndr; 00132 00133 if (!(ndr_flags & NDR_SCALARS)) { 00134 return NT_STATUS_OK; 00135 } 00136 00137 subndr = talloc_zero(ndr, struct ndr_pull); 00138 NT_STATUS_HAVE_NO_MEMORY(subndr); 00139 subndr->flags = ndr->flags; 00140 subndr->current_mem_ctx = ndr->current_mem_ctx; 00141 00142 subndr->data = ndr->data + ndr->offset; 00143 subndr->data_size = 28; 00144 subndr->offset = 0; 00145 00146 NDR_CHECK(ndr_pull_advance(ndr, 28)); 00147 00148 status = ndr_pull_dom_sid(subndr, ndr_flags, sid); 00149 if (!NT_STATUS_IS_OK(status)) { 00150 /* handle a w2k bug which send random data in the buffer */ 00151 ZERO_STRUCTP(sid); 00152 } 00153 00154 return NT_STATUS_OK; 00155 }
参照先 NDR_ERR_RANGE・ndr_push_dom_sid()・ndr_push_zero()・dom_sid::num_auths・ndr_push::offset.
00161 { 00162 uint32_t old_offset; 00163 uint32_t padding; 00164 00165 if (!(ndr_flags & NDR_SCALARS)) { 00166 return NT_STATUS_OK; 00167 } 00168 00169 if (sid->num_auths > 5) { 00170 return ndr_push_error(ndr, NDR_ERR_RANGE, 00171 "dom_sid28 allows only upto 5 sub auth [%u]", 00172 sid->num_auths); 00173 } 00174 00175 old_offset = ndr->offset; 00176 NDR_CHECK(ndr_push_dom_sid(ndr, ndr_flags, sid)); 00177 00178 padding = 28 - (ndr->offset - old_offset); 00179 00180 if (padding > 0) { 00181 NDR_CHECK(ndr_push_zero(ndr, padding)); 00182 } 00183 00184 return NT_STATUS_OK; 00185 }