github.com/zxy12/go_duplicate_112_new@v0.0.0-20200807091221-747231827200/src/os/user/lookup.go (about)

     1  // Copyright 2011 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package user
     6  
     7  import "sync"
     8  
     9  // Current returns the current user.
    10  //
    11  // The first call will cache the current user information.
    12  // Subsequent calls will return the cached value and will not reflect
    13  // changes to the current user.
    14  func Current() (*User, error) {
    15  	cache.Do(func() { cache.u, cache.err = current() })
    16  	if cache.err != nil {
    17  		return nil, cache.err
    18  	}
    19  	u := *cache.u // copy
    20  	return &u, nil
    21  }
    22  
    23  // cache of the current user
    24  var cache struct {
    25  	sync.Once
    26  	u   *User
    27  	err error
    28  }
    29  
    30  // Lookup looks up a user by username. If the user cannot be found, the
    31  // returned error is of type UnknownUserError.
    32  func Lookup(username string) (*User, error) {
    33  	if u, err := Current(); err == nil && u.Username == username {
    34  		return u, err
    35  	}
    36  	return lookupUser(username)
    37  }
    38  
    39  // LookupId looks up a user by userid. If the user cannot be found, the
    40  // returned error is of type UnknownUserIdError.
    41  func LookupId(uid string) (*User, error) {
    42  	if u, err := Current(); err == nil && u.Uid == uid {
    43  		return u, err
    44  	}
    45  	return lookupUserId(uid)
    46  }
    47  
    48  // LookupGroup looks up a group by name. If the group cannot be found, the
    49  // returned error is of type UnknownGroupError.
    50  func LookupGroup(name string) (*Group, error) {
    51  	return lookupGroup(name)
    52  }
    53  
    54  // LookupGroupId looks up a group by groupid. If the group cannot be found, the
    55  // returned error is of type UnknownGroupIdError.
    56  func LookupGroupId(gid string) (*Group, error) {
    57  	return lookupGroupId(gid)
    58  }
    59  
    60  // GroupIds returns the list of group IDs that the user is a member of.
    61  func (u *User) GroupIds() ([]string, error) {
    62  	return listGroups(u)
    63  }