diff options
author | Gerald Carter <jerry@samba.org> | 2002-10-01 18:26:00 +0000 |
---|---|---|
committer | Gerald Carter <jerry@samba.org> | 2002-10-01 18:26:00 +0000 |
commit | f2d1f19a66ebaf9b88d23c0faa2412536cc74cda (patch) | |
tree | 781120ed548c3f38de9d40795a426de525e7865b /source3/lib/util_sid.c | |
parent | 2fb5c7c580a3fff3c7d477b65a1c4852af86433b (diff) | |
download | samba-f2d1f19a66ebaf9b88d23c0faa2412536cc74cda.tar.gz |
syncing up with HEAD. Seems to be a lot of differences creeping in
(i ignored the new SAMBA stuff, but the rest of this looks like it should
have been merged already).
(This used to be commit 3de09e5cf1f667e410ee8b9516a956860ce7290f)
Diffstat (limited to 'source3/lib/util_sid.c')
-rw-r--r-- | source3/lib/util_sid.c | 31 |
1 files changed, 27 insertions, 4 deletions
diff --git a/source3/lib/util_sid.c b/source3/lib/util_sid.c index e9635fc7f84..1439471f64b 100644 --- a/source3/lib/util_sid.c +++ b/source3/lib/util_sid.c @@ -34,6 +34,7 @@ DOM_SID global_sid_World_Domain; /* Everyone domain */ DOM_SID global_sid_World; /* Everyone */ DOM_SID global_sid_Creator_Owner_Domain; /* Creator Owner domain */ DOM_SID global_sid_NT_Authority; /* NT Authority */ +DOM_SID global_sid_System; /* System */ DOM_SID global_sid_NULL; /* NULL sid */ DOM_SID global_sid_Authenticated_Users; /* All authenticated rids */ DOM_SID global_sid_Network; /* Network rids */ @@ -58,6 +59,12 @@ NT_USER_TOKEN anonymous_token = { anon_sid_array }; +static DOM_SID system_sid_array[4]; +NT_USER_TOKEN system_token = { + 1, + system_sid_array +}; + /**************************************************************************** Lookup string names for SID types. ****************************************************************************/ @@ -101,6 +108,10 @@ const char *sid_type_lookup(uint32 sid_type) void generate_wellknown_sids(void) { + static BOOL initialised = False; + if (initialised) + return; + string_to_sid(&global_sid_Builtin, "S-1-5-32"); string_to_sid(&global_sid_Builtin_Administrators, "S-1-5-32-544"); string_to_sid(&global_sid_Builtin_Users, "S-1-5-32-545"); @@ -111,6 +122,7 @@ void generate_wellknown_sids(void) string_to_sid(&global_sid_Creator_Owner, "S-1-3-0"); string_to_sid(&global_sid_Creator_Group, "S-1-3-1"); string_to_sid(&global_sid_NT_Authority, "S-1-5"); + string_to_sid(&global_sid_System, "S-1-5-18"); string_to_sid(&global_sid_NULL, "S-1-0-0"); string_to_sid(&global_sid_Authenticated_Users, "S-1-5-11"); string_to_sid(&global_sid_Network, "S-1-5-2"); @@ -120,6 +132,17 @@ void generate_wellknown_sids(void) sid_copy( &anonymous_token.user_sids[0], &global_sid_World); sid_copy( &anonymous_token.user_sids[1], &global_sid_Network); sid_copy( &anonymous_token.user_sids[2], &global_sid_Anonymous); + + /* Create the system token. */ + sid_copy( &system_token.user_sids[0], &global_sid_System); + + initialised = True; +} + +NT_USER_TOKEN *get_system_token(void) +{ + generate_wellknown_sids(); /* The token is initialised here */ + return &system_token; } /************************************************************************** @@ -347,7 +370,7 @@ void sid_copy(DOM_SID *dst, const DOM_SID *src) /***************************************************************** Write a sid out into on-the-wire format. *****************************************************************/ -BOOL sid_linearize(char *outbuf, size_t len, DOM_SID *sid) +BOOL sid_linearize(char *outbuf, size_t len, const DOM_SID *sid) { size_t i; @@ -366,7 +389,7 @@ BOOL sid_linearize(char *outbuf, size_t len, DOM_SID *sid) /***************************************************************** parse a on-the-wire SID to a DOM_SID *****************************************************************/ -BOOL sid_parse(char *inbuf, size_t len, DOM_SID *sid) +BOOL sid_parse(const char *inbuf, size_t len, DOM_SID *sid) { int i; if (len < 8) return False; @@ -482,7 +505,7 @@ BOOL sid_check_is_in_builtin(const DOM_SID *sid) Calculates size of a sid. *****************************************************************/ -size_t sid_size(DOM_SID *sid) +size_t sid_size(const DOM_SID *sid) { if (sid == NULL) return 0; @@ -518,7 +541,7 @@ BOOL non_mappable_sid(DOM_SID *sid) return the binary string representation of a DOM_SID caller must free */ -char *sid_binstring(DOM_SID *sid) +char *sid_binstring(const DOM_SID *sid) { char *buf, *s; int len = sid_size(sid); |