-
Notifications
You must be signed in to change notification settings - Fork 4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fix(cli): CLI errors when run as a non-existent user #21018
Conversation
The CDK home directory was being created in the users home directory, but this causes an error if for some reason the user does not have a home directory. Since the cdk home directory is only being used to create a cache directory, this PR updates the location from being the users home directory to being the os tmp directory. I don't think there is a strong reason why this directory needs to live in the users home directory, but if there is I could also change this to have some fallback logic instead. fix #7937
There are generally security concerns about having predictable and well-known directories in This feels like potentially making things harder (or less secure) for the vast majority of users to improve the use case where a user doesn't have a home directory. It may be preferable to use the user's home directory if available and to fallback to a temporary directory. And in that case, it's likely better to use |
I've updated it to have some fallback logic. It will first try and use the home directory and fall back to creating a tmp dir. |
const tmpDir = fs.realpathSync(os.tmpdir()); | ||
let home; | ||
try { | ||
home = path.join((os.userInfo().homedir ?? os.homedir()).trim(), '.cdk'); | ||
} catch {} | ||
return process.env.CDK_HOME | ||
? path.resolve(process.env.CDK_HOME) | ||
: path.join((os.userInfo().homedir ?? os.homedir()).trim() || '/', '.cdk'); | ||
: home || fs.mkdtempSync(path.join(tmpDir, '.cdk')).trim(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why don't we just use the tmpdir proper as the CDK home dir, instead of creating a one-use directory inside it?
if (process.env.CDK_HOME) {
return path.resolve(process.env.CDK_HOME);
}
let cdkParent;
try {
cdkParent = os.userInfo().homedir ?? os.homedir();
} catch (e) {
cdkParent = os.tmpdir();
debug(`Error retrieving home dir, falling back to temp dir: ${e}`);
}
return path.join(cdkParent, '.cdk');
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I stand corrected, should have read the thread.
Thank you for contributing! Your pull request will be updated from main and then merged automatically (do not update manually, and be sure to allow changes to be pushed to your fork). |
AWS CodeBuild CI Report
Powered by github-codebuild-logs, available on the AWS Serverless Application Repository |
Thank you for contributing! Your pull request will be updated from main and then merged automatically (do not update manually, and be sure to allow changes to be pushed to your fork). |
The CDK home directory was being created in the users home directory, but this causes an error if for some reason the user does not have a home directory. This PR adds some fallback logic so that if the users home directory does not exist it will fall back to creating a tmp directory. fix aws#7937 ---- ### All Submissions: * [ ] Have you followed the guidelines in our [Contributing guide?](https://github.com/aws/aws-cdk/blob/main/CONTRIBUTING.md) ### Adding new Unconventional Dependencies: * [ ] This PR adds new unconventional dependencies following the process described [here](https://github.com/aws/aws-cdk/blob/main/CONTRIBUTING.md/#adding-new-unconventional-dependencies) ### New Features * [ ] Have you added the new feature to an [integration test](https://github.com/aws/aws-cdk/blob/main/INTEGRATION_TESTS.md)? * [ ] Did you use `yarn integ` to deploy the infrastructure and generate the snapshot (i.e. `yarn integ` without `--dry-run`)? *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license*
The CDK home directory was being created in the users home directory,
but this causes an error if for some reason the user does not have a
home directory.
This PR adds some fallback logic so that if the users home directory does not exist it will fall back to
creating a tmp directory.
fix #7937
All Submissions:
Adding new Unconventional Dependencies:
New Features
yarn integ
to deploy the infrastructure and generate the snapshot (i.e.yarn integ
without--dry-run
)?By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license