Lines Matching defs:sid

47 smb_sid_isvalid(smb_sid_t *sid)
49 if (sid == NULL)
52 return ((sid->sid_revision == NT_SID_REVISION) &&
53 (sid->sid_subauthcnt < NT_SID_SUBAUTH_MAX));
59 * Returns the number of bytes required to hold the sid.
62 smb_sid_len(smb_sid_t *sid)
64 if (sid == NULL)
68 + (sid->sid_subauthcnt * sizeof (uint32_t)));
74 * Make a duplicate of the specified sid. The memory for the new sid
76 * A pointer to the new sid is returned.
79 smb_sid_dup(smb_sid_t *sid)
84 if (sid == NULL)
87 size = smb_sid_len(sid);
91 bcopy(sid, new_sid, size);
99 * Make a full sid from a domain sid and a relative id (rid).
100 * The memory for the result sid should be freed by calling
101 * smb_sid_free(). A pointer to the new sid is returned.
106 smb_sid_t *sid;
113 if ((sid = smb_sid_alloc(size + sizeof (rid))) == NULL)
116 bcopy(domain_sid, sid, size);
118 sid->sid_subauth[domain_sid->sid_subauthcnt] = rid;
119 ++sid->sid_subauthcnt;
121 return (sid);
132 smb_sid_getrid(smb_sid_t *sid, uint32_t *rid)
134 if (!smb_sid_isvalid(sid) || (rid == NULL) ||
135 (sid->sid_subauthcnt == 0))
138 *rid = sid->sid_subauth[sid->sid_subauthcnt - 1];
145 * Take a full sid and split it into a domain sid and a relative id (rid).
151 smb_sid_split(smb_sid_t *sid, uint32_t *rid)
156 if (!smb_sid_isvalid(sid) || (sid->sid_subauthcnt == 0))
163 size = smb_sid_len(sid) - sizeof (uint32_t);
167 bcopy(sid, domsid, size);
168 domsid->sid_subauthcnt = sid->sid_subauthcnt - 1;
171 *rid = sid->sid_subauth[sid->sid_subauthcnt - 1];
179 * Takes a full sid in string form and split it into a domain sid and a
182 * IMPORTANT: The original sid is modified in place. This function assumes
245 smb_sid_indomain(smb_sid_t *domain_sid, smb_sid_t *sid)
249 if (sid == NULL || domain_sid == NULL)
252 if (domain_sid->sid_revision != sid->sid_revision ||
253 sid->sid_subauthcnt < domain_sid->sid_subauthcnt)
257 if (domain_sid->sid_subauth[i] != sid->sid_subauth[i])
260 if (bcmp(&domain_sid->sid_authority, &sid->sid_authority,
271 * binary sid.
274 smb_sid_tostr(const smb_sid_t *sid, char *strsid)
279 if (sid == NULL || strsid == NULL)
282 (void) sprintf(p, "S-%d-", sid->sid_revision);
287 if (sid->sid_authority[i] != 0 || i == NT_SID_AUTH_MAX - 1) {
288 (void) sprintf(p, "%d", sid->sid_authority[i]);
294 for (i = 0; i < sid->sid_subauthcnt && i < NT_SID_SUBAUTH_MAX; ++i) {
295 (void) sprintf(p, "-%u", sid->sid_subauth[i]);
319 smb_sid_t *sid;
333 sid = kmem_zalloc(size, KM_SLEEP);
335 sid->sid_revision = NT_SID_REVISION;
338 sid->sid_authority[5] = (uint8_t)sua;
345 kmem_free(sid, size);
351 sid->sid_subauth[i] = (uint32_t)sua;
357 sid->sid_subauthcnt = i;
358 retsid = smb_sid_dup(sid);
359 kmem_free(sid, size);
367 smb_sid_t *sid;
380 if ((sid = malloc(size)) == NULL)
383 bzero(sid, size);
384 sid->sid_revision = NT_SID_REVISION;
385 sid->sid_authority[5] = atoi(&sidstr[4]);
392 free(sid);
396 sid->sid_subauth[i] = strtoul(p, NULL, 10);
402 sid->sid_subauthcnt = i;
403 return (sid);
440 smb_sid_t *sid;
442 sid = kmem_alloc(size, KM_SLEEP);
444 sid = malloc(size);
446 return (sid);
450 smb_sid_free(smb_sid_t *sid)
453 if (sid == NULL)
456 kmem_free(sid, smb_sid_len(sid));
458 free(sid);