12023-04-21 Frank Ch. Eigler <[email protected]> 2 3 * debuginfod.cxx (groom): Fix -r / -X logic. 4 52023-04-13 Frank Ch. Eigler <[email protected]> 6 7 * debuginfod.cxx (archive_classify, scan_archive_file): Catch and 8 propagate exceptions during archive scans. 9 102023-03-30 Jan Alexander Steffens (heftig) <[email protected]> 11 12 * debuginfod-client.c (update_atime): New function. 13 (extract_section, debuginfod_query_server): Call it. 14 152023-03-30 Jan Alexander Steffens (heftig) <[email protected]> 16 17 * debuginfod-client.c (debuginfod_query_server): Don't modify 18 atime unintentionally. 19 * debuginfod.cxx (extract_section, handle_buildid_r_match): Ditto. 20 212023-03-30 Aaron Merey <[email protected]> 22 23 * debuginfod-client.c (debuginfod_query_server): Avoid sscanf on 24 mixed-case component of string. 25 262023-03-29 Jan Alexander Steffens (heftig) <[email protected]> 27 28 * debuginfod-client.c (debuginfod_query_server): s/futimes/futimens/ 29 * debuginfod.cxx (extract_section, handle_buildid_r_match): Ditto. 30 312023-03-29 lilydjwg <[email protected]> 32 33 * debuginfod-client.c (debuginfod_query_server): Handle dl_size in 34 progress to account for possible curl 8.0.1 changes to 35 CURLINFO_CONTENT_LENGTH_DOWNLOAD*. 36 372023-03-17 Aaron Merey <[email protected]> 38 39 * debuginfod-client.c (debuginfod_query_server): Do not create an 40 empty file in the cache if the query was cancelled by the progressfn. 41 422023-02-07 Aaron Merey <[email protected]> 43 44 * debuginfod-client.c (cache_find_section): Avoid returning -ENOENT 45 if debuginfo wasn't found. 46 472023-02-06 Mark Wielaard <[email protected]> 48 49 * debuginfod.h.in: Guard debuginfod_client typedef with 50 _ELFUTILS_DEBUGINFOD_CLIENT_TYPEDEF. 51 522023-01-10 Mark Wielaard <[email protected]> 53 54 * debuginfod-client.c (debuginfod_query_server): Use 55 CURL_AT_LEAST_VERSION(7.85.0) for CURLOPT_PROTOCOLS_STR. 56 572023-01-11 Frank Ch. Eigler <[email protected]> 58 59 PR29975 & PR29976 60 * debuginfod.cxx (default_concurrency): New function to guess a 61 reasonable default for -c/-C on large but constrained machines. 62 632022-12-21 Mark Wielaard <[email protected]> 64 65 * debuginfod-client.c: Define CURL_AT_LEAST_VERSION. 66 672022-12-21 Andrew Paprocki <[email protected]> 68 69 * debuginfod-client.c: Make compilable against newer curl. PR29926 70 712022-11-15 Mark Wielaard <[email protected]> 72 73 * debuginfod-client.c (debuginfod_query_server): Initialize 74 response_data early. 75 762022-11-07 Aaron Merey <[email protected]> 77 78 * debuginfod-client.c (debuginfod_find_section): Don't treat 0 as an 79 error code. 80 812022-11-04 Aaron Merey <[email protected]> 82 83 * debuginfod-client.c (debuginfod_find_section): Ensure rc 84 is always updated with the most recent error code. 85 862022-11-03 Frank Ch. Eigler <[email protected]> 87 88 * debuginfod.cxx (handle_buildid): Correctly manage lifetime 89 of debuginfod_client federation callout object. 90 912022-11-02 Mark Wielaard <[email protected]> 92 93 * debuginfod-client.c (extract_section): Mark static. 94 952022-11-01 Aaron Merey <[email protected]> 96 97 * debuginfod-client.c (path_escape): Add early return. 98 992022-10-31 Aaron Merey <[email protected]> 100 101 * Makefile.am (libdebuginfod_so_LDLIBS): Add libelf. 102 * debuginfod-client.c (debuginfod_find_section): New function. 103 (path_escape): New function. 104 (extract_section): New function. 105 (cache_find_section): New function. 106 (debuginfod_query_server): Add support for section queries. 107 * debuginfod-find.c (main): Add support for section queries. 108 * debuginfod.cxx (extract_section): New function. 109 (handle_buildid_f_match): Add section parameter. When non-empty, 110 try to create response from section contents. 111 (handle_buildid_r_match): Add section parameter. When non-empty, 112 try to create response from section contents. 113 (handle_buildid_match): Add section parameter. Pass to 114 handle_buildid_{f,r}_match. 115 (handle_buildid): Handle section name when artifacttype is set to 116 "section". Query upstream servers via debuginfod_find_section 117 when necessary. 118 (debuginfod.h.in): Add declaration for debuginfod_find_section. 119 (libdebuginfod.map): Add debuginfod_find_section. 120 1212022-10-18 Daniel Thornburgh <[email protected]> 122 123 * debuginfod-client.c (debuginfod_query_server): Add DEBUGINFOD_HEADERS_FILE 124 setting to supply outgoing HTTP headers. 125 1262022-10-17 Frank Ch. Eigler <[email protected]> 127 128 * debuginfod.cxx (main): Report libmicrohttpd version. 129 1302022-09-28 Aaron Merey <[email protected]> 131 132 * debuginfod-client.c (debuginfod_query_server): Switch sign of some 133 error codes from positive to negative. 134 1352022-09-08 Frank Ch. Eigler <[email protected]> 136 137 * debuginfod-client.c (debuginfod_query_server): Clear 138 ->winning_headers along with ->url at the start of any new query. 139 1402022-09-08 Martin Liska <[email protected]> 141 142 * debuginfod-client.c (debuginfod_get_headers): Add to DUMMY_LIBDEBUGINFOD. 143 1442022-09-06 Frank Ch. Eigler <[email protected]> 145 146 * debuginfod-client.c (header_callback): Don't copy \r in x-d headers. 147 Print all headers in verbose_fd mode. 148 * debuginfod-find.c (parse_opt): Set verbose_fd only at verbosity >= 2. 149 * debuginfod.cxx (handle_buildid): Clean up header forwarding 150 string processing. 151 * debuginfod.h.in: (debuginfod_get_headers): Tweak wording. 152 * libdebuginfod.map: Use ELFUTILS_0.188 for new function. 153 1542022-07-15 Noah Sanci <[email protected]> 155 156 * debuginfod-client.c (header_callback): Ignore headers without 157 X-DEBUGINFOD prefix. 158 (debuginfod_query_server): Removed verbose printing headers when 159 undesired. 160 (debuginfod_get_headers): Created. 161 * debuginfod-find.c (main): Verbose printing headers. 162 * debuginfod.cxx (handle_buildid): Add headers prefixed with 163 X-DEBUGINFOD from federated servers to this server's response 164 headers. 165 * debuginfod.h.in (debuginfod_get_headers): Created. 166 * libdebuginfod.map: New elfutils version added. 167 1682022-09-02 Aaron Merey <[email protected]> 169 170 * debuginfod.cxx (parse_opt): If '-C' is given with no arg, do not 171 update connection_pool since it will be done at a later point. 172 (main): Use auto-sized connection_pool if '-C' isn't given with an 173 arg. Do not use MHD_USE_THREAD_PER_CONNECTION. 174 1752022-08-17 Martin Liska <[email protected]> 176 177 * debuginfod.cxx (handle_buildid): Update HTTP statistics only if 178 it comes from HTTP request. 179 1802022-08-17 Martin Liska <[email protected]> 181 182 * debuginfod.cxx: Print filename for "cannot open archive". 183 1842022-08-15 Frank Ch. Eigler <[email protected]> 185 186 PR29474 187 * debuginfod.cxx (handle_buildid_r_match): Don't trigger false-404's 188 for concurrently prefetched target files. 189 1902022-08-02 Josef Cejka <[email protected]> 191 192 * debuginfod.cxx (groom): Don't evaluate regex unless needed. 193 1942022-07-29 Josef Cejka <[email protected]> 195 196 * debuginfod.cxx: Create db indexes for fast delete while grooming. 197 1982022-06-03 Michael Trapp <[email protected]> 199 200 * debuginfod.cxx (scan_source_info): New global. 201 (parse_opt, elf_classify): Use it. 202 2032022-05-09 Mark Wielaard <[email protected]> 204 205 * debuginfod-client.c (debuginfod_clean_cache): Move utime call to 206 before fts traversal. 207 2082022-05-09 Mark Wielaard <[email protected]> 209 210 * debuginfod-client.c (debuginfod_init_cache): Remove. 211 (debuginfod_query_server): Don't call debuginfod_init_cache, call 212 mkdir then debuginfod_clean_cache. 213 2142022-05-09 Mark Wielaard <[email protected]> 215 216 * debuginfod-client.c (debuginfod_config_cache): Always open with 217 O_CREATE first, then use fstat, only write the cache_config_default_s 218 value if st_size == 0, otherwise read value from file. 219 2202022-05-09 Mark Wielaard <[email protected]> 221 222 * debuginfod.cxx (conninfo): Always provide servname to getnameinfo. 223 2242022-05-09 Mark Wielaard <[email protected]> 225 226 * debuginfod-client.c (debuginfod_query_server): Add 227 curl_easy_setopt_ck macro, use it for all curl_easy_setopt calls. 228 2292022-05-09 Mark Wielaard <[email protected]> 230 231 * debuginfod-client.c (debuginfod_write_callback): Check result 232 of curl_easy_getinfo. 233 2342022-05-05 Mark Wielaard <[email protected]> 235 236 * debuginfod.cxx (main): Define use_epoll. Set to MHD_USE_EPOLL 237 based on MHD_VERSION. Don't use MHD_USE_THREAD_PER_CONNECTION 238 when use_poll is set. 239 2402022-05-05 Mark Wielaard <[email protected]> 241 242 * debuginfod.cxx (main): Define mhd_flags. Use mhd_flags for 243 MHD_start_daemon. Try again with MHD_USE_DUAL_STACK removed if 244 that fails. Update clog to say either IPV4 or IPV4 and IPV6. 245 stop either ithe d46 or d4 daemonr. 246 2472022-05-09 Noah Sanci <[email protected]> 248 249 * debuginfod.cxx (main): Set nonzero defaults for fdcache. 250 2512022-05-04 Frank Ch. Eigler <[email protected]> 252 Mark Wielaard <[email protected]> 253 254 * debuginfod-client.c (debuginfod_query_server): Correct fd leak 255 for cache negative-hit unlink case. 256 (debuginfod_config_cache, debuginfod_init_cache): Correct 257 minor fd leaks. 258 * debuginfod-find.c (main): Ditto. 259 2602022-04-22 Mark Wielaard <[email protected]> 261 262 * Makefile.am (libdebuginfod): Add -lpthread. 263 (libdebuginfod_so_LDLIBS): Likewise. 264 * debuginfod-client.c (init_control): New static pthread_once_t. 265 (libcurl_init): New static function. 266 (debuginfod_begin): Use ptrace_once to call libcurl_init. 267 (libdebuginfod_ctor): Removed. 268 (libdebuginfod_dtor): Likewise. 269 2702022-04-24 Mark Wielaard <[email protected]> 271 272 * debuginfod.cxx (main): Add MHD_USE_ITC to MHD_start_daemon flags. 273 2742022-04-13 Aaron Merey <[email protected]> 275 276 * debuginfod-client.c (debuginfod_query_server): 277 Drop st_mode check. Add st_size > 0 check. 278 Save target_mtime before calling 279 debuginfod_config_cache. unlink target_cache_path 280 on EACCESS. Create target_cache_path with DEFFILEMODE. 281 2822022-04-03 Frank Ch. Eigler <[email protected]> 283 284 * debuginfod.cxx (main): Use single dual-stack daemon setup, 285 rather than duplicate ipv4 and ipv6. 286 (conninfo, handle_buildid): Represent ipv4-mapped ipv6 addresses 287 in their native ipv4 form for logging and X-F-F: purposes. 288 * debuginfod-client.c (debuginfod_add_http_header): Tolerate 289 colons in http header values. 290 2912022-04-03 Frank Ch. Eigler <[email protected]> 292 293 * debuginfod.cxx (main): Use MHD_USE_EPOLL for libmicrohttpd, to 294 encourage more round-robin dispatch of incoming connections. 295 2962021-12-09 Alexander Kanavin <[email protected]> 297 298 * debuginfod-client.c (cache_clean_default_interval_s): Change type to 299 long from time_t. 300 (cache_miss_default_s): Likewise. 301 (cache_default_max_unused_age_s): Likewise. 302 3032021-12-09 Mark Wielaard <[email protected]> 304 305 * debuginfod.cxx (database_stats_report): Don't format clog 306 using 'right' and 'setw(20)'. 307 3082021-12-08 Frank Ch. Eigler <[email protected]> 309 310 * debuginfod.cxx (connection_pool): New global. 311 (parse_opt): Parse & check -C option to set it. 312 (error_cb): New callback for libmicrohttpd error counting. 313 (main): Activate MHD_OPTION_THREAD_POOL_SIZE if appropriate. 314 Activate error_cb. 315 3162021-12-04 Mark Wielaard <[email protected]> 317 318 * debuginfod.cxx (main): Call debuginfod_pool_groom before exit. 319 3202021-12-08 Mark Wielaard <[email protected]> 321 322 * debuginfod.cxx (add_mhd_response_header): New function. 323 (reportable_exception::mhd_send_response): Call 324 MHD_add_response_header. 325 (add_mhd_last_modified): Likewise. 326 (handle_buildid_f_match): Likewise. 327 (handle_buildid_r_match): Likewise. 328 (handle_metrics): Likewise. And check MHD_Response was actually 329 created. 330 (handle_root): Likewise. 331 3322021-12-08 Frank Ch. Eigler <[email protected]> 333 334 * debuginfod.cxx (intern): Call set_metrics() holding the fdcache mutex. 335 3362021-12-04 Mark Wielaard <[email protected]> 337 338 * debuginfod-client.c (debuginfod_query_server): Free winning_headers. 339 Reset response_data_size when clearing response_data. 340 3412021-12-01 Mark Wielaard <[email protected]> 342 343 * debuginfod-client.c (debuginfod_query_server): Free tmp_url on 344 realloc error. curl_free escaped_string on error. Fix error out 345 goto on curl_easy_init failure. Only cleanup data[i] handle and 346 response_data if it was initialized. 347 3482021-12-01 Mark Wielaard <[email protected]> 349 350 * debuginfod-client.c (timestamp): Use gmtime_r instead of gmtime. 351 (add_mhd_last_modified): Likewise. 352 3532021-11-10 Érico N. Rolim <[email protected]> 354 355 * debuginfod.cxx: include "system.h" under 'extern "C"' block. 356 3572021-11-05 Frank Ch. Eigler <[email protected]> 358 359 PR28430 360 * debuginfod.cxx (parse_opt): Add "--passive" flag. Complain 361 about inconsistent flags. 362 (main): In passive mode, suppress scan/groom/traverse threads and 363 other read-write database ops. 364 3652021-11-04 Frank Ch. Eigler <[email protected]> 366 367 PR28514 368 * debuginfod.cxx (groom): Rework into separate decision/action 369 phases. Add new metrics to monitor progress. Limit indefinite 370 operation times to avoid starving rescan. 371 3722021-10-23 Frank Ch. Eigler <[email protected]> 373 374 PR28240 375 * debuginfod-client.c (debuginfod_query_server): Correct 376 negative-hit cache check sequence for root user. 377 3782021-10-15 Mark Wielaard <[email protected]> 379 380 * debuginfod-client.c (debuginfod_query_server): Set 381 CURLOPT_PROTOCOLS. 382 3832021-10-06 Di Chen <[email protected]> 384 385 PR28242 386 * debuginfod.cxx (inc_metrics, add_metrics): Add two-tag variants. 387 (handler_cb): Call it with artifacttype for http_responses_* metrics. 388 (handle_buildid): Sanitize artifacttype if necessary. 389 (dwarf_extract_source_path): Pass sanitizable string param. 390 3912021-09-17 Noah Sanci <[email protected]> 392 393 * debuginfod-client.c (debuginfod_query_server): curl_multi_perform 394 now occurs before checking if response headers have arrived. 395 3962021-09-14 Frank Ch. Eigler <[email protected]> 397 398 PRPR28339 399 * debuginfod.cxx (waitq::fronters): New field. 400 (waitq::wait_idle): Respect it. 401 (waitq::done_front): New function. 402 (thread_main_scanner): Call it to match wait_front(). 403 4042021-09-12 Mark Wielaard <[email protected]> 405 406 * debuginfod.cxx (libarchive_fdcache::lookup): Add endl after 407 obatched(clog) line. 4082021-09-13 Noah Sanci <[email protected]> 409 410 * debuginfod-client.c (debuginfod_query_server): Removed constant 411 operations from a loop. curl_free memory. 412 4132021-09-06 Dmitry V. Levin <[email protected]> 414 415 * debuginfod-client.c (debuginfod_begin): Remove cast of calloc return 416 value. 417 4182021-08-28 Mark Wielaard <[email protected]> 419 420 * debuginfod.cxx (parse_opt): Turn the -d arg ":memory:" into 421 "file::memory:?cache=shared" for the db_path. 422 4232021-08-20 Di Chen <[email protected]> 424 425 * debuginfod.cxx (options): Add ARGP_KEY_FORWARDED_TTL_LIMIT. 426 (forwarded_ttl_limit): New static unsigned. 427 (parse_opt): Handle ARGP_KEY_FORWARDED_TTL_LIMIT. 428 (handle_buildid): Check forwarded_ttl_limit. 429 (main): Log forwarded ttl limit. 430 4312021-08-20 Saleem Abdulrasool <[email protected]> 432 433 * debuginfod.cxx: Remove error.h include. 434 4352021-08-19 Frank Ch. Eigler <[email protected]> 436 437 PR28249 438 * debuginfod.cxx (handler_cb): Fix after_you unique_set key 439 to the entire incoming URL. 440 4412021-08-02 Noah Sanci <[email protected]> 442 443 PR27277 444 * debuginfod-client.c (struct debuginfod_client): New field 445 winning_headers. 446 (struct handle_data): New field response_data, response_data_size. 447 (header_callback): Store received headers in response_data. 448 (debuginfod_query_server): Activate CURLOPT_HEADERFUNCTION. 449 Save winning response_data. 450 (debuginfod_end): free client winning headers. 451 * debuginfod.cxx (handle_buildid_f_match): remove X-DEBUGINFOD-FILE 452 path. Add X-DEBUGINFOD-FILE and X-DEBUGINFOD-SIZE headers. 453 (handle_buildid_r_match): remove X-DEBUGINFOD-FILE path. Add 454 X-DEBUGINFOD-FILE, X-DEBUGINFOD-SIZE 455 headers, and X-ARCHIVE headers. 456 4572021-07-26 Noah Sanci <[email protected]> 458 459 PR27982 460 * debuginfod-client.c (globals): added default_maxsize and 461 default_maxtime. 462 (debuginfod_query_server): Added DEBUGINFOD_MAXSIZE and 463 DEBUGINFOD_MAXTIME envvar processing. 464 * debuginfod.cxx (handler_cb): If the requested file exceeds 465 maxsize return code 406. 466 * debuginfod.h.in: Added DEBUGINFOD_MAXSIZE_ENV_VAR and 467 DEBUGINFOD_MAXTIME_ENV_VAR. 468 4692021-07-16 Noah Sanci <[email protected]> 470 471 PR28034 472 * debuginfod-client.c (debuginfod_query_server): % escape filename 473 so the completed url is processed properly. 474 4752021-06-28 Noah Sanci <[email protected]> 476 477 PR25978 478 * debuginfod.cxx (options): Added --fdcache-prefetch-fds/mbs options. 479 (set_metric): Added a condition for fdcache_mintmp to ensure no 480 negative percentages or percentages larger than 100% are given. 481 (globals): Added fdcache_prefetch_mbs/fdcache_prefetch_fds. 482 (set_metrics): Differentiate between lru and prefetch metrics. 483 (intern): Added prefetch functionality for nuking preexisting copies 484 and incrementing prefetch metrics. 485 (lookup): Search prefetch cache and increment associated metrics. Upon 486 finding in the prefetch cache move the element to the lru cache. 487 (limit): Arguments updated. Update size of prefetch cache. 488 (main): Log prefetch and cache fds/mbs 489 4902021-07-06 Alice Zhang <[email protected]> 491 492 PR27531 493 * debuginfod-client.c (debuginfod_query_server): Retry failed queries 494 if error code is not ENOENT. 495 * debuginfod.h.in: Introduce DEBUGINFOD_RETRY_LIMIT_ENV_VAR. 496 4972021-07-01 Noah Sanci <[email protected]> 498 499 PR27711 500 * debuginfod.cxx (options): Add --regex-groom, -r option. 501 (regex_groom): New static bool defaults to false. 502 (parse_opt): Handle 'r' option by setting regex_groom to true. 503 (groom): Introduce and use reg_include and reg_exclude. 504 5052021-07-09 Noah Sanci <[email protected]> 506 507 PR27983 508 * debuginfod-client.c (debuginfod_query_server): As full-length 509 urls are generated with standardized formats, ignore duplicates. 510 Created out1 and changed out2 error gotos. Updated url creation print 511 statements. 512 (globals): Removed url_delim_char, as it was no longer used. 513 5142021-06-18 Mark Wielaard <[email protected]> 515 516 * debuginfod-client.c (debuginfod_begin): Don't use client if 517 calloc call failed. 518 5192021-06-03 Frank Ch. Eigler <[email protected]> 520 521 PR27863 522 * debuginfod.cxx (unique_set, unique_set_reserver): New classes. 523 (handler_cb): Use them to implement "after-you" queueing. 524 5252021-05-14 Frank Ch. Eigler <[email protected]> 526 527 PR27859 528 * debuginfod-client.c (debuginfod_client): Retain only 529 long-lived multi handle from PR27701 work. 530 (debuginfo_begin,debuginfod_end): ctor/dtor for surviving field only. 531 (debuginfod_query_server): Rework to reuse multi handle only. 532 5332021-04-19 Martin Liska <[email protected]> 534 535 * debuginfod-client.c (debuginfod_query_server): Use startswith. 536 (debuginfod_add_http_header): Likewise. 537 * debuginfod.cxx: Likewise. 538 5392021-05-04 Alice Zhang <[email protected]> 540 541 * debuginfod-client.c (cache_miss_default_s): New static time_t, 542 defaults to 600 (10 minutes). 543 (cache_miss_filename): New static char pointer. 544 (debuginfod_config_cache): New static function. 545 (debuginfod_clean_cache): Use debuginfod_config_cache for 546 interval_path and max_unused_path. 547 (debuginfod_query_server): Check whether target_cache_path exists 548 as negative cache file and create target_cache_path when the server 549 returns ENOENT. Check cache_miss_path fir cache miss time. 550 5512021-04-26 Frank Ch. Eigler <[email protected]> 552 553 PR27571 554 * debuginfod-client.c (debuginfod_query_server): Chmod 0400 files 555 delivered into the cache to prevent accidental modification. 556 5572021-04-26 Frank Ch. Eigler <[email protected]> 558 559 PR26125 560 * debuginfod-client.c (debuginfod_clean_cache): For directory 561 rmdir, check mtime first. 562 (debuginfod_query_server): Try mkdir / mkstemp up to twice, 563 in case of race. 564 5652021-04-23 Frank Ch. Eigler <[email protected]> 566 567 PR27701 568 * debuginfod-client.c (struct debuginfod_client): Add long-lived 569 CURL easy and multi handles. 570 (debuginfo_begin,debuginfod_end): ctor/dtor for these. 571 (debuginfod_query_server): Rework to reuse easy & multi handles. 572 (*_envvar): Just use the DEBUGINFOD_*_ENV_VAR directly instead. 573 574 * debuginfod.cxx (dc_pool): New pile of reusable debuginfod_client 575 objects for upstream federation connections. 576 (debuginfod_pool_{begin,end,groom}): New functions. 577 (handle_buildid): Use them. 578 (handler_cb): Fix keep-alive given libmicrohttpd convention of multiple 579 callbacks. 580 5812021-04-15 Frank Ch. Eigler <[email protected]> 582 583 * debuginfod.cxx (groom): Only update database stats once. 584 5852021-04-15 Frank Ch. Eigler <[email protected]> 586 587 * debuginfod.cxx (elf_classify): Recognize symtab-only stripped files 588 like fedora's libicudata as debuginfo files. 589 5902021-03-30 Frank Ch. Eigler <[email protected]> 591 592 * debuginfod.cxx (main): Set child thread names. 593 5942021-03-07 Timm Bäder <[email protected]> 595 596 * debuginfod-client.c (debuginfod_query_server): Tweak 597 double/long clamping arithmetic to avoid UB and warnings. 598 5992021-02-25 Frank Ch. Eigler <[email protected]> 600 601 * debuginfod.cxx (handler_cb): Filter webapi for bad 602 artifacttype keywords early for metric hygiene. 603 6042021-02-14 Frank Ch. Eigler <[email protected]> 605 606 * debuginfod.cxx (main -U): Use bsdtar unconditionally. Also map 607 the debian-compatible .ipk (openembedded distro family) to same. 608 6092021-02-04 Frank Ch. Eigler <[email protected]> 610 611 PR27092 low-memory handling 612 * debuginfod.cxx (fdcache_mintmp): New parameter, with cmd-line option. 613 (parse_opt): Parse it. 614 (main): Default it. 615 (statfs_free_enough_p): New function. 616 (libarchive_fdcache::*): Call it to trigger emergency fdcache flush. 617 (thread_main_scanner): Call it to report filesystem fullness metrics. 618 (groom): Ditto. 619 (set/add_metric): Take double rather than int64_t values. 620 (archive_exception): Propagate suberror to metric label. 621 (main): Detect pthread creation fatal errors properly. 622 6232021-02-02 Frank Ch. Eigler <[email protected]> 624 625 PR27323 626 * debuginfod.cxx (dbq): New read-only database connection for queries 627 only. 628 (signal_handler): Interrupt it. 629 (main): Open / close it. 630 (handle_buildid): Use it for webapi queries only. 631 (database_stats_report): Make more interruptible. Report sqlite3 632 operation times to the prometheus metrics. 633 (groom): Make more interruptible. 634 (thread_main_fts_source_paths, thread_main_groom): Ensure 635 state/progress metrics are fresh even in case of exceptions. 636 6372020-12-20 Dmitry V. Levin <[email protected]> 638 639 * .gitignore: New file. 640 6412020-12-12 Dmitry V. Levin <[email protected]> 642 643 * debuginfod-client.c (debuginfod_query_server): Fix spelling typos in 644 comments. 645 * debuginfod.cxx: Likewise. 646 (parse_opt): Fix spelling typos in error diagnostics. 647 6482020-12-08 Dmitry V. Levin <[email protected]> 649 650 * Makefile.am [LIBDEBUGINFOD]: Create libdebuginfod.so.1 first, turn 651 libdebuginfod.so into symlink. 652 6532020-11-30 Dmitry V. Levin <[email protected]> 654 655 * Makefile.am (libdebuginfod.so): Replace $@.$(VERSION) with 656 $(LIBDEBUGINFOD_SONAME). 657 (install, uninstall, MOSTLYCLEANFILES): Replace 658 libdebuginfod.so.$(VERSION) with $(LIBDEBUGINFOD_SONAME). 659 (VERSION): Remove. 660 * debuginfod.h: Rename to ... 661 * debuginfod.h.in ... this. 662 (DEBUGINFOD_SONAME): New macro. 663 6642020-11-30 Dmitry V. Levin <[email protected]> 665 666 * Makefile.am (libdebuginfod.so$(EXEEXT)): Drop $(EXEEXT) suffix. 667 6682020-11-25 Frank Ch. Eigler <[email protected]> 669 670 * debuginfod.cxx (step_ok_done): Correct typo in prom metric label. 671 6722020-11-25 Frank Ch. Eigler <[email protected]> 673 674 * debuginfod.cxx (tmp_ms_metric): Switch from gettimeofday to 675 clock_gettime(CLOCK_MONOTONIC) for time-interval measurements. 676 (handler_cb, scan_source_paths, groom): Ditto. 677 6782020-11-23 Frank Ch. Eigler <[email protected]> 679 680 * debuginfod.cxx (tmp_ms_metric): New class for RAII timing metrics. 681 (sqlite_ps::reset, step*): Call it to track sqlite3 performance. 682 (sqlite_exception ctor): Increment sqlite3 error_count. 683 6842020-11-23 Mark Wielaard <[email protected]> 685 686 * debuginfod-client.c (debuginfod_query_server): Initialize 687 struct handle_data errbuf to the empty string. 688 6892020-11-11 Mark Wielaard <[email protected]> 690 691 * debuginfod-client.c (debuginfod_set_verbose_fd): New function. 692 (struct debuginfod_client): Add verbose_fd. 693 (struct handle_data): Add errbuf. 694 (debuginfod_query_server): Produce verbose output when 695 debuginfod_client verbose_fd is set. Only clear old data and set 696 default_headers when any work is done. Always goto out when setting 697 rc to an error value. Use CURLOPT_ERRORBUFFER to get more error 698 output when verbose output is requested. 699 * debuginfod.h (DEBUGINFOD_VERBOSE_ENV_VAR): New. 700 (debuginfod_set_verbose_fd): Added. 701 * debuginfod-find.c (parse_opt): Set debuginfod_set_verbose_fd on -v. 702 * bdebuginfod.map (ELFUTILS_0.183): New section, add 703 debuginfod_set_verbose_fd. 704 7052020-11-21 Mark Wielaard <[email protected]> 706 707 * debuginfod.cxx (handle_root): New function. 708 (handler_cb): Handle "/" and report url1 in webapi error. 709 7102020-11-11 Mark Wielaard <[email protected]> 711 712 * debuginfod-find.c (progressfn): Use clock_gettime to print Progress 713 at most 5 times a second. 714 7152020-11-19 Frank Ch. Eigler <[email protected]> 716 717 * debuginfod.cxx (tmp_inc_metric): New class. 718 (handler_cb): Use it to track webapi operations. 719 7202020-11-01 Érico N. Rolim <[email protected]> 721 722 * debuginfod-client.c (debuginfod_init_cache): Use ACCESSPERMS for 723 mkdir, DEFFILEMODE for open with O_CREAT. 724 7252020-11-01 Érico N. Rolim <[email protected]> 726 727 * debuginfod.cxx: include libintl.h. 728 7292020-11-01 Érico N. Rolim <[email protected]> 730 731 * Makefile.am (debuginfod_LDADD): Add argp_LDADD and fts_LIBS. 732 (debuginfod_find_LDADD): Likewise. 733 (libdebuginfod_so_LDLIBS): Add fts_LIBS. 734 7352020-10-31 Frank Ch. Eigler <[email protected]> 736 737 * debuginfod.cxx (scan_source_file, scan_archive_file): Add new scanned_bytes_total, 738 scanned_files_total metrics. 739 (archive_classify): Exit early if interrupted. 740 (scan_source_paths): Perform realpath/regex checks only on FTS_F files. 741 Tweak metrics. 742 7432020-10-30 Frank Ch. Eigler <[email protected]> 744 745 PR26775 cont'd. 746 * debuginfod.cxx (thread_main_scanner): Ensure control doesn't 747 leave infinite loop until program exit, even if SIGUSR2. 748 (scan_source_paths): Have traverser clean scanq on 749 SIGUSR2. Emit additional traversed_total metrics. 750 (groom): Emit additional groomed_total metrics. 751 (thread_main_groom): Restore previous thread_work_total 752 metric. 753 7542020-10-29 Frank Ch. Eigler <[email protected]> 755 756 PR26775 757 * debuginfod.cxx (forced_*_count): Make these global. 758 (runq::clear): New function. 759 (thread_main_scanner): Check for pending SIGUSR2; interrupt. 760 (scan_source_paths): Check for pending SIGUSR2; interrupt. 761 (groom): Report prometheus stats before groom also. Check for 762 pending SIGUSR1; interrupt. Increment thread_work_total for 763 each file scanned, not the entire cycle. 764 7652020-10-29 Frank Ch. Eigler <[email protected]> 766 767 PR26810 768 * debuginfod.cxx (handle_buildid_*_match): Throw exceptions for 769 more lower level libc errors. 770 (handle_buildid_match): Catch & report exceptions but return 0 771 for continued iteration in the caller. 772 7732020-10-25 Mark Wielaard <[email protected]> 774 775 * debuginfod-client.c (debuginfod_query_server): Translate 776 CURLE_PEER_FAILED_VERIFICATION to ECONNREFUSED. 777 7782020-10-20 Frank Ch. Eigler <[email protected]> 779 780 PR26756: more prometheus metrics 781 * debuginfod.cxx (*_exception): Add counters for error occurrences. 782 (fdcache::*): Add counters for fdcache operations and status. 783 (fdcache::set_metric): New fn for overall stat counts. 784 (fdcache::limit): ... allow metric-less use from dtors. 785 7862020-10-20 Frank Ch. Eigler <[email protected]> 787 788 * debuginfod.cxx (handle_buildid*): Add a parameter for detecting 789 internally-originated lookups for dwz resolution. 790 7912020-09-18 Frank Ch. Eigler <[email protected]> 792 793 * debuginfod.cxx (scan_source_file, archive_classify): Store only 794 canonicalized file names in sdef & sref records in the database. 795 7962020-09-08 Mark Wielaard <[email protected]> 797 798 * Makefile.am (BUILD_STATIC): Include libcurl_LIBS in libdebuginfod 799 when NOT DUMMY_LIBDEBUGINFOD. 800 8012020-09-16 Mark Wielaard <[email protected]> 802 803 * debuginfod-find.c: Fix license block comment. 804 8052020-09-15 Mark Wielaard <[email protected]> 806 807 * debuginfod-find.c (main): Use dwelf_elf_begin. 808 8092020-07-03 Alice Zhang <[email protected]> 810 811 * debuginfod-client.c (debuginfod_query_server): Use strncasecmp 812 to compare effective_url. Try CURLINFO_SCHEME as fallback. 813 8142020-06-19 Mark Wielaard <[email protected]> 815 816 * Makefile.am (bin_PROGRAMS): Guard with DEBUGINFOD and 817 LIBDEBUGINFOD. 818 (debuginfod_LDADD): Remove libcurl. 819 (libdebuginfod): When static and DUMMY_LIBDEBUGINFO remove libcurl. 820 (noinst_LIBRARIES): Guard with LIBDEBUGINFOD. 821 (AM_CPPFLAGS): Add -Wno-unused-parameter when DUMMY_LIBDEBUGINFOD. 822 (pkginclude_headers): Guard with LIBDEBUGINFOD 823 (libdebuginfod_so_LIBS): Likewise. 824 (+libdebuginfod_so_LDLIBS): Likewise. 825 (install): Likewise. 826 (uninstall): Likewise. 827 * debuginfod-client.c: Include dummy functions when 828 DUMMY_LIBDEBUGINFOD. 829 * debuginfod.cxx: Remove curl.h include. 830 8312020-06-16 Mark Wielaard <[email protected]> 832 833 * debuginfod-client.c (debuginfod_query_server): Check malloc. 834 Move curl_multi_init call before handle_data malloc call. 835 8362020-06-16 Mark Wielaard <[email protected]> 837 838 * debuginfod-client.c (debuginfod_query_server): Replace sizeof 839 build_id_bytes check with strlen build_id check. 840 8412020-06-16 Mark Wielaard <[email protected]> 842 843 * debuginfod-client.c (debuginfod_query_server): Increase suffix 844 array and prepare having to escape 1 character with 2. 845 8462020-06-16 Mark Wielaard <[email protected]> 847 848 * debuginfod-client.c (debuginfod_clean_cache): Handle failing 849 fopen (interval_path). 850 8512020-03-29 Mark Wielaard <[email protected]> 852 853 * debuginfod-client.c (debuginfod_add_http_header): Check header 854 contains precisely one colon that isn't the first or last char. 855 8562020-03-29 Frank Ch. Eigler <[email protected]> 857 858 * debuginfod-client.c (struct debuginfod_client): Add a flag field 859 for progressfn printing. 860 (default_progressfn): Set it if printing \rsomething. 861 (debuginfod_end): Terminate with \n if flag set, i.e., only if the 862 default_progressfn was actually called. 863 8642020-03-27 Mark Wielaard <[email protected]> 865 866 * debuginfod.cxx (parse_opt): Check port is not zero. 867 8682020-03-28 Frank Ch. Eigler <[email protected]> 869 870 * debuginfod.cxx (handle_buildid_r_match): During archive 871 extraction / fdcache prefetching, set the mtime of each 872 file in the cache. 873 8742020-03-27 Frank Ch. Eigler <[email protected]> 875 876 * debuginfod-find.c (main): Extract buildid from /binary/ if 877 given instead of hex string. 878 * Makefile.am: Add elfutils library prereqs for debuginfod-find. 879 8802020-03-24 Frank Ch. Eigler <[email protected]> 881 882 * debuginfod.h, libdebuginfod.map: New functions for _add_url_header. 883 * debuginfod-client.c (struct debuginfod_client): Add headers fields. 884 (debuginfod_add_http_header): New client api to add outgoing headers. 885 (add_default_headers): Renamed from add_extra_headers, skip if flag. 886 (debuginfod_query_server): Pass accumulated headers to libcurl. 887 (debuginfod_end): Clean accumulated headers. 888 (debuginfod_find_*): Add default headers at this point. 889 * debuginfod.cxx (handle_buildid): Add conn pointer. Use it to relay 890 incoming UA and XFF headers to federated upstream debuginfods. 891 8922020-03-26 Frank Ch. Eigler <[email protected]> 893 894 * debuginfod.cxx (handler_cb): Export two families of metrics for 895 prometheus traffic analysis: response times and data amounts. 896 8972020-03-26 Frank Ch. Eigler <[email protected]> 898 899 * debuginfod.cxx (parse_opt): For -U, prefer dpkg-deb 900 after all if access(3)-able, fallback to bsdtar. 901 9022020-03-25 Frank Ch. Eigler <[email protected]> 903 904 * debuginfod.cxx (parse_opt): Associate a bsdtar subshell with 905 the .deb & .ddeb extensions, instead of dpkg-deb. 906 9072020-03-26 Frank Ch. Eigler <[email protected]> 908 909 * debuginfod-client.c (debuginfod_query_server): Don't 910 set CURLOPT_PATH_AS_IS on old curl. Mostly harmless. 911 9122020-03-24 Frank Ch. Eigler <[email protected]> 913 914 * debuginfod-client.c (debuginfod_query_server): Set 915 CURLOPT_PATH_AS_IS, to propagate file names verbatim. 916 * debuginfod.cxx (canon_pathname): Implement RFC3986 917 style pathname canonicalization. 918 (handle_buildid): Canonicalize incoming webapi source 919 paths, accept either one. 920 (scan_source_file, archive_classify): Store both 921 original and canonicalized dwarf-source file names. 922 9232020-03-24 Frank Ch. Eigler <[email protected]> 924 925 * debuginfod.cxx (handle_buildid): In case of federated fallback 926 queries, handle errors analogously to local ENOENT/404. 927 (handle_metrics): Return a size-of-response value. 928 (handler_cb): Add code to time entire application-side processing 929 stage + response sizes + http codes, so as to emit a complete 930 httpd-flavoured log line for each webapi request. 931 9322020-03-24 Frank Ch. Eigler <[email protected]> 933 934 * debuginfod-client.c (debuginfod_query_server): Print the 935 default_progressfn terminating \n message only if that progressfn 936 is actually set. 937 9382020-03-24 Frank Ch. Eigler <[email protected]> 939 940 * debuginfod-find.c (main): Correct /source full-pathness check for 941 "debuginfod-find -v source deadbeef /pathname" case. 942 9432020-03-22 Frank Ch. Eigler <[email protected]> 944 945 * debuginfod-client.c (struct debuginfod_client): Add url field. 946 (struct handle_data): Add client field as backpointer. 947 (debuginfod_write_callback): Compute & save URL. 948 (default_progressfn): Print front pieces of the URL. 949 (debuginfod_query_server): Clear URL and cleanup after progressfn. 950 * debuginfod-find.c (main): Print URL at transfer conclusion. 951 9522020-03-22 Frank Ch. Eigler <[email protected]> 953 954 * debuginfod.h, libdebuginfod.map: New functions for _get/set_user(). 955 * debuginfod-client.c: Implement them. 956 * debuginfod-find.c: Include a token call just for testing them. 957 9582020-03-03 Aaron Merey <[email protected]> 959 960 * debuginfod-client.c (debuginfod_query_server): Update 961 cache_path even when new default path already exists. 962 9632020-02-27 Aaron Merey <[email protected]> 964 965 * debuginfod-client.c (xalloc_str): New macro. Call 966 asprintf with error checking. 967 (debuginfod_query_server): Use XDG_CACHE_HOME as a default 968 cache location if it is set. Replace snprintf with xalloc_str. 969 9702020-02-26 Konrad Kleine <[email protected]> 971 972 * debuginfod-client.c (debuginfod_query_server): Handle curl's 973 response code correctly when DEBUGINFOD_URLS begin with file:// 974 9752020-02-25 Frank Ch. Eigler <[email protected]> 976 977 * debuginfod.cxx (parse_opt): Treat -R as if -Z.rpm . 978 9792020-02-25 Frank Ch. Eigler <[email protected]> 980 981 * debuginfod.cxx (fdcache_prefetch): New parameter. 982 (parse_opt): Parse it. 983 (main): Default it. 984 (fdcache::fd_size_mb): Change to double for accuracy. 985 (fdcache::probe): New function. 986 (fdcache::intern): New option to intern at end of LRU. 987 (fdcache::lookup): Clean fdcache. 988 (handle_buildid_r_match): Implement multi-stage archive 989 parsing, with optional prefetching of extracted contents 990 into the fdcache. 991 9922020-02-19 Aaron Merey <[email protected]> 993 994 * debuginfod-client.c (debuginfod_clean_cache): Restrict 995 cleanup to client-pattern files. 996 9972020-02-05 Frank Ch. Eigler <[email protected]> 998 999 * debuginfod.cxx (argp options): Add -Z option. 1000 (canonicalized_archive_entry_pathname): New function for 1001 distro-agnostic file name matching/storage. 1002 10032020-01-22 Frank Ch. Eigler <[email protected]> 1004 1005 * debuginfod.cxx (dwarf_extract_source_paths): Don't print 1006 "skipping hat" messages at verbosity <=3, too noisy. 1007 10082020-01-19 Frank Ch. Eigler <[email protected]> 1009 1010 * debuginfod.cxx (scanq): Rework to let groomer/fts threads 1011 synchronize with an empty workqueue, and lock out workqueue 1012 consumers. 1013 (thread_groom): Adopt new scanq idle APIs to lock out scanners. 1014 (thread_main_fts_source_paths): Adopt new scanq idler API to 1015 avoid being restarted while scanners haven't even finished yet. 1016 (thread_main_*): Increment thread_work_total metric only after 1017 a work cycle is completed, not when it begins. 1018 10192020-01-18 Frank Ch. Eigler <[email protected]> 1020 1021 * debuginfod.cxx (thread_main_scanner): Handle empty source_paths[]. 1022 10232020-01-11 Frank Ch. Eigler <[email protected]> 1024 1025 * debuginfod.cxx (libarchive_fdcache): New class/facility to own a 1026 cache of temporary files that were previously extracted from an 1027 archive. If only it could store just unlinked fd's instead of 1028 filenames. 1029 (handle_buildid_r_match): Use it to answer dwz/altdebug and webapi 1030 requests. 1031 (groom): Clean it. 1032 (main): Initialize the cache control parameters from heuristics. 1033 Use a consistent tmpdir for these and tmp files elsewhere. 1034 10352020-01-11 Frank Ch. Eigler <[email protected]> 1036 1037 * debuginfod.cxx (conninfo): Print User-Agent and X-Forwarded-For 1038 request headers, after mild safety-censorship (for easier machine 1039 processing). 1040 10412020-01-11 Frank Ch. Eigler <[email protected]> 1042 1043 * debuginfod.cxx: Rework threading model. 1044 (workq): New class for concurrent work-queue. 1045 (semaphore): Removed class, now unused. 1046 (scan_source_file_path): Rework into ... 1047 (scan_source_file): New function. 1048 (thread_main_scan_source_file_path): Nuke. 1049 (scan_source_archive_path): Rework into ... 1050 (scan_archive_file): New function. 1051 (thread_main_scanner): New function for scanner threads. 1052 (thread_main_fts_source_paths): New function for traversal thread. 1053 (scan_source_paths): ... doing this. 1054 (thread_groom): Tweak metrics for consistency. 1055 (main): Start 1 traversal and N scanner threads if needed. 1056 10572019-01-02 Mark Wielaard <[email protected]> 1058 1059 * debuginfod.cxx (default_connect_timeout): Removed. 1060 (default_transfer_timeout): Removed. 1061 (default_timeout): New. Default to 90 seconds. 1062 (debuginfod_query_server): Parse server_timeout_envvar as one number. 1063 Set as CURLOPT_LOW_SPEED_TIME, with CURL_OPT_LOW_SPEED_LIMITE as 100K. 1064 10652020-01-09 Frank Ch. Eigler <[email protected]> 1066 1067 * debuginfod-client.c (add_extra_headers): New function, 1068 based on mjw's draft. 1069 (debuginfod_query_server): Call it. 1070 10712019-12-22 Frank Ch. Eigler <[email protected]> 1072 1073 * debuginfod.cxx (*_rpm_*): Rename to *_archive_* throughout. 1074 (scan_archives): New read-mostly global to identify archive 1075 file extensions and corresponding extractor commands. 1076 (parse_opt): Handle new -U flag. 1077 10782019-12-19 Frank Ch. Eigler <[email protected]> 1079 1080 * debuginfod-client.c (default_progressfn): New function. 1081 (debuginfod_begin): Use it if $DEBUGINFOD_PROGRESS set. 1082 (server_timeout): Bump to 30 seconds. 1083 (debuginfod_query_server): Call progressfn -after- rather than 1084 before curl ops, to make it likely that a successful transfer 1085 results in final a=b call. Tweak cleanup sequence. 1086 * debuginfod.h: Document $DEBUGINFOD_PROGRESS name. 1087 10882019-12-09 Mark Wielaard <[email protected]> 1089 1090 * debuginfod-client.c (debuginfod_query_server): Check 1091 server_urls_envvar early. 1092 10932019-12-03 Mark Wielaard <[email protected]> 1094 1095 * debuginfod-client.c (debuginfod_query_server): Use separate 1096 local variables for CURLcode curl_res and CURLMcode curlm_res. 1097 10982019-11-26 Mark Wielaard <[email protected]> 1099 1100 * Makefile.am (BUILD_STATIC): Add needed libraries for libdw and 1101 libdebuginfod. 1102 11032019-11-25 Frank Ch. Eigler <[email protected]> 1104 1105 * debuginfod.cxx (groom): Add a sqlite3_db_release_memory() 1106 at the end of periodic grooming to try to shrink the process. 1107 11082019-11-24 Mark Wielaard <[email protected]> 1109 1110 * debuginfod.cxx (test_webapi_sleep): Removed. 1111 (handler_cb): Don't check test_webapi_sleep and sleep. 1112 (main): Don't set test_webapi_sleep. 1113 11142019-11-24 Mark Wielaard <[email protected]> 1115 1116 * debuginfod.cxx (add_metric): New function. 1117 (scan_source_file_path): Record metrics for 1118 found_executable_total, found_debuginfo_total and 1119 found_sourcerefs_total. 1120 (scan_source_rpm_path): Likewise. 1121 11222019-11-07 Frank Ch. Eigler <[email protected]> 1123 1124 * debuginfod.cxx: Add /metrics endpoint. Add numerous 1125 calls to new functions inc_metric/set_metric to populate 1126 threadsafe map containing stats. Add http content-type 1127 response headers throughout. 1128 (thread_main_*): Simplify counter/timer flow. 1129 (main): Reorder web service shutdown to leave http running 1130 as long as possible. 1131 * debuginfod.8: Document it, add security caution. 1132 11332019-11-06 Frank Ch. Eigler <[email protected]> 1134 1135 * debuginfod.cxx: Add new -L (symlink-following) mode. 1136 * debuginfod.8: Document it. 1137 11382019-11-04 Frank Ch. Eigler <[email protected]> 1139 1140 * debuginfo-client.c (debuginfod_set_progressfn): New function 1141 for progress/interrupt callback. 1142 (debuginfod_clean_cache, debuginfod_query_server): Call it. 1143 * debuginfo.h: Declare it. 1144 * debuginfod_set_progressfn.3, *_find_debuginfo.3: Document it. 1145 * Makefile.am: Install it. 1146 * libdebuginfod.map: Export it all under ELFUTILS_0.178 symversion. 1147 1148 * debuginfod-find.c: Add -v option to activate progress cb. 1149 * debuginfod-find.1: Document it. 1150 * debuginfod.cxx: Add $DEBUGINFOD_TEST_WEBAPI_SLEEP env var 1151 to insert sleep in webapi callbacks, to help manual testing. 1152 11532019-10-28 Frank Ch. Eigler <[email protected]> 1154 1155 * debuginfod.cxx: New file: debuginfod server. 1156 * debuginfod.8: New file: man page. 1157 * Makefile.am: Build it. 1158 11592019-10-28 Aaron Merey <[email protected]> 1160 1161 * debuginfod-client.c: New file: debuginfod client library. 1162 * debuginfod.h: New file: header for same. 1163 * libdebuginfod.map: New file: govern its solib exports. 1164 * debuginfod-find.c: New file: command line frontend. 1165 * debuginfod-find.1, debuginfod_find_source.3, 1166 debuginfod_find_executable.3, debuginfod_find_debuginfo.3: 1167 New man pages. 1168