Skip to content

Commit c15b89c

Browse files
committed
Don't use partial XPath when sending "set" config operations
Support for partial XPaths have been removed in PAN-OS 11.0.3-h3, and full XPaths are supported across all PAN-OS versions we're targetting.
1 parent 1b483a1 commit c15b89c

File tree

3 files changed

+37
-5
lines changed

3 files changed

+37
-5
lines changed

assets/pango/xml/utils.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package xml
2+
3+
import "bytes"
4+
5+
func StripEntryElement(data []byte) []byte {
6+
if !bytes.HasPrefix(data, []byte("<entry")) || !bytes.HasSuffix(data, []byte("</entry>")) {
7+
return data
8+
}
9+
10+
var startIdx, endIdx int
11+
startIdx = bytes.Index(data, []byte(">"))
12+
endIdx = len(data) - len("</entry>")
13+
14+
return data[startIdx+1 : endIdx]
15+
}

pkg/translate/imports.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,12 @@ func RenderImports(templateTypes ...string) (string, error) {
3030
manager.AddSdkImport("github.com/PaloAltoNetworks/pango/version", "")
3131
case "service":
3232
manager.AddStandardImport("context", "")
33+
manager.AddStandardImport("encoding/xml", "")
3334
manager.AddStandardImport("fmt", "")
3435
manager.AddSdkImport("github.com/PaloAltoNetworks/pango/errors", "")
3536
manager.AddSdkImport("github.com/PaloAltoNetworks/pango/util", "")
3637
manager.AddSdkImport("github.com/PaloAltoNetworks/pango/xmlapi", "")
38+
manager.AddSdkImport("github.com/PaloAltoNetworks/pango/xml", "pangoxml")
3739
case "filtering":
3840
manager.AddSdkImport("github.com/PaloAltoNetworks/pango/filtering", "")
3941
case "audit":

templates/sdk/service.tmpl

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -56,12 +56,16 @@ return nil, err
5656

5757
{{- if .Entry}}
5858
path, err := loc.XpathWithEntryName(vn, entry.Name)
59+
if err != nil {
60+
return nil, err
61+
}
5962
{{- else}}
6063
path, err := loc.Xpath(vn)
64+
if err != nil {
65+
return nil, err
66+
}
67+
path = path[:len(path)-1]
6168
{{- end}}
62-
if err != nil {
63-
return nil, err
64-
}
6569

6670
{{- if .Entry}}
6771
createSpec, err := specifier(entry)
@@ -72,10 +76,21 @@ if err != nil {
7276
return nil, err
7377
}
7478

79+
data, err := xml.Marshal(createSpec)
80+
if err != nil {
81+
return nil, err
82+
}
83+
84+
// Optionally remove top entry element from marshalled data to fullfill
85+
// PAN-OS API requirements.
86+
// PAN-OS behaviour change: SET operations in the XML API no longer support
87+
// partial XPath values.
88+
data = pangoxml.StripEntryElement(data)
89+
7590
cmd := &xmlapi.Config{
7691
Action: "set",
77-
Xpath: util.AsXpath(path[:len(path)-1]),
78-
Element: createSpec,
92+
Xpath: util.AsXpath(path),
93+
Element: string(data),
7994
Target: s.client.GetTarget(),
8095
}
8196

0 commit comments

Comments
 (0)