2 Unix SMB/CIFS implementation.
3 Low-level sessionid.tdb access functions
4 Copyright (C) Volker Lendecke 2010
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 3 of the License, or
9 (at your option) any later version.
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with this program. If not, see <http://www.gnu.org/licenses/>.
21 #include "system/filesys.h"
22 #include "dbwrap/dbwrap.h"
23 #include "dbwrap/dbwrap_open.h"
26 #include "smbd/globals.h"
28 struct sessionid_traverse_read_state
{
29 int (*fn
)(const char *key
, struct sessionid
*session
,
34 static int sessionid_traverse_read_fn(struct smbXsrv_session_global0
*global
,
37 struct sessionid_traverse_read_state
*state
=
38 (struct sessionid_traverse_read_state
*)private_data
;
39 struct auth_session_info
*session_info
= global
->auth_session_info
;
40 struct sessionid session
= {
43 .id_num
= global
->session_global_id
,
44 .connect_start
= nt_time_to_unix(global
->creation_time
),
45 .pid
= global
->channels
[0].server_id
,
48 switch(global
->connection_dialect
){
49 case SMB2_DIALECT_REVISION_000
:
50 fstrcpy(session
.protocol_ver
, "NT1");
52 case SMB2_DIALECT_REVISION_202
:
53 fstrcpy(session
.protocol_ver
, "SMB2_02");
55 case SMB2_DIALECT_REVISION_210
:
56 fstrcpy(session
.protocol_ver
, "SMB2_10");
58 case SMB2_DIALECT_REVISION_222
:
59 fstrcpy(session
.protocol_ver
, "SMB2_22");
61 case SMB2_DIALECT_REVISION_224
:
62 fstrcpy(session
.protocol_ver
, "SMB2_24");
64 case SMB3_DIALECT_REVISION_300
:
65 fstrcpy(session
.protocol_ver
, "SMB3_00");
67 case SMB3_DIALECT_REVISION_302
:
68 fstrcpy(session
.protocol_ver
, "SMB3_02");
71 fstr_sprintf(session
.protocol_ver
, "Unknown (0x%04x)",
72 global
->connection_dialect
);
76 if (session_info
!= NULL
) {
77 session
.uid
= session_info
->unix_token
->uid
;
78 session
.gid
= session_info
->unix_token
->gid
;
79 strncpy(session
.username
,
80 session_info
->unix_info
->unix_name
,
84 strncpy(session
.remote_machine
,
85 global
->channels
[0].remote_name
,
87 strncpy(session
.hostname
,
88 global
->channels
[0].remote_address
,
90 strncpy(session
.netbios_name
,
91 global
->channels
[0].remote_name
,
93 snprintf(session
.id_str
, sizeof(fstring
)-1,
94 "smb/%u", global
->session_global_id
);
95 strncpy(session
.ip_addr_str
,
96 global
->channels
[0].remote_address
,
99 return state
->fn(NULL
, &session
, state
->private_data
);
102 NTSTATUS
sessionid_traverse_read(int (*fn
)(const char *key
,
103 struct sessionid
*session
,
107 struct sessionid_traverse_read_state state
;
111 state
.private_data
= private_data
;
112 status
= smbXsrv_session_global_traverse(sessionid_traverse_read_fn
,