|
@@ -25,8 +25,6 @@ import static org.apache.dolphinscheduler.common.constants.Constants.RESOURCE_VI
|
|
|
import static org.apache.dolphinscheduler.common.constants.Constants.UTF_8;
|
|
|
import static org.apache.dolphinscheduler.common.constants.DateConstants.YYYYMMDDHHMMSS;
|
|
|
|
|
|
-import org.apache.dolphinscheduler.common.constants.TenantConstants;
|
|
|
-
|
|
|
import org.apache.commons.io.IOUtils;
|
|
|
import org.apache.commons.lang3.SystemUtils;
|
|
|
|
|
@@ -37,15 +35,12 @@ import java.io.FileOutputStream;
|
|
|
import java.io.IOException;
|
|
|
import java.io.InputStream;
|
|
|
import java.nio.charset.StandardCharsets;
|
|
|
-import java.nio.file.FileSystems;
|
|
|
import java.nio.file.Files;
|
|
|
import java.nio.file.NoSuchFileException;
|
|
|
import java.nio.file.Path;
|
|
|
import java.nio.file.attribute.FileAttribute;
|
|
|
import java.nio.file.attribute.PosixFilePermission;
|
|
|
import java.nio.file.attribute.PosixFilePermissions;
|
|
|
-import java.nio.file.attribute.UserPrincipal;
|
|
|
-import java.nio.file.attribute.UserPrincipalLookupService;
|
|
|
import java.util.Set;
|
|
|
import java.util.zip.CRC32;
|
|
|
import java.util.zip.CheckedInputStream;
|
|
@@ -328,19 +323,23 @@ public class FileUtils {
|
|
|
return crcString;
|
|
|
}
|
|
|
|
|
|
- public static void setFileOwner(Path path, String tenant) {
|
|
|
- try {
|
|
|
- if (TenantConstants.DEFAULT_TENANT_CODE.equals(tenant)) {
|
|
|
- log.debug("The current tenant: {} is the default tenant, no need to set the owner for file: {}", tenant,
|
|
|
- path);
|
|
|
- return;
|
|
|
- }
|
|
|
- UserPrincipalLookupService userPrincipalLookupService =
|
|
|
- FileSystems.getDefault().getUserPrincipalLookupService();
|
|
|
- UserPrincipal tenantPrincipal = userPrincipalLookupService.lookupPrincipalByName(tenant);
|
|
|
- Files.setOwner(path, tenantPrincipal);
|
|
|
- } catch (IOException e) {
|
|
|
- log.error("Set file: {} owner to: {} failed", path, tenant, e);
|
|
|
+ public static void setFileOwner(Path filePath, String fileOwner) throws InterruptedException, IOException {
|
|
|
+ // We use linux command to set the file owner, since jdk api will not use sudo.
|
|
|
+ String command = String.format("sudo chown %s %s", fileOwner, filePath.toString());
|
|
|
+ Runtime.getRuntime().exec(command);
|
|
|
+ Process process = Runtime.getRuntime().exec(command);
|
|
|
+ if (0 != process.waitFor()) {
|
|
|
+ throw new RuntimeException("Set file: " + filePath + " to owner: " + fileOwner + " failed");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public static void setDirectoryOwner(Path filePath, String fileOwner) throws IOException, InterruptedException {
|
|
|
+ // We use linux command to set the file owner, since jdk api will not use sudo.
|
|
|
+ String command = String.format("sudo chown -R %s %s", fileOwner, filePath.toString());
|
|
|
+ Runtime.getRuntime().exec(command);
|
|
|
+ Process process = Runtime.getRuntime().exec(command);
|
|
|
+ if (0 != process.waitFor()) {
|
|
|
+ throw new RuntimeException("Set directory: " + filePath + " to owner: " + fileOwner + " failed");
|
|
|
}
|
|
|
}
|
|
|
|