X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=daemon%2Fchecksum.c;h=8533ccc324e0d80b32a66f44b2925ac12b3814ed;hb=c379757fae35ce991feff3324474056d7aa02d41;hp=3654b650715af3165427e198474e5c92cdedf061;hpb=56bef498f46ac3dd580f4bde3c8f3ed2fe688826;p=libguestfs.git diff --git a/daemon/checksum.c b/daemon/checksum.c index 3654b65..8533ccc 100644 --- a/daemon/checksum.c +++ b/daemon/checksum.c @@ -1,5 +1,5 @@ /* libguestfs - the guestfsd daemon - * Copyright (C) 2009 Red Hat Inc. + * Copyright (C) 2009 Red Hat Inc. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -27,44 +27,48 @@ #include "daemon.h" #include "actions.h" +static const char * +program_of_csum (const char *csumtype) +{ + if (STRCASEEQ (csumtype, "crc")) + return "cksum"; + else if (STRCASEEQ (csumtype, "md5")) + return "md5sum"; + else if (STRCASEEQ (csumtype, "sha1")) + return "sha1sum"; + else if (STRCASEEQ (csumtype, "sha224")) + return "sha224sum"; + else if (STRCASEEQ (csumtype, "sha256")) + return "sha256sum"; + else if (STRCASEEQ (csumtype, "sha384")) + return "sha384sum"; + else if (STRCASEEQ (csumtype, "sha512")) + return "sha512sum"; + else { + reply_with_error ("unknown checksum type, expecting crc|md5|sha1|sha224|sha256|sha384|sha512"); + return NULL; + } +} + char * -do_checksum (char *csumtype, char *path) +do_checksum (const char *csumtype, const char *path) { const char *program; char *buf; char *out, *err; - int r, len; - - NEED_ROOT (NULL); - ABS_PATH (path, NULL); + int r; + int len; - if (strcasecmp (csumtype, "crc") == 0) - program = "cksum"; - else if (strcasecmp (csumtype, "md5") == 0) - program = "md5sum"; - else if (strcasecmp (csumtype, "sha1") == 0) - program = "sha1sum"; - else if (strcasecmp (csumtype, "sha224") == 0) - program = "sha224sum"; - else if (strcasecmp (csumtype, "sha256") == 0) - program = "sha256sum"; - else if (strcasecmp (csumtype, "sha384") == 0) - program = "sha384sum"; - else if (strcasecmp (csumtype, "sha512") == 0) - program = "sha512sum"; - else { - reply_with_error ("unknown checksum type, expecting crc|md5|sha1|sha224|sha256|sha384|sha512"); + program = program_of_csum (csumtype); + if (program == NULL) return NULL; - } /* Make the path relative to /sysroot. */ - len = strlen (path) + 9; - buf = malloc (len); + buf = sysroot_path (path); if (!buf) { reply_with_perror ("malloc"); return NULL; } - snprintf (buf, len, "/sysroot%s", path); r = command (&out, &err, program, buf, NULL); free (buf);