code: func GetUserInfo(rootfs string, userName string) (uint32, uint32, []uint32, error) {
  	// We don't care if we can't open the file because
  	// not all images will have these files
  	passwdFile, err := openContainerFile(rootfs, "/etc/passwd")
  	if err != nil {
  		logrus.Warnf("Failed to open /etc/passwd: %v", err)
  	} else {
  		defer passwdFile.Close()
  	}
  
  	groupFile, err := openContainerFile(rootfs, "/etc/group")
  	if err != nil {
  		logrus.Warnf("Failed to open /etc/group: %v", err)
  	} else {
  		defer groupFile.Close()
  	}
  
  	execUser, err := user.GetExecUser(userName, nil, passwdFile, groupFile)
  	if err != nil {
  		return 0, 0, nil, err
  	}
  
  	uid := uint32(execUser.Uid)
  	gid := uint32(execUser.Gid)
  	additionalGids := make([]uint32, 0, len(execUser.Sgids))
  	for _, g := range execUser.Sgids {
  		additionalGids = append(additionalGids, uint32(g))
  	}
  
  	return uid, gid, additionalGids, nil
  }
docs: // GetUserInfo returns UID, GID and additional groups for specified user
  // by looking them up in /etc/passwd and /etc/group