aboutsummaryrefslogtreecommitdiff
path: root/src/wydawca.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/wydawca.h')
-rw-r--r--src/wydawca.h20
1 files changed, 17 insertions, 3 deletions
diff --git a/src/wydawca.h b/src/wydawca.h
index 2307bad..94b7ee3 100644
--- a/src/wydawca.h
+++ b/src/wydawca.h
@@ -1,160 +1,174 @@
1/* wydawca - automatic release submission daemon 1/* wydawca - automatic release submission daemon
2 Copyright (C) 2007, 2008, 2009, 2010 Sergey Poznyakoff 2 Copyright (C) 2007, 2008, 2009, 2010 Sergey Poznyakoff
3 3
4 This program is free software; you can redistribute it and/or modify it 4 This program is free software; you can redistribute it and/or modify it
5 under the terms of the GNU General Public License as published by the 5 under the terms of the GNU General Public License as published by the
6 Free Software Foundation; either version 3 of the License, or (at your 6 Free Software Foundation; either version 3 of the License, or (at your
7 option) any later version. 7 option) any later version.
8 8
9 This program is distributed in the hope that it will be useful, 9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of 10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details. 12 GNU General Public License for more details.
13 13
14 You should have received a copy of the GNU General Public License along 14 You should have received a copy of the GNU General Public License along
15 with this program. If not, see <http://www.gnu.org/licenses/>. */ 15 with this program. If not, see <http://www.gnu.org/licenses/>. */
16 16
17#ifdef HAVE_CONFIG_H 17#ifdef HAVE_CONFIG_H
18# include <config.h> 18# include <config.h>
19#endif 19#endif
20#include <stdio.h> 20#include <stdio.h>
21#include <stdlib.h> 21#include <stdlib.h>
22#include <stdarg.h> 22#include <stdarg.h>
23#include <unistd.h> 23#include <unistd.h>
24#include <syslog.h> 24#include <syslog.h>
25#include <getopt.h> 25#include <getopt.h>
26#include <errno.h> 26#include <errno.h>
27#include <string.h> 27#include <string.h>
28#include <ctype.h> 28#include <ctype.h>
29#include <pwd.h> 29#include <pwd.h>
30#include <grp.h> 30#include <grp.h>
31#include <signal.h> 31#include <signal.h>
32#include <limits.h> 32#include <limits.h>
33#include <dirent.h> 33#include <dirent.h>
34#include <sys/stat.h> 34#include <sys/stat.h>
35#include <sys/socket.h> 35#include <sys/socket.h>
36#include <netinet/in.h> 36#include <netinet/in.h>
37#include <sys/un.h> 37#include <sys/un.h>
38#include <sys/wait.h> 38#include <sys/wait.h>
39#include <netdb.h> 39#include <netdb.h>
40#include <arpa/inet.h> 40#include <arpa/inet.h>
41#include <fcntl.h> 41#include <fcntl.h>
42#include <time.h> 42#include <time.h>
43#include <sysexits.h> 43#include <sysexits.h>
44#include <fnmatch.h>
45#include <regex.h>
44 46
45#include <mailutils/types.h> 47#include <mailutils/types.h>
46#include <mailutils/url.h> 48#include <mailutils/url.h>
47#include <mailutils/errno.h> 49#include <mailutils/errno.h>
48 50
49#include "error.h"
50#include "xalloc.h"
51#include "backupfile.h"
52#include "grecs.h" 51#include "grecs.h"
53#include "wordsplit.h" 52#include "wordsplit.h"
54 53
55#define SP(s) ((s) ? (s) : "NONE") 54#define SP(s) ((s) ? (s) : "NONE")
56 55
57#define WYDAWCA_EX_AGAIN 1 56#define WYDAWCA_EX_AGAIN 1
58 57
59/* The range of directive versions we accept (major * 100 + minor) */ 58/* The range of directive versions we accept (major * 100 + minor) */
60#define MIN_DIRECTIVE_VERSION 101 59#define MIN_DIRECTIVE_VERSION 101
61#define MAX_DIRECTIVE_VERSION 101 60#define MAX_DIRECTIVE_VERSION 101
62 61
63/* Default modes for mkdir and creat commands: rely on the umask value */ 62/* Default modes for mkdir and creat commands: rely on the umask value */
64#define MKDIR_PERMISSIONS 0777 63#define MKDIR_PERMISSIONS 0777
65#define CREAT_PERMISSIONS 0666 64#define CREAT_PERMISSIONS 0666
66 65
67#define SUF_SIG ".sig" 66#define SUF_SIG ".sig"
68#define SUF_SIG_LEN (sizeof (SUF_SIG) - 1) 67#define SUF_SIG_LEN (sizeof (SUF_SIG) - 1)
69#define SUF_DIR ".directive.asc" 68#define SUF_DIR ".directive.asc"
70#define SUF_DIR_LEN (sizeof (SUF_DIR) - 1) 69#define SUF_DIR_LEN (sizeof (SUF_DIR) - 1)
71 70
72#define __cat2__(a,b) a ## b 71#define __cat2__(a,b) a ## b
73#define __cat3__(a,b,c) a ## b ## c 72#define __cat3__(a,b,c) a ## b ## c
74#define NITEMS(a) (sizeof(a)/sizeof((a)[0])) 73#define NITEMS(a) (sizeof(a)/sizeof((a)[0]))
75 74
76enum dictionary_id { 75enum dictionary_id {
77 project_uploader_dict, /* Contains names, gpg-keys, emails and 76 project_uploader_dict, /* Contains names, gpg-keys, emails and
78 real names of the project uploaders */ 77 real names of the project uploaders */
79 project_owner_dict, /* Contains names and emails of the project 78 project_owner_dict, /* Contains names and emails of the project
80 owners */ 79 owners */
81 dictionary_count 80 dictionary_count
82}; 81};
83 82
84enum dictionary_type 83enum dictionary_type
85 { 84 {
86 dictionary_none, /* Undefined or no dictionary */ 85 dictionary_none, /* Undefined or no dictionary */
87 dictionary_sql, /* Use SQL database */ 86 dictionary_sql, /* Use SQL database */
88 dictionary_builtin, /* Use built-in facilities */ 87 dictionary_builtin, /* Use built-in facilities */
89 dictionary_external /* Invoke an external program */ 88 dictionary_external /* Invoke an external program */
90 }; 89 };
91 90
92struct dictionary 91struct dictionary
93{ 92{
94 enum dictionary_id id; 93 enum dictionary_id id;
95 enum dictionary_type type; /* Dictionary type */ 94 enum dictionary_type type; /* Dictionary type */
96 char *query; /* Query template */ 95 char *query; /* Query template */
97 int parmc; /* Number of entries in paramv */ 96 int parmc; /* Number of entries in paramv */
98 char **parmv; /* Parameters. The semantics differs 97 char **parmv; /* Parameters. The semantics differs
99 depending on type. For SQL: 98 depending on type. For SQL:
100 0 - Identifier of the SQL struct 99 0 - Identifier of the SQL struct
101 to use; */ 100 to use; */
102 101
103 int init_passed; /* Initialization count */ 102 int init_passed; /* Initialization count */
104 char *result; /* Result storage */ 103 char *result; /* Result storage */
105 size_t result_size; /* Size of result */ 104 size_t result_size; /* Size of result */
106 unsigned ncol; /* Number of columns per row */ 105 unsigned ncol; /* Number of columns per row */
107 unsigned nrow; /* Number of rows */ 106 unsigned nrow; /* Number of rows */
108 107
109 void *storage; 108 void *storage;
110}; 109};
111 110
112 111
112enum backup_type
113 {
114 no_backups, /* Don't make backups */
115 simple_backups, /* Make only simple backups */
116 numbered_existing_backups,/* Make numbered backups for files that already
117 have such backups and simple backups for the
118 rest */
119 numbered_backups, /* Make only numbered backups */
120 };
121
122extern char const *simple_backup_suffix;
123
124char *find_backup_file_name (char const *, enum backup_type);
125
126
113/* Archive types */ 127/* Archive types */
114 128
115enum archive_type 129enum archive_type
116 { 130 {
117 archive_none, /* No archivation requested */ 131 archive_none, /* No archivation requested */
118 archive_directory, /* Archive by moving files to a separate directory 132 archive_directory, /* Archive by moving files to a separate directory
119 hierarchy */ 133 hierarchy */
120 archive_tar /* Archive by appending to a tar file (tar -r) */ 134 archive_tar /* Archive by appending to a tar file (tar -r) */
121 }; 135 };
122 136
123struct archive_descr 137struct archive_descr
124{ 138{
125 enum archive_type type; /* Archivation type */ 139 enum archive_type type; /* Archivation type */
126 char *name; /* Directory name if type==archive_directory, 140 char *name; /* Directory name if type==archive_directory,
127 archive file name if type==archive_tar */ 141 archive file name if type==archive_tar */
128 enum backup_type backup_type; /* Requested backup type if 142 enum backup_type backup_type; /* Requested backup type if
129 type == archive_directory */ 143 type == archive_directory */
130}; 144};
131 145
132 146
133/* Type of file in a triplet */ 147/* Type of file in a triplet */
134enum file_type 148enum file_type
135 { 149 {
136 file_dist, /* Something to be distributed */ 150 file_dist, /* Something to be distributed */
137 file_signature, /* Detached signature (.sig) */ 151 file_signature, /* Detached signature (.sig) */
138 file_directive, /* Directive (.directive.asc) */ 152 file_directive, /* Directive (.directive.asc) */
139 }; 153 };
140#define FILE_TYPE_COUNT (file_directive+1) 154#define FILE_TYPE_COUNT (file_directive+1)
141 155
142/* Part of a triplet */ 156/* Part of a triplet */
143struct file_info 157struct file_info
144{ 158{
145 enum file_type type; /* Part type */ 159 enum file_type type; /* Part type */
146 char *name; /* File name */ 160 char *name; /* File name */
147 unsigned root_len; /* Length of root part in name */ 161 unsigned root_len; /* Length of root part in name */
148 struct stat sb; 162 struct stat sb;
149}; 163};
150 164