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