Lines Matching refs:sess_data

843 struct sess_data {
847 void (*func)(struct sess_data *);
862 sess_alloc_buffer(struct sess_data *sess_data, int wct)
865 struct cifs_ses *ses = sess_data->ses;
874 sess_data->iov[0].iov_base = (char *)smb_buf;
875 sess_data->iov[0].iov_len = be32_to_cpu(smb_buf->smb_buf_length) + 4;
880 sess_data->buf0_type = CIFS_SMALL_BUFFER;
883 sess_data->iov[2].iov_base = kmalloc(2000, GFP_KERNEL);
884 if (!sess_data->iov[2].iov_base) {
893 sess_data->iov[0].iov_base = NULL;
894 sess_data->iov[0].iov_len = 0;
895 sess_data->buf0_type = CIFS_NO_BUFFER;
900 sess_free_buffer(struct sess_data *sess_data)
903 free_rsp_buf(sess_data->buf0_type, sess_data->iov[0].iov_base);
904 sess_data->buf0_type = CIFS_NO_BUFFER;
905 kfree(sess_data->iov[2].iov_base);
909 sess_establish_session(struct sess_data *sess_data)
911 struct cifs_ses *ses = sess_data->ses;
941 sess_sendreceive(struct sess_data *sess_data)
944 struct smb_hdr *smb_buf = (struct smb_hdr *) sess_data->iov[0].iov_base;
948 count = sess_data->iov[1].iov_len + sess_data->iov[2].iov_len;
952 rc = SendReceive2(sess_data->xid, sess_data->ses,
953 sess_data->iov, 3 /* num_iovecs */,
954 &sess_data->buf0_type,
956 cifs_small_buf_release(sess_data->iov[0].iov_base);
957 memcpy(&sess_data->iov[0], &rsp_iov, sizeof(struct kvec));
971 sess_auth_lanman(struct sess_data *sess_data)
977 struct cifs_ses *ses = sess_data->ses;
983 rc = sess_alloc_buffer(sess_data, 10);
987 pSMB = (SESSION_SETUP_ANDX *)sess_data->iov[0].iov_base;
988 bcc_ptr = sess_data->iov[2].iov_base;
1023 ascii_ssetup_strings(&bcc_ptr, ses, sess_data->nls_cp);
1025 sess_data->iov[2].iov_len = (long) bcc_ptr -
1026 (long) sess_data->iov[2].iov_base;
1028 rc = sess_sendreceive(sess_data);
1032 pSMB = (SESSION_SETUP_ANDX *)sess_data->iov[0].iov_base;
1033 smb_buf = (struct smb_hdr *)sess_data->iov[0].iov_base;
1061 sess_data->nls_cp);
1064 sess_data->nls_cp);
1067 rc = sess_establish_session(sess_data);
1069 sess_data->result = rc;
1070 sess_data->func = NULL;
1071 sess_free_buffer(sess_data);
1077 sess_auth_ntlm(struct sess_data *sess_data)
1083 struct cifs_ses *ses = sess_data->ses;
1089 rc = sess_alloc_buffer(sess_data, 13);
1093 pSMB = (SESSION_SETUP_ANDX *)sess_data->iov[0].iov_base;
1094 bcc_ptr = sess_data->iov[2].iov_base;
1105 rc = setup_ntlm_response(ses, sess_data->nls_cp);
1126 if (sess_data->iov[0].iov_len % 2) {
1130 unicode_ssetup_strings(&bcc_ptr, ses, sess_data->nls_cp);
1132 ascii_ssetup_strings(&bcc_ptr, ses, sess_data->nls_cp);
1136 sess_data->iov[2].iov_len = (long) bcc_ptr -
1137 (long) sess_data->iov[2].iov_base;
1139 rc = sess_sendreceive(sess_data);
1143 pSMB = (SESSION_SETUP_ANDX *)sess_data->iov[0].iov_base;
1144 smb_buf = (struct smb_hdr *)sess_data->iov[0].iov_base;
1171 sess_data->nls_cp);
1174 sess_data->nls_cp);
1177 rc = sess_establish_session(sess_data);
1179 sess_data->result = rc;
1180 sess_data->func = NULL;
1181 sess_free_buffer(sess_data);
1187 sess_auth_ntlmv2(struct sess_data *sess_data)
1193 struct cifs_ses *ses = sess_data->ses;
1199 rc = sess_alloc_buffer(sess_data, 13);
1203 pSMB = (SESSION_SETUP_ANDX *)sess_data->iov[0].iov_base;
1204 bcc_ptr = sess_data->iov[2].iov_base;
1214 rc = setup_ntlmv2_rsp(ses, sess_data->nls_cp);
1234 if (sess_data->iov[0].iov_len % 2) {
1238 unicode_ssetup_strings(&bcc_ptr, ses, sess_data->nls_cp);
1240 ascii_ssetup_strings(&bcc_ptr, ses, sess_data->nls_cp);
1244 sess_data->iov[2].iov_len = (long) bcc_ptr -
1245 (long) sess_data->iov[2].iov_base;
1247 rc = sess_sendreceive(sess_data);
1251 pSMB = (SESSION_SETUP_ANDX *)sess_data->iov[0].iov_base;
1252 smb_buf = (struct smb_hdr *)sess_data->iov[0].iov_base;
1279 sess_data->nls_cp);
1282 sess_data->nls_cp);
1285 rc = sess_establish_session(sess_data);
1287 sess_data->result = rc;
1288 sess_data->func = NULL;
1289 sess_free_buffer(sess_data);
1296 sess_auth_kerberos(struct sess_data *sess_data)
1302 struct cifs_ses *ses = sess_data->ses;
1311 rc = sess_alloc_buffer(sess_data, 12);
1315 pSMB = (SESSION_SETUP_ANDX *)sess_data->iov[0].iov_base;
1316 bcc_ptr = sess_data->iov[2].iov_base;
1351 sess_data->iov[1].iov_base = msg->data + msg->sesskey_len;
1352 sess_data->iov[1].iov_len = msg->secblob_len;
1353 pSMB->req.SecurityBlobLength = cpu_to_le16(sess_data->iov[1].iov_len);
1357 if ((sess_data->iov[0].iov_len
1358 + sess_data->iov[1].iov_len) % 2) {
1362 unicode_oslm_strings(&bcc_ptr, sess_data->nls_cp);
1363 unicode_domain_string(&bcc_ptr, ses, sess_data->nls_cp);
1366 ascii_ssetup_strings(&bcc_ptr, ses, sess_data->nls_cp);
1369 sess_data->iov[2].iov_len = (long) bcc_ptr -
1370 (long) sess_data->iov[2].iov_base;
1372 rc = sess_sendreceive(sess_data);
1376 pSMB = (SESSION_SETUP_ANDX *)sess_data->iov[0].iov_base;
1377 smb_buf = (struct smb_hdr *)sess_data->iov[0].iov_base;
1414 sess_data->nls_cp);
1417 sess_data->nls_cp);
1420 rc = sess_establish_session(sess_data);
1425 sess_data->result = rc;
1426 sess_data->func = NULL;
1427 sess_free_buffer(sess_data);
1439 _sess_auth_rawntlmssp_assemble_req(struct sess_data *sess_data)
1442 struct cifs_ses *ses = sess_data->ses;
1446 pSMB = (SESSION_SETUP_ANDX *)sess_data->iov[0].iov_base;
1458 bcc_ptr = sess_data->iov[2].iov_base;
1460 if ((sess_data->iov[0].iov_len + sess_data->iov[1].iov_len) % 2) {
1464 unicode_oslm_strings(&bcc_ptr, sess_data->nls_cp);
1466 sess_data->iov[2].iov_len = (long) bcc_ptr -
1467 (long) sess_data->iov[2].iov_base;
1473 sess_auth_rawntlmssp_authenticate(struct sess_data *sess_data);
1476 sess_auth_rawntlmssp_negotiate(struct sess_data *sess_data)
1481 struct cifs_ses *ses = sess_data->ses;
1500 rc = sess_alloc_buffer(sess_data, 12);
1504 pSMB = (SESSION_SETUP_ANDX *)sess_data->iov[0].iov_base;
1508 sess_data->iov[1].iov_len = sizeof(NEGOTIATE_MESSAGE);
1509 sess_data->iov[1].iov_base = pSMB->req.SecurityBlob;
1512 rc = _sess_auth_rawntlmssp_assemble_req(sess_data);
1516 rc = sess_sendreceive(sess_data);
1518 pSMB = (SESSION_SETUP_ANDX *)sess_data->iov[0].iov_base;
1519 smb_buf = (struct smb_hdr *)sess_data->iov[0].iov_base;
1522 if (sess_data->buf0_type != CIFS_NO_BUFFER &&
1554 sess_free_buffer(sess_data);
1557 sess_data->func = sess_auth_rawntlmssp_authenticate;
1567 sess_data->func = NULL;
1568 sess_data->result = rc;
1572 sess_auth_rawntlmssp_authenticate(struct sess_data *sess_data)
1577 struct cifs_ses *ses = sess_data->ses;
1586 rc = sess_alloc_buffer(sess_data, 12);
1591 pSMB = (SESSION_SETUP_ANDX *)sess_data->iov[0].iov_base;
1594 &blob_len, ses, sess_data->nls_cp);
1597 sess_data->iov[1].iov_len = blob_len;
1598 sess_data->iov[1].iov_base = ntlmsspblob;
1607 rc = _sess_auth_rawntlmssp_assemble_req(sess_data);
1611 rc = sess_sendreceive(sess_data);
1615 pSMB = (SESSION_SETUP_ANDX *)sess_data->iov[0].iov_base;
1616 smb_buf = (struct smb_hdr *)sess_data->iov[0].iov_base;
1654 sess_data->nls_cp);
1657 sess_data->nls_cp);
1663 sess_free_buffer(sess_data);
1666 rc = sess_establish_session(sess_data);
1674 sess_data->func = NULL;
1675 sess_data->result = rc;
1678 static int select_sec(struct cifs_ses *ses, struct sess_data *sess_data)
1697 sess_data->func = sess_auth_lanman;
1703 sess_data->func = sess_auth_ntlm;
1706 sess_data->func = sess_auth_ntlmv2;
1710 sess_data->func = sess_auth_kerberos;
1717 sess_data->func = sess_auth_rawntlmssp_negotiate;
1731 struct sess_data *sess_data;
1738 sess_data = kzalloc(sizeof(struct sess_data), GFP_KERNEL);
1739 if (!sess_data)
1742 rc = select_sec(ses, sess_data);
1746 sess_data->xid = xid;
1747 sess_data->ses = ses;
1748 sess_data->buf0_type = CIFS_NO_BUFFER;
1749 sess_data->nls_cp = (struct nls_table *) nls_cp;
1751 while (sess_data->func)
1752 sess_data->func(sess_data);
1754 /* Store result before we free sess_data */
1755 rc = sess_data->result;
1758 kfree(sess_data);