chiark / gitweb /
1d69afcf01e1146080b63a0e0c57f37a67e8169a
[chiark-utils.git] / cprogs / prefork.h
1 /* common stuff for cgi-fcgi-interp and prefork-interp */
2
3 #ifndef PREFORK_H
4 #define PREFORK_H
5
6 #include "common.h"
7
8 #include <stdio.h>
9 #include <stdlib.h>
10 #include <string.h>
11 #include <errno.h>
12 #include <stdbool.h>
13 #include <assert.h>
14 #include <limits.h>
15
16 #include <sys/types.h>
17 #include <sys/stat.h>
18 #include <sys/utsname.h>
19 #include <sys/socket.h>
20 #include <sys/un.h>
21 #include <sys/file.h>
22 #include <unistd.h>
23 #include <fcntl.h>
24 #include <pwd.h>
25 #include <time.h>
26 #include <signal.h>
27 #include <sys/wait.h>
28 #include <syslog.h>
29         
30 #include <nettle/sha.h>
31
32 #include "myopt.h"
33 #include "timespeccmp.h"
34
35 #define MINHEXHASH 33
36
37 extern const char *interp, *ident;
38
39 extern struct sha256_ctx identsc;
40
41 extern const char our_name[];
42
43 extern uid_t us;
44 extern const char *run_base, *script, *socket_path, *lock_path;
45 extern const char *run_base_mkdir_p;
46 extern bool logging;
47
48 bool find_run_base_var_run(void);
49 void find_socket_path(void);
50
51 int acquire_lock(void);
52
53 extern const struct cmdinfo cmdinfos[];
54
55 void process_opts(const char *const **argv_io);
56
57 void vmsgcore(int estatus, int errnoval, const char *fmt, va_list al);
58
59 #define DEF_MSG(func, attrs, estatus, errnoval, after)  \
60   static void func(const char *fmt, ...)                \
61     __attribute__((unused, format(printf,1,2))) attrs;  \
62   static void func(const char *fmt, ...) {              \
63     va_list al;                                         \
64     va_start(al,fmt);                                   \
65     vmsgcore(estatus,errnoval,fmt,al);                  \
66     after                                               \
67   }
68
69 DEF_MSG(warninge, /*empty*/, 0, errno, { });
70 DEF_MSG(warning , /*empty*/, 0, 0,     { });
71
72 #define DEF_DIE(func, errnoval) \
73   DEF_MSG(func, __attribute__((noreturn)), 127, errnoval, { abort(); })
74
75 DEF_DIE(diee, errno)
76 DEF_DIE(die,  0)
77
78 #define MAX_OPTS 5
79
80 void fusagemessage(FILE *f);
81 void usagemessage(void);
82 void of_help(const struct cmdinfo *ci, const char *val);
83 void of_iassign(const struct cmdinfo *ci, const char *val);
84 void ident_addstring(const struct cmdinfo *ci, const char *string);
85 void off_ident_addenv(const struct cmdinfo *ci, const char *name);
86
87 #endif /*PREFORK_H*/