xref: /openbsd-src/usr.sbin/acme-client/parse.h (revision 6736ff2b7d5e80caf05b222894ddde9153fd72c8)
1*6736ff2bSflorian /*	$OpenBSD: parse.h,v 1.15 2020/09/14 16:00:17 florian Exp $ */
23943d840Sbenno /*
33943d840Sbenno  * Copyright (c) 2016 Sebastian Benoit <benno@openbsd.org>
43943d840Sbenno  *
53943d840Sbenno  * Permission to use, copy, modify, and distribute this software for any
63943d840Sbenno  * purpose with or without fee is hereby granted, provided that the above
73943d840Sbenno  * copyright notice and this permission notice appear in all copies.
83943d840Sbenno  *
93943d840Sbenno  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
103943d840Sbenno  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
113943d840Sbenno  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
123943d840Sbenno  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
133943d840Sbenno  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
143943d840Sbenno  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
153943d840Sbenno  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
163943d840Sbenno  */
173943d840Sbenno #ifndef PARSE_H
183943d840Sbenno #define PARSE_H
193943d840Sbenno 
203943d840Sbenno #include <sys/queue.h>
213943d840Sbenno 
2257e2f549Ssthen #define AUTH_MAXLEN	120	/* max length of an authority_c name */
233943d840Sbenno #define DOMAIN_MAXLEN	255	/* max len of a domain name (rfc2181) */
243943d840Sbenno 
253943d840Sbenno /*
263943d840Sbenno  * XXX other size limits needed?
273943d840Sbenno  * limit all paths to PATH_MAX
283943d840Sbenno  */
293943d840Sbenno 
3065a104faSflorian enum keytype {
3165a104faSflorian 	KT_RSA = 0,
3265a104faSflorian 	KT_ECDSA
3365a104faSflorian };
3465a104faSflorian 
353943d840Sbenno struct authority_c {
36221ac2aaSbenno 	TAILQ_ENTRY(authority_c)	 entry;
373943d840Sbenno 	char				*name;
383943d840Sbenno 	char				*api;
393943d840Sbenno 	char				*account;
404f8b772fSflorian 	enum keytype			 keytype;
41*6736ff2bSflorian 	char				*contact;
423943d840Sbenno };
433943d840Sbenno 
443943d840Sbenno struct domain_c {
45221ac2aaSbenno 	TAILQ_ENTRY(domain_c)	 entry;
46221ac2aaSbenno 	TAILQ_HEAD(, altname_c)	 altname_list;
47383e31e9Sbenno 	int			 altname_count;
4865a104faSflorian 	enum keytype		 keytype;
4987f5451dSbenno 	char			*handle;
503943d840Sbenno 	char			*domain;
513943d840Sbenno 	char			*key;
523943d840Sbenno 	char			*cert;
5333febeb9Sflorian 	char			*chain;
5470bcb874Sbenno 	char			*fullchain;
553943d840Sbenno 	char			*auth;
566c0ff37dSbenno 	char			*challengedir;
573943d840Sbenno };
583943d840Sbenno 
593943d840Sbenno struct altname_c {
60221ac2aaSbenno 	TAILQ_ENTRY(altname_c)	 entry;
613943d840Sbenno 	char		       	*domain;
623943d840Sbenno };
633943d840Sbenno 
643943d840Sbenno struct keyfile {
653943d840Sbenno 	LIST_ENTRY(keyfile)	 entry;
663943d840Sbenno 	char			*name;
673943d840Sbenno };
683943d840Sbenno 
693943d840Sbenno #define ACME_OPT_VERBOSE	0x00000001
702570ecd0Sflorian #define ACME_OPT_CHECK		0x00000004
713943d840Sbenno 
723943d840Sbenno struct acme_conf {
733943d840Sbenno 	int			 opts;
74221ac2aaSbenno 	TAILQ_HEAD(, authority_c) authority_list;
75221ac2aaSbenno 	TAILQ_HEAD(, domain_c)	 domain_list;
763943d840Sbenno 	LIST_HEAD(, keyfile)	 used_key_list;
773943d840Sbenno };
783943d840Sbenno 
793943d840Sbenno struct acme_conf	*parse_config(const char *, int);
803943d840Sbenno int			 cmdline_symset(char *);
813943d840Sbenno 
823943d840Sbenno /* use these to find a authority or domain by name */
833943d840Sbenno struct authority_c	*authority_find(struct acme_conf *, char *);
843943d840Sbenno struct authority_c	*authority_find0(struct acme_conf *);
8587f5451dSbenno struct domain_c		*domain_find_handle(struct acme_conf *, char *);
863943d840Sbenno 
873943d840Sbenno int			 domain_valid(const char *);
883943d840Sbenno 
893943d840Sbenno #endif /* PARSE_H */
90