diff options
Diffstat (limited to 'xlators/system/posix-acl/src/posix-acl-xattr.c')
| -rw-r--r-- | xlators/system/posix-acl/src/posix-acl-xattr.c | 229 | 
1 files changed, 111 insertions, 118 deletions
diff --git a/xlators/system/posix-acl/src/posix-acl-xattr.c b/xlators/system/posix-acl/src/posix-acl-xattr.c index 3c8826568ca..73f22dabc3d 100644 --- a/xlators/system/posix-acl/src/posix-acl-xattr.c +++ b/xlators/system/posix-acl/src/posix-acl-xattr.c @@ -14,167 +14,160 @@  #include "posix-acl.h"  #include "posix-acl-xattr.h" -  int -posix_ace_cmp (const void *val1, const void *val2) +posix_ace_cmp(const void *val1, const void *val2)  { -        const struct posix_ace *ace1 = NULL; -        const struct posix_ace *ace2 = NULL; -        int                     ret = 0; +    const struct posix_ace *ace1 = NULL; +    const struct posix_ace *ace2 = NULL; +    int ret = 0; -        ace1 = val1; -        ace2 = val2; +    ace1 = val1; +    ace2 = val2; -        ret = (ace1->tag - ace2->tag); -        if (!ret) -                ret = (ace1->id - ace2->id); +    ret = (ace1->tag - ace2->tag); +    if (!ret) +        ret = (ace1->id - ace2->id); -        return ret; +    return ret;  } -  void -posix_acl_normalize (xlator_t *this, struct posix_acl *acl) +posix_acl_normalize(xlator_t *this, struct posix_acl *acl)  { -        qsort (acl->entries, acl->count, sizeof (struct posix_ace *), -               posix_ace_cmp); +    qsort(acl->entries, acl->count, sizeof(struct posix_ace *), posix_ace_cmp);  } -  struct posix_acl * -posix_acl_from_xattr (xlator_t *this, const char *xattr_buf, int xattr_size) +posix_acl_from_xattr(xlator_t *this, const char *xattr_buf, int xattr_size)  { -        struct posix_acl_xattr_header   *header = NULL; -        struct posix_acl_xattr_entry    *entry = NULL; -        struct posix_acl                *acl = NULL; -        struct posix_ace                *ace = NULL; -        int                              size = 0; -        int                              count = 0; -        int                              i = 0; +    struct posix_acl_xattr_header *header = NULL; +    struct posix_acl_xattr_entry *entry = NULL; +    struct posix_acl *acl = NULL; +    struct posix_ace *ace = NULL; +    int size = 0; +    int count = 0; +    int i = 0; -        size = xattr_size; +    size = xattr_size; -        if (size < sizeof (*header)) -                return NULL; - -        size -= sizeof (*header); +    if (size < sizeof(*header)) +        return NULL; -        if (size % sizeof (*entry)) -                return NULL; +    size -= sizeof(*header); -        count = size / sizeof (*entry); +    if (size % sizeof(*entry)) +        return NULL; -        header = (struct posix_acl_xattr_header *) (xattr_buf); -        entry  = (struct posix_acl_xattr_entry *) (header + 1); +    count = size / sizeof(*entry); -        if (header->version != htole32 (POSIX_ACL_XATTR_VERSION)) -                return NULL; +    header = (struct posix_acl_xattr_header *)(xattr_buf); +    entry = (struct posix_acl_xattr_entry *)(header + 1); -        acl = posix_acl_new (this, count); -        if (!acl) -                return NULL; +    if (header->version != htole32(POSIX_ACL_XATTR_VERSION)) +        return NULL; -        ace = acl->entries; +    acl = posix_acl_new(this, count); +    if (!acl) +        return NULL; -        for (i = 0; i < count; i++) { -                ace->tag  = letoh16 (entry->tag); -                ace->perm = letoh16 (entry->perm); +    ace = acl->entries; -                switch (ace->tag) { -                case POSIX_ACL_USER_OBJ: -                case POSIX_ACL_MASK: -                case POSIX_ACL_OTHER: -                        ace->id = POSIX_ACL_UNDEFINED_ID; -                        break; +    for (i = 0; i < count; i++) { +        ace->tag = letoh16(entry->tag); +        ace->perm = letoh16(entry->perm); -                case POSIX_ACL_GROUP: -                case POSIX_ACL_USER: -                case POSIX_ACL_GROUP_OBJ: -                        ace->id = letoh32 (entry->id); -                        break; +        switch (ace->tag) { +            case POSIX_ACL_USER_OBJ: +            case POSIX_ACL_MASK: +            case POSIX_ACL_OTHER: +                ace->id = POSIX_ACL_UNDEFINED_ID; +                break; -                default: -                        goto err; -                } +            case POSIX_ACL_GROUP: +            case POSIX_ACL_USER: +            case POSIX_ACL_GROUP_OBJ: +                ace->id = letoh32(entry->id); +                break; -                ace++; -                entry++; +            default: +                goto err;          } -        posix_acl_normalize (this, acl); +        ace++; +        entry++; +    } + +    posix_acl_normalize(this, acl); -        return acl; +    return acl;  err: -        posix_acl_destroy (this, acl); -        return NULL; +    posix_acl_destroy(this, acl); +    return NULL;  } -  int -posix_acl_to_xattr (xlator_t *this, struct posix_acl *acl, char *xattr_buf, -                    int xattr_size) +posix_acl_to_xattr(xlator_t *this, struct posix_acl *acl, char *xattr_buf, +                   int xattr_size)  { -        int                             size = 0; -        struct posix_acl_xattr_header  *header = NULL; -        struct posix_acl_xattr_entry   *entry = NULL; -        struct posix_ace               *ace = NULL; -        int                             i = 0; - -        size = sizeof (*header) + (acl->count * sizeof (*entry)); - -        if (xattr_size < size) -                return size; - -        header = (struct posix_acl_xattr_header *) (xattr_buf); -        entry  = (struct posix_acl_xattr_entry *) (header + 1); -        ace = acl->entries; - -        header->version = htole32 (POSIX_ACL_XATTR_VERSION); - -        for (i = 0; i < acl->count; i++) { -                entry->tag   = htole16 (ace->tag); -                entry->perm  = htole16 (ace->perm); - -                switch (ace->tag) { -                case POSIX_ACL_USER: -                case POSIX_ACL_GROUP: -                        entry->id  = htole32 (ace->id); -                        break; -                default: -                        entry->id = POSIX_ACL_UNDEFINED_ID; -                        break; -                } - -                ace++; -                entry++; +    int size = 0; +    struct posix_acl_xattr_header *header = NULL; +    struct posix_acl_xattr_entry *entry = NULL; +    struct posix_ace *ace = NULL; +    int i = 0; + +    size = sizeof(*header) + (acl->count * sizeof(*entry)); + +    if (xattr_size < size) +        return size; + +    header = (struct posix_acl_xattr_header *)(xattr_buf); +    entry = (struct posix_acl_xattr_entry *)(header + 1); +    ace = acl->entries; + +    header->version = htole32(POSIX_ACL_XATTR_VERSION); + +    for (i = 0; i < acl->count; i++) { +        entry->tag = htole16(ace->tag); +        entry->perm = htole16(ace->perm); + +        switch (ace->tag) { +            case POSIX_ACL_USER: +            case POSIX_ACL_GROUP: +                entry->id = htole32(ace->id); +                break; +            default: +                entry->id = POSIX_ACL_UNDEFINED_ID; +                break;          } -        return 0; -} +        ace++; +        entry++; +    } +    return 0; +}  int -posix_acl_matches_xattr (xlator_t *this, struct posix_acl *acl, const char *buf, -                         int size) +posix_acl_matches_xattr(xlator_t *this, struct posix_acl *acl, const char *buf, +                        int size)  { -        struct posix_acl  *acl2 = NULL; -        int                ret = 1; +    struct posix_acl *acl2 = NULL; +    int ret = 1; -        acl2 = posix_acl_from_xattr (this, buf, size); -        if (!acl2) -                return 0; +    acl2 = posix_acl_from_xattr(this, buf, size); +    if (!acl2) +        return 0; -        if (acl->count != acl2->count) { -                ret = 0; -                goto out; -        } +    if (acl->count != acl2->count) { +        ret = 0; +        goto out; +    } -        if (memcmp (acl->entries, acl2->entries, -                    (acl->count * sizeof (struct posix_ace)))) -                ret = 0; +    if (memcmp(acl->entries, acl2->entries, +               (acl->count * sizeof(struct posix_ace)))) +        ret = 0;  out: -        posix_acl_destroy (this, acl2); +    posix_acl_destroy(this, acl2); -        return ret; +    return ret;  } -  | 
