diff options
Diffstat (limited to 'sd_login/systemd_pid.go.gen')
-rwxr-xr-x | sd_login/systemd_pid.go.gen | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/sd_login/systemd_pid.go.gen b/sd_login/systemd_pid.go.gen new file mode 100755 index 0000000..8d5e5fb --- /dev/null +++ b/sd_login/systemd_pid.go.gen @@ -0,0 +1,76 @@ +#!/usr/bin/env bash +# 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. + +{ + printf '//' + printf ' %q' "$0" "$@" + printf '\n// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT\n\n' + + cat <<EOF +package sd_login + +import ( + "net" + + "golang.org/x/sys/unix" +) + +// A PID represents a process. +// +// As a special case, PID(0) refers to the current process. +type PID int + +func (pid PID) isValid() bool { + return pid >= 0 +} + +func GetPeer(conn *net.UnixConn) (PID, error) { + ucred, err := getpeercred(conn) + if err != nil { + return -1, err + } + return PID(ucred.Pid), nil +} + +EOF + + data=( + 'GetSession Session' + 'GetOwnerUser User' + 'GetMachine Machine' + + 'GetUnit string' + 'GetUserUnit string' + 'GetSlice string' + 'GetUserSlice string' + ) + for item in "${data[@]}"; do + read Func Type <<<"$item" + cat <<EOF + +func (pid PID) ${Func}() (v ${Type}, err error) { + if !pid.isValid() { + err = unix.EINVAL + return + } + cgroup, err := pid.getCgroup() + if err != nil { + return + } + return cgroup.MustSkipSystemPrefix().${Func}(), nil +} +EOF + done +} | gofmt |