2 Unix SMB/CIFS implementation.
4 routines to manipulate a "struct dom_sid"
6 Copyright (C) Andrew Tridgell 2004
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.
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.
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.
26 convert a string to a dom_sid, returning a talloc'd dom_sid
28 struct dom_sid *dom_sid_parse_talloc(TALLOC_CTX *mem_ctx, const char *sidstr)
31 unsigned int rev, ia, num_sub_auths, i;
34 if (strncasecmp(sidstr, "S-", 2)) {
40 rev = strtol(sidstr, &p, 10);
46 ia = strtol(sidstr, &p, 10);
53 for (i=0;sidstr[i];i++) {
54 if (sidstr[i] == '-') num_sub_auths++;
57 ret = talloc_p(mem_ctx, struct dom_sid);
62 ret->sub_auths = talloc_array_p(mem_ctx, uint32, num_sub_auths);
63 if (!ret->sub_auths) {
67 ret->sid_rev_num = rev;
71 ret->id_auth[2] = ia >> 24;
72 ret->id_auth[3] = ia >> 16;
73 ret->id_auth[4] = ia >> 8;
75 ret->num_auths = num_sub_auths;
77 for (i=0;i<num_sub_auths;i++) {
78 ret->sub_auths[i] = strtol(sidstr, &p, 10);
82 if (*p != '-' && i < num_sub_auths-1) {