drop the configless mode from gmid; now it's provided by `ge'

This commit is contained in:
Omar Polo 2022-09-08 20:44:35 +00:00
parent 0126d91d1d
commit 32fbc47803
1 changed files with 9 additions and 154 deletions

163
gmid.c
View File

@ -27,7 +27,7 @@
#include <signal.h>
#include <string.h>
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);