Changes all over the shop, but all towards:
[abartlet/samba.git/.git] / source3 / rpc_server / srv_samr_nt.c
index 1cfa8b285381044fb7554abdcc4ac118e42aec68..1debf90d23d3cb822d32fe74f655f6b2d4a0d66d 100644 (file)
@@ -2953,7 +2953,13 @@ NTSTATUS _samr_set_userinfo(pipes_struct *p, SAMR_Q_SET_USERINFO *q_u, SAMR_R_SE
                        break;
 
                case 24:
-                       SamOEMhash(ctr->info.id24->pass, p->session_key, 516);
+                       if (p->session_key.length != 16) {
+                               /* we may have no session key at all, 
+                                  and we don't know how to do the SamOEMhash 
+                                  for length != 16 */
+                               return NT_STATUS_NO_USER_SESSION_KEY;
+                       }
+                       SamOEMhash(ctr->info.id24->pass, p->session_key.data, 516);
 
                        dump_data(100, (char *)ctr->info.id24->pass, 516);
 
@@ -2971,7 +2977,10 @@ NTSTATUS _samr_set_userinfo(pipes_struct *p, SAMR_Q_SET_USERINFO *q_u, SAMR_R_SE
                         * info level and W2K SP2 drops down to level 23... JRA.
                         */
 
-                       SamOEMhash(ctr->info.id25->pass, p->session_key, 532);
+                       if (p->session_key.length != 16) {
+                               return NT_STATUS_NO_USER_SESSION_KEY;
+                       }
+                       SamOEMhash(ctr->info.id25->pass, p->session_key.data, 532);
 
                        dump_data(100, (char *)ctr->info.id25->pass, 532);
 
@@ -2982,7 +2991,10 @@ NTSTATUS _samr_set_userinfo(pipes_struct *p, SAMR_Q_SET_USERINFO *q_u, SAMR_R_SE
                        return NT_STATUS_INVALID_INFO_CLASS;
 
                case 23:
-                       SamOEMhash(ctr->info.id23->pass, p->session_key, 516);
+                       if (p->session_key.length != 16) {
+                               return NT_STATUS_NO_USER_SESSION_KEY;
+                       }
+                       SamOEMhash(ctr->info.id23->pass, p->session_key.data, 516);
 
                        dump_data(100, (char *)ctr->info.id23->pass, 516);