[v5 2/4] server: add a helper function for querying token owner

Jonathan Doron jond at wizery.com
Thu Sep 21 05:04:41 CDT 2017


Signed-off-by: Jonathan Doron <jond at wizery.com>
---
 server/object.c   |  2 +-
 server/security.h |  1 +
 server/token.c    | 21 ++++++++++++---------
 3 files changed, 14 insertions(+), 10 deletions(-)

diff --git a/server/object.c b/server/object.c
index 4455718..f2487f9 100644
--- a/server/object.c
+++ b/server/object.c
@@ -561,7 +561,7 @@ int set_sd_defaults_from_token( struct object *obj, const struct security_descri
     }
     else if (token)
     {
-        owner = token_get_user( token );
+        owner = token_get_owner( token );
         new_sd.owner_len = security_sid_len( owner );
     }
     else new_sd.owner_len = 0;
diff --git a/server/security.h b/server/security.h
index 873bbc6..6bae283 100644
--- a/server/security.h
+++ b/server/security.h
@@ -62,6 +62,7 @@ extern int token_check_privileges( struct token *token, int all_required,
 extern const ACL *token_get_default_dacl( struct token *token );
 extern const SID *token_get_user( struct token *token );
 extern const SID *token_get_primary_group( struct token *token );
+extern const SID *token_get_owner( struct token *token );
 extern int token_sid_present( struct token *token, const SID *sid, int deny);
 
 static inline const ACE_HEADER *ace_next( const ACE_HEADER *ace )
diff --git a/server/token.c b/server/token.c
index 532d7b7..80eba24 100644
--- a/server/token.c
+++ b/server/token.c
@@ -1146,6 +1146,17 @@ const SID *token_get_primary_group( struct token *token )
     return token->primary_group;
 }
 
+const SID *token_get_owner( struct token *token )
+{
+    struct group *group;
+    LIST_FOR_EACH_ENTRY( group, &token->groups, struct group, entry )
+    {
+        if (group->owner)
+            return &group->sid;
+    }
+    return NULL;
+}
+
 int check_object_access(struct object *obj, unsigned int *access)
 {
     GENERIC_MAPPING mapping;
@@ -1425,15 +1436,7 @@ DECL_HANDLER(get_token_sid)
             break;
         case TokenOwner:
         {
-            struct group *group;
-            LIST_FOR_EACH_ENTRY( group, &token->groups, struct group, entry )
-            {
-                if (group->owner)
-                {
-                    sid = &group->sid;
-                    break;
-                }
-            }
+            sid = token_get_owner(token);
             break;
         }
         default:
-- 
2.9.4




More information about the wine-patches mailing list