Lines Matching refs:sess_data
1329 struct sess_data {
1334 void (*func)(struct sess_data *);
1350 sess_alloc_buffer(struct sess_data *sess_data, int wct)
1353 struct cifs_ses *ses = sess_data->ses;
1362 sess_data->iov[0].iov_base = (char *)smb_buf;
1363 sess_data->iov[0].iov_len = be32_to_cpu(smb_buf->smb_buf_length) + 4;
1368 sess_data->buf0_type = CIFS_SMALL_BUFFER;
1371 sess_data->iov[2].iov_base = kmalloc(2000, GFP_KERNEL);
1372 if (!sess_data->iov[2].iov_base) {
1381 sess_data->iov[0].iov_base = NULL;
1382 sess_data->iov[0].iov_len = 0;
1383 sess_data->buf0_type = CIFS_NO_BUFFER;
1388 sess_free_buffer(struct sess_data *sess_data)
1390 struct kvec *iov = sess_data->iov;
1396 if (sess_data->buf0_type != CIFS_NO_BUFFER && iov[0].iov_base)
1399 free_rsp_buf(sess_data->buf0_type, iov[0].iov_base);
1400 sess_data->buf0_type = CIFS_NO_BUFFER;
1405 sess_establish_session(struct sess_data *sess_data)
1407 struct cifs_ses *ses = sess_data->ses;
1408 struct TCP_Server_Info *server = sess_data->server;
1433 sess_sendreceive(struct sess_data *sess_data)
1436 struct smb_hdr *smb_buf = (struct smb_hdr *) sess_data->iov[0].iov_base;
1440 count = sess_data->iov[1].iov_len + sess_data->iov[2].iov_len;
1444 rc = SendReceive2(sess_data->xid, sess_data->ses,
1445 sess_data->iov, 3 /* num_iovecs */,
1446 &sess_data->buf0_type,
1448 cifs_small_buf_release(sess_data->iov[0].iov_base);
1449 memcpy(&sess_data->iov[0], &rsp_iov, sizeof(struct kvec));
1455 sess_auth_ntlmv2(struct sess_data *sess_data)
1461 struct cifs_ses *ses = sess_data->ses;
1462 struct TCP_Server_Info *server = sess_data->server;
1468 rc = sess_alloc_buffer(sess_data, 13);
1472 pSMB = (SESSION_SETUP_ANDX *)sess_data->iov[0].iov_base;
1473 bcc_ptr = sess_data->iov[2].iov_base;
1483 rc = setup_ntlmv2_rsp(ses, sess_data->nls_cp);
1503 if (!IS_ALIGNED(sess_data->iov[0].iov_len, 2)) {
1507 unicode_ssetup_strings(&bcc_ptr, ses, sess_data->nls_cp);
1509 ascii_ssetup_strings(&bcc_ptr, ses, sess_data->nls_cp);
1513 sess_data->iov[2].iov_len = (long) bcc_ptr -
1514 (long) sess_data->iov[2].iov_base;
1516 rc = sess_sendreceive(sess_data);
1520 pSMB = (SESSION_SETUP_ANDX *)sess_data->iov[0].iov_base;
1521 smb_buf = (struct smb_hdr *)sess_data->iov[0].iov_base;
1548 sess_data->nls_cp);
1551 sess_data->nls_cp);
1554 rc = sess_establish_session(sess_data);
1556 sess_data->result = rc;
1557 sess_data->func = NULL;
1558 sess_free_buffer(sess_data);
1565 sess_auth_kerberos(struct sess_data *sess_data)
1571 struct cifs_ses *ses = sess_data->ses;
1572 struct TCP_Server_Info *server = sess_data->server;
1581 rc = sess_alloc_buffer(sess_data, 12);
1585 pSMB = (SESSION_SETUP_ANDX *)sess_data->iov[0].iov_base;
1586 bcc_ptr = sess_data->iov[2].iov_base;
1622 sess_data->iov[1].iov_base = msg->data + msg->sesskey_len;
1623 sess_data->iov[1].iov_len = msg->secblob_len;
1624 pSMB->req.SecurityBlobLength = cpu_to_le16(sess_data->iov[1].iov_len);
1628 if (!IS_ALIGNED(sess_data->iov[0].iov_len + sess_data->iov[1].iov_len, 2)) {
1632 unicode_oslm_strings(&bcc_ptr, sess_data->nls_cp);
1633 unicode_domain_string(&bcc_ptr, ses, sess_data->nls_cp);
1636 ascii_ssetup_strings(&bcc_ptr, ses, sess_data->nls_cp);
1639 sess_data->iov[2].iov_len = (long) bcc_ptr -
1640 (long) sess_data->iov[2].iov_base;
1642 rc = sess_sendreceive(sess_data);
1646 pSMB = (SESSION_SETUP_ANDX *)sess_data->iov[0].iov_base;
1647 smb_buf = (struct smb_hdr *)sess_data->iov[0].iov_base;
1684 sess_data->nls_cp);
1687 sess_data->nls_cp);
1690 rc = sess_establish_session(sess_data);
1695 sess_data->result = rc;
1696 sess_data->func = NULL;
1697 sess_free_buffer(sess_data);
1709 _sess_auth_rawntlmssp_assemble_req(struct sess_data *sess_data)
1712 struct cifs_ses *ses = sess_data->ses;
1713 struct TCP_Server_Info *server = sess_data->server;
1717 pSMB = (SESSION_SETUP_ANDX *)sess_data->iov[0].iov_base;
1729 bcc_ptr = sess_data->iov[2].iov_base;
1731 if (!IS_ALIGNED(sess_data->iov[0].iov_len + sess_data->iov[1].iov_len, 2)) {
1735 unicode_oslm_strings(&bcc_ptr, sess_data->nls_cp);
1737 sess_data->iov[2].iov_len = (long) bcc_ptr -
1738 (long) sess_data->iov[2].iov_base;
1744 sess_auth_rawntlmssp_authenticate(struct sess_data *sess_data);
1747 sess_auth_rawntlmssp_negotiate(struct sess_data *sess_data)
1752 struct cifs_ses *ses = sess_data->ses;
1753 struct TCP_Server_Info *server = sess_data->server;
1773 rc = sess_alloc_buffer(sess_data, 12);
1777 pSMB = (SESSION_SETUP_ANDX *)sess_data->iov[0].iov_base;
1782 sess_data->nls_cp);
1786 sess_data->iov[1].iov_len = blob_len;
1787 sess_data->iov[1].iov_base = ntlmsspblob;
1790 rc = _sess_auth_rawntlmssp_assemble_req(sess_data);
1794 rc = sess_sendreceive(sess_data);
1796 pSMB = (SESSION_SETUP_ANDX *)sess_data->iov[0].iov_base;
1797 smb_buf = (struct smb_hdr *)sess_data->iov[0].iov_base;
1800 if (sess_data->buf0_type != CIFS_NO_BUFFER &&
1835 sess_free_buffer(sess_data);
1838 sess_data->func = sess_auth_rawntlmssp_authenticate;
1848 sess_data->func = NULL;
1849 sess_data->result = rc;
1853 sess_auth_rawntlmssp_authenticate(struct sess_data *sess_data)
1858 struct cifs_ses *ses = sess_data->ses;
1859 struct TCP_Server_Info *server = sess_data->server;
1868 rc = sess_alloc_buffer(sess_data, 12);
1873 pSMB = (SESSION_SETUP_ANDX *)sess_data->iov[0].iov_base;
1877 sess_data->nls_cp);
1880 sess_data->iov[1].iov_len = blob_len;
1881 sess_data->iov[1].iov_base = ntlmsspblob;
1890 rc = _sess_auth_rawntlmssp_assemble_req(sess_data);
1894 rc = sess_sendreceive(sess_data);
1898 pSMB = (SESSION_SETUP_ANDX *)sess_data->iov[0].iov_base;
1899 smb_buf = (struct smb_hdr *)sess_data->iov[0].iov_base;
1937 sess_data->nls_cp);
1940 sess_data->nls_cp);
1946 sess_free_buffer(sess_data);
1949 rc = sess_establish_session(sess_data);
1957 sess_data->func = NULL;
1958 sess_data->result = rc;
1961 static int select_sec(struct sess_data *sess_data)
1964 struct cifs_ses *ses = sess_data->ses;
1965 struct TCP_Server_Info *server = sess_data->server;
1976 sess_data->func = sess_auth_ntlmv2;
1980 sess_data->func = sess_auth_kerberos;
1987 sess_data->func = sess_auth_rawntlmssp_negotiate;
2002 struct sess_data *sess_data;
2009 sess_data = kzalloc(sizeof(struct sess_data), GFP_KERNEL);
2010 if (!sess_data)
2013 sess_data->xid = xid;
2014 sess_data->ses = ses;
2015 sess_data->server = server;
2016 sess_data->buf0_type = CIFS_NO_BUFFER;
2017 sess_data->nls_cp = (struct nls_table *) nls_cp;
2019 rc = select_sec(sess_data);
2023 while (sess_data->func)
2024 sess_data->func(sess_data);
2026 /* Store result before we free sess_data */
2027 rc = sess_data->result;
2030 kfree_sensitive(sess_data);