diff options
author | ailin-nemui <ailin-nemui@users.noreply.github.com> | 2017-09-10 19:43:59 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-09-10 19:43:59 +0200 |
commit | 24ad80177b10093544ec07a5d6b3ed4b1bfc6fb8 (patch) | |
tree | da69ca9de40e7cc067f9ff372687d3d59ab22601 /src/fe-common/core | |
parent | be70fa5eb750ed337a55463c68d5a51b47d1efcd (diff) | |
parent | b529e1a9df134bbc5618752abcf19af0110b6868 (diff) | |
download | irssi-24ad80177b10093544ec07a5d6b3ed4b1bfc6fb8.zip |
Merge pull request #735 from trasz/capsicum
Add Capsicum support
Diffstat (limited to 'src/fe-common/core')
-rw-r--r-- | src/fe-common/core/Makefile.am | 6 | ||||
-rw-r--r-- | src/fe-common/core/fe-capsicum.c | 63 | ||||
-rw-r--r-- | src/fe-common/core/fe-capsicum.h | 7 | ||||
-rw-r--r-- | src/fe-common/core/fe-common-core.c | 9 | ||||
-rw-r--r-- | src/fe-common/core/fe-core-commands.c | 14 | ||||
-rw-r--r-- | src/fe-common/core/fe-log.c | 7 | ||||
-rw-r--r-- | src/fe-common/core/module-formats.c | 3 | ||||
-rw-r--r-- | src/fe-common/core/module-formats.h | 3 |
8 files changed, 112 insertions, 0 deletions
diff --git a/src/fe-common/core/Makefile.am b/src/fe-common/core/Makefile.am index 6efff411..29cc941a 100644 --- a/src/fe-common/core/Makefile.am +++ b/src/fe-common/core/Makefile.am @@ -38,11 +38,17 @@ libfe_common_core_a_SOURCES = \ windows-layout.c \ fe-windows.c +if HAVE_CAPSICUM +libfe_common_core_a_SOURCES += \ + fe-capsicum.c +endif + pkginc_fe_common_coredir=$(pkgincludedir)/src/fe-common/core pkginc_fe_common_core_HEADERS = \ command-history.h \ chat-completion.h \ completion.h \ + fe-capsicum.h \ fe-channels.h \ fe-common-core.h \ fe-core-commands.h \ diff --git a/src/fe-common/core/fe-capsicum.c b/src/fe-common/core/fe-capsicum.c new file mode 100644 index 00000000..54a43d27 --- /dev/null +++ b/src/fe-common/core/fe-capsicum.c @@ -0,0 +1,63 @@ +/* + fe-capsicum.c : irssi + + Copyright (C) 2017 Edward Tomasz Napierala <trasz@FreeBSD.org> + + This software was developed by SRI International and the University of + Cambridge Computer Laboratory under DARPA/AFRL contract FA8750-10-C-0237 + ("CTSRD"), as part of the DARPA CRASH research programme. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#include "module.h" +#include "fe-capsicum.h" +#include "levels.h" +#include "module-formats.h" +#include "printtext.h" +#include "signals.h" + +static void capability_mode_enabled(void) +{ + + printformat(NULL, NULL, MSGLEVEL_CLIENTNOTICE, TXT_CAPSICUM_ENABLED); +} + +static void capability_mode_disabled(void) +{ + + printformat(NULL, NULL, MSGLEVEL_CLIENTNOTICE, TXT_CAPSICUM_DISABLED); +} + +static void capability_mode_failed(gchar *msg) +{ + + printformat(NULL, NULL, MSGLEVEL_CLIENTERROR, TXT_CAPSICUM_FAILED, msg); +} + +void fe_capsicum_init(void) +{ + + signal_add("capability mode enabled", (SIGNAL_FUNC) capability_mode_enabled); + signal_add("capability mode disabled", (SIGNAL_FUNC) capability_mode_disabled); + signal_add("capability mode failed", (SIGNAL_FUNC) capability_mode_failed); +} + +void fe_capsicum_deinit(void) +{ + signal_remove("capability mode enabled", (SIGNAL_FUNC) capability_mode_enabled); + signal_remove("capability mode disabled", (SIGNAL_FUNC) capability_mode_disabled); + signal_remove("capability mode failed", (SIGNAL_FUNC) capability_mode_failed); +} diff --git a/src/fe-common/core/fe-capsicum.h b/src/fe-common/core/fe-capsicum.h new file mode 100644 index 00000000..a7cb743b --- /dev/null +++ b/src/fe-common/core/fe-capsicum.h @@ -0,0 +1,7 @@ +#ifndef __FE_CAPSICUM_H +#define __FE_CAPSICUM_H + +void fe_capsicum_init(void); +void fe_capsicum_deinit(void); + +#endif diff --git a/src/fe-common/core/fe-common-core.c b/src/fe-common/core/fe-common-core.c index 512fc84c..a3b7364c 100644 --- a/src/fe-common/core/fe-common-core.c +++ b/src/fe-common/core/fe-common-core.c @@ -32,6 +32,9 @@ #include "special-vars.h" #include "fe-core-commands.h" #include "fe-queries.h" +#ifdef HAVE_CAPSICUM +#include "fe-capsicum.h" +#endif #include "hilight-text.h" #include "command-history.h" #include "completion.h" @@ -179,6 +182,9 @@ void fe_common_core_init(void) fe_server_init(); fe_settings_init(); fe_tls_init(); +#ifdef HAVE_CAPSICUM + fe_capsicum_init(); +#endif windows_init(); window_activity_init(); window_commands_init(); @@ -221,6 +227,9 @@ void fe_common_core_deinit(void) fe_server_deinit(); fe_settings_deinit(); fe_tls_deinit(); +#ifdef HAVE_CAPSICUM + fe_capsicum_deinit(); +#endif windows_deinit(); window_activity_deinit(); window_commands_deinit(); diff --git a/src/fe-common/core/fe-core-commands.c b/src/fe-common/core/fe-core-commands.c index 97a246ec..fb98cc25 100644 --- a/src/fe-common/core/fe-core-commands.c +++ b/src/fe-common/core/fe-core-commands.c @@ -28,6 +28,9 @@ #include "settings.h" #include "irssi-version.h" #include "servers.h" +#ifdef HAVE_CAPSICUM +#include "capsicum.h" +#endif #include "fe-windows.h" #include "printtext.h" @@ -120,6 +123,9 @@ static void cmd_cat(const char *data) GIOChannel *handle; GString *buf; gsize tpos; +#ifdef HAVE_CAPSICUM + int fd; +#endif if (!cmd_get_params(data, &free_arg, 2, &fname, &fposstr)) return; @@ -128,7 +134,15 @@ static void cmd_cat(const char *data) fpos = atoi(fposstr); cmd_params_free(free_arg); +#ifdef HAVE_CAPSICUM + fd = capsicum_open_wrapper(fname, O_RDONLY, 0); + if (fd > 0) + handle = g_io_channel_unix_new(fd); + else + handle = NULL; +#else handle = g_io_channel_new_file(fname, "r", NULL); +#endif g_free(fname); if (handle == NULL) { diff --git a/src/fe-common/core/fe-log.c b/src/fe-common/core/fe-log.c index 37b29990..0fed8642 100644 --- a/src/fe-common/core/fe-log.c +++ b/src/fe-common/core/fe-log.c @@ -30,6 +30,9 @@ #include "special-vars.h" #include "settings.h" #include "lib-config/iconfig.h" +#ifdef HAVE_CAPSICUM +#include "capsicum.h" +#endif #include "fe-windows.h" #include "window-items.h" @@ -451,7 +454,11 @@ static void autolog_open(SERVER_REC *server, const char *server_tag, log_item_add(log, LOG_ITEM_TARGET, target, server_tag); dir = g_path_get_dirname(log->real_fname); +#ifdef HAVE_CAPSICUM + capsicum_mkdir_with_parents_wrapper(dir, log_dir_create_mode); +#else g_mkdir_with_parents(dir, log_dir_create_mode); +#endif g_free(dir); log->temp = TRUE; diff --git a/src/fe-common/core/module-formats.c b/src/fe-common/core/module-formats.c index da9705be..eb0ddb61 100644 --- a/src/fe-common/core/module-formats.c +++ b/src/fe-common/core/module-formats.c @@ -290,6 +290,9 @@ FORMAT_REC fecommon_core_formats[] = { { "completion_header", "%#Key Value Auto", 0 }, { "completion_line", "%#$[10]0 $[!40]1 $2", 3, { 0, 0, 0 } }, { "completion_footer", "", 0 }, + { "capsicum_enabled", "Capability mode enabled", 0 }, + { "capsicum_disabled", "Capability mode not enabled", 0 }, + { "capsicum_failed", "Capability mode failed: $0", 1, { 0 } }, /* ---- */ { NULL, "TLS", 0 }, diff --git a/src/fe-common/core/module-formats.h b/src/fe-common/core/module-formats.h index f361befb..97ac60bb 100644 --- a/src/fe-common/core/module-formats.h +++ b/src/fe-common/core/module-formats.h @@ -255,6 +255,9 @@ enum { TXT_COMPLETION_HEADER, TXT_COMPLETION_LINE, TXT_COMPLETION_FOOTER, + TXT_CAPSICUM_ENABLED, + TXT_CAPSICUM_DISABLED, + TXT_CAPSICUM_FAILED, TLS_FILL_15, |