Hi,
I have managed to get dillo.cc to use the 'save_dir' preference to set
which download path is unveiled. This was done by moving the unveil
call to a point after which prefs are initialized and dillorc is
parsed. Here is what the patch looks like:
--- dillo.cc Sat Jun 29 16:33:08 2024
+++ dillo.cc Tue Jul 30 14:18:28 2024
@@ -23,6 +23,7 @@
#include <stdio.h>
#include <unistd.h>
+#include <err.h>
#include <stdlib.h>
#include <time.h>
#include <sys/types.h>
@@ -463,6 +464,58 @@ int main(int argc, char **argv)
}
dLib_show_messages(prefs.show_msg);
+ // Use unveil on OpenBSD
+ #ifdef __OpenBSD__
+ if (unveil("/usr/local/share/fonts", "r") == -1) {
+ err(1, "unveil failed");
+ }
+ if (unveil("/usr/local/share/icons", "r") == -1) {
+ err(1, "unveil failed");
+ }
+ if (unveil("/usr/X11R6/share/X11/locale", "r") == -1) {
+ err(1, "unveil failed");
+ }
+ if (unveil("/usr/X11R6/lib/X11/fonts", "r") == -1) {
+ err(1, "unveil failed");
+ }
+ if (unveil("/usr/local/etc/dillo", "r") == -1) {
+ err(1, "unveil failed");
+ }
+ if (unveil("/tmp", "rwc") == -1) {
+ err(1, "unveil failed");
+ }
+ if (unveil("/usr/local/bin/dpid", "x") == -1) {
+ err(1, "unveil failed");
+ }
+ if (unveil("/etc/fonts", "r") == -1) {
+ err(1, "unveil failed");
+ }
+ if (unveil("/etc/resolv.conf", "r") == -1) {
+ err(1, "unveil failed");
+ }
+ if (unveil("/etc/ssl/cert.pem", "r") == -1) {
+ err(1, "unveil failed");
+ }
+ if (unveil(prefs.save_dir, "rwc") == -1) {
+ err(1, "unveil failed");
+ }
+ char *dil_loc = dStrconcat(dGethomedir(), "/.dillo", NULL);
+ if (unveil(dil_loc, "rwc") == -1) {
+ err(1, "unveil failed");
+ }
+ dFree(dil_loc);
+ char *icons_loc = dStrconcat(dGethomedir(), "/.icons", NULL);
+ if (unveil(icons_loc, "r") == -1) {
+ err(1, "unveil failed");
+ }
+ dFree(icons_loc);
+ char *xauth_loc = dStrconcat(dGethomedir(), "/.Xauthority", NULL);
+ if (unveil(xauth_loc, "r") == -1) {
+ err(1, "unveil failed");
+ }
+ dFree(xauth_loc);
+ #endif
+
// initialize internal modules
a_Dpi_init();
a_Dns_init();
I have tried to do the same for downloads.cc, but haven't quite got it
yet. Since prefs are not initialized in downloads.cc, I tried to copy
that from dillo.cc, but am getting some linker errors when compliling.
I probably missed something obvious. Any ideas?
ld: error: undefined symbol: a_Prefs_init
>>> referenced by downloads.cc
>>> downloads_dpi-downloads.o:(main)
mv -f .deps/vsource.Tpo .deps/vsource.Po
ld: error: undefined symbol: Paths::init()
>>> referenced by downloads.cc
>>> downloads_dpi-downloads.o:(main)
ld: error: undefined symbol: Paths::getPrefsFP(char const*)
>>> referenced by downloads.cc
>>> downloads_dpi-downloads.o:(main)
ld: error: undefined symbol: PrefsParser::parse(__sFILE*)
>>> referenced by downloads.cc
>>> downloads_dpi-downloads.o:(main)
ld: error: undefined symbol: prefs
>>> referenced by downloads.cc
>>> downloads_dpi-downloads.o:(main)
c++: error: linker command failed with exit code 1 (use -v to see
invocation)
Here is what I tried:
--- downloads.cc Sat Jun 29 16:33:08 2024
+++ downloads.cc Tue Jul 30 15:07:04 2024
@@ -18,6 +18,7 @@
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
+#include <err.h>
#include <errno.h>
#include <fcntl.h>
#include <ctype.h>
@@ -42,6 +43,9 @@
#include <FL/Fl_Box.H>
#include <FL/Fl_Button.H>
+#include "../src/paths.hh"
+#include "../src/prefs.h"
+#include "../src/prefsparser.hh"
#include "config.h"
#include "dpiutil.h"
#include "../dpip/dpip.h"
@@ -1104,6 +1108,48 @@ static void custLabelMeasure(const Fl_Label* o,
int& W
int main()
{
int ww = 420, wh = 85;
+ FILE *fp;
+
+ // set the default values for the preferences
+ a_Prefs_init();
+
+ // create ~/.dillo if not present
+ Paths::init();
+
+ // parse dillorc
+ if ((fp = Paths::getPrefsFP(PATHS_RC_PREFS))) {
+ PrefsParser::parse(fp);
+ }
+
+ /* Use unveil on OpenBSD */
+ #ifdef __OpenBSD__
+ if (unveil("/tmp", "rwc") == -1) {
+ err(1, "unveil failed");
+ }
+ if (unveil("/etc/fonts", "r") == -1) {
+ err(1, "unveil failed");
+ }
+ if (unveil("/usr/local/bin/wget", "x") == -1) {
+ err(1, "unveil failed");
+ }
+ char *xauth_loc = dStrconcat(dGethomedir(), "/.Xauthority", NULL);
+ if (unveil(xauth_loc, "r") == -1) {
+ err(1, "unveil failed");
+ }
+ dFree(xauth_loc);
+ if (unveil("/usr/local/share/fonts", "r") == -1) {
+ err(1, "unveil failed");
+ }
+ char *dil_loc = dStrconcat(dGethomedir(), "/.dillo", NULL);
+ if (unveil(dil_loc, "rwc") == -1) {
+ err(1, "unveil failed");
+ }
+ dFree(dil_loc);
+ if (unveil(prefs.save_dir, "rwc") == -1) {
+ err(1, "unveil failed");
+ }
+ unveil(NULL, NULL);
+ #endif
Fl::lock();
Finally, I tried to also get ftp.c to use the 'save_dir' preference,
but had less luck. I think the issue comes from the fact that this is a
C program, and the others are C++.
I'm wondering, is this whole unveil idea realistic at this point? Maybe
I'm just too inexperienced to be doing this work. I am quite willing to
keep going, but it will probably involve many more messages to the list
with problems similar to the ones above. I don't want to overwhelm the
list and devs with my beginner programming mistakes, it feels like I'm
placing an unfair burden on you.
Regards,
Alex
_______________________________________________
Dillo-dev mailing list -- [email protected]
To unsubscribe send an email to [email protected]