@@ -50,9 +50,10 @@ InitLsaString(LSA_STRING *lsa_string, const char *str)
5050 }
5151}
5252
53+ #define MAX_USER_LEN 256
5354static HANDLE
5455generate_user_token (wchar_t * user ) {
55- HANDLE lsa_handle = 0 , token = 0 ;;
56+ HANDLE lsa_handle = 0 , token = 0 ;
5657 LSA_OPERATIONAL_MODE mode ;
5758 ULONG auth_package_id ;
5859 NTSTATUS ret , subStatus ;
@@ -64,7 +65,33 @@ generate_user_token(wchar_t* user) {
6465 LUID logonId ;
6566 QUOTA_LIMITS quotas ;
6667 DWORD cbProfile ;
67- BOOL domain_user = (wcschr (user , L'@' ) != NULL )? TRUE : FALSE;
68+ BOOL domain_user ;
69+
70+ /* prep user name - TODO: implment an accurate check if user is domain account*/
71+ if (wcsnlen (user , MAX_USER_LEN ) == MAX_USER_LEN ) {
72+ debug ("user length is not supported" );
73+ goto done ;
74+ }
75+
76+ if (wcschr (user , L'\\' ) != NULL ) {
77+ wchar_t * un = NULL , * dn = NULL ;
78+ DWORD un_len = 0 , dn_len = 0 ;
79+ dn = user ;
80+ dn_len = wcschr (user , L'\\' ) - user ;
81+ un = wcschr (user , L'\\' ) + 1 ;
82+ un_len = wcsnlen (user , MAX_USER_LEN ) - dn_len - 1 ;
83+ if (dn_len == 0 || un_len == 0 ) {
84+ debug ("cannot get user token - bad user name" );
85+ goto done ;
86+ }
87+ memcpy (user_copy , un , un_len * sizeof (wchar_t ));
88+ user_copy [un_len ] = L'@' ;
89+ memcpy (user_copy + un_len + 1 , dn , dn_len * sizeof (wchar_t ));
90+ user_copy [dn_len + 1 + un_len ] = L'\0' ;
91+ user = user_copy ;
92+ }
93+
94+ domain_user = (wcschr (user , L'@' ) != NULL ) ? TRUE : FALSE;
6895
6996 InitLsaString (& logon_process_name , "ssh-agent" );
7097 if (domain_user )
0 commit comments