lib/secacl.c

ソースコードを見る。

関数

SEC_ACLmake_sec_acl (TALLOC_CTX *ctx, uint16 revision, int num_aces, SEC_ACE *ace_list)
SEC_ACLdup_sec_acl (TALLOC_CTX *ctx, SEC_ACL *src)
BOOL sec_acl_equal (SEC_ACL *s1, SEC_ACL *s2)


関数

SEC_ACL* make_sec_acl ( TALLOC_CTX ctx,
uint16  revision,
int  num_aces,
SEC_ACE ace_list 
)

secacl.c30 行で定義されています。

参照先 security_acl_info::acessecurity_acl_info::num_acessecurity_acl_info::revisionsecurity_ace_info::sizesecurity_acl_info::size.

参照元 add_ace()afs_to_nt_acl()construct_default_printer_sdb()construct_registry_sd()construct_scm_sd()construct_service_sd()dup_sec_acl()get_nt_acl()get_share_security_default()lsa_get_generic_sd()make_default_reg_sd()make_samr_object_sd()parse_acl_string()parse_usershare_acl()samr_make_sam_obj_sd()sec_desc_add_sid()sec_desc_del_sid()smb_get_nt_acl_nfs4().

00031 {
00032         SEC_ACL *dst;
00033         int i;
00034 
00035         if((dst = TALLOC_ZERO_P(ctx,SEC_ACL)) == NULL)
00036                 return NULL;
00037 
00038         dst->revision = revision;
00039         dst->num_aces = num_aces;
00040         dst->size = SEC_ACL_HEADER_SIZE;
00041 
00042         /* Now we need to return a non-NULL address for the ace list even
00043            if the number of aces required is zero.  This is because there
00044            is a distinct difference between a NULL ace and an ace with zero
00045            entries in it.  This is achieved by checking that num_aces is a
00046            positive number. */
00047 
00048         if ((num_aces) && 
00049             ((dst->aces = TALLOC_ARRAY(ctx, SEC_ACE, num_aces)) 
00050              == NULL)) {
00051                 return NULL;
00052         }
00053         
00054         for (i = 0; i < num_aces; i++) {
00055                 dst->aces[i] = ace_list[i]; /* Structure copy. */
00056                 dst->size += ace_list[i].size;
00057         }
00058 
00059         return dst;
00060 }

SEC_ACL* dup_sec_acl ( TALLOC_CTX ctx,
SEC_ACL src 
)

secacl.c66 行で定義されています。

参照先 security_acl_info::acesmake_sec_acl()security_acl_info::num_acessecurity_acl_info::revision.

参照元 make_sec_desc().

00067 {
00068         if(src == NULL)
00069                 return NULL;
00070 
00071         return make_sec_acl(ctx, src->revision, src->num_aces, src->aces);
00072 }

BOOL sec_acl_equal ( SEC_ACL s1,
SEC_ACL s2 
)

secacl.c78 行で定義されています。

参照先 security_acl_info::acessecurity_acl_info::num_acessecurity_acl_info::revisionsec_ace_equal().

参照元 sec_desc_equal().

00079 {
00080         unsigned int i, j;
00081 
00082         /* Trivial cases */
00083 
00084         if (!s1 && !s2) return True;
00085         if (!s1 || !s2) return False;
00086 
00087         /* Check top level stuff */
00088 
00089         if (s1->revision != s2->revision) {
00090                 DEBUG(10, ("sec_acl_equal(): revision differs (%d != %d)\n",
00091                            s1->revision, s2->revision));
00092                 return False;
00093         }
00094 
00095         if (s1->num_aces != s2->num_aces) {
00096                 DEBUG(10, ("sec_acl_equal(): num_aces differs (%d != %d)\n",
00097                            s1->revision, s2->revision));
00098                 return False;
00099         }
00100 
00101         /* The ACEs could be in any order so check each ACE in s1 against 
00102            each ACE in s2. */
00103 
00104         for (i = 0; i < s1->num_aces; i++) {
00105                 BOOL found = False;
00106 
00107                 for (j = 0; j < s2->num_aces; j++) {
00108                         if (sec_ace_equal(&s1->aces[i], &s2->aces[j])) {
00109                                 found = True;
00110                                 break;
00111                         }
00112                 }
00113 
00114                 if (!found) return False;
00115         }
00116 
00117         return True;
00118 }


Sambaに対してSat Aug 29 21:23:37 2009に生成されました。  doxygen 1.4.7