Skip to content
This repository was archived by the owner on Dec 13, 2018. It is now read-only.

Commit 3c659cb

Browse files
author
Mrunal Patel
committed
Merge pull request #573 from LK4D4/update_gocap
Update github.com/syndtr/gocapability to 66ef2aa
2 parents 90f8aa6 + 68edb28 commit 3c659cb

File tree

4 files changed

+223
-83
lines changed

4 files changed

+223
-83
lines changed

update-vendor.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,6 @@ clone git github.com/codegangsta/cli 1.1.0
4444
clone git github.com/coreos/go-systemd v2
4545
clone git github.com/godbus/dbus v2
4646
clone git github.com/Sirupsen/logrus v0.7.3
47-
clone git github.com/syndtr/gocapability 8e4cdcb
47+
clone git github.com/syndtr/gocapability 66ef2aa
4848

4949
# intentionally not vendoring Docker itself... that'd be a circle :)

vendor/src/github.com/syndtr/gocapability/capability/enum.go

+1-82
Original file line numberDiff line numberDiff line change
@@ -34,90 +34,9 @@ const (
3434
BOUNDS = BOUNDING
3535
)
3636

37+
//go:generate go run enumgen/gen.go
3738
type Cap int
3839

39-
func (c Cap) String() string {
40-
switch c {
41-
case CAP_CHOWN:
42-
return "chown"
43-
case CAP_DAC_OVERRIDE:
44-
return "dac_override"
45-
case CAP_DAC_READ_SEARCH:
46-
return "dac_read_search"
47-
case CAP_FOWNER:
48-
return "fowner"
49-
case CAP_FSETID:
50-
return "fsetid"
51-
case CAP_KILL:
52-
return "kill"
53-
case CAP_SETGID:
54-
return "setgid"
55-
case CAP_SETUID:
56-
return "setuid"
57-
case CAP_SETPCAP:
58-
return "setpcap"
59-
case CAP_LINUX_IMMUTABLE:
60-
return "linux_immutable"
61-
case CAP_NET_BIND_SERVICE:
62-
return "net_bind_service"
63-
case CAP_NET_BROADCAST:
64-
return "net_broadcast"
65-
case CAP_NET_ADMIN:
66-
return "net_admin"
67-
case CAP_NET_RAW:
68-
return "net_raw"
69-
case CAP_IPC_LOCK:
70-
return "ipc_lock"
71-
case CAP_IPC_OWNER:
72-
return "ipc_owner"
73-
case CAP_SYS_MODULE:
74-
return "sys_module"
75-
case CAP_SYS_RAWIO:
76-
return "sys_rawio"
77-
case CAP_SYS_CHROOT:
78-
return "sys_chroot"
79-
case CAP_SYS_PTRACE:
80-
return "sys_ptrace"
81-
case CAP_SYS_PACCT:
82-
return "sys_psacct"
83-
case CAP_SYS_ADMIN:
84-
return "sys_admin"
85-
case CAP_SYS_BOOT:
86-
return "sys_boot"
87-
case CAP_SYS_NICE:
88-
return "sys_nice"
89-
case CAP_SYS_RESOURCE:
90-
return "sys_resource"
91-
case CAP_SYS_TIME:
92-
return "sys_time"
93-
case CAP_SYS_TTY_CONFIG:
94-
return "sys_tty_config"
95-
case CAP_MKNOD:
96-
return "mknod"
97-
case CAP_LEASE:
98-
return "lease"
99-
case CAP_AUDIT_WRITE:
100-
return "audit_write"
101-
case CAP_AUDIT_CONTROL:
102-
return "audit_control"
103-
case CAP_SETFCAP:
104-
return "setfcap"
105-
case CAP_MAC_OVERRIDE:
106-
return "mac_override"
107-
case CAP_MAC_ADMIN:
108-
return "mac_admin"
109-
case CAP_SYSLOG:
110-
return "syslog"
111-
case CAP_WAKE_ALARM:
112-
return "wake_alarm"
113-
case CAP_BLOCK_SUSPEND:
114-
return "block_suspend"
115-
case CAP_AUDIT_READ:
116-
return "audit_read"
117-
}
118-
return "unknown"
119-
}
120-
12140
// POSIX-draft defined capabilities.
12241
const (
12342
// In a system with the [_POSIX_CHOWN_RESTRICTED] option defined, this
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
// generated file; DO NOT EDIT - use go generate in directory with source
2+
3+
package capability
4+
5+
func (c Cap) String() string {
6+
switch c {
7+
case CAP_CHOWN:
8+
return "chown"
9+
case CAP_DAC_OVERRIDE:
10+
return "dac_override"
11+
case CAP_DAC_READ_SEARCH:
12+
return "dac_read_search"
13+
case CAP_FOWNER:
14+
return "fowner"
15+
case CAP_FSETID:
16+
return "fsetid"
17+
case CAP_KILL:
18+
return "kill"
19+
case CAP_SETGID:
20+
return "setgid"
21+
case CAP_SETUID:
22+
return "setuid"
23+
case CAP_SETPCAP:
24+
return "setpcap"
25+
case CAP_LINUX_IMMUTABLE:
26+
return "linux_immutable"
27+
case CAP_NET_BIND_SERVICE:
28+
return "net_bind_service"
29+
case CAP_NET_BROADCAST:
30+
return "net_broadcast"
31+
case CAP_NET_ADMIN:
32+
return "net_admin"
33+
case CAP_NET_RAW:
34+
return "net_raw"
35+
case CAP_IPC_LOCK:
36+
return "ipc_lock"
37+
case CAP_IPC_OWNER:
38+
return "ipc_owner"
39+
case CAP_SYS_MODULE:
40+
return "sys_module"
41+
case CAP_SYS_RAWIO:
42+
return "sys_rawio"
43+
case CAP_SYS_CHROOT:
44+
return "sys_chroot"
45+
case CAP_SYS_PTRACE:
46+
return "sys_ptrace"
47+
case CAP_SYS_PACCT:
48+
return "sys_pacct"
49+
case CAP_SYS_ADMIN:
50+
return "sys_admin"
51+
case CAP_SYS_BOOT:
52+
return "sys_boot"
53+
case CAP_SYS_NICE:
54+
return "sys_nice"
55+
case CAP_SYS_RESOURCE:
56+
return "sys_resource"
57+
case CAP_SYS_TIME:
58+
return "sys_time"
59+
case CAP_SYS_TTY_CONFIG:
60+
return "sys_tty_config"
61+
case CAP_MKNOD:
62+
return "mknod"
63+
case CAP_LEASE:
64+
return "lease"
65+
case CAP_AUDIT_WRITE:
66+
return "audit_write"
67+
case CAP_AUDIT_CONTROL:
68+
return "audit_control"
69+
case CAP_SETFCAP:
70+
return "setfcap"
71+
case CAP_MAC_OVERRIDE:
72+
return "mac_override"
73+
case CAP_MAC_ADMIN:
74+
return "mac_admin"
75+
case CAP_SYSLOG:
76+
return "syslog"
77+
case CAP_WAKE_ALARM:
78+
return "wake_alarm"
79+
case CAP_BLOCK_SUSPEND:
80+
return "block_suspend"
81+
case CAP_AUDIT_READ:
82+
return "audit_read"
83+
}
84+
return "unknown"
85+
}
86+
87+
// List returns list of all supported capabilities
88+
func List() []Cap {
89+
return []Cap{
90+
CAP_CHOWN,
91+
CAP_DAC_OVERRIDE,
92+
CAP_DAC_READ_SEARCH,
93+
CAP_FOWNER,
94+
CAP_FSETID,
95+
CAP_KILL,
96+
CAP_SETGID,
97+
CAP_SETUID,
98+
CAP_SETPCAP,
99+
CAP_LINUX_IMMUTABLE,
100+
CAP_NET_BIND_SERVICE,
101+
CAP_NET_BROADCAST,
102+
CAP_NET_ADMIN,
103+
CAP_NET_RAW,
104+
CAP_IPC_LOCK,
105+
CAP_IPC_OWNER,
106+
CAP_SYS_MODULE,
107+
CAP_SYS_RAWIO,
108+
CAP_SYS_CHROOT,
109+
CAP_SYS_PTRACE,
110+
CAP_SYS_PACCT,
111+
CAP_SYS_ADMIN,
112+
CAP_SYS_BOOT,
113+
CAP_SYS_NICE,
114+
CAP_SYS_RESOURCE,
115+
CAP_SYS_TIME,
116+
CAP_SYS_TTY_CONFIG,
117+
CAP_MKNOD,
118+
CAP_LEASE,
119+
CAP_AUDIT_WRITE,
120+
CAP_AUDIT_CONTROL,
121+
CAP_SETFCAP,
122+
CAP_MAC_OVERRIDE,
123+
CAP_MAC_ADMIN,
124+
CAP_SYSLOG,
125+
CAP_WAKE_ALARM,
126+
CAP_BLOCK_SUSPEND,
127+
CAP_AUDIT_READ,
128+
}
129+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
package main
2+
3+
import (
4+
"bytes"
5+
"fmt"
6+
"go/ast"
7+
"go/format"
8+
"go/parser"
9+
"go/token"
10+
"io/ioutil"
11+
"log"
12+
"os"
13+
"strings"
14+
)
15+
16+
const fileName = "enum.go"
17+
const genName = "enum_gen.go"
18+
19+
type generator struct {
20+
buf bytes.Buffer
21+
caps []string
22+
}
23+
24+
func (g *generator) writeHeader() {
25+
g.buf.WriteString("// generated file; DO NOT EDIT - use go generate in directory with source\n")
26+
g.buf.WriteString("\n")
27+
g.buf.WriteString("package capability")
28+
}
29+
30+
func (g *generator) writeStringFunc() {
31+
g.buf.WriteString("\n")
32+
g.buf.WriteString("func (c Cap) String() string {\n")
33+
g.buf.WriteString("switch c {\n")
34+
for _, cap := range g.caps {
35+
fmt.Fprintf(&g.buf, "case %s:\n", cap)
36+
fmt.Fprintf(&g.buf, "return \"%s\"\n", strings.ToLower(cap[4:]))
37+
}
38+
g.buf.WriteString("}\n")
39+
g.buf.WriteString("return \"unknown\"\n")
40+
g.buf.WriteString("}\n")
41+
}
42+
43+
func (g *generator) writeListFunc() {
44+
g.buf.WriteString("\n")
45+
g.buf.WriteString("// List returns list of all supported capabilities\n")
46+
g.buf.WriteString("func List() []Cap {\n")
47+
g.buf.WriteString("return []Cap{\n")
48+
for _, cap := range g.caps {
49+
fmt.Fprintf(&g.buf, "%s,\n", cap)
50+
}
51+
g.buf.WriteString("}\n")
52+
g.buf.WriteString("}\n")
53+
}
54+
55+
func main() {
56+
fs := token.NewFileSet()
57+
parsedFile, err := parser.ParseFile(fs, fileName, nil, 0)
58+
if err != nil {
59+
log.Fatal(err)
60+
}
61+
var caps []string
62+
for _, decl := range parsedFile.Decls {
63+
decl, ok := decl.(*ast.GenDecl)
64+
if !ok || decl.Tok != token.CONST {
65+
continue
66+
}
67+
for _, spec := range decl.Specs {
68+
vspec := spec.(*ast.ValueSpec)
69+
name := vspec.Names[0].Name
70+
if strings.HasPrefix(name, "CAP_") {
71+
caps = append(caps, name)
72+
}
73+
}
74+
}
75+
g := &generator{caps: caps}
76+
g.writeHeader()
77+
g.writeStringFunc()
78+
g.writeListFunc()
79+
src, err := format.Source(g.buf.Bytes())
80+
if err != nil {
81+
fmt.Println("generated invalid Go code")
82+
fmt.Println(g.buf.String())
83+
log.Fatal(err)
84+
}
85+
fi, err := os.Stat(fileName)
86+
if err != nil {
87+
log.Fatal(err)
88+
}
89+
if err := ioutil.WriteFile(genName, src, fi.Mode().Perm()); err != nil {
90+
log.Fatal(err)
91+
}
92+
}

0 commit comments

Comments
 (0)