From b5919aefd1ca043ca26583f94721fb75c72ec9a4 Mon Sep 17 00:00:00 2001 From: Joseph Hunkeler Date: Mon, 27 Jan 2020 13:44:14 -0500 Subject: Fix some buffer overflows, add a few more --- src/internal_cmd.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) (limited to 'src/internal_cmd.c') diff --git a/src/internal_cmd.c b/src/internal_cmd.c index 2390671..530d008 100644 --- a/src/internal_cmd.c +++ b/src/internal_cmd.c @@ -10,6 +10,7 @@ static char *internal_commands[] = { "mkprefixbin", "generate prefix manifest (binary)", "mkprefixtext", "generate prefix manifest (text)", "mkmanifest", "generate package repository manifest", + "mirror_clone", "mirror a mirror", "rpath_set", "modify binary RPATH", "rpath_autoset", "determine nearest lib directory and set RPATH", NULL, NULL, @@ -130,6 +131,35 @@ int mkmanifest_interface(int argc, char **argv) { return manifest_write(manifest, path); } +/** + * + */ +void mirror_clone_interface_usage(void) { + printf("usage: mirror_clone {url} {output_dir}"); +} + +/** + * Mirror packages referenced by a remote manifest + * @param argc + * @param argv + * @return value of `manifest_write` + */ +int mirror_clone_interface(int argc, char **argv) { + if (argc < 3) { + mirror_clone_interface_usage(); + return -1; + } + char *url = argv[1]; + char *path = argv[2]; + + Manifest *manifest = manifest_read(url); + if (manifest == NULL) { + return -2; + } + + mirror_clone(manifest, path); + return 0; +} /** * */ @@ -231,6 +261,9 @@ int internal_cmd(int argc, char **argv) { else if (strcmp(command, "mkmanifest") == 0) { return mkmanifest_interface(arg_count, arg_array); } + else if (strcmp(command, "mirror_clone") == 0) { + return mirror_clone_interface(arg_count, arg_array); + } else if (strcmp(command, "rpath_set") == 0) { return rpath_set_interface(arg_count, arg_array); } -- cgit