linux/security/apparmor/include/apparmorfs.h
<<
>>
Prefs
   1/*
   2 * AppArmor security module
   3 *
   4 * This file contains AppArmor filesystem definitions.
   5 *
   6 * Copyright (C) 1998-2008 Novell/SUSE
   7 * Copyright 2009-2010 Canonical Ltd.
   8 *
   9 * This program is free software; you can redistribute it and/or
  10 * modify it under the terms of the GNU General Public License as
  11 * published by the Free Software Foundation, version 2 of the
  12 * License.
  13 */
  14
  15#ifndef __AA_APPARMORFS_H
  16#define __AA_APPARMORFS_H
  17
  18extern struct path aa_null;
  19
  20enum aa_sfs_type {
  21        AA_SFS_TYPE_BOOLEAN,
  22        AA_SFS_TYPE_STRING,
  23        AA_SFS_TYPE_U64,
  24        AA_SFS_TYPE_FOPS,
  25        AA_SFS_TYPE_DIR,
  26};
  27
  28struct aa_sfs_entry;
  29
  30struct aa_sfs_entry {
  31        const char *name;
  32        struct dentry *dentry;
  33        umode_t mode;
  34        enum aa_sfs_type v_type;
  35        union {
  36                bool boolean;
  37                char *string;
  38                unsigned long u64;
  39                struct aa_sfs_entry *files;
  40        } v;
  41        const struct file_operations *file_ops;
  42};
  43
  44extern const struct file_operations aa_sfs_seq_file_ops;
  45
  46#define AA_SFS_FILE_BOOLEAN(_name, _value) \
  47        { .name = (_name), .mode = 0444, \
  48          .v_type = AA_SFS_TYPE_BOOLEAN, .v.boolean = (_value), \
  49          .file_ops = &aa_sfs_seq_file_ops }
  50#define AA_SFS_FILE_STRING(_name, _value) \
  51        { .name = (_name), .mode = 0444, \
  52          .v_type = AA_SFS_TYPE_STRING, .v.string = (_value), \
  53          .file_ops = &aa_sfs_seq_file_ops }
  54#define AA_SFS_FILE_U64(_name, _value) \
  55        { .name = (_name), .mode = 0444, \
  56          .v_type = AA_SFS_TYPE_U64, .v.u64 = (_value), \
  57          .file_ops = &aa_sfs_seq_file_ops }
  58#define AA_SFS_FILE_FOPS(_name, _mode, _fops) \
  59        { .name = (_name), .v_type = AA_SFS_TYPE_FOPS, \
  60          .mode = (_mode), .file_ops = (_fops) }
  61#define AA_SFS_DIR(_name, _value) \
  62        { .name = (_name), .v_type = AA_SFS_TYPE_DIR, .v.files = (_value) }
  63
  64extern void __init aa_destroy_aafs(void);
  65
  66struct aa_profile;
  67struct aa_ns;
  68
  69enum aafs_ns_type {
  70        AAFS_NS_DIR,
  71        AAFS_NS_PROFS,
  72        AAFS_NS_NS,
  73        AAFS_NS_RAW_DATA,
  74        AAFS_NS_LOAD,
  75        AAFS_NS_REPLACE,
  76        AAFS_NS_REMOVE,
  77        AAFS_NS_REVISION,
  78        AAFS_NS_COUNT,
  79        AAFS_NS_MAX_COUNT,
  80        AAFS_NS_SIZE,
  81        AAFS_NS_MAX_SIZE,
  82        AAFS_NS_OWNER,
  83        AAFS_NS_SIZEOF,
  84};
  85
  86enum aafs_prof_type {
  87        AAFS_PROF_DIR,
  88        AAFS_PROF_PROFS,
  89        AAFS_PROF_NAME,
  90        AAFS_PROF_MODE,
  91        AAFS_PROF_ATTACH,
  92        AAFS_PROF_HASH,
  93        AAFS_PROF_RAW_DATA,
  94        AAFS_PROF_RAW_HASH,
  95        AAFS_PROF_RAW_ABI,
  96        AAFS_PROF_SIZEOF,
  97};
  98
  99#define ns_dir(X) ((X)->dents[AAFS_NS_DIR])
 100#define ns_subns_dir(X) ((X)->dents[AAFS_NS_NS])
 101#define ns_subprofs_dir(X) ((X)->dents[AAFS_NS_PROFS])
 102#define ns_subdata_dir(X) ((X)->dents[AAFS_NS_RAW_DATA])
 103#define ns_subload(X) ((X)->dents[AAFS_NS_LOAD])
 104#define ns_subreplace(X) ((X)->dents[AAFS_NS_REPLACE])
 105#define ns_subremove(X) ((X)->dents[AAFS_NS_REMOVE])
 106#define ns_subrevision(X) ((X)->dents[AAFS_NS_REVISION])
 107
 108#define prof_dir(X) ((X)->dents[AAFS_PROF_DIR])
 109#define prof_child_dir(X) ((X)->dents[AAFS_PROF_PROFS])
 110
 111void __aa_bump_ns_revision(struct aa_ns *ns);
 112void __aafs_profile_rmdir(struct aa_profile *profile);
 113void __aafs_profile_migrate_dents(struct aa_profile *old,
 114                                   struct aa_profile *new);
 115int __aafs_profile_mkdir(struct aa_profile *profile, struct dentry *parent);
 116void __aafs_ns_rmdir(struct aa_ns *ns);
 117int __aafs_ns_mkdir(struct aa_ns *ns, struct dentry *parent, const char *name,
 118                     struct dentry *dent);
 119
 120struct aa_loaddata;
 121void __aa_fs_remove_rawdata(struct aa_loaddata *rawdata);
 122int __aa_fs_create_rawdata(struct aa_ns *ns, struct aa_loaddata *rawdata);
 123
 124#endif /* __AA_APPARMORFS_H */
 125