1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
|
/****************************************************************************
**
** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the QtGui module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and Digia. For licensing terms and
** conditions see http://qt.digia.com/licensing. For further information
** use the contact form at http://qt.digia.com/contact-us.
**
** GNU Lesser General Public License Usage
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 2.1 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU Lesser General Public License version 2.1 requirements
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Digia gives you certain additional
** rights. These rights are described in the Digia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3.0 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU General Public License version 3.0 requirements will be
** met: http://www.gnu.org/copyleft/gpl.html.
**
**
** $QT_END_LICENSE$
**
****************************************************************************/
#ifndef QTRANSPORTAUTHDEFS_QWS_H
#define QTRANSPORTAUTHDEFS_QWS_H
#include <sys/types.h>
#include <string.h>
#include <QtCore/qglobal.h>
QT_BEGIN_HEADER
QT_BEGIN_NAMESPACE
QT_MODULE(Gui)
#define QSXE_KEY_LEN 16
#define QSXE_MAGIC_BYTES 4
// Number of bytes of each message to authenticate. Just need to ensure
// that the command at the beginning hasn't been tampered with. This value
// does not matter for trusted transports.
#define AMOUNT_TO_AUTHENTICATE 200
#define AUTH_ID(k) ((unsigned char)(k[QSXE_KEY_LEN]))
#define AUTH_KEY(k) ((unsigned char *)(k))
// must be a largish -ve number under any endianess when cast as an int
const unsigned char magic[QSXE_MAGIC_BYTES] = { 0xBA, 0xD4, 0xD4, 0xBA };
const int magicInt = 0xBAD4D4BA;
#define QSXE_KEYFILE "keyfile"
/*
Header in above format, less the magic bytes.
Useful for reading off the socket
*/
struct AuthHeader
{
unsigned char len;
unsigned char pad;
unsigned char digest[QSXE_KEY_LEN];
unsigned char id;
unsigned char seq;
};
/*
Header in a form suitable for authentication routines
*/
struct AuthMessage
{
AuthMessage()
{
::memset( authData, 0, sizeof(authData) );
::memcpy( pad_magic, magic, QSXE_MAGIC_BYTES );
}
unsigned char pad_magic[QSXE_MAGIC_BYTES];
union {
AuthHeader hdr;
char authData[sizeof(AuthHeader)];
};
char payLoad[AMOUNT_TO_AUTHENTICATE];
};
/**
Auth data as stored in _key
*/
struct AuthCookie
{
unsigned char key[QSXE_KEY_LEN];
unsigned char pad;
unsigned char progId;
};
/*
Auth data as written to the key file - SUPERSEDED by usr_key_entry
This is still used internally for some functions, ie the socket
related calls.
*/
struct AuthRecord
{
union {
AuthCookie auth;
char data[sizeof(struct AuthCookie)];
};
time_t change_time;
};
/*!
\class usr_key_entry
This comes from the SXE kernel patch file include/linux/lidsif.h
This is the (new) data record for the key file (version 2).
The key file is (now) either /proc/lids/keys (and the per-process
keys in /proc/<pid>/lids_key) OR for desktop/development ONLY (not
for production) it is $QPEDIR/etc/keyfile
The key file maps keys to files.
File are identified by inode and device numbers, not paths.
(See the "installs" file for path to inode/device mapping)
*/
struct usr_key_entry
{
char key[QSXE_KEY_LEN];
ino_t ino;
dev_t dev;
};
/*!
\class IdBlock
\brief Data record for the manifest file.
The manifest file maps program id's to files
*/
struct IdBlock
{
quint64 inode;
quint64 device;
unsigned char pad;
unsigned char progId;
unsigned short installId;
unsigned int keyOffset;
qint64 install_time;
};
QT_END_NAMESPACE
QT_END_HEADER
#endif // QTRANSPORTAUTHDEFS_QWS_H
|