common: Add an assuan logging monitor.
[gnupg.git] / dirmngr / dirmngr.h
1 /* dirmngr.h - Common definitions for the dirmngr
2  * Copyright (C) 2002 Klarälvdalens Datakonsult AB
3  * Copyright (C) 2004, 2015 g10 Code GmbH
4  * Copyright (C) 2014 Werner Koch
5  *
6  * This file is part of GnuPG.
7  *
8  * GnuPG is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 3 of the License, or
11  * (at your option) any later version.
12  *
13  * GnuPG is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, see <http://www.gnu.org/licenses/>.
20  */
21
22 #ifndef DIRMNGR_H
23 #define DIRMNGR_H
24
25 #include "./dirmngr-err.h"
26 #define map_assuan_err(a) \
27         map_assuan_err_with_source (GPG_ERR_SOURCE_DEFAULT, (a))
28 #include <errno.h>
29 #include <gcrypt.h>
30 #include <ksba.h>
31
32 #include "../common/util.h"
33 #include "../common/membuf.h"
34 #include "../common/sysutils.h" /* (gnupg_fd_t) */
35 #include "../common/i18n.h"
36 #include "http.h"     /* (parsed_uri_t) */
37
38 /* This objects keeps information about a particular LDAP server and
39    is used as item of a single linked list of servers. */
40 struct ldap_server_s
41 {
42   struct ldap_server_s* next;
43
44   char *host;
45   int   port;
46   char *user;
47   char *pass;
48   char *base;
49 };
50 typedef struct ldap_server_s *ldap_server_t;
51
52
53 /* This objects is used to build a list of URI consisting of the
54    original and the parsed URI.  */
55 struct uri_item_s
56 {
57   struct uri_item_s *next;
58   parsed_uri_t parsed_uri;  /* The broken down URI.  */
59   char uri[1];              /* The original URI.  */
60 };
61 typedef struct uri_item_s *uri_item_t;
62
63
64 /* A list of fingerprints.  */
65 struct fingerprint_list_s;
66 typedef struct fingerprint_list_s *fingerprint_list_t;
67 struct fingerprint_list_s
68 {
69   fingerprint_list_t next;
70   char hexfpr[20+20+1];
71 };
72
73
74 /* A large struct named "opt" to keep global flags.  */
75 struct
76 {
77   unsigned int debug; /* debug flags (DBG_foo_VALUE) */
78   int verbose;        /* verbosity level */
79   int quiet;          /* be as quiet as possible */
80   int dry_run;        /* don't change any persistent data */
81   int batch;          /* batch mode */
82   const char *homedir_cache; /* Dir for cache files (/var/cache/dirmngr).  */
83
84   char *config_filename;     /* Name of a config file, which will be
85                                 reread on a HUP if it is not NULL. */
86
87   char *ldap_wrapper_program; /* Override value for the LDAP wrapper
88                                  program.  */
89   char *http_wrapper_program; /* Override value for the HTTP wrapper
90                                  program.  */
91
92   int running_detached; /* We are running in detached mode.  */
93   int use_tor;          /* Tor mode has been enabled.  */
94
95   int force;          /* Force loading outdated CRLs. */
96
97   int disable_http;       /* Do not use HTTP at all.  */
98   int disable_ldap;       /* Do not use LDAP at all.  */
99   int honor_http_proxy;   /* Honor the http_proxy env variable. */
100   const char *http_proxy; /* The default HTTP proxy.  */
101   const char *ldap_proxy; /* Use given LDAP proxy.  */
102   int only_ldap_proxy;    /* Only use the LDAP proxy; no fallback.  */
103   int ignore_http_dp;     /* Ignore HTTP CRL distribution points.  */
104   int ignore_ldap_dp;     /* Ignore LDAP CRL distribution points.  */
105   int ignore_ocsp_service_url; /* Ignore OCSP service URLs as given in
106                                   the certificate.  */
107
108   /* A list of certificate extension OIDs which are ignored so that
109      one can claim that a critical extension has been handled.  One
110      OID per string.  */
111   strlist_t ignored_cert_extensions;
112
113   int allow_ocsp;     /* Allow using OCSP. */
114
115   int max_replies;
116   unsigned int ldaptimeout;
117
118   ldap_server_t ldapservers;
119   int add_new_ldapservers;
120
121   const char *ocsp_responder;     /* Standard OCSP responder's URL. */
122   fingerprint_list_t ocsp_signer; /* The list of fingerprints with allowed
123                                      standard OCSP signer certificates.  */
124
125   unsigned int ocsp_max_clock_skew; /* Allowed seconds of clocks skew. */
126   unsigned int ocsp_max_period;     /* Seconds a response is at maximum
127                                        considered valid after thisUpdate. */
128   unsigned int ocsp_current_period; /* Seconds a response is considered
129                                        current after nextUpdate. */
130
131   strlist_t keyserver;              /* List of default keyservers.  */
132 } opt;
133
134
135 #define DBG_X509_VALUE    1     /* debug x.509 parsing */
136 #define DBG_CRYPTO_VALUE  4     /* debug low level crypto */
137 #define DBG_MEMORY_VALUE  32    /* debug memory allocation stuff */
138 #define DBG_CACHE_VALUE   64    /* debug the caching */
139 #define DBG_MEMSTAT_VALUE 128   /* show memory statistics */
140 #define DBG_HASHING_VALUE 512   /* debug hashing operations */
141 #define DBG_IPC_VALUE     1024  /* debug assuan communication */
142 #define DBG_LOOKUP_VALUE  8192  /* debug lookup details */
143
144 #define DBG_X509    (opt.debug & DBG_X509_VALUE)
145 #define DBG_CRYPTO  (opt.debug & DBG_CRYPTO_VALUE)
146 #define DBG_MEMORY  (opt.debug & DBG_MEMORY_VALUE)
147 #define DBG_CACHE   (opt.debug & DBG_CACHE_VALUE)
148 #define DBG_HASHING (opt.debug & DBG_HASHING_VALUE)
149 #define DBG_IPC     (opt.debug & DBG_IPC_VALUE)
150 #define DBG_LOOKUP  (opt.debug & DBG_LOOKUP_VALUE)
151
152 /* A simple list of certificate references. */
153 struct cert_ref_s
154 {
155   struct cert_ref_s *next;
156   unsigned char fpr[20];
157 };
158 typedef struct cert_ref_s *cert_ref_t;
159
160 /* Forward references; access only through server.c.  */
161 struct server_local_s;
162
163 /* Connection control structure.  */
164 struct server_control_s
165 {
166   int refcount;      /* Count additional references to this object.  */
167   int no_server;     /* We are not running under server control. */
168   int status_fd;     /* Only for non-server mode. */
169   struct server_local_s *server_local;
170   int force_crl_refresh; /* Always load a fresh CRL. */
171
172   int check_revocations_nest_level; /* Internal to check_revovations.  */
173   cert_ref_t ocsp_certs; /* Certificates from the current OCSP
174                             response. */
175
176   int audit_events;  /* Send audit events to client.  */
177   char *http_proxy;  /* The used http_proxy or NULL.  */
178 };
179
180
181 /*-- dirmngr.c --*/
182 void dirmngr_exit( int );  /* Wrapper for exit() */
183 void dirmngr_init_default_ctrl (ctrl_t ctrl);
184 void dirmngr_deinit_default_ctrl (ctrl_t ctrl);
185 void dirmngr_sighup_action (void);
186
187
188 /*-- Various housekeeping functions.  --*/
189 void ks_hkp_housekeeping (time_t curtime);
190
191
192 /*-- server.c --*/
193 ldap_server_t get_ldapservers_from_ctrl (ctrl_t ctrl);
194 ksba_cert_t get_cert_local (ctrl_t ctrl, const char *issuer);
195 ksba_cert_t get_issuing_cert_local (ctrl_t ctrl, const char *issuer);
196 ksba_cert_t get_cert_local_ski (ctrl_t ctrl,
197                                 const char *name, ksba_sexp_t keyid);
198 gpg_error_t get_istrusted_from_client (ctrl_t ctrl, const char *hexfpr);
199 void start_command_handler (gnupg_fd_t fd);
200 gpg_error_t dirmngr_status (ctrl_t ctrl, const char *keyword, ...);
201 gpg_error_t dirmngr_status_help (ctrl_t ctrl, const char *text);
202 gpg_error_t dirmngr_tick (ctrl_t ctrl);
203
204
205
206 #endif /*DIRMNGR_H*/