smack: support smack access change-rule
authorWaLyong Cho <walyong.cho@samsung.com>
Wed, 10 Jun 2015 02:33:00 +0000 (11:33 +0900)
committerŁukasz Stelmach <l.stelmach@samsung.com>
Fri, 24 Feb 2017 15:08:14 +0000 (16:08 +0100)
commit32c66656d0413fdb7dfb9fce07a158498c110475
tree6f1d14ad1da4fa803de4c70627b1cdb85c1ebe55
parent0f2ef75554bf3426e253f9bfef0d8b1f05851311
smack: support smack access change-rule

Smack is also able to have modification rules of existing rules. In
this case, the rule has additional argument to modify previous
rule. /sys/fs/smackfs/load2 node can only take three arguments:
subject object access. So if modification rules are written to
/sys/fs/smackfs/load2, EINVAL error is happen. Those modification
rules have to be written to /sys/fs/smackfs/change-rule.
To distinguish access with operation of cipso2, split write_rules()
for each operation. And, in write access rules, parse the rule and if
the rule has four argument then write into
/sys/fs/smackfs/change-rule.
https://lwn.net/Articles/532340/

fwrite() or fputs() are fancy functions to write byte stream such like
regular file. But special files on linux such like proc, sysfs are not
stream of bytes. Those special files on linux have to be written with
specific size.
By this reason, in some of many case, fputs() was failed to write
buffer to smack load2 node.
The write operation for the smack nodes should be performed with
write().

Origin: https://github.com/systemd/systemd/commit/6656aefb

Change-Id: Ied3eb195b86514525cb1c6904a7a7b66d1bccb52
Signed-off-by: Sangjung Woo <sangjung.woo@samsung.com>
src/core/smack-setup.c