From: Milan Broz Date: Thu, 23 Aug 2012 17:55:26 +0000 (+0200) Subject: dracut-install: FIPS workaround for fipscheck dir X-Git-Tag: 024~97 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=cce471c9cec7f501614a025e114dd7631ee3a734;p=platform%2Fupstream%2Fdracut.git dracut-install: FIPS workaround for fipscheck dir In recent Fedora distro are all hmac files located in /lib (to avoid multiarch conflict). When installing hmac file, also install files from these locations. Signed-off-by: Milan Broz --- diff --git a/install/dracut-install.c b/install/dracut-install.c index 0571c2a..f06f5ac 100644 --- a/install/dracut-install.c +++ b/install/dracut-install.c @@ -321,7 +321,7 @@ static int resolve_deps(const char *src) } /* Install "..hmac" file for FIPS self-checks */ -static int hmac_install(const char *src, const char *dst) +static int hmac_install(const char *src, const char *dst, const char *hmacpath) { char *srcpath = strdup(src); char *dstpath = strdup(dst); @@ -332,10 +332,20 @@ static int hmac_install(const char *src, const char *dst) if (endswith(src, ".hmac")) return 0; + if (!hmacpath) { + hmac_install(src, dst, "/lib/fipscheck"); + hmac_install(src, dst, "/lib64/fipscheck"); + } + srcpath[dlen] = '\0'; dstpath[dir_len(dst)] = '\0'; - asprintf(&srchmacname, "%s/.%s.hmac", srcpath, &src[dlen + 1]); - asprintf(&dsthmacname, "%s/.%s.hmac", dstpath, &src[dlen + 1]); + if (hmacpath) { + asprintf(&srchmacname, "%s/%s.hmac", hmacpath, &src[dlen + 1]); + asprintf(&dsthmacname, "%s/%s.hmac", hmacpath, &src[dlen + 1]); + } else { + asprintf(&srchmacname, "%s/.%s.hmac", srcpath, &src[dlen + 1]); + asprintf(&dsthmacname, "%s/.%s.hmac", dstpath, &src[dlen + 1]); + } log_debug("hmac cp '%s' '%s')", srchmacname, dsthmacname); dracut_install(srchmacname, dsthmacname, false, false, true); free(dsthmacname); @@ -480,7 +490,7 @@ static int dracut_install(const char *src, const char *dst, bool isdir, bool res free(abspath); if (arg_hmac) { /* copy .hmac files also */ - hmac_install(src, dst); + hmac_install(src, dst, NULL); } return 0; @@ -491,7 +501,7 @@ static int dracut_install(const char *src, const char *dst, bool isdir, bool res ret += resolve_deps(src); if (arg_hmac) { /* copy .hmac files also */ - hmac_install(src, dst); + hmac_install(src, dst, NULL); } }