grim/convey
Clone
Summary
Browse
Changes
Graph
convey/import is new in convey 0.15.0 and not on our current build agents
2022-03-26, Gary Kramlich
7879651faec4
convey/import is new in convey 0.15.0 and not on our current build agents
package
script
import
(
"fmt"
"os"
"os/exec"
"os/user"
"runtime"
"strings"
)
func
windowsInterpreter
()
(
string
,
error
)
{
intrepreter
:=
os
.
Getenv
(
"COMSPEC"
)
if
intrepreter
==
""
{
intrepreter
=
"cmd.exe"
}
return
intrepreter
,
nil
}
func
darwinInterpreter
()
(
string
,
error
)
{
user
,
err
:=
user
.
Current
()
if
err
!=
nil
{
return
""
,
err
}
path
:=
"Local/Default/User/"
+
user
.
Username
args
:=
[]
string
{
"localhost"
,
"-read"
,
path
,
"UserShell"
}
buffer
,
err
:=
exec
.
Command
(
"dscl"
,
args
...
).
Output
()
if
err
!=
nil
{
return
""
,
err
}
output
:=
strings
.
TrimSpace
(
string
(
buffer
))
parts
:=
strings
.
Split
(
output
,
" "
)
if
len
(
parts
)
!=
2
{
return
""
,
fmt
.
Errorf
(
"unexpected output from dscl: %q"
,
output
)
}
return
strings
.
TrimSpace
(
parts
[
1
]),
nil
}
func
posixInterpreter
()
(
string
,
error
)
{
user
,
err
:=
user
.
Current
()
if
err
!=
nil
{
return
""
,
err
}
buffer
,
err
:=
exec
.
Command
(
"getent"
,
"passwd"
,
user
.
Uid
).
Output
()
if
err
!=
nil
{
return
""
,
err
}
output
:=
strings
.
TrimSpace
(
string
(
buffer
))
fields
:=
strings
.
Split
(
output
,
":"
)
if
len
(
fields
)
<
6
{
return
""
,
fmt
.
Errorf
(
"unexpected output from getent: %q"
,
output
)
}
intrepreter
:=
fields
[
6
]
if
intrepreter
==
""
{
return
""
,
fmt
.
Errorf
(
"no shell found for user %q"
,
user
.
Uid
)
}
return
intrepreter
,
nil
}
func
findInterpreter
(
given
string
)
(
string
,
error
)
{
if
given
!=
""
{
return
given
,
nil
}
if
runtime
.
GOOS
==
"windows"
{
return
windowsInterpreter
()
}
else
if
runtime
.
GOOS
==
"darwin"
{
return
darwinInterpreter
()
}
else
{
return
posixInterpreter
()
}
}