summaryrefslogtreecommitdiff
path: root/sd_login/systemd_cgroup_skip.go
diff options
context:
space:
mode:
Diffstat (limited to 'sd_login/systemd_cgroup_skip.go')
-rw-r--r--sd_login/systemd_cgroup_skip.go102
1 files changed, 102 insertions, 0 deletions
diff --git a/sd_login/systemd_cgroup_skip.go b/sd_login/systemd_cgroup_skip.go
new file mode 100644
index 0000000..e6e9042
--- /dev/null
+++ b/sd_login/systemd_cgroup_skip.go
@@ -0,0 +1,102 @@
+// Copyright (C) 2016-2017 Luke Shumaker <lukeshu@sbcglobal.net>
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package sd_login
+
+// The "skip:" comments in this file are used to automagically
+// generate helper functions. The lack of a space between "//" and
+// "skip:" is important
+
+import (
+ "strconv"
+ "strings"
+)
+
+func (cgroup _Cgroup) SkipPath(prefix _Cgroup) (_Cgroup, bool) {
+ //skip: SkipPath(prefix _Cgroup) : SkipPath(prefix)
+ rest, ok := path_startswith(string(cgroup), string(prefix))
+ if ok {
+ return _Cgroup(rest), true
+ } else {
+ return cgroup, false
+ }
+}
+
+// Skip (*.slice){1,}
+func (cgroup _Cgroup) SkipSlices() (_Cgroup, bool) {
+ //skip: SkipSlices() : SkipSlices()
+ cg := string(cgroup)
+ skipped := false
+ for {
+ cg = strings.TrimLeft(cg, "/")
+ part, rest := split2(cg, '/')
+ if !valid_slice_name(part) {
+ return _Cgroup(cg), skipped
+ }
+ skipped = true
+ cg = rest
+ }
+}
+
+// Skip user@*.service
+func (cgroup _Cgroup) SkipUserManager() (_Cgroup, bool) {
+ //skip: SkipUserManager() : SkipUserManager()
+ part, rest := split2(strings.TrimLeft(string(cgroup), "/"), '/')
+ uid_str, ok := trimPrefixSuffix(part, "user@", ".service")
+ if !ok {
+ return cgroup, false
+ }
+ _, err := strconv.Atoi(uid_str)
+ if err != nil {
+ return cgroup, false
+ }
+ return _Cgroup(rest), true
+}
+
+// Skip session-*.scope
+func (cgroup _Cgroup) SkipSession() (_Cgroup, bool) {
+ //skip: SkipSession() : SkipSession()
+ part, rest := split2(strings.TrimLeft(string(cgroup), "/"), '/')
+ session, ok := trimPrefixSuffix(part, "session-", ".scope")
+ if !ok {
+ return cgroup, false
+ }
+ if !valid_session_name(session) {
+ return cgroup, false
+ }
+ return _Cgroup(rest), true
+}
+
+// Skip (/*.slice){0,}/(user@*.service|session-*.scope)
+func (cgroup _Cgroup) SkipUserPrefix() (_Cgroup, bool) {
+ //skip: SkipUserPrefix() : SkipUserPrefix()
+ cgroup, _ = cgroup.SkipSlices()
+ cgroup, ok := cgroup.SkipUserManager()
+ if ok {
+ return cgroup, ok
+ }
+ return cgroup.SkipSession()
+}
+
+// Skip cgGetRootPath
+func (cgroup _Cgroup) SkipSystemPrefix() (_Cgroup, bool) {
+ //skip: SkipSystemPrefix() : SkipSystemPrefix()
+
+ rootpath, err := cgGetRootPath()
+ if err != nil {
+ return cgroup, false
+ }
+
+ return cgroup.SkipPath(rootpath)
+}