704964a79f4dc834bf28d6f3d4bbda74a7da0a2f
[martins/samba.git] / source3 / lib / netapi / sid.c
1 /*
2  *  Unix SMB/CIFS implementation.
3  *  NetApi Support
4  *  Copyright (C) Guenther Deschner 2008
5  *
6  *  This program is free software; you can redistribute it and/or modify
7  *  it under the terms of the GNU General Public License as published by
8  *  the Free Software Foundation; either version 3 of the License, or
9  *  (at your option) any later version.
10  *
11  *  This program is distributed in the hope that it will be useful,
12  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  *  GNU General Public License for more details.
15  *
16  *  You should have received a copy of the GNU General Public License
17  *  along with this program; if not, see <http://www.gnu.org/licenses/>.
18  */
19
20 #include "includes.h"
21
22 #include "lib/netapi/netapi.h"
23 #include "../libcli/security/security.h"
24
25 /****************************************************************
26 ****************************************************************/
27
28 int ConvertSidToStringSid(const struct domsid *sid,
29                           char **sid_string)
30 {
31         char *ret;
32
33         if (!sid || !sid_string) {
34                 return false;
35         }
36
37         ret = sid_string_talloc(NULL, (const struct dom_sid *)sid);
38         if (!ret) {
39                 return false;
40         }
41
42         *sid_string = SMB_STRDUP(ret);
43
44         TALLOC_FREE(ret);
45
46         if (!*sid_string) {
47                 return false;
48         }
49
50         return true;
51 }
52
53 /****************************************************************
54 ****************************************************************/
55
56 int ConvertStringSidToSid(const char *sid_string,
57                           struct domsid **sid)
58 {
59         struct dom_sid _sid;
60
61         if (!sid_string || !sid) {
62                 return false;
63         }
64
65         if (!string_to_sid(&_sid, sid_string)) {
66                 return false;
67         }
68
69         *sid = (struct domsid *)SMB_MALLOC(sizeof(struct domsid));
70         if (!*sid) {
71                 return false;
72         }
73
74         sid_copy((struct dom_sid*)*sid, &_sid);
75
76         return true;
77 }