Thursday, August 29, 2024

Re: [NEW]: net/hopm - open-proxy monitor irc bot

On Mon, Aug 19, 2024 at 03:24:03PM GMT, Chaz Kettleson wrote:
> On Mon, Aug 19, 2024 at 03:48:20PM GMT, Omar Polo wrote:
> > On 2024/08/17 16:28:35 +0100, Stuart Henderson <stu@spacehopper.org> wrote:
> > > ok
> >
> > Imported
> >
> > Thank you,
> >
> > Omar Polo
> >
>
> Thanks everyone! Great feedback.
>
> Below are patches for pledge/unveil for feedback/discussion.
>
> Here is the approach that was taken:
>
> - Start with minimal set of promises that did not crash and from review
> stdio
> rpath - hopm config file, firedns config
> wpath - pid file, log file, scanlog file
> cpath - pid file, log file, scanlog file
> inet
> dns
> proc - fork (maybe we can remove fork and rc_bg?)
> exec - execv on restart
> unveil
> - Initially unveil nothing
> - Remove unneeded chdir (locations are no longer relative)
> - Unveil only what is needed if it's needed before main loop
> LOGFILE, wc
> CONFFILE, r
> SCANLOG, wc (only if the option is enabled)
> HOPM_BINPATH, x (for execv on restart)
> - Reduce promises before main loop
> stdio
> inet
> dns
> exec
>
> --
> Chaz
>
> diff --git a/net/hopm/patches/patch-src_firedns_c b/net/hopm/patches/patch-src_firedns_c
> new file mode 100644
> index 00000000000..10bc8d9af12
> --- /dev/null
> +++ b/net/hopm/patches/patch-src_firedns_c
> @@ -0,0 +1,21 @@
> +Index: firedns.c
> +--- src/firedns.c.orig
> ++++ src/firedns.c
> +@@ -36,6 +36,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
> + #include <stdio.h>
> + #include <errno.h>
> + #include <fcntl.h>
> ++#include <err.h>
> +
> + #include "compat.h"
> + #include "memory.h"
> +@@ -171,6 +172,10 @@ firedns_init(void)
> + memset(servers4, 0, sizeof(servers4));
> + memset(servers6, 0, sizeof(servers6));
> +
> ++ if (unveil(FDNS_CONFIG_PREF, "r") == -1) {
> ++ err(1, "unveil");
> ++ }
> ++
> + /* read etc/firedns.conf if we've got it, otherwise parse /etc/resolv.conf */
> + f = fopen(FDNS_CONFIG_PREF, "r");
> diff --git a/net/hopm/patches/patch-src_main_c b/net/hopm/patches/patch-src_main_c
> new file mode 100644
> index 00000000000..f0dcdc986d3
> --- /dev/null
> +++ b/net/hopm/patches/patch-src_main_c
> @@ -0,0 +1,86 @@
> +Index: main.c
> +--- src/main.c.orig
> ++++ src/main.c
> +@@ -30,6 +30,7 @@
> + #include <fcntl.h>
> + #include <stdlib.h>
> + #include <string.h>
> ++#include <err.h>
> +
> + #include "config.h"
> + #include "irc.h"
> +@@ -100,6 +101,14 @@ main(int argc, char *argv[])
> + FILE *pidout;
> + struct rlimit rlim;
> +
> ++ if (pledge("stdio rpath wpath cpath inet dns proc exec unveil", NULL) == -1) {
> ++ err(1, "pledge");
> ++ }
> ++
> ++ if (unveil("/", "")) {
> ++ err(1, "unveil");
> ++ }
> ++
> + setup_corelimit();
> +
> + while (1)
> +@@ -130,12 +139,6 @@ main(int argc, char *argv[])
> + snprintf(CONFFILE, lenc, "%s/%s.%s", CONFDIR, CONFNAME, CONFEXT);
> + snprintf(LOGFILE, lenl, "%s/%s.%s", LOGDIR, CONFNAME, LOGEXT);
> +
> +- if (chdir(HOPM_PREFIX))
> +- {
> +- perror("chdir");
> +- exit(EXIT_FAILURE);
> +- }
> +-
> + /* Fork off. */
> + if (OPT_DEBUG == 0)
> + {
> +@@ -172,6 +175,10 @@ main(int argc, char *argv[])
> + if (fd > STDERR_FILENO)
> + close(fd);
> +
> ++ if (unveil(LOGFILE, "wc") == -1) {
> ++ err(1, "unveil");
> ++ }
> ++
> + log_open(LOGFILE);
> + }
> + else
> +@@ -180,13 +187,34 @@ main(int argc, char *argv[])
> + log_printf("MAIN -> HOPM %s started.", VERSION);
> + log_printf("MAIN -> Reading configuration file...");
> +
> ++ if (unveil(CONFFILE, "r") == -1) {
> ++ err(1, "unveil");
> ++ }
> ++
> + config_load(CONFFILE);
> +
> +- if (OptionsItem.scanlog)
> ++ if (OptionsItem.scanlog) {
> ++ if (unveil(OptionsItem.scanlog, "wc")) {
> ++ err(1, "unveil");
> ++ }
> ++
> + scanlog_open(OptionsItem.scanlog);
> ++ }
> ++
> ++ if (unveil(OptionsItem.pidfile, "wc")) {
> ++ err(1, "unveil");
> ++ }
> +
> + pidout = fopen(OptionsItem.pidfile, "w");
> +
> ++ if (unveil(HOPM_BINPATH, "x") == -1) {
> ++ err(1, "unveil");
> ++ }
> ++
> ++ if (pledge("stdio inet dns exec", NULL) == -1) {
> ++ err(1, "pledge");
> ++ }
> ++
> + if (pidout)
> + {
> + fprintf(pidout, "%u\n", (unsigned int)getpid());
>

ping
--
Chaz

No comments:

Post a Comment