scd: Do not conflict if a card with another serialno is demanded.
[gnupg.git] / tools / gpg-wks.h
1 /* gpg-wks.h - Common definitions for wks server and client.
2  * Copyright (C) 2016 g10 Code GmbH
3  * Copyright (C) 2016 Bundesamt für Sicherheit in der Informationstechnik
4  *
5  * This file is part of GnuPG.
6  *
7  * This file is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU Lesser General Public License as
9  * published by the Free Software Foundation; either version 2.1 of
10  * the License, or (at your option) any later version.
11  *
12  * This file is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public License
18  * along with this program; if not, see <https://www.gnu.org/licenses/>.
19  */
20
21 #ifndef GNUPG_GPG_WKS_H
22 #define GNUPG_GPG_WKS_H
23
24 #include "../common/util.h"
25 #include "../common/strlist.h"
26 #include "mime-maker.h"
27
28 /* The draft version we implement.  */
29 #define WKS_DRAFT_VERSION 3
30
31
32 /* We keep all global options in the structure OPT.  */
33 struct
34 {
35   int verbose;
36   unsigned int debug;
37   int quiet;
38   int use_sendmail;
39   int with_colons;
40   const char *output;
41   const char *gpg_program;
42   const char *directory;
43   const char *default_from;
44   strlist_t extra_headers;
45 } opt;
46
47 /* Debug values and macros.  */
48 #define DBG_MIME_VALUE        1 /* Debug the MIME structure.  */
49 #define DBG_PARSER_VALUE      2 /* Debug the Mail parser.  */
50 #define DBG_CRYPTO_VALUE      4 /* Debug low level crypto.  */
51 #define DBG_MEMORY_VALUE     32 /* Debug memory allocation stuff.  */
52 #define DBG_MEMSTAT_VALUE   128 /* Show memory statistics.  */
53 #define DBG_IPC_VALUE      1024 /* Debug assuan communication.  */
54 #define DBG_EXTPROG_VALUE 16384 /* debug external program calls */
55
56 #define DBG_MIME     (opt.debug & DBG_MIME_VALUE)
57 #define DBG_PARSER   (opt.debug & DBG_PARSER_VALUE)
58 #define DBG_CRYPTO   (opt.debug & DBG_CRYPTO_VALUE)
59
60
61 /* The parsed policy flags. */
62 struct policy_flags_s
63 {
64   char *submission_address;
65   unsigned int mailbox_only : 1;
66   unsigned int dane_only : 1;
67   unsigned int auth_submit : 1;
68   unsigned int protocol_version; /* The supported WKS_DRAFT_VERION or 0  */
69   unsigned int max_pending;      /* Seconds to wait for a confirmation.  */
70 };
71 typedef struct policy_flags_s *policy_flags_t;
72
73
74 /* An object to convey user ids of a key.  */
75 struct uidinfo_list_s
76 {
77   struct uidinfo_list_s *next;
78   time_t created; /* Time the userid was created.  */
79   char *mbox;  /* NULL or the malloced mailbox from UID.  */
80   char uid[1];
81 };
82 typedef struct uidinfo_list_s *uidinfo_list_t;
83
84
85
86 /*-- wks-util.c --*/
87 void wks_set_status_fd (int fd);
88 void wks_write_status (int no, const char *format, ...) GPGRT_ATTR_PRINTF(2,3);
89 void free_uidinfo_list (uidinfo_list_t list);
90 gpg_error_t wks_get_key (estream_t *r_key, const char *fingerprint,
91                          const char *addrspec, int exact);
92 gpg_error_t wks_list_key (estream_t key, char **r_fpr,
93                           uidinfo_list_t *r_mboxes);
94 gpg_error_t wks_filter_uid (estream_t *r_newkey, estream_t key,
95                             const char *uid, int binary);
96 gpg_error_t wks_send_mime (mime_maker_t mime);
97 gpg_error_t wks_parse_policy (policy_flags_t flags, estream_t stream,
98                               int ignore_unknown);
99 void wks_free_policy (policy_flags_t policy);
100
101 gpg_error_t wks_fname_from_userid (const char *userid, int hash_only,
102                                    char **r_fname, char **r_addrspec);
103 gpg_error_t wks_compute_hu_fname (char **r_fname, const char *addrspec);
104 gpg_error_t wks_cmd_install_key (const char *fname, const char *userid);
105 gpg_error_t wks_cmd_remove_key (const char *userid);
106 gpg_error_t wks_cmd_print_wkd_hash (const char *userid);
107 gpg_error_t wks_cmd_print_wkd_url (const char *userid);
108
109
110 /*-- wks-receive.c --*/
111
112 /* Flag values for the receive callback.  */
113 #define WKS_RECEIVE_DRAFT2 1
114
115 gpg_error_t wks_receive (estream_t fp,
116                          gpg_error_t (*result_cb)(void *opaque,
117                                                   const char *mediatype,
118                                                   estream_t data,
119                                                   unsigned int flags),
120                          void *cb_data);
121
122
123
124 #endif /*GNUPG_GPG_WKS_H*/