From 231a939067eff6cbe688598ee20e8c3dd7dded4a Mon Sep 17 00:00:00 2001 From: Jarkko Sakkinen Date: Sat, 10 Dec 2011 23:33:28 +0200 Subject: [PATCH] Added smack_set_self_label(). --- libsmack/libsmack.c | 17 +++++++++++++++++ libsmack/sys/smack.h | 7 +++++++ 2 files changed, 24 insertions(+) diff --git a/libsmack/libsmack.c b/libsmack/libsmack.c index 1b96524..60ace08 100644 --- a/libsmack/libsmack.c +++ b/libsmack/libsmack.c @@ -295,6 +295,23 @@ int smack_new_label_from_socket(int fd, char **label) return 0; } +int smack_set_self_label(char *label) +{ + int fd; + + fd = open(SELF_LABEL_FILE, O_WRONLY); + if (fd < 0) + return -1; + + if (write(fd, label, strlen(label)) < 0) { + close(fd); + return -1; + } + + close(fd); + return 0; +} + static int accesses_apply(struct smack_accesses *handle, int clear) { char buf[LOAD_LEN + 1]; diff --git a/libsmack/sys/smack.h b/libsmack/sys/smack.h index d9e1ebf..707edb1 100644 --- a/libsmack/sys/smack.h +++ b/libsmack/sys/smack.h @@ -130,6 +130,13 @@ int smack_new_label_from_self(char **label); */ int smack_new_label_from_socket(int fd, char **label); +/*! + * Set Smack label for callers process. Requires CAP_MAC_ADMIN. + * + * @param label new label for callers process + */ +int smack_set_self_label(char *label); + #ifdef __cplusplus } #endif -- 2.7.4