|
@@ -9,6 +9,7 @@
|
|
|
#include <linux/smp_lock.h>
|
|
|
#include <linux/ext3_jbd.h>
|
|
|
#include <linux/ext3_fs.h>
|
|
|
+#include <linux/security.h>
|
|
|
#include "xattr.h"
|
|
|
|
|
|
static size_t
|
|
@@ -47,6 +48,27 @@ ext3_xattr_security_set(struct inode *inode, const char *name,
|
|
|
value, size, flags);
|
|
|
}
|
|
|
|
|
|
+int
|
|
|
+ext3_init_security(handle_t *handle, struct inode *inode, struct inode *dir)
|
|
|
+{
|
|
|
+ int err;
|
|
|
+ size_t len;
|
|
|
+ void *value;
|
|
|
+ char *name;
|
|
|
+
|
|
|
+ err = security_inode_init_security(inode, dir, &name, &value, &len);
|
|
|
+ if (err) {
|
|
|
+ if (err == -EOPNOTSUPP)
|
|
|
+ return 0;
|
|
|
+ return err;
|
|
|
+ }
|
|
|
+ err = ext3_xattr_set_handle(handle, inode, EXT3_XATTR_INDEX_SECURITY,
|
|
|
+ name, value, len, 0);
|
|
|
+ kfree(name);
|
|
|
+ kfree(value);
|
|
|
+ return err;
|
|
|
+}
|
|
|
+
|
|
|
struct xattr_handler ext3_xattr_security_handler = {
|
|
|
.prefix = XATTR_SECURITY_PREFIX,
|
|
|
.list = ext3_xattr_security_list,
|