You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
136 lines
3.3 KiB
136 lines
3.3 KiB
// +build ignore
|
|
|
|
/*
|
|
* MinIO Cloud Storage, (C) 2019 MinIO, Inc.
|
|
*
|
|
* 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 main
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
"os"
|
|
"os/exec"
|
|
"os/user"
|
|
"syscall"
|
|
|
|
"github.com/minio/cli"
|
|
minio "github.com/minio/minio/cmd"
|
|
)
|
|
|
|
var defaultUserGroup string
|
|
|
|
func init() {
|
|
username := os.Getenv("MINIO_USERNAME")
|
|
groupname := os.Getenv("MINIO_GROUPNAME")
|
|
defaultUserGroup = username + ":" + groupname
|
|
}
|
|
|
|
func getUserGroup(path string) (string, error) {
|
|
fi, err := os.Stat(minio.PathJoin(path, ".minio.sys"))
|
|
if err != nil {
|
|
// Fresh directory we should default to what was requested by user.
|
|
if os.IsNotExist(err) {
|
|
cmd := exec.Command("chown", "-R", defaultUserGroup, path)
|
|
if err = cmd.Run(); err != nil {
|
|
return "", err
|
|
}
|
|
return defaultUserGroup, nil
|
|
}
|
|
return "", err
|
|
}
|
|
stat, ok := fi.Sys().(*syscall.Stat_t)
|
|
if !ok {
|
|
// Unable to figure out uid/gid, default to defaultUserGroup
|
|
return defaultUserGroup, nil
|
|
}
|
|
u, err := user.LookupId(fmt.Sprintf("%d", stat.Uid))
|
|
if err != nil {
|
|
return fmt.Sprintf("%d:%d", stat.Uid, stat.Gid), nil
|
|
}
|
|
g, err := user.LookupGroupId(fmt.Sprintf("%d", stat.Gid))
|
|
if err != nil {
|
|
return fmt.Sprintf("%d:%d", stat.Uid, stat.Gid), nil
|
|
}
|
|
return fmt.Sprintf("%s:%s", u.Username, g.Name), nil
|
|
}
|
|
|
|
func main() {
|
|
app := cli.NewApp()
|
|
app.Flags = append(minio.ServerFlags, minio.GlobalFlags...)
|
|
app.Action = func(ctx *cli.Context) {
|
|
// Fetch address option
|
|
serverAddr := ctx.GlobalString("address")
|
|
if serverAddr == "" || serverAddr == ":9000" {
|
|
serverAddr = ctx.String("address")
|
|
}
|
|
if ctx.Args().First() == "help" {
|
|
cli.ShowCommandHelpAndExit(ctx, "check-user", 1)
|
|
}
|
|
if ctx.Args().First() != "minio" {
|
|
cli.ShowCommandHelpAndExit(ctx, "check-user", 1)
|
|
}
|
|
args := cli.Args(ctx.Args().Tail())
|
|
if !args.Present() {
|
|
cli.ShowCommandHelpAndExit(ctx, "check-user", 1)
|
|
}
|
|
var ug string
|
|
var err error
|
|
switch args.First() {
|
|
case "gateway":
|
|
args = cli.Args(args.Tail())
|
|
if args.First() != "nas" {
|
|
fmt.Println(defaultUserGroup)
|
|
return
|
|
}
|
|
args = cli.Args(args.Tail())
|
|
if args.First() == "" {
|
|
fmt.Println("")
|
|
return
|
|
}
|
|
ug, err = getUserGroup(args.First())
|
|
if err != nil {
|
|
log.Fatalln(err)
|
|
}
|
|
case "server":
|
|
var setArgs [][]string
|
|
setArgs, err = minio.GetAllSets(args.Tail()...)
|
|
if err != nil {
|
|
log.Fatalln(err)
|
|
}
|
|
var endpoints minio.EndpointList
|
|
_, endpoints, _, err = minio.CreateEndpoints(serverAddr, setArgs...)
|
|
if err != nil {
|
|
log.Fatalln(err)
|
|
}
|
|
for _, endpoint := range endpoints {
|
|
if !endpoint.IsLocal {
|
|
continue
|
|
}
|
|
ug, err = getUserGroup(endpoint.Path)
|
|
if err != nil {
|
|
log.Fatalln(err)
|
|
}
|
|
break
|
|
}
|
|
default:
|
|
cli.ShowCommandHelpAndExit(ctx, "check-user", 1)
|
|
}
|
|
fmt.Println(ug)
|
|
}
|
|
if err := app.Run(os.Args); err != nil {
|
|
log.Fatalln(err)
|
|
}
|
|
}
|
|
|