...

Source file src/github.com/Microsoft/hcsshim/internal/winapi/user.go

Documentation: github.com/Microsoft/hcsshim/internal/winapi

     1  //go:build windows
     2  
     3  package winapi
     4  
     5  import (
     6  	"syscall"
     7  
     8  	"golang.org/x/sys/windows"
     9  )
    10  
    11  const UserNameCharLimit = 20
    12  
    13  const (
    14  	USER_PRIV_GUEST uint32 = iota
    15  	USER_PRIV_USER
    16  	USER_PRIV_ADMIN
    17  )
    18  
    19  const (
    20  	UF_NORMAL_ACCOUNT     = 0x00200
    21  	UF_DONT_EXPIRE_PASSWD = 0x10000
    22  )
    23  
    24  const NERR_UserNotFound = syscall.Errno(0x8AD)
    25  
    26  //	typedef struct _LOCALGROUP_MEMBERS_INFO_0 {
    27  //		PSID lgrmi0_sid;
    28  //	} LOCALGROUP_MEMBERS_INFO_0, *PLOCALGROUP_MEMBERS_INFO_0, *LPLOCALGROUP_MEMBERS_INFO_0;
    29  type LocalGroupMembersInfo0 struct {
    30  	Sid *windows.SID
    31  }
    32  
    33  //	typedef struct _LOCALGROUP_INFO_1 {
    34  //		LPWSTR lgrpi1_name;
    35  //		LPWSTR lgrpi1_comment;
    36  //	} LOCALGROUP_INFO_1, *PLOCALGROUP_INFO_1, *LPLOCALGROUP_INFO_1;
    37  type LocalGroupInfo1 struct {
    38  	Name    *uint16
    39  	Comment *uint16
    40  }
    41  
    42  //	typedef struct _USER_INFO_1 {
    43  //		LPWSTR usri1_name;
    44  //		LPWSTR usri1_password;
    45  //		DWORD  usri1_password_age;
    46  //		DWORD  usri1_priv;
    47  //		LPWSTR usri1_home_dir;
    48  //		LPWSTR usri1_comment;
    49  //		DWORD  usri1_flags;
    50  //		LPWSTR usri1_script_path;
    51  //	} USER_INFO_1, *PUSER_INFO_1, *LPUSER_INFO_1;
    52  type UserInfo1 struct {
    53  	Name        *uint16
    54  	Password    *uint16
    55  	PasswordAge uint32
    56  	Priv        uint32
    57  	HomeDir     *uint16
    58  	Comment     *uint16
    59  	Flags       uint32
    60  	ScriptPath  *uint16
    61  }
    62  
    63  // NET_API_STATUS NET_API_FUNCTION NetLocalGroupGetInfo(
    64  // 	[in]  LPCWSTR servername,
    65  // 	[in]  LPCWSTR groupname,
    66  // 	[in]  DWORD   level,
    67  // 	[out] LPBYTE  *bufptr
    68  // );
    69  //
    70  //sys netLocalGroupGetInfo(serverName *uint16, groupName *uint16, level uint32, bufptr **byte) (status error) = netapi32.NetLocalGroupGetInfo
    71  
    72  // NetLocalGroupGetInfo is a slightly go friendlier wrapper around the NetLocalGroupGetInfo function. Instead of taking in *uint16's, it takes in
    73  // go strings and does the conversion internally.
    74  func NetLocalGroupGetInfo(serverName, groupName string, level uint32, bufPtr **byte) (err error) {
    75  	var (
    76  		serverNameUTF16 *uint16
    77  		groupNameUTF16  *uint16
    78  	)
    79  	if serverName != "" {
    80  		serverNameUTF16, err = windows.UTF16PtrFromString(serverName)
    81  		if err != nil {
    82  			return err
    83  		}
    84  	}
    85  	if groupName != "" {
    86  		groupNameUTF16, err = windows.UTF16PtrFromString(groupName)
    87  		if err != nil {
    88  			return err
    89  		}
    90  	}
    91  	return netLocalGroupGetInfo(
    92  		serverNameUTF16,
    93  		groupNameUTF16,
    94  		level,
    95  		bufPtr,
    96  	)
    97  }
    98  
    99  // NET_API_STATUS NET_API_FUNCTION NetUserAdd(
   100  // 	[in]  LPCWSTR servername,
   101  // 	[in]  DWORD   level,
   102  // 	[in]  LPBYTE  buf,
   103  // 	[out] LPDWORD parm_err
   104  // );
   105  //
   106  //sys netUserAdd(serverName *uint16, level uint32, buf *byte, parm_err *uint32) (status error) = netapi32.NetUserAdd
   107  
   108  // NetUserAdd is a slightly go friendlier wrapper around the NetUserAdd function. Instead of taking in *uint16's, it takes in
   109  // go strings and does the conversion internally.
   110  func NetUserAdd(serverName string, level uint32, buf *byte, parm_err *uint32) (err error) {
   111  	var serverNameUTF16 *uint16
   112  	if serverName != "" {
   113  		serverNameUTF16, err = windows.UTF16PtrFromString(serverName)
   114  		if err != nil {
   115  			return err
   116  		}
   117  	}
   118  	return netUserAdd(
   119  		serverNameUTF16,
   120  		level,
   121  		buf,
   122  		parm_err,
   123  	)
   124  }
   125  
   126  // NET_API_STATUS NET_API_FUNCTION NetUserDel(
   127  // 	[in] LPCWSTR servername,
   128  // 	[in] LPCWSTR username
   129  // );
   130  //
   131  //sys netUserDel(serverName *uint16, username *uint16) (status error) = netapi32.NetUserDel
   132  
   133  // NetUserDel is a slightly go friendlier wrapper around the NetUserDel function. Instead of taking in *uint16's, it takes in
   134  // go strings and does the conversion internally.
   135  func NetUserDel(serverName, userName string) (err error) {
   136  	var (
   137  		serverNameUTF16 *uint16
   138  		userNameUTF16   *uint16
   139  	)
   140  	if serverName != "" {
   141  		serverNameUTF16, err = windows.UTF16PtrFromString(serverName)
   142  		if err != nil {
   143  			return err
   144  		}
   145  	}
   146  	if userName != "" {
   147  		userNameUTF16, err = windows.UTF16PtrFromString(userName)
   148  		if err != nil {
   149  			return err
   150  		}
   151  	}
   152  	return netUserDel(
   153  		serverNameUTF16,
   154  		userNameUTF16,
   155  	)
   156  }
   157  
   158  // NET_API_STATUS NET_API_FUNCTION NetLocalGroupAddMembers(
   159  // 	[in] LPCWSTR servername,
   160  // 	[in] LPCWSTR groupname,
   161  // 	[in] DWORD   level,
   162  // 	[in] LPBYTE  buf,
   163  // 	[in] DWORD   totalentries
   164  // );
   165  //
   166  //sys netLocalGroupAddMembers(serverName *uint16, groupName *uint16, level uint32, buf *byte, totalEntries uint32) (status error) = netapi32.NetLocalGroupAddMembers
   167  
   168  // NetLocalGroupAddMembers is a slightly go friendlier wrapper around the NetLocalGroupAddMembers function. Instead of taking in *uint16's, it takes in
   169  // go strings and does the conversion internally.
   170  func NetLocalGroupAddMembers(serverName, groupName string, level uint32, buf *byte, totalEntries uint32) (err error) {
   171  	var (
   172  		serverNameUTF16 *uint16
   173  		groupNameUTF16  *uint16
   174  	)
   175  	if serverName != "" {
   176  		serverNameUTF16, err = windows.UTF16PtrFromString(serverName)
   177  		if err != nil {
   178  			return err
   179  		}
   180  	}
   181  	if groupName != "" {
   182  		groupNameUTF16, err = windows.UTF16PtrFromString(groupName)
   183  		if err != nil {
   184  			return err
   185  		}
   186  	}
   187  	return netLocalGroupAddMembers(
   188  		serverNameUTF16,
   189  		groupNameUTF16,
   190  		level,
   191  		buf,
   192  		totalEntries,
   193  	)
   194  }
   195  

View as plain text