Skip to content
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

Stop recommending -jnlpUrl #8639

Merged
merged 1 commit into from Nov 9, 2023
Merged

Stop recommending -jnlpUrl #8639

merged 1 commit into from Nov 9, 2023

Conversation

basil
Copy link
Member

@basil basil commented Oct 25, 2023

See jenkinsci/remoting#677 (comment); the -jnlpUrl form essentially means you don't have to specify -name and things like -webSocket, -workDir, etc but then requires Remoting to query the server for these values. Simpler and less error-prone to just pass in the desired arguments directly without the extra layer of indirection.

Unfortunately, passing in -name via a shell can be tricky if the name contains special characters. We tested with a name of "foo's `bar" (yes, that includes both single and double quotes, backticks, and spaces) on both Unix and Windows to come up with the escaping algorithm. Fortunately we don't need to do deal with most other characters that need escaping in shells due to the restrictions imposed by Jenkins#checkGoodName.

The end result is a simpler connection algorithm on the Remoting side that skips an additional request to the .jnlp file on the server and instead begins execution directly with the desired set of arguments. This removal of a layer of indirection makes things easier to understand and debug.

Testing done

Tested the instructions on both Unix and Windows with an agent named "foo's `bar".

Proposed changelog entries

  • Stop recommending JNLP URL in agent launch instructions.

Proposed upgrade guidelines

N/A

Submitter checklist

Edit tasklist title
Beta Give feedback Tasklist Submitter checklist, more options

Delete tasklist

Delete tasklist block?
Are you sure? All relationships in this tasklist will be removed.
  1. The Jira issue, if it exists, is well-described.
    Options
  2. The changelog entries and upgrade guidelines are appropriate for the audience affected by the change (users or developers, depending on the change) and are in the imperative mood (see examples). Fill in the Proposed upgrade guidelines section only if there are breaking changes or changes that may require extra steps from users during upgrade.
    Options
  3. There is automated testing or an explanation as to why this change has no tests.
    Options
  4. New public classes, fields, and methods are annotated with @Restricted or have @since TODO Javadocs, as appropriate.
    Options
  5. New deprecations are annotated with @Deprecated(since = "TODO") or @Deprecated(forRemoval = true, since = "TODO"), if applicable.
    Options
  6. New or substantially changed JavaScript is not defined inline and does not call eval to ease future introduction of Content Security Policy (CSP) directives (see documentation).
    Options
  7. For dependency updates, there are links to external changelogs and, if possible, full differentials.
    Options
  8. For new APIs and extension points, there is a link to at least one consumer.
    Options

Desired reviewers

@mention

Before the changes are marked as ready-for-merge:

Maintainer checklist

Edit tasklist title
Beta Give feedback Tasklist Maintainer checklist, more options

Delete tasklist

Delete tasklist block?
Are you sure? All relationships in this tasklist will be removed.
  1. There are at least two (2) approvals for the pull request and no outstanding requests for change.
    Options
  2. Conversations in the pull request are over, or it is explicit that a reviewer is not blocking the change.
    Options
  3. Changelog entries in the pull request title and/or Proposed changelog entries are accurate, human-readable, and in the imperative mood.
    Options
  4. Proper changelog labels are set so that the changelog can be generated automatically.
    Options
  5. If the change needs additional upgrade steps from users, the upgrade-guide-needed label is set and there is a Proposed upgrade guidelines section in the pull request title (see example).
    Options
  6. If it would make sense to backport the change to LTS, a Jira issue must exist, be a Bug or Improvement, and be labeled as lts-candidate to be considered (see query).
    Options

@basil basil added internal rfe For changelog: Minor enhancement. use `major-rfe` for changes to be highlighted and removed internal labels Oct 25, 2023
@basil basil requested a review from a team October 25, 2023 15:30
@basil
Copy link
Member Author

basil commented Oct 25, 2023

I don't think the escaping is all that interesting since this is a command the user is expected to copy and paste rather than something automatically executed, but CC'ing the security team in case they are interested.

Copy link
Member

@jglick jglick left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A good start.

sb.append("-name ");
sb.append(computerName);
sb.append(' ');
if (isWebSocket()) {
Copy link
Member

@jglick jglick Oct 25, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We could simply deprecate this option, since it will now have no effect other than changing the recommendation for the command if you take the advice to stop using -jnlpUrl. Compare discussion of vmargs in #6543.

if (isWebSocket()) {
sb.append("-webSocket ");
}
if (tunnel != null) {
Copy link
Member

@jglick jglick Oct 25, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same here. Also workDirSettings. IOW there is no longer a reason to have any nondeprecated configurable parameters on JNLPLauncher.

@basil
Copy link
Member Author

basil commented Oct 25, 2023

A good start.

If you think more things can be cleaned up, then by all means, propose some pull requests to clean them up. I will not be taking cleanup suggestions.

@daniel-beck
Copy link
Member

Seems fine from security POV, thanks for considering the escaping here.

@daniel-beck daniel-beck removed the request for review from a team October 26, 2023 08:46
@daniel-beck daniel-beck added the security-approved @jenkinsci/core-security-review reviewed this PR for security issues label Oct 26, 2023
@MarkEWaite
Copy link
Contributor

This PR is now ready for merge. We will merge it after approximately 24 hours if there is no negative feedback.

@MarkEWaite MarkEWaite self-assigned this Nov 8, 2023
@MarkEWaite MarkEWaite added the ready-for-merge The PR is ready to go, and it will be merged soon if there is no negative feedback label Nov 8, 2023
@MarkEWaite MarkEWaite merged commit 41d09e0 into jenkinsci:master Nov 9, 2023
16 checks passed
@basil basil deleted the remoting branch November 9, 2023 20:20
@jglick jglick mentioned this pull request Dec 7, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
ready-for-merge The PR is ready to go, and it will be merged soon if there is no negative feedback rfe For changelog: Minor enhancement. use `major-rfe` for changes to be highlighted security-approved @jenkinsci/core-security-review reviewed this PR for security issues
Projects
None yet
5 participants