@@ -26,7 +26,6 @@ uint32_t gssntlm_init_sec_context(uint32_t *minor_status,
26
26
struct gssntlm_ctx * ctx ;
27
27
struct gssntlm_name * server = NULL ;
28
28
struct gssntlm_cred * cred = NULL ;
29
- char * computer_name = NULL ;
30
29
char * nb_computer_name = NULL ;
31
30
char * nb_domain_name = NULL ;
32
31
struct gssntlm_name * client_name = NULL ;
@@ -56,7 +55,9 @@ uint32_t gssntlm_init_sec_context(uint32_t *minor_status,
56
55
if (server -> type != GSSNTLM_NAME_SERVER ) {
57
56
return GSSERRS (ERR_NOSRVNAME , GSS_S_BAD_NAMETYPE );
58
57
}
59
- if (!server -> data .server .name ||
58
+ if (!server -> data .server .spn ||
59
+ !server -> data .server .spn [0 ] ||
60
+ !server -> data .server .name ||
60
61
!server -> data .server .name [0 ]) {
61
62
return GSSERRS (ERR_NONAME , GSS_S_BAD_NAME );
62
63
}
@@ -165,13 +166,8 @@ uint32_t gssntlm_init_sec_context(uint32_t *minor_status,
165
166
if (retmaj ) goto done ;
166
167
}
167
168
168
- computer_name = strdup (client_name -> data .server .name );
169
- if (!computer_name ) {
170
- set_GSSERR (ENOMEM );
171
- goto done ;
172
- }
173
-
174
- retmin = netbios_get_names (ctx -> external_context , computer_name ,
169
+ retmin = netbios_get_names (ctx -> external_context ,
170
+ client_name -> data .server .name ,
175
171
& nb_computer_name , & nb_domain_name );
176
172
if (retmin ) {
177
173
set_GSSERR (retmin );
@@ -433,7 +429,6 @@ uint32_t gssntlm_init_sec_context(uint32_t *minor_status,
433
429
gssntlm_release_cred (& tmpmin , (gss_cred_id_t * )& cred );
434
430
}
435
431
gssntlm_release_name (& tmpmin , (gss_name_t * )& client_name );
436
- safefree (computer_name );
437
432
safefree (nb_computer_name );
438
433
safefree (nb_domain_name );
439
434
safefree (trgt_name );
@@ -532,7 +527,6 @@ uint32_t gssntlm_accept_sec_context(uint32_t *minor_status,
532
527
int lm_compat_lvl = -1 ;
533
528
struct ntlm_buffer challenge = { 0 };
534
529
struct gssntlm_name * server_name = NULL ;
535
- char * computer_name = NULL ;
536
530
char * nb_computer_name = NULL ;
537
531
char * nb_domain_name = NULL ;
538
532
char * chal_target_name ;
@@ -618,13 +612,8 @@ uint32_t gssntlm_accept_sec_context(uint32_t *minor_status,
618
612
goto done ;
619
613
}
620
614
621
- computer_name = strdup (server_name -> data .server .name );
622
- if (!computer_name ) {
623
- set_GSSERR (ENOMEM );
624
- goto done ;
625
- }
626
-
627
- retmin = netbios_get_names (ctx -> external_context , computer_name ,
615
+ retmin = netbios_get_names (ctx -> external_context ,
616
+ server_name -> data .server .name ,
628
617
& nb_computer_name , & nb_domain_name );
629
618
if (retmin ) {
630
619
set_GSSERR (retmin );
@@ -731,15 +720,19 @@ uint32_t gssntlm_accept_sec_context(uint32_t *minor_status,
731
720
goto done ;
732
721
}
733
722
723
+ av_flags = MSVAVFLAGS_UNVERIFIED_SPN ;
724
+
734
725
timestamp = ntlm_timestamp_now ();
735
726
736
727
retmin = ntlm_encode_target_info (ctx -> ntlm ,
737
728
nb_computer_name ,
738
729
nb_domain_name ,
739
- computer_name ,
730
+ server_name -> data . server . name ,
740
731
NULL , NULL ,
741
- NULL , & timestamp ,
742
- NULL , NULL , NULL ,
732
+ & av_flags , & timestamp ,
733
+ NULL ,
734
+ server_name -> data .server .spn ,
735
+ NULL ,
743
736
& target_info );
744
737
if (retmin ) {
745
738
set_GSSERR (retmin );
@@ -1028,7 +1021,6 @@ uint32_t gssntlm_accept_sec_context(uint32_t *minor_status,
1028
1021
gssntlm_release_name (& tmpmin , (gss_name_t * )& server_name );
1029
1022
gssntlm_release_name (& tmpmin , (gss_name_t * )& gss_usrname );
1030
1023
gssntlm_release_cred (& tmpmin , (gss_cred_id_t * )& usr_cred );
1031
- safefree (computer_name );
1032
1024
safefree (nb_computer_name );
1033
1025
safefree (nb_domain_name );
1034
1026
safefree (usr_name );
0 commit comments