On Sun, Dec 20, 2015 at 2:02 PM, Theo Buehler <[email protected]> wrote:
> I understand that pledging a port adds complexity to its maintenance
> and I am not convinced the patch below should be committed to the ports
> tree.
>
> However, since there appears to be a considerable numer of users of i3
> among OpenBSD users, there might be some interest in this patch, so I'd
> like to share it. I'd need some positive test reports to be persuaded
> to try to upstream this.
Please refactor your diff on a very current -current, I've committed
an update for i3 yesterday...
And please also protect the pledge code with "#if defined(__OpenBSD__)"
Ciao!
David
> I'm running variations of this patch for about three weeks now.
>
> Note that i3status is not included. It is not currently possible to
> pledge this program without severly cutting down its features.
>
> Index: x11/i3/Makefile
> ===================================================================
> RCS file: /cvs/ports/x11/i3/Makefile,v
> retrieving revision 1.98
> diff -u -p -r1.98 Makefile
> --- x11/i3/Makefile 4 Oct 2015 08:48:12 -0000 1.98
> +++ x11/i3/Makefile 20 Dec 2015 12:47:01 -0000
> @@ -3,6 +3,7 @@
> COMMENT = improved dynamic tiling window manager
>
> DISTNAME = i3-4.11
> +REVISION = 0
> CATEGORIES = x11
>
> EXTRACT_SUFX = .tar.bz2
> Index: x11/i3/patches/patch-i3-msg_main_c
> ===================================================================
> RCS file: x11/i3/patches/patch-i3-msg_main_c
> diff -N x11/i3/patches/patch-i3-msg_main_c
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ x11/i3/patches/patch-i3-msg_main_c 20 Dec 2015 12:47:01 -0000
> @@ -0,0 +1,16 @@
> +$OpenBSD$
> +
> +pledge for i3-msg:
> +rpath and unix needed for talking to the i3 socket in /tmp
> +
> +--- i3-msg/main.c.orig Sun Dec 6 01:38:41 2015
> ++++ i3-msg/main.c Sun Dec 6 01:39:44 2015
> +@@ -119,6 +119,8 @@ static yajl_callbacks reply_callbacks = {
> + };
> +
> + int main(int argc, char *argv[]) {
> ++ if (pledge("stdio rpath unix", NULL) == -1)
> ++ err(EXIT_FAILURE, "pledge");
> + char *env_socket_path = getenv("I3SOCK");
> + if (env_socket_path)
> + socket_path = sstrdup(env_socket_path);
> Index: x11/i3/patches/patch-i3-nagbar_main_c
> ===================================================================
> RCS file: /cvs/ports/x11/i3/patches/patch-i3-nagbar_main_c,v
> retrieving revision 1.7
> diff -u -p -r1.7 patch-i3-nagbar_main_c
> --- x11/i3/patches/patch-i3-nagbar_main_c 4 Oct 2015 08:48:12 -0000
> 1.7
> +++ x11/i3/patches/patch-i3-nagbar_main_c 20 Dec 2015 12:47:01 -0000
> @@ -1,6 +1,14 @@
> $OpenBSD: patch-i3-nagbar_main_c,v 1.7 2015/10/04 08:48:12 dcoppa Exp $
> +
> +surprisingly wide pledge for this program
> +
> +wpath cpath for writing a script
> +rpath getpw for checking access permissions
> +proc exec for executing the script
> +unix for talking to the i3 socket
> +
> --- i3-nagbar/main.c.orig Wed Sep 30 08:55:10 2015
> -+++ i3-nagbar/main.c Fri Oct 2 16:58:54 2015
> ++++ i3-nagbar/main.c Sun Dec 6 01:23:02 2015
> @@ -170,7 +170,7 @@ static void handle_button_release(xcb_connection_t *co
> }
>
> @@ -9,4 +17,14 @@ $OpenBSD: patch-i3-nagbar_main_c,v 1.7 2
> + sasprintf(&terminal_cmd, "${X11BASE}/bin/xterm -e %s", link_path);
> printf("argv0 = %s\n", argv0);
> printf("terminal_cmd = %s\n", terminal_cmd);
> +
> +@@ -464,6 +464,9 @@ int main(int argc, char *argv[]) {
> +
> + font = load_font(pattern, true);
> + set_font(&font);
> ++
> ++ if (pledge("stdio rpath wpath cpath getpw proc exec unix", NULL) == -1)
> ++ err(EXIT_FAILURE, "pledge");
> +
> + xcb_rectangle_t win_pos = get_window_position();
>
> Index: x11/i3/patches/patch-i3bar_src_main_c
> ===================================================================
> RCS file: x11/i3/patches/patch-i3bar_src_main_c
> diff -N x11/i3/patches/patch-i3bar_src_main_c
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ x11/i3/patches/patch-i3bar_src_main_c 20 Dec 2015 12:47:01 -0000
> @@ -0,0 +1,18 @@
> +$OpenBSD$
> +
> +stdio rpath unix for talking to the i3 socket
> +wpath for logging
> +proc exec to execute the bar
> +
> +--- i3bar/src/main.c.orig Sun Dec 6 01:08:28 2015
> ++++ i3bar/src/main.c Sun Dec 6 01:07:08 2015
> +@@ -95,6 +95,9 @@ int main(int argc, char **argv) {
> + char *socket_path = getenv("I3SOCK");
> + char *i3_default_sock_path = "/tmp/i3-ipc.sock";
> +
> ++ if (pledge("stdio rpath wpath proc exec unix", NULL) == -1)
> ++ err(EXIT_FAILURE, "pledge");
> ++
> + /* Initialize the standard config to use 0 as default */
> + memset(&config, '\0', sizeof(config_t));
> +
> Index: x11/i3/patches/patch-src_main_c
> ===================================================================
> RCS file: x11/i3/patches/patch-src_main_c
> diff -N x11/i3/patches/patch-src_main_c
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ x11/i3/patches/patch-src_main_c 20 Dec 2015 12:47:01 -0000
> @@ -0,0 +1,20 @@
> +$OpenBSD$
> +
> +stdio rpath unix for talking to the i3 socket in /tmp
> +wpath cpath are needed for the restart-in-place functionality
> +proc exec for executing programs
> +
> +--- src/main.c.orig Wed Sep 30 08:55:10 2015
> ++++ src/main.c Sun Dec 6 00:36:10 2015
> +@@ -785,6 +785,11 @@ int main(int argc, char *argv[]) {
> + xcb_free_pixmap(conn, pixmap);
> + }
> +
> ++ /* can't pledge if shm_* calls are used */
> ++ if (shmlog_size == 0)
> ++ if (pledge("stdio rpath wpath cpath proc exec unix", NULL) == -1)
> ++ err(EXIT_FAILURE, "pledge");
> ++
> + struct sigaction action;
> +
> + action.sa_sigaction = handle_signal;