On Sun, Dec 20, 2015 at 2:02 PM, Theo Buehler <t...@math.ethz.ch> 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;

Reply via email to