s3:util add sid_check_is_wellknown_builtin()
authorChristian Ambach <ambi@samba.org>
Tue, 17 Jan 2012 12:59:56 +0000 (13:59 +0100)
committerChristian Ambach <ambi@samba.org>
Tue, 1 May 2012 07:32:11 +0000 (09:32 +0200)
source3/include/proto.h
source3/lib/util_builtin.c

index c2c74fae81c12c113f71cd5560bb82d0bc588971..686b230e59b7ab24aeb3b7bae608a3b719463c6b 100644 (file)
@@ -559,6 +559,7 @@ bool lookup_builtin_name(const char *name, uint32 *rid);
 const char *builtin_domain_name(void);
 bool sid_check_is_builtin(const struct dom_sid *sid);
 bool sid_check_is_in_builtin(const struct dom_sid *sid);
+bool sid_check_is_wellknown_builtin(const struct dom_sid *sid);
 
 /* The following definitions come from lib/util_file.c  */
 
index 3aae509f737fa2e780547e79d2b69decde50f423..c87c84927fc35e7437a7e5f8d1bb7c5130d256c9 100644 (file)
@@ -129,3 +129,30 @@ bool sid_check_is_in_builtin(const struct dom_sid *sid)
 
        return sid_check_is_builtin(&dom_sid);
 }
+
+/********************************************************************
+ Check if the SID is one of the well-known builtin SIDs (S-1-5-32-x)
+*********************************************************************/
+
+bool sid_check_is_wellknown_builtin(const struct dom_sid *sid)
+{
+       struct dom_sid dom_sid;
+       const struct rid_name_map *aliases = builtin_aliases;
+       uint32_t rid;
+
+       sid_copy(&dom_sid, sid);
+       sid_split_rid(&dom_sid, &rid);
+
+       if (!sid_check_is_builtin(&dom_sid)) {
+               return false;
+       }
+
+       while (aliases->name != NULL) {
+               if (aliases->rid == rid) {
+                       return True;
+               }
+               aliases++;
+       }
+
+       return False;
+}