duckduckgo: fix an abort "rpath" on OpenBSD - frontends - front-ends for some sites (experiment)
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit e0eb56d566e98aa2c886de31b9df6c7e6636b00a
 (DIR) parent bb2aaedc735f352dc4f90f427f22b94bd906d917
 (HTM) Author: Hiltjo Posthuma <hiltjo@codemadness.org>
       Date:   Thu,  3 Sep 2020 17:05:02 +0200
       
       duckduckgo: fix an abort "rpath" on OpenBSD
       
       Diffstat:
         M duckduckgo/cli.c                    |      22 +++++++++++++++++++---
       
       1 file changed, 19 insertions(+), 3 deletions(-)
       ---
 (DIR) diff --git a/duckduckgo/cli.c b/duckduckgo/cli.c
       @@ -2,6 +2,7 @@
        
        #include <ctype.h>
        #include <err.h>
       +#include <errno.h>
        #include <locale.h>
        #include <stdio.h>
        #include <stdlib.h>
       @@ -10,6 +11,7 @@
        #include <wchar.h>
        
        #include "duckduckgo.h"
       +#include "https.h"
        #include "util.h"
        
        #define OUT(s) fputs((s), stdout)
       @@ -34,15 +36,29 @@ main(int argc, char *argv[])
        
                setlocale(LC_CTYPE, "");
        
       -        if (pledge("stdio", NULL) == -1)
       -                err(1, "pledge");
       +        if (pledge("stdio dns inet rpath unveil", NULL) == -1) {
       +                fprintf(stderr, "pledge: %s\n", strerror(errno));
       +                exit(1);
       +        }
       +        if (unveil(TLS_CA_CERT_FILE, "r") == -1) {
       +                fprintf(stderr, "unveil: %s\n", strerror(errno));
       +                exit(1);
       +        }
       +        if (unveil(NULL, NULL) == -1) {
       +                fprintf(stderr, "unveil: %s\n", strerror(errno));
       +                exit(1);
       +        }
        
                if (argc != 2) {
                        fprintf(stderr, "usage: %s <search>\n", argv[0]);
                        exit(1);
                }
        
       -        if ((results = duckduckgo_search(argv[1]))) {
       +        results = duckduckgo_search(argv[1]);
       +        if (pledge("stdio", NULL) == -1)
       +                err(1, "pledge");
       +
       +        if (results) {
                        for (i = 0; i < results->nitems; i++) {
                                result = &(results->items[i]);