115 if (
d->data &&
d->free_data)
d->free_data((
void*)
d->data);
138 dest->free_data = free;
151 "00",
"01",
"02",
"03",
"04",
"05",
"06",
"07",
"08",
"09",
"0a",
"0b",
"0c",
"0d",
"0e",
"0f",
152 "10",
"11",
"12",
"13",
"14",
"15",
"16",
"17",
"18",
"19",
"1a",
"1b",
"1c",
"1d",
"1e",
"1f",
153 "20",
"21",
"22",
"23",
"24",
"25",
"26",
"27",
"28",
"29",
"2a",
"2b",
"2c",
"2d",
"2e",
"2f",
154 "30",
"31",
"32",
"33",
"34",
"35",
"36",
"37",
"38",
"39",
"3a",
"3b",
"3c",
"3d",
"3e",
"3f",
155 "40",
"41",
"42",
"43",
"44",
"45",
"46",
"47",
"48",
"49",
"4a",
"4b",
"4c",
"4d",
"4e",
"4f",
156 "50",
"51",
"52",
"53",
"54",
"55",
"56",
"57",
"58",
"59",
"5a",
"5b",
"5c",
"5d",
"5e",
"5f",
157 "60",
"61",
"62",
"63",
"64",
"65",
"66",
"67",
"68",
"69",
"6a",
"6b",
"6c",
"6d",
"6e",
"6f",
158 "70",
"71",
"72",
"73",
"74",
"75",
"76",
"77",
"78",
"79",
"7a",
"7b",
"7c",
"7d",
"7e",
"7f",
159 "80",
"81",
"82",
"83",
"84",
"85",
"86",
"87",
"88",
"89",
"8a",
"8b",
"8c",
"8d",
"8e",
"8f",
160 "90",
"91",
"92",
"93",
"94",
"95",
"96",
"97",
"98",
"99",
"9a",
"9b",
"9c",
"9d",
"9e",
"9f",
161 "a0",
"a1",
"a2",
"a3",
"a4",
"a5",
"a6",
"a7",
"a8",
"a9",
"aa",
"ab",
"ac",
"ad",
"ae",
"af",
162 "b0",
"b1",
"b2",
"b3",
"b4",
"b5",
"b6",
"b7",
"b8",
"b9",
"ba",
"bb",
"bc",
"bd",
"be",
"bf",
163 "c0",
"c1",
"c2",
"c3",
"c4",
"c5",
"c6",
"c7",
"c8",
"c9",
"ca",
"cb",
"cc",
"cd",
"ce",
"cf",
164 "d0",
"d1",
"d2",
"d3",
"d4",
"d5",
"d6",
"d7",
"d8",
"d9",
"da",
"db",
"dc",
"dd",
"de",
"df",
165 "e0",
"e1",
"e2",
"e3",
"e4",
"e5",
"e6",
"e7",
"e8",
"e9",
"ea",
"eb",
"ec",
"ed",
"ee",
"ef",
166 "f0",
"f1",
"f2",
"f3",
"f4",
"f5",
"f6",
"f7",
"f8",
"f9",
"fa",
"fb",
"fc",
"fd",
"fe",
"ff",
181 for (
i = 0;
i <
data->len; ++
i) {
183 if (
i && separator) *cp++ = separator;
199 if (
idx+1 ==
a->nelts) {
203 ps = (
a->elts + (
idx *
a->elt_size));
204 pe =
ps +
a->elt_size;
216 assert(
sizeof(
void*) ==
a->elt_size);
221 m =
a->nelts - (
i+1);
237 return (array ==
NULL) || (array->
nelts == 0);
274 if (
a1 ==
a2)
return 1;
275 if (!
a1 || !
a2)
return 0;
293 for (
i = 0;
i <
src->nelts;
i++) {
308 for (
i = 0;
i <
src->nelts; ++
i) {
324 for (
i = 0;
i <
src->nelts;
i++) {
339 for (
i = 0;
i <
src->nelts;
i++) {
601 if (depth >=
ctx->patterns->nelts) {
607 "path=%s depth=%d pattern=%s",
path, depth,
pattern);
615 "candidate=%s", finfo.
name);
621 "candidate=%s matches pattern", finfo.
name);
624 "need to go deeper");
635 "invoking inspector on name=%s", finfo.
name);
669 const char *
path, ...)
677 ctx.follow_links = 1;
752 switch (
info.filetype) {
764 const char *
path,
int follow_links)
771 ctx.follow_links = follow_links;
819 while ((
c = *cp++)) {
854 if (domain[0] !=
'*' || domain[1] !=
'.')
return 0;
877 for (
i = 0;
i < domains->
nelts; ++
i) {
881 for (j = 0; j <
minimal->nelts; ++j) {
891 for (j =
i+1; j < domains->
nelts; ++j) {
912 for (
i = 0;
i < domains->
nelts; ++
i) {
924 for (
i = 0;
i < domains->
nelts; ++
i) {
927 return (domain[0] ==
'*' && domain[1] ==
'.');
949 const char *
uri,
const char **
perr)
959 err =
"missing uri identifier";
963 err =
"missing hostname";
966 err =
"invalid hostname";
972 err =
"invalid port";
984 err =
"missing local part";
986 else if (
s == (
uri + strlen(
uri)-1)) {
987 err =
"missing hostname";
990 err =
"double period";
995 err =
"whitespace in uri";
1012 *
perr =
"missing uri scheme";
1026 *
perr =
"missing uri scheme";
1031 *
perr =
"uri scheme must be http or https";
1124#define N6 (unsigned int)-1
1128 N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
1129 N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
1130 N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6, 62,
N6,
N6,
1131 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
N6,
N6,
N6,
N6,
N6,
N6,
1132 N6, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
1133 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
N6,
N6,
N6,
N6, 63,
1134 N6, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
1135 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
N6,
N6,
N6,
N6,
N6,
1136 N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
1137 N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
1138 N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
1139 N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
1140 N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
1141 N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
1142 N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
1143 N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6,
N6
1146 'A',
'B',
'C',
'D',
'E',
'F',
'G',
'H',
'I',
'J',
1147 'K',
'L',
'M',
'N',
'O',
'P',
'Q',
'R',
'S',
'T',
1148 'U',
'V',
'W',
'X',
'Y',
'Z',
'a',
'b',
'c',
'd',
1149 'e',
'f',
'g',
'h',
'i',
'j',
'k',
'l',
'm',
'n',
1150 'o',
'p',
'q',
'r',
's',
't',
'u',
'v',
'w',
'x',
1151 'y',
'z',
'0',
'1',
'2',
'3',
'4',
'5',
'6',
'7',
1152 '8',
'9',
'-',
'_',
' ',
' ',
' ',
' ',
' ',
' ',
1155#define BASE64URL_CHAR(x) BASE64URL_CHARS[ (unsigned int)(x) & 0x3fu ]
1160 const unsigned char *
e = (
const unsigned char *)encoded;
1161 const unsigned char *
p =
e;
1175 for (;
i <
mlen;
i += 4) {
1180 *
d++ = (
unsigned char)(
n >> 16);
1181 *
d++ = (
unsigned char)(
n >> 8 & 0xffu);
1182 *
d++ = (
unsigned char)(
n & 0xffu);
1189 *
d++ = (
unsigned char)(
n >> 16);
1196 *
d++ = (
unsigned char)(
n >> 16);
1197 *
d++ = (
unsigned char)(
n >> 8 & 0xffu);
1211 const unsigned char *
udata = (
const unsigned char*)
data->data;
1215 for (
i = 0;
i <
len-2;
i+= 3) {
1224 if (
i == (
len - 1)) {
1312 while (
ctx->i <
ctx->slen
1313 && (((
c =
ctx->s[
ctx->i]) ==
' ') || (
c ==
'\t'))) {
1316 return (
ctx->i <
ctx->slen);
1322 while (
ctx->i <
ctx->slen
1323 && (((
c =
ctx->s[
ctx->i]) !=
' ') && (
c !=
'\t'))) {
1326 return (
ctx->i <
ctx->slen);
1332 for (j =
ctx->i; j <
ctx->slen; ++j) {
1333 if (
ctx->s[j] ==
c) {
1380 ctx->link_start =
ctx->link_len = 0;
1384 ctx->link_start =
ctx->i;
1540 ctx.relation = relation;
1555 for(
p =
cth; *
p && *
p !=
' ' && *
p !=
';'; ++
p)
const char apr_size_t len
char * strstr(char *s1, char *s2)
APR general purpose library routines.
APR Portability Routines.
apr_size_t const unsigned char unsigned int unsigned int d
request_rec int int apr_table_t const char * path
const char server_rec server_rec ** ps
ap_vhost_iterate_conn_cb void * baton
#define APR_STATUS_IS_EAGAIN(s)
#define APR_STATUS_IS_ENOTIMPL(s)
#define APR_STATUS_IS_ENOENT(s)
#define APR_STATUS_IS_EOF(s)
apr_file_t apr_off_t start
apr_brigade_flush void * ctx
apr_bucket apr_bucket_brigade * a
apr_dbd_transaction_t int mode
const char apr_ssize_t slen
const char int case_sensitive
apr_text_header const char * text
const char int apr_pool_t * pool
apr_int32_t apr_fileperms_t
const char apr_fileperms_t perms
const char apr_int32_t wanted
#define APR_FILEPATH_SECUREROOT
apr_vformatter_buff_t * c
apr_vformatter_buff_t const char va_list ap
#define apr_pool_create(newpool, parent)
#define apr_pcalloc(p, size)
#define APR_ARRAY_PUSH(ary, type)
#define APR_ARRAY_IDX(ary, i, type)
apr_int32_t apr_int32_t apr_int32_t err
#define apr_time_from_msec(msec)
apr_int64_t apr_interval_time_t
apr_size_t apr_size_t max
#define apr_time_from_sec(sec)
void md_log_perror(const char *file, int line, md_log_level_t level, apr_status_t rv, apr_pool_t *p, const char *fmt,...)
const char * md_link_find_relation(const apr_table_t *headers, apr_pool_t *pool, const char *relation)
apr_status_t md_util_rm_recursive(const char *fpath, apr_pool_t *p, int max_level)
apr_size_t md_util_base64url_decode(md_data_t *decoded, const char *encoded, apr_pool_t *pool)
static apr_status_t prm_recursive(void *baton, apr_pool_t *p, apr_pool_t *ptemp, va_list ap)
apr_status_t md_util_pool_do(md_util_action *cb, void *baton, apr_pool_t *p)
apr_status_t md_util_try(md_util_try_fn *fn, void *baton, int ignore_errs, apr_interval_time_t timeout, apr_interval_time_t start_delay, apr_interval_time_t max_delay, int backoff)
apr_array_header_t * md_array_str_clone(apr_pool_t *p, apr_array_header_t *src)
apr_status_t md_util_pool_vdo(md_util_vaction *cb, void *baton, apr_pool_t *p,...)
void md_data_init_str(md_data_t *d, const char *str)
static apr_status_t uri_check(apr_uri_t *uri_parsed, apr_pool_t *p, const char *uri, const char **perr)
apr_status_t md_util_is_dir(const char *path, apr_pool_t *pool)
int md_array_remove(struct apr_array_header_t *a, void *elem)
int md_dns_domains_match(const apr_array_header_t *domains, const char *name)
apr_status_t md_util_files_do(md_util_fdo_cb *cb, void *baton, apr_pool_t *p, const char *path,...)
static apr_status_t match_and_do(md_util_fwalk_t *ctx, const char *path, int depth, apr_pool_t *p, apr_pool_t *ptemp)
static apr_status_t tree_do(void *baton, apr_pool_t *p, apr_pool_t *ptemp, const char *path)
void md_data_pinit(md_data_t *d, apr_size_t len, apr_pool_t *p)
static int skip_ws(link_ctx *ctx)
static int read_link(link_ctx *ctx)
static const unsigned int BASE64URL_UINT6[]
int md_dns_is_wildcard(apr_pool_t *p, const char *domain)
apr_status_t md_text_freplace(const char *fpath, apr_fileperms_t perms, apr_pool_t *p, const char *text)
static int read_chr(link_ctx *ctx, char c)
#define BASE64URL_CHAR(x)
static const char *const hex_const[]
apr_status_t md_util_abs_uri_check(apr_pool_t *p, const char *uri, const char **perr)
apr_status_t md_util_path_merge(const char **ppath, apr_pool_t *p,...)
static int find_url(void *baton, const char *key, const char *value)
apr_status_t md_util_fopen(FILE **pf, const char *fn, const char *mode)
apr_status_t md_text_fread8k(const char **ptext, apr_pool_t *p, const char *fpath)
int md_array_is_empty(const struct apr_array_header_t *array)
static int skip_nonws(link_ctx *ctx)
int md_array_str_eq(const struct apr_array_header_t *a1, const struct apr_array_header_t *a2, int case_sensitive)
char * md_util_str_tolower(char *s)
apr_status_t md_util_is_unix_socket(const char *path, apr_pool_t *pool)
void md_data_clear(md_data_t *d)
static int attr_char(char c)
apr_status_t md_util_is_file(const char *path, apr_pool_t *pool)
int md_is_wild_match(const apr_array_header_t *domains, const char *name)
void md_data_init(md_data_t *d, const char *data, apr_size_t len)
const char * md_util_schemify(apr_pool_t *p, const char *s, const char *def_scheme)
void md_data_assign_pcopy(md_data_t *dest, const char *src, apr_size_t src_len, apr_pool_t *p)
const char * md_util_base64url_encode(const md_data_t *data, apr_pool_t *pool)
struct apr_array_header_t * md_array_str_compact(apr_pool_t *p, struct apr_array_header_t *src, int case_sensitive)
int md_array_str_index(const apr_array_header_t *array, const char *s, int start, int case_sensitive)
md_data_t * md_data_make_pcopy(apr_pool_t *p, const char *data, apr_size_t len)
const char * md_util_parse_ct(apr_pool_t *pool, const char *cth)
static int skip_pvalue(link_ctx *ctx)
apr_status_t md_data_assign_copy(md_data_t *dest, const char *src, apr_size_t src_len)
static apr_status_t rm_cb(void *baton, apr_pool_t *p, apr_pool_t *ptemp, const char *path, const char *name, apr_filetype_e ftype)
static apr_status_t pool_vado(md_util_vaction *cb, void *baton, apr_pool_t *p, va_list ap)
apr_status_t md_util_exec(apr_pool_t *p, const char *cmd, const char *const *argv, int *exit_code)
static unsigned int find_chr(link_ctx *ctx, char c, apr_size_t *pidx)
int md_array_remove_at(struct apr_array_header_t *a, int idx)
static int pv_contains(link_ctx *ctx, const char *s)
apr_status_t md_util_ftree_remove(const char *path, apr_pool_t *p)
apr_status_t md_data_to_hex(const char **phex, char separator, apr_pool_t *p, const md_data_t *data)
int md_dns_is_name(apr_pool_t *p, const char *hostname, int need_fqdn)
void md_data_null(md_data_t *d)
static apr_status_t rm_recursive(const char *fpath, apr_pool_t *p, int max_level)
apr_status_t md_util_freplace(const char *fpath, apr_fileperms_t perms, apr_pool_t *p, md_util_file_cb *write_cb, void *baton)
int md_file_exists(const char *fname, apr_pool_t *p)
static const unsigned char BASE64URL_CHARS[]
apr_array_header_t * md_array_str_remove(apr_pool_t *p, apr_array_header_t *src, const char *exclude, int case_sensitive)
static int skip_param(link_ctx *ctx)
apr_status_t md_text_fcreatex(const char *fpath, apr_fileperms_t perms, apr_pool_t *p, const char *text)
static int skip_ptoken(link_ctx *ctx)
int md_array_str_add_missing(apr_array_header_t *dest, apr_array_header_t *src, int case_sensitive)
apr_array_header_t * md_dns_make_minimal(apr_pool_t *p, apr_array_header_t *domains)
int md_dns_matches(const char *pattern, const char *domain)
static int skip_pname(link_ctx *ctx)
static int ptoken_char(char c)
static apr_status_t write_text(void *baton, struct apr_file_t *f, apr_pool_t *p)
apr_status_t md_util_abs_http_uri_check(apr_pool_t *p, const char *uri, const char **perr)
apr_status_t md_util_fcreatex(apr_file_t **pf, const char *fn, apr_fileperms_t perms, apr_pool_t *p)
static int skip_qstring(link_ctx *ctx)
static apr_status_t tree_start_do(void *baton, apr_pool_t *p, apr_pool_t *ptemp)
md_data_t * md_data_pmake(apr_size_t len, apr_pool_t *p)
static apr_status_t files_do_start(void *baton, apr_pool_t *p, apr_pool_t *ptemp, va_list ap)
apr_status_t md_util_tree_do(md_util_fdo_cb *cb, void *baton, apr_pool_t *p, const char *path, int follow_links)
apr_status_t md_util_action(void *baton, apr_pool_t *p, apr_pool_t *ptemp)
apr_status_t md_util_file_cb(void *baton, struct apr_file_t *f, apr_pool_t *p)
apr_status_t md_util_vaction(void *baton, apr_pool_t *p, apr_pool_t *ptemp, va_list ap)
apr_status_t md_util_fdo_cb(void *baton, apr_pool_t *p, apr_pool_t *ptemp, const char *dir, const char *name, apr_filetype_e ftype)
apr_status_t md_util_try_fn(void *baton, int i)
apr_array_header_t * patterns
static struct pattern_s patterns[]
static apr_array_header_t * a1
apr_status_t apr_dir_read(apr_finfo_t *finfo, apr_int32_t wanted, apr_dir_t *thedir)
apr_status_t apr_dir_remove(const char *path, apr_pool_t *pool)
apr_status_t apr_dir_close(apr_dir_t *thedir)
apr_status_t apr_dir_open(apr_dir_t **new, const char *dirname, apr_pool_t *pool)
typedef int(WSAAPI *apr_winapi_fpt_WSAPoll)(IN OUT LPWSAPOLLFD fdArray