Hi,

the diff prevents i3bar from starting here:
    i3bar(26685): syscall 289 ""

gdb shows this:
    #0  0x00000ae4d48740ca in shmget () at <stdin>:2
    #1  0x00000ae502e15ae4 in can_use_shm () from 
/usr/local/lib/libcairo.so.12.3
    #2  0x00000ae502e15c3b in _cairo_xcb_connection_query_shm () from 
/usr/local/lib/libcairo.so.12.3
    #3  0x00000ae502e16330 in _cairo_xcb_connection_get () from 
/usr/local/lib/libcairo.so.12.3
    #4  0x00000ae502e18675 in _cairo_xcb_screen_get () from 
/usr/local/lib/libcairo.so.12.3
    #5  0x00000ae502e1c40a in cairo_xcb_surface_create () from 
/usr/local/lib/libcairo.so.12.3
    #6  0x00000ae20f90f9a0 in load_pango_font (font=0x7f7ffffed3b0, 
desc=Variable "desc" is not available.
    ) at libi3/font.c:80
    #7  0x00000ae20f90fd0c in load_font (pattern=0xae4b22fd0c0 "pango:DejaVu 
Sans Mono 10", fallback=true)
        at libi3/font.c:196
    #8  0x00000ae20f9077e4 in init_xcb_late (fontname=Variable "fontname" is 
not available.
    ) at i3bar/src/xcb.c:1226
    #9  0x00000ae20f90c190 in got_bar_config (
        reply=0xae461156200 
"{\"id\":\"bar-1\",\"outputs\":[\"LVDS1\"],\"tray_padding\":2,\"mode\":\"dock\",\"hidden_state\":\"hide\",\"modifier\":\"Mod4\",\"position\":\"bottom\",\"status_command\":\"i3status
 --config ~/.i3status-small.conf\",\"font\":\"pango:D"...) at i3bar/src/ipc.c:98
    #10 0x00000ae20f90be33 in got_data (loop=Variable "loop" is not available.
    ) at i3bar/src/ipc.c:263
    #11 0x00000ae4a9b5afae in ev_invoke_pending () from 
/usr/local/lib/libev.so.3.1
    #12 0x00000ae4a9b5f5e5 in ev_run () from /usr/local/lib/libev.so.3.1
    #13 0x00000ae20f90b7ba in main (argc=Variable "argc" is not available.
    ) at ev.h:835

I have a font configuration in .i3/config, which triggers this:
    font pango:DejaVu Sans Mono 10

After commenting that out, i3bar starts again.

Regards,
Ralf

* Theo Buehler <t...@math.ethz.ch> [2015-12-20 15:21]:
> On Sun, Dec 20, 2015 at 02:30:24PM +0100, David Coppa wrote:
> > 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__)"
> 
> Thanks!
> 
> Index: Makefile
> ===================================================================
> RCS file: /var/cvs/ports/x11/i3/Makefile,v
> retrieving revision 1.99
> diff -u -p -r1.99 Makefile
> --- Makefile  18 Dec 2015 15:53:08 -0000      1.99
> +++ Makefile  20 Dec 2015 14:06:08 -0000
> @@ -3,7 +3,7 @@
>  COMMENT =    improved dynamic tiling window manager
>  
>  DISTNAME =   i3-4.11
> -REVISION =   0
> +REVISION =   1
>  CATEGORIES = x11
>  
>  EXTRACT_SUFX =       .tar.bz2
> Index: patches/patch-i3-msg_main_c
> ===================================================================
> RCS file: patches/patch-i3-msg_main_c
> diff -N patches/patch-i3-msg_main_c
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ patches/patch-i3-msg_main_c       20 Dec 2015 13:52:48 -0000
> @@ -0,0 +1,18 @@
> +$OpenBSD$
> +
> +pledge for i3-msg:
> +rpath and unix needed for talking to the i3 socket in /tmp
> +
> +--- i3-msg/main.c.orig       Wed Sep 30 08:55:10 2015
> ++++ i3-msg/main.c    Sun Dec 20 14:42:51 2015
> +@@ -119,6 +119,10 @@ static yajl_callbacks reply_callbacks = {
> + };
> + 
> + int main(int argc, char *argv[]) {
> ++#if defined(__OpenBSD__)
> ++    if (pledge("stdio rpath unix", NULL) == -1)
> ++        err(EXIT_FAILURE, "pledge");
> ++#endif
> +     char *env_socket_path = getenv("I3SOCK");
> +     if (env_socket_path)
> +         socket_path = sstrdup(env_socket_path);
> Index: patches/patch-i3-nagbar_main_c
> ===================================================================
> RCS file: /var/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
> --- patches/patch-i3-nagbar_main_c    4 Oct 2015 08:48:12 -0000       1.7
> +++ patches/patch-i3-nagbar_main_c    20 Dec 2015 14:05:53 -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 20 15:00:22 2015
>  @@ -170,7 +170,7 @@ static void handle_button_release(xcb_connection_t *co
>       }
>   
> @@ -9,4 +17,16 @@ $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,11 @@ int main(int argc, char *argv[]) {
> + 
> +     font = load_font(pattern, true);
> +     set_font(&font);
> ++
> ++#if defined(__OpenBSD__)
> ++    if (pledge("stdio rpath wpath cpath getpw proc exec unix", NULL) == -1)
> ++        err(EXIT_FAILURE, "pledge");
> ++#endif
> + 
> +     xcb_rectangle_t win_pos = get_window_position();
>   
> Index: patches/patch-i3bar_src_main_c
> ===================================================================
> RCS file: patches/patch-i3bar_src_main_c
> diff -N patches/patch-i3bar_src_main_c
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ patches/patch-i3bar_src_main_c    20 Dec 2015 13:52:48 -0000
> @@ -0,0 +1,20 @@
> +$OpenBSD$
> +
> +stdio rpath unix for talking to the i3 socket
> +wpath for logging
> +proc exec to execute the bar
> +
> +--- i3bar/src/main.c.orig    Wed Sep 30 08:55:10 2015
> ++++ i3bar/src/main.c Sun Dec 20 14:43:24 2015
> +@@ -95,6 +95,11 @@ int main(int argc, char **argv) {
> +     char *socket_path = getenv("I3SOCK");
> +     char *i3_default_sock_path = "/tmp/i3-ipc.sock";
> + 
> ++#if defined(__OpenBSD__)
> ++    if (pledge("stdio rpath wpath proc exec unix", NULL) == -1)
> ++        err(EXIT_FAILURE, "pledge");
> ++#endif
> ++
> +     /* Initialize the standard config to use 0 as default */
> +     memset(&config, '\0', sizeof(config_t));
> + 
> Index: patches/patch-src_main_c
> ===================================================================
> RCS file: /var/cvs/ports/x11/i3/patches/patch-src_main_c,v
> retrieving revision 1.14
> diff -u -p -r1.14 patch-src_main_c
> --- patches/patch-src_main_c  18 Dec 2015 15:53:09 -0000      1.14
> +++ patches/patch-src_main_c  20 Dec 2015 14:02:42 -0000
> @@ -2,8 +2,14 @@ $OpenBSD: patch-src_main_c,v 1.14 2015/1
>  
>  Bugfix: add keymap fall back (_XKB_RULES_NAMES, then defaults)
>  
> +add pledge:
> +
> +"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       Fri Dec 18 13:58:58 2015
> ++++ src/main.c       Sun Dec 20 14:58:54 2015
>  @@ -87,6 +87,7 @@ struct ws_assignments_head ws_assignments = TAILQ_HEAD
>   
>   /* We hope that those are supported and set them to true */
> @@ -20,3 +26,17 @@ Bugfix: add keymap fall back (_XKB_RULES
>       if (!extreply->present) {
>           DLOG("xkb is not present on this server\n");
>       } else {
> +@@ -784,6 +786,13 @@ int main(int argc, char *argv[]) {
> +         xcb_free_gc(conn, gc);
> +         xcb_free_pixmap(conn, pixmap);
> +     }
> ++
> ++#if defined(__OpenBSD__)
> ++    /* 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");
> ++#endif
> + 
> +     struct sigaction action;
> + 
> 

Reply via email to