Skip to content

Commit 5addb5f

Browse files
committed
[SECURITY-3206]
1 parent bfa9b30 commit 5addb5f

File tree

4 files changed

+44
-4
lines changed

4 files changed

+44
-4
lines changed

src/main/java/org/jenkinsci/plugins/scriptler/ScriptlerManagement.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import hudson.markup.MarkupFormatter;
3131
import hudson.markup.RawHtmlMarkupFormatter;
3232
import hudson.model.*;
33+
import hudson.security.AccessControlled;
3334
import hudson.security.Permission;
3435
import jenkins.model.Jenkins;
3536
import org.apache.commons.fileupload.FileItem;
@@ -637,8 +638,13 @@ private String[] resolveSlaveNames(String nameAlias) {
637638
* @throws IOException
638639
* @throws ServletException
639640
*/
640-
public void doShowScript(StaplerRequest req, StaplerResponse rsp, @QueryParameter("id") String id) throws IOException, ServletException {
641-
// action directly accessible to any people configuring job, so no permission check
641+
public void doShowScript(StaplerRequest req, StaplerResponse rsp, @AncestorInPath Item item, @QueryParameter("id") String id) throws IOException, ServletException {
642+
// action directly accessible to any people configuring job, so use a more lenient permission check
643+
Jenkins jenkins = Jenkins.get();
644+
if (!jenkins.hasAnyPermission(ScriptlerPermissions.RUN_SCRIPTS, ScriptlerPermissions.CONFIGURE)) {
645+
AccessControlled parent = item == null ? jenkins : item;
646+
parent.checkPermission(Item.CONFIGURE);
647+
}
642648
Script script = ScriptHelper.getScript(id, true);
643649
req.setAttribute("script", script);
644650
req.getView(this, "show.jelly").forward(req, rsp);
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package org.jenkinsci.plugins.scriptler;
2+
3+
import edu.umd.cs.findbugs.annotations.NonNull;
4+
import hudson.Extension;
5+
import hudson.model.Action;
6+
import hudson.model.Job;
7+
import java.util.Collection;
8+
import java.util.Collections;
9+
import jenkins.model.TransientActionFactory;
10+
11+
@Extension
12+
public class TransientActionProvider extends TransientActionFactory<Job> {
13+
@Override
14+
public Class<Job> type() {
15+
return Job.class;
16+
}
17+
18+
@NonNull
19+
@Override
20+
public Collection<? extends Action> createFor(@NonNull Job target) {
21+
return Collections.singleton(new ScriptlerManagement() {
22+
@Override
23+
public String getIconFileName() {
24+
return null;
25+
}
26+
27+
@Override
28+
public String getDisplayName() {
29+
return null;
30+
}
31+
});
32+
}
33+
}

src/main/resources/org/jenkinsci/plugins/scriptler/builder/ScriptlerBuilder/config.jelly

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
<f:entry title="${%Script}" field="buildStepContent">
2121
<input type="hidden" name="backupJobName" />
2222
<input type="hidden" name="builderId" value="${instance.builderId}" />
23-
<select name="scriptlerScriptId" onChange="scriptler_initDetailLink('${rootURL}', this);scriptler_showParams(this, this.value);" >
23+
<select name="scriptlerScriptId" data-item-url="${it.url}" onChange="scriptler_initDetailLink('${rootURL}', this);scriptler_showParams(this, this.value);" >
2424
<option value="">(Default)</option>
2525
<j:forEach var="inst" items="${descriptor.scripts}" varStatus="loop">
2626
<j:choose>

src/main/webapp/lib/scriptler.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11

22
function scriptler_initDetailLink(rootURL, referenceTag){
3+
var itemURL = referenceTag.getAttribute('data-item-url');
34
var selId = referenceTag.value;
45
var all = new Array();
56
all = document.getElementsByName('scriptlerScriptId');
67
for(var i = 0; i < all.length; i++) {
78
if(referenceTag == all.item(i)){
89
var detailsLinkTag = document.getElementsByName('showScriptlerDetailLink').item(i);
910
if(selId.length != 0){
10-
detailsLinkTag .href=rootURL+"/scriptler/showScript?id=".concat(selId);
11+
detailsLinkTag .href=rootURL+"/" + itemURL + "scriptler/showScript?id=".concat(selId);
1112
detailsLinkTag .style.display = 'block';
1213
}else{
1314
detailsLinkTag .style.display = 'none';

0 commit comments

Comments
 (0)