@@ -50,9 +50,10 @@ InitLsaString(LSA_STRING *lsa_string, const char *str)
50
50
}
51
51
}
52
52
53
+ #define MAX_USER_LEN 256
53
54
static HANDLE
54
55
generate_user_token (wchar_t * user ) {
55
- HANDLE lsa_handle = 0 , token = 0 ;;
56
+ HANDLE lsa_handle = 0 , token = 0 ;
56
57
LSA_OPERATIONAL_MODE mode ;
57
58
ULONG auth_package_id ;
58
59
NTSTATUS ret , subStatus ;
@@ -64,7 +65,33 @@ generate_user_token(wchar_t* user) {
64
65
LUID logonId ;
65
66
QUOTA_LIMITS quotas ;
66
67
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;
68
95
69
96
InitLsaString (& logon_process_name , "ssh-agent" );
70
97
if (domain_user )
0 commit comments