commit 32fbc47803fbb51cfff0e5181b78d9050641709c from: Omar Polo date: Thu Sep 08 20:44:35 2022 UTC drop the configless mode from gmid; now it's provided by `ge' commit - 0126d91d1d80d7d8e794b2176556fce969f165cd commit + 32fbc47803fbb51cfff0e5181b78d9050641709c blob - 63f49eeeff6100607e3ade61b97175547fba128a blob + 61e7dc7f55530d96aed4e3714f91ee45d1fb529a --- gmid.c +++ gmid.c @@ -27,7 +27,7 @@ #include #include -static const char *opts = "6c:D:d:fH:hnP:p:Vvx:"; +static const char *opts = "c:D:fhnP:Vv"; static const struct option longopts[] = { {"help", no_argument, NULL, 'h'}, @@ -43,7 +43,8 @@ int sock4, sock6; struct imsgbuf logibuf, exibuf, servibuf[PROC_MAX]; -const char *config_path, *certs_dir, *hostname, *pidfile; +const char *config_path = "/etc/gmid.conf"; +const char *pidfile; struct conf conf; @@ -56,70 +57,6 @@ dummy_handler(int signo) return; } -/* wrapper around dirname(3). dn must be PATH_MAX+1 at least. */ -static void -pdirname(const char *path, char *dn) -{ - char p[PATH_MAX+1]; - char *t; - - strlcpy(p, path, sizeof(p)); - t = dirname(p); - memmove(dn, t, strlen(t)+1); -} - -static void -mkdirs(const char *path, mode_t mode) -{ - char dname[PATH_MAX+1]; - - pdirname(path, dname); - if (!strcmp(dname, "/")) - return; - mkdirs(dname, mode); - if (mkdir(path, mode) != 0 && errno != EEXIST) - fatal("can't mkdir %s: %s", path, strerror(errno)); -} - -/* $XDG_DATA_HOME/gmid */ -char * -data_dir(void) -{ - const char *home, *xdg; - char *t; - - if ((xdg = getenv("XDG_DATA_HOME")) == NULL) { - if ((home = getenv("HOME")) == NULL) - errx(1, "XDG_DATA_HOME and HOME both empty"); - if (asprintf(&t, "%s/.local/share/gmid", home) == -1) - err(1, "asprintf"); - } else { - if (asprintf(&t, "%s/gmid", xdg) == -1) - err(1, "asprintf"); - } - - mkdirs(t, 0755); - return t; -} - -void -load_local_cert(struct vhost *h, const char *hostname, const char *dir) -{ - char *cert, *key; - - if (asprintf(&cert, "%s/%s.cert.pem", dir, hostname) == -1) - errx(1, "asprintf"); - if (asprintf(&key, "%s/%s.key.pem", dir, hostname) == -1) - errx(1, "asprintf"); - - if (access(cert, R_OK) == -1 || access(key, R_OK) == -1) - gen_certificate(hostname, cert, key); - - h->cert = cert; - h->key = key; - h->domain = hostname; -} - void load_vhosts(void) { @@ -419,9 +356,7 @@ usage(void) { fprintf(stderr, "Version: " GMID_STRING "\n" - "Usage: %s [-fnv] [-c config] [-D macro=value] [-P pidfile]\n" - " %s [-6hVv] [-d certs-dir] [-H hostname] [-p port] [dir]\n", - getprogname(), + "Usage: %s [-fnv] [-c config] [-D macro=value] [-P pidfile]\n", getprogname()); } @@ -507,54 +442,10 @@ write_pidfile(const char *pidfile) return fd; } -static void -setup_configless(const char *path) -{ - char p[PATH_MAX]; - struct vhost *host; - struct location *loc; - - if (hostname == NULL) - hostname = "localhost"; - if (certs_dir == NULL) - certs_dir = data_dir(); - - host = xcalloc(1, sizeof(*host)); - TAILQ_INSERT_HEAD(&hosts, host, vhosts); - - loc = xcalloc(1, sizeof(*loc)); - loc->fcgi = -1; - TAILQ_INSERT_HEAD(&host->locations, loc, locations); - - load_local_cert(host, hostname, certs_dir); - - host->domain = "*"; - loc->auto_index = 1; - loc->match = "*"; - if (path == NULL) - loc->dir = getcwd(p, sizeof(p)); - else - loc->dir = absolutify_path(path); - - log_notice(NULL, "serving %s on port %d", loc->dir, conf.port); -} - -static int -parse_portno(const char *p) -{ - const char *errstr; - int n; - - n = strtonum(p, 0, UINT16_MAX, &errstr); - if (errstr != NULL) - yyerror("port number is %s: %s", errstr, p); - return n; -} - int main(int argc, char **argv) { - int i, ch, conftest = 0, configless = 0; + int i, ch, conftest = 0; int pidfd, old_ipv6, old_port; logger_init(); @@ -562,11 +453,6 @@ main(int argc, char **argv) while ((ch = getopt_long(argc, argv, opts, longopts, NULL)) != -1) { switch (ch) { - case '6': - conf.ipv6 = 1; - configless = 1; - break; - case 'c': config_path = absolutify_path(optarg); break; @@ -577,20 +463,10 @@ main(int argc, char **argv) optarg); break; - case 'd': - certs_dir = optarg; - configless = 1; - break; - case 'f': conf.foreground = 1; break; - case 'H': - hostname = optarg; - configless = 1; - break; - case 'h': usage(); return 0; @@ -603,11 +479,6 @@ main(int argc, char **argv) pidfile = optarg; break; - case 'p': - conf.port = parse_portno(optarg); - configless = 1; - break; - case 'V': puts("Version: " GMID_STRING); return 0; @@ -624,30 +495,19 @@ main(int argc, char **argv) argc -= optind; argv += optind; - if (config_path == NULL) { - configless = 1; - conf.foreground = 1; - conf.prefork = 1; - conf.verbose++; - } - - if (argc > 1 || (configless && argc != 0)) + if (argc != 0) usage(); - if (config_path != NULL && (argc > 0 || configless)) - fatal("can't specify options in config mode."); + parse_conf(config_path); if (conftest) { - if (config_path == NULL) - fatal("missing configuration"); - parse_conf(config_path); fprintf(stderr, "config OK\n"); if (conftest > 1) print_conf(); return 0; } - if (!conf.foreground && !configless) { + if (!conf.foreground) { /* log to syslog */ imsg_compose(&logibuf, IMSG_LOG_TYPE, 0, 0, -1, NULL, 0); imsg_flush(&logibuf); @@ -656,11 +516,6 @@ main(int argc, char **argv) fatal("daemon: %s", strerror(errno)); } - if (config_path != NULL) - parse_conf(config_path); - else - setup_configless(*argv); - sock4 = make_socket(conf.port, AF_INET); sock6 = -1; if (conf.ipv6) @@ -683,7 +538,7 @@ main(int argc, char **argv) for (;;) { serve(); - if (!wait_signal() || configless) + if (!wait_signal()) break; log_info(NULL, "reloading configuration %s", config_path);