Skip to content

Commit ec4fec9

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 11eb059 commit ec4fec9

File tree

3 files changed

+36
-6
lines changed

3 files changed

+36
-6
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
@@ -24,10 +24,12 @@ func RenderImports(templateTypes ...string) (string, error) {
2424
manager.AddSdkImport("github.com/PaloAltoNetworks/pango/version", "")
2525
case "service":
2626
manager.AddStandardImport("context", "")
27+
manager.AddStandardImport("encoding/xml", "")
2728
manager.AddStandardImport("fmt", "")
2829
manager.AddSdkImport("github.com/PaloAltoNetworks/pango/errors", "")
2930
manager.AddSdkImport("github.com/PaloAltoNetworks/pango/util", "")
3031
manager.AddSdkImport("github.com/PaloAltoNetworks/pango/xmlapi", "")
32+
manager.AddSdkImport("github.com/PaloAltoNetworks/pango/xml", "pangoxml")
3133
case "filtering":
3234
manager.AddSdkImport("github.com/PaloAltoNetworks/pango/filtering", "")
3335
case "audit":

templates/sdk/service.tmpl

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -54,12 +54,16 @@ return nil, err
5454

5555
{{- if .Entry}}
5656
path, err := loc.XpathWithEntryName(vn, entry.Name)
57+
if err != nil {
58+
return nil, err
59+
}
5760
{{- else}}
5861
path, err := loc.Xpath(vn)
62+
if err != nil {
63+
return nil, err
64+
}
65+
path = path[:len(path)-1]
5966
{{- end}}
60-
if err != nil {
61-
return nil, err
62-
}
6367

6468
{{- if .Entry}}
6569
createSpec, err := specifier(entry)
@@ -70,10 +74,19 @@ if err != nil {
7074
return nil, err
7175
}
7276

77+
data, err := xml.Marshal(createSpec)
78+
if err != nil {
79+
return nil, err
80+
}
81+
82+
// Optionally remove top entry element from marshalled data to fullfill
83+
// PAN-OS API requirements.
84+
data = pangoxml.StripEntryElement(data)
85+
7386
cmd := &xmlapi.Config{
7487
Action: "set",
75-
Xpath: util.AsXpath(path[:len(path)-1]),
76-
Element: createSpec,
88+
Xpath: util.AsXpath(path),
89+
Element: string(data),
7790
Target: s.client.GetTarget(),
7891
}
7992

@@ -1302,4 +1315,4 @@ func (s *Service) RemoveFromImport(ctx context.Context, loc Location, entry Entr
13021315
return resp.Comments, nil
13031316
}
13041317
{{- end}}
1305-
{{- end}}
1318+
{{- end}}

0 commit comments

Comments
 (0)