// the sha512 line breaks in both awk and sed during an inline
// expansion. unfortunately, we have to save a temp file. In this case,
// somewhat avoiding collisions by naming the file .user, conceding it
// isn't using any locks to prevent overlapping changes
Statement replaceShadowFile = exec(format("test -f %2$s.%1$s && mv %2$s.%1$s %2$s", login, shadowFile));
return new StatementList(ImmutableList.of(replaceEntryInTempFile, replaceShadowFile)).render(family);
} catch (Exception e) {
propagate(e);
return null;
}
}