| 1250 | } |
| 1251 | |
| 1252 | static const char *md_config_set_eab(cmd_parms *cmd, void *dc, |
| 1253 | const char *keyid, const char *hmac) |
| 1254 | { |
| 1255 | md_srv_conf_t *sc = md_config_get(cmd->server); |
| 1256 | const char *err; |
| 1257 | |
| 1258 | (void)dc; |
| 1259 | if ((err = md_conf_check_location(cmd, MD_LOC_ALL))) { |
| 1260 | return err; |
| 1261 | } |
| 1262 | if (!hmac) { |
| 1263 | if (!apr_cstr_casecmp("None", keyid)) { |
| 1264 | keyid = "none"; |
| 1265 | } |
| 1266 | else { |
| 1267 | /* a JSON file keeping keyid and hmac */ |
| 1268 | const char *fpath; |
| 1269 | apr_status_t rv; |
| 1270 | md_json_t *json; |
| 1271 | |
| 1272 | /* If only dumping the config, don't verify the file */ |
| 1273 | if (ap_state_query(AP_SQ_RUN_MODE) == AP_SQ_RM_CONFIG_DUMP) { |
| 1274 | goto leave; |
| 1275 | } |
| 1276 | |
| 1277 | fpath = ap_server_root_relative(cmd->pool, keyid); |
| 1278 | if (!fpath) { |
| 1279 | return apr_pstrcat(cmd->pool, cmd->cmd->name, |
| 1280 | ": Invalid file path ", keyid, NULL); |
| 1281 | } |
| 1282 | if (!md_file_exists(fpath, cmd->pool)) { |
| 1283 | return apr_pstrcat(cmd->pool, cmd->cmd->name, |
| 1284 | ": file not found: ", fpath, NULL); |
| 1285 | } |
| 1286 | |
| 1287 | rv = md_json_readf(&json, cmd->pool, fpath); |
| 1288 | if (APR_SUCCESS != rv) { |
| 1289 | return apr_pstrcat(cmd->pool, cmd->cmd->name, |
| 1290 | ": error reading JSON file ", fpath, NULL); |
| 1291 | } |
| 1292 | keyid = md_json_gets(json, MD_KEY_KID, NULL); |
| 1293 | if (!keyid || !*keyid) { |
| 1294 | return apr_pstrcat(cmd->pool, cmd->cmd->name, |
| 1295 | ": JSON does not contain '", MD_KEY_KID, |
| 1296 | "' element in file ", fpath, NULL); |
| 1297 | } |
| 1298 | hmac = md_json_gets(json, MD_KEY_HMAC, NULL); |
| 1299 | if (!hmac || !*hmac) { |
| 1300 | return apr_pstrcat(cmd->pool, cmd->cmd->name, |
| 1301 | ": JSON does not contain '", MD_KEY_HMAC, |
| 1302 | "' element in file ", fpath, NULL); |
| 1303 | } |
| 1304 | } |
| 1305 | } |
| 1306 | leave: |
| 1307 | sc->ca_eab_kid = keyid; |
| 1308 | sc->ca_eab_hmac = hmac; |
| 1309 | return NULL; |
nothing calls this directly
no test coverage detected