annotate pasterd.c @ 72:1a98bc0daa49

misc: update copyright years
author David Demelier <markand@malikania.fr>
date Wed, 01 Feb 2023 13:12:59 +0100
parents d3d3937c5756
children 67b3d13a5035
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
1 /*
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
2 * pasterd.c -- main pasterd(8) file
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 *
72
1a98bc0daa49 misc: update copyright years
David Demelier <markand@malikania.fr>
parents: 71
diff changeset
4 * Copyright (c) 2020-2023 David Demelier <markand@malikania.fr>
0
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
5 *
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
6 * Permission to use, copy, modify, and/or distribute this software for any
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
7 * purpose with or without fee is hereby granted, provided that the above
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
8 * copyright notice and this permission notice appear in all copies.
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 *
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
17 */
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
18
11
b9b046818b0c pasterd: support configuration
David Demelier <markand@malikania.fr>
parents: 1
diff changeset
19 #include <stdio.h>
0
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
20 #include <stdlib.h>
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
21 #include <time.h>
1
836a698946f8 pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
22 #include <unistd.h>
0
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
23
11
b9b046818b0c pasterd: support configuration
David Demelier <markand@malikania.fr>
parents: 1
diff changeset
24 #include "config.h"
0
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
25 #include "database.h"
1
836a698946f8 pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
26 #include "http.h"
836a698946f8 pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
27 #include "log.h"
11
b9b046818b0c pasterd: support configuration
David Demelier <markand@malikania.fr>
parents: 1
diff changeset
28 #include "util.h"
0
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
29
1
836a698946f8 pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
30 static void
16
29033b4fe558 pasterd: use default values and fix Content-Length
David Demelier <markand@malikania.fr>
parents: 11
diff changeset
31 defaults(void)
29033b4fe558 pasterd: use default values and fix Content-Length
David Demelier <markand@malikania.fr>
parents: 11
diff changeset
32 {
29033b4fe558 pasterd: use default values and fix Content-Length
David Demelier <markand@malikania.fr>
parents: 11
diff changeset
33 snprintf(config.databasepath, sizeof (config.databasepath),
29033b4fe558 pasterd: use default values and fix Content-Length
David Demelier <markand@malikania.fr>
parents: 11
diff changeset
34 "%s", VARDIR "/paster/paster.db");
29033b4fe558 pasterd: use default values and fix Content-Length
David Demelier <markand@malikania.fr>
parents: 11
diff changeset
35 }
29033b4fe558 pasterd: use default values and fix Content-Length
David Demelier <markand@malikania.fr>
parents: 11
diff changeset
36
29033b4fe558 pasterd: use default values and fix Content-Length
David Demelier <markand@malikania.fr>
parents: 11
diff changeset
37 static void
1
836a698946f8 pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
38 init(void)
836a698946f8 pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
39 {
836a698946f8 pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
40 srand(time(NULL));
836a698946f8 pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
41 log_open();
11
b9b046818b0c pasterd: support configuration
David Demelier <markand@malikania.fr>
parents: 1
diff changeset
42
b9b046818b0c pasterd: support configuration
David Demelier <markand@malikania.fr>
parents: 1
diff changeset
43 if (!config.databasepath[0])
b9b046818b0c pasterd: support configuration
David Demelier <markand@malikania.fr>
parents: 1
diff changeset
44 die("abort: no database specified\n");
b9b046818b0c pasterd: support configuration
David Demelier <markand@malikania.fr>
parents: 1
diff changeset
45 if (!database_open(config.databasepath))
b9b046818b0c pasterd: support configuration
David Demelier <markand@malikania.fr>
parents: 1
diff changeset
46 die("abort: could not open database\n");
0
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
47 }
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
48
1
836a698946f8 pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
49 static void
836a698946f8 pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
50 quit(void)
0
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
51 {
1
836a698946f8 pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
52 database_finish();
836a698946f8 pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
53 log_finish();
0
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
54 }
11
b9b046818b0c pasterd: support configuration
David Demelier <markand@malikania.fr>
parents: 1
diff changeset
55
71
d3d3937c5756 misc: remove deprecated noreturn
David Demelier <markand@malikania.fr>
parents: 60
diff changeset
56 static void
11
b9b046818b0c pasterd: support configuration
David Demelier <markand@malikania.fr>
parents: 1
diff changeset
57 usage(void)
b9b046818b0c pasterd: support configuration
David Demelier <markand@malikania.fr>
parents: 1
diff changeset
58 {
21
21c103c33ac9 pasterd: improve verbosity, closes #2472
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
59 fprintf(stderr, "usage: paster [-fqv] [-d database-path] [-t theme-directory]\n");
11
b9b046818b0c pasterd: support configuration
David Demelier <markand@malikania.fr>
parents: 1
diff changeset
60 exit(1);
b9b046818b0c pasterd: support configuration
David Demelier <markand@malikania.fr>
parents: 1
diff changeset
61 }
0
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
62
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
63 int
51
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 21
diff changeset
64 main(int argc, char **argv, char **env)
0
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
65 {
11
b9b046818b0c pasterd: support configuration
David Demelier <markand@malikania.fr>
parents: 1
diff changeset
66 const char *value;
0
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
67 int opt;
1
836a698946f8 pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
68 void (*run)(void) = &(http_cgi_run);
0
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
69
16
29033b4fe558 pasterd: use default values and fix Content-Length
David Demelier <markand@malikania.fr>
parents: 11
diff changeset
70 defaults();
29033b4fe558 pasterd: use default values and fix Content-Length
David Demelier <markand@malikania.fr>
parents: 11
diff changeset
71
11
b9b046818b0c pasterd: support configuration
David Demelier <markand@malikania.fr>
parents: 1
diff changeset
72 /* Seek environment variables before options. */
b9b046818b0c pasterd: support configuration
David Demelier <markand@malikania.fr>
parents: 1
diff changeset
73 if ((value = getenv("PASTERD_DATABASE_PATH")))
b9b046818b0c pasterd: support configuration
David Demelier <markand@malikania.fr>
parents: 1
diff changeset
74 snprintf(config.databasepath, sizeof (config.databasepath), "%s", value);
b9b046818b0c pasterd: support configuration
David Demelier <markand@malikania.fr>
parents: 1
diff changeset
75 if ((value = getenv("PASTERD_THEME_DIR")))
b9b046818b0c pasterd: support configuration
David Demelier <markand@malikania.fr>
parents: 1
diff changeset
76 snprintf(config.themedir, sizeof (config.themedir), "%s", value);
21
21c103c33ac9 pasterd: improve verbosity, closes #2472
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
77 if ((value = getenv("PASTERD_VERBOSITY")))
21c103c33ac9 pasterd: improve verbosity, closes #2472
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
78 config.verbosity = atoi(value);
11
b9b046818b0c pasterd: support configuration
David Demelier <markand@malikania.fr>
parents: 1
diff changeset
79
21
21c103c33ac9 pasterd: improve verbosity, closes #2472
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
80 while ((opt = getopt(argc, argv, "d:ft:qv")) != -1) {
0
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
81 switch (opt) {
11
b9b046818b0c pasterd: support configuration
David Demelier <markand@malikania.fr>
parents: 1
diff changeset
82 case 'd':
b9b046818b0c pasterd: support configuration
David Demelier <markand@malikania.fr>
parents: 1
diff changeset
83 snprintf(config.databasepath, sizeof (config.databasepath), "%s", optarg);
b9b046818b0c pasterd: support configuration
David Demelier <markand@malikania.fr>
parents: 1
diff changeset
84 break;
b9b046818b0c pasterd: support configuration
David Demelier <markand@malikania.fr>
parents: 1
diff changeset
85 case 't':
b9b046818b0c pasterd: support configuration
David Demelier <markand@malikania.fr>
parents: 1
diff changeset
86 snprintf(config.themedir, sizeof (config.themedir), "%s", optarg);
b9b046818b0c pasterd: support configuration
David Demelier <markand@malikania.fr>
parents: 1
diff changeset
87 break;
0
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
88 case 'f':
1
836a698946f8 pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
89 run = &(http_fcgi_run);
0
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
90 break;
21
21c103c33ac9 pasterd: improve verbosity, closes #2472
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
91 case 'v':
21c103c33ac9 pasterd: improve verbosity, closes #2472
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
92 config.verbosity++;
21c103c33ac9 pasterd: improve verbosity, closes #2472
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
93 break;
21c103c33ac9 pasterd: improve verbosity, closes #2472
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
94 case 'q':
21c103c33ac9 pasterd: improve verbosity, closes #2472
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
95 config.verbosity = 0;
21c103c33ac9 pasterd: improve verbosity, closes #2472
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
96 break;
0
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
97 default:
11
b9b046818b0c pasterd: support configuration
David Demelier <markand@malikania.fr>
parents: 1
diff changeset
98 usage();
0
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
99 break;
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
100 }
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
101 }
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
102
11
b9b046818b0c pasterd: support configuration
David Demelier <markand@malikania.fr>
parents: 1
diff changeset
103 init();
1
836a698946f8 pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
104 run();
836a698946f8 pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
105 quit();
0
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
106 }