Skip to content

Commit fe60eeb

Browse files
committed
charsrv changes to pcsc
1 parent 7d981f8 commit fe60eeb

File tree

4 files changed

+983
-630
lines changed

4 files changed

+983
-630
lines changed

sesman/chansrv/smartcard.c

Lines changed: 57 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -169,55 +169,57 @@ static int scard_get_free_slot(void);
169169
static void scard_release_resources(void);
170170
static void scard_send_EstablishContext(IRP *irp, int scope);
171171
static void scard_send_ReleaseContext(IRP *irp,
172-
char *context, int context_bytes);
172+
char *context, int context_bytes);
173173
static void scard_send_IsContextValid(IRP* irp,
174-
char *context, int context_bytes);
174+
char *context, int context_bytes);
175175
static void scard_send_ListReaders(IRP *irp,
176-
char *context, int context_bytes,
177-
char *groups, int cchReaders,
178-
int wide);
176+
char *context, int context_bytes,
177+
char *groups, int cchReaders,
178+
int wide, int mszReadersIsNULL);
179179
static void scard_send_GetStatusChange(IRP *irp,
180-
char *context, int context_bytes,
181-
int wide,
182-
tui32 timeout, tui32 num_readers,
183-
READER_STATE *rsa);
180+
char *context, int context_bytes,
181+
int wide,
182+
tui32 timeout, tui32 num_readers,
183+
READER_STATE *rsa);
184184
static void scard_send_Connect(IRP *irp,
185-
char *context, int context_bytes,
186-
int wide,
187-
READER_STATE *rs);
185+
char *context, int context_bytes,
186+
int wide,
187+
READER_STATE *rs);
188188
static void scard_send_Reconnect(IRP *irp,
189-
char *context, int context_bytes,
190-
char *card, int card_bytes,
191-
READER_STATE *rs);
189+
char *context, int context_bytes,
190+
char *card, int card_bytes,
191+
READER_STATE *rs);
192192
static void scard_send_BeginTransaction(IRP *irp,
193-
char *context, int context_bytes,
194-
char *card, int card_bytes);
193+
char *context, int context_bytes,
194+
char *card, int card_bytes);
195195
static void scard_send_EndTransaction(IRP *irp,
196-
char *context, int context_bytes,
197-
char *card, int card_bytes,
198-
tui32 dwDisposition);
196+
char *context, int context_bytes,
197+
char *card, int card_bytes,
198+
tui32 dwDisposition);
199199
static void scard_send_Status(IRP *irp, int wide,
200-
char *context, int context_bytes,
201-
char *card, int card_bytes,
202-
int cchReaderLen, int cbAtrLen);
200+
char *context, int context_bytes,
201+
char *card, int card_bytes,
202+
int cchReaderLen, int cbAtrLen,
203+
int reader_name_is_null);
203204
static void scard_send_Disconnect(IRP *irp,
204-
char *context, int context_bytes,
205-
char *card, int card_bytes,
206-
int dwDisposition);
205+
char *context, int context_bytes,
206+
char *card, int card_bytes,
207+
int dwDisposition);
207208
static int scard_send_Transmit(IRP *irp,
208-
char *context, int context_byte,
209-
char *card, int card_bytes,
210-
char *send_data, int send_bytes,
211-
int recv_bytes,
212-
struct xrdp_scard_io_request *send_ior,
213-
struct xrdp_scard_io_request *recv_ior);
209+
char *context, int context_byte,
210+
char *card, int card_bytes,
211+
char *send_data, int send_bytes,
212+
int recv_bytes,
213+
struct xrdp_scard_io_request *send_ior,
214+
struct xrdp_scard_io_request *recv_ior,
215+
int recv_ior_is_null, int recv_is_null);
214216
static int scard_send_Control(IRP* irp, char *context, int context_bytes,
215-
char *card, int card_bytes,
216-
char *send_data, int send_bytes,
217-
int recv_bytes, int control_code);
217+
char *card, int card_bytes,
218+
char *send_data, int send_bytes,
219+
int recv_bytes, int control_code);
218220
static int scard_send_Cancel(IRP *irp, char *context, int context_bytes);
219221
static int scard_send_GetAttrib(IRP *irp, char *card, int card_bytes,
220-
READER_STATE *rs);
222+
READER_STATE *rs);
221223

222224
/******************************************************************************
223225
** local callbacks into this module **
@@ -448,7 +450,8 @@ scard_send_is_valid_context(void *user_data, char *context, int context_bytes)
448450
*****************************************************************************/
449451
int
450452
scard_send_list_readers(void *user_data, char *context, int context_bytes,
451-
char *groups, int cchReaders, int wide)
453+
char *groups, int cchReaders, int wide,
454+
int mszReadersIsNULL)
452455
{
453456
IRP *irp;
454457

@@ -466,7 +469,7 @@ scard_send_list_readers(void *user_data, char *context, int context_bytes,
466469

467470
/* send IRP to client */
468471
scard_send_ListReaders(irp, context, context_bytes, groups,
469-
cchReaders, wide);
472+
cchReaders, wide, mszReadersIsNULL);
470473

471474
return 0;
472475
}
@@ -648,7 +651,7 @@ scard_send_end_transaction(void *user_data, char *context, int context_bytes,
648651
int
649652
scard_send_status(void *user_data, int wide, char *context, int context_bytes,
650653
char *card, int card_bytes,
651-
int cchReaderLen, int cbAtrLen)
654+
int cchReaderLen, int cbAtrLen, int reader_name_is_null)
652655
{
653656
IRP *irp;
654657

@@ -667,7 +670,7 @@ scard_send_status(void *user_data, int wide, char *context, int context_bytes,
667670

668671
/* send IRP to client */
669672
scard_send_Status(irp, wide, context, context_bytes, card, card_bytes,
670-
cchReaderLen, cbAtrLen);
673+
cchReaderLen, cbAtrLen, reader_name_is_null);
671674

672675
return 0;
673676
}
@@ -713,7 +716,8 @@ scard_send_transmit(void *user_data, char *context, int context_bytes,
713716
char *card, int card_bytes,
714717
char *send_data, int send_bytes, int recv_bytes,
715718
struct xrdp_scard_io_request *send_ior,
716-
struct xrdp_scard_io_request *recv_ior)
719+
struct xrdp_scard_io_request *recv_ior,
720+
int recv_ior_is_null, int recv_is_null)
717721
{
718722
IRP *irp;
719723

@@ -733,7 +737,8 @@ scard_send_transmit(void *user_data, char *context, int context_bytes,
733737
/* send IRP to client */
734738
scard_send_Transmit(irp, context, context_bytes, card, card_bytes,
735739
send_data, send_bytes,
736-
recv_bytes, send_ior, recv_ior);
740+
recv_bytes, send_ior, recv_ior,
741+
recv_ior_is_null, recv_is_null);
737742

738743
return 0;
739744
}
@@ -1117,7 +1122,8 @@ scard_send_IsContextValid(IRP *irp, char *context, int context_bytes)
11171122
*****************************************************************************/
11181123
static void
11191124
scard_send_ListReaders(IRP *irp, char *context, int context_bytes,
1120-
char *groups, int cchReaders, int wide)
1125+
char *groups, int cchReaders, int wide,
1126+
int mszReadersIsNULL)
11211127
{
11221128
/* see [MS-RDPESC] 2.2.2.4 */
11231129

@@ -1167,7 +1173,7 @@ scard_send_ListReaders(IRP *irp, char *context, int context_bytes,
11671173
out_uint32_le(s, 0x00020000);
11681174
out_uint32_le(s, bytes_groups);
11691175
out_uint32_le(s, val);
1170-
out_uint32_le(s, 0x00000000);
1176+
out_uint32_le(s, mszReadersIsNULL);
11711177
out_uint32_le(s, cchReaders);
11721178

11731179
/* insert context */
@@ -1683,7 +1689,7 @@ scard_send_EndTransaction(IRP *irp, char *context, int context_bytes,
16831689
static void
16841690
scard_send_Status(IRP *irp, int wide, char *context, int context_bytes,
16851691
char *card, int card_bytes,
1686-
int cchReaderLen, int cbAtrLen)
1692+
int cchReaderLen, int cbAtrLen, int reader_name_is_null)
16871693
{
16881694
/* see [MS-RDPESC] 2.2.2.18 */
16891695

@@ -1726,7 +1732,7 @@ scard_send_Status(IRP *irp, int wide, char *context, int context_bytes,
17261732
out_uint32_le(s, 0x00020000);
17271733
out_uint32_le(s, card_bytes);
17281734
out_uint32_le(s, 0x00020004);
1729-
out_uint32_le(s, 0x00000001);
1735+
out_uint32_le(s, reader_name_is_null);
17301736
out_uint32_le(s, cchReaderLen); /* readerLen, see [MS-RDPESC] 4.11 */
17311737
out_uint32_le(s, cbAtrLen); /* atrLen, see [MS-RDPESC] 4.11 */
17321738

@@ -1837,7 +1843,8 @@ scard_send_Transmit(IRP *irp, char *context, int context_bytes,
18371843
char *card, int card_bytes, char *send_data,
18381844
int send_bytes, int recv_bytes,
18391845
struct xrdp_scard_io_request *send_ior,
1840-
struct xrdp_scard_io_request *recv_ior)
1846+
struct xrdp_scard_io_request *recv_ior,
1847+
int recv_ior_is_null, int recv_is_null)
18411848
{
18421849
/* see [MS-RDPESC] 2.2.2.19 */
18431850

@@ -1954,10 +1961,10 @@ scard_send_Transmit(IRP *irp, char *context, int context_bytes,
19541961
val = send_bytes > 0 ? 0x00020008 : 0;
19551962
out_uint32_le(s, val); /* map3 */
19561963

1957-
val = recv_ior->cbPciLength > 0 ? 0x0002000c : 0;
1964+
val = recv_ior_is_null ? 0 : 0x00020008;
19581965
out_uint32_le(s, val); /* map 4 */
19591966

1960-
out_uint32_le(s, 0); // map5
1967+
out_uint32_le(s, recv_is_null); // map5
19611968
out_uint32_le(s, recv_bytes);
19621969

19631970
/* map0 */
@@ -1981,7 +1988,7 @@ scard_send_Transmit(IRP *irp, char *context, int context_bytes,
19811988
align_s(s, 4);
19821989
}
19831990

1984-
if (recv_ior->cbPciLength > 0)
1991+
if (recv_ior_is_null == 0)
19851992
{
19861993
/* map4 */
19871994
out_uint32_le(s, recv_ior->dwProtocol);

sesman/chansrv/smartcard.h

Lines changed: 34 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -112,61 +112,64 @@ int scard_init(void);
112112
int scard_deinit(void);
113113
int scard_send_establish_context(void *user_data, int scope);
114114
int scard_send_release_context(void *user_data,
115-
char *context, int context_bytes);
115+
char *context, int context_bytes);
116116
int scard_send_is_valid_context(void *user_data,
117-
char *context, int context_bytes);
117+
char *context, int context_bytes);
118118
int scard_send_list_readers(void *user_data,
119-
char *context, int context_bytes,
120-
char *groups, int cchReaders, int wide);
119+
char *context, int context_bytes,
120+
char *groups, int cchReaders, int wide,
121+
int mszReadersIsNULL);
121122

122123
int scard_send_get_status_change(void *user_data,
123-
char *context, int context_bytes,
124-
int wide, tui32 timeout,
125-
tui32 num_readers, READER_STATE* rsa);
124+
char *context, int context_bytes,
125+
int wide, tui32 timeout,
126+
tui32 num_readers, READER_STATE* rsa);
126127

127128
int scard_send_connect(void *user_data,
128-
char *context, int context_bytes, int wide,
129-
READER_STATE* rs);
129+
char *context, int context_bytes, int wide,
130+
READER_STATE* rs);
130131

131132
int scard_send_reconnect(void *user_data,
132-
char *context, int context_bytes,
133-
char *card, int card_bytes,
134-
READER_STATE* rs);
133+
char *context, int context_bytes,
134+
char *card, int card_bytes,
135+
READER_STATE* rs);
135136

136137
int scard_send_begin_transaction(void *user_data,
137-
char *context, int context_bytes,
138-
char *card, int card_bytes);
138+
char *context, int context_bytes,
139+
char *card, int card_bytes);
139140
int scard_send_end_transaction(void *user_data,
140-
char *context, int context_bytes,
141-
char *card, int card_bytes,
142-
tui32 dwDisposition);
141+
char *context, int context_bytes,
142+
char *card, int card_bytes,
143+
tui32 dwDisposition);
143144
int scard_send_status(void *user_data, int wide,
144-
char *context, int context_bytes,
145-
char *card, int card_bytes,
146-
int cchReaderLen, int cbAtrLen);
145+
char *context, int context_bytes,
146+
char *card, int card_bytes,
147+
int cchReaderLen, int cbAtrLen,
148+
int reader_name_is_null);
147149
int scard_send_disconnect(void *user_data,
148150
char *context, int context_bytes,
149151
char *card, int card_bytes,
150152
int dwDisposition);
151153

152154
int scard_send_transmit(void *user_data,
153-
char *context, int context_bytes,
154-
char *card, int card_bytes,
155-
char *send_data, int send_bytes, int recv_bytes,
156-
struct xrdp_scard_io_request *send_ior,
157-
struct xrdp_scard_io_request *recv_ior);
155+
char *context, int context_bytes,
156+
char *card, int card_bytes,
157+
char *send_data, int send_bytes, int recv_bytes,
158+
struct xrdp_scard_io_request *send_ior,
159+
struct xrdp_scard_io_request *recv_ior,
160+
int recv_ior_is_null, int recv_is_null);
158161

159162
int scard_send_control(void *user_data,
160-
char *context, int context_bytes,
161-
char *card, int card_bytes,
162-
char *send_data, int send_bytes,
163-
int recv_bytes, int control_code);
163+
char *context, int context_bytes,
164+
char *card, int card_bytes,
165+
char *send_data, int send_bytes,
166+
int recv_bytes, int control_code);
164167

165168
int scard_send_cancel(void *user_data,
166-
char *context, int context_bytes);
169+
char *context, int context_bytes);
167170

168171
int scard_send_get_attrib(void *user_data, char *card, int card_bytes,
169-
READER_STATE* rs);
172+
READER_STATE* rs);
170173

171174
/*
172175
* Notes:

0 commit comments

Comments
 (0)