Go to the source code of this file.
Defines | |
#define | SET_ACCESS_MASK 0 |
#define | ADD_INCLUDE_PATH 1 |
#define | ADD_EXCLUDE_PATH 2 |
#define | REGISTER 3 |
#define | REMOVE_ALL_PATHS 4 |
#define | UNREGISTER 5 |
#define | GET_AN_ACCESS 6 |
#define | RETURN_AN_ACCESS 7 |
#define | INITIALIZE_CACHE 8 |
#define | REGISTER_TRUSTED 9 |
#define | UNREGISTER_TRUSTED 10 |
#define | REMOVE_ALL_TRUSTED 11 |
#define | REMOVE_TRUSTED 12 |
#define | DAZUKO_FILENAME_MAX_LENGTH_COMPAT1 4095 |
#define | IOCTL_SET_OPTION 0 |
#define | IOCTL_GET_AN_ACCESS 1 |
#define | IOCTL_RETURN_ACCESS 2 |
Functions | |
int | dazuko_reqstream_dim_chunk0 (int size_chr, int size_int, int size_ptr) |
int | dazuko_reqstream_chunksize (unsigned char *ll, int *size) |
int | dazuko_reqstream_hl2ll (struct dazuko_request *req, unsigned char *ll) |
int | dazuko_reqstream_ll2hl (unsigned char *ll, struct dazuko_request *req, int strict) |
int | dazuko_reqstream_updll (struct dazuko_request *req, unsigned char *ll) |
|
Definition at line 41 of file dazuko_transport.h. Referenced by dazuko_handle_request(), dazuko_set_option(), dazukoAddExcludePath_TS(), and dazukoAddExcludePath_TS_compat1(). |
|
Definition at line 40 of file dazuko_transport.h. Referenced by dazuko_handle_request(), dazuko_set_option(), dazukoAddIncludePath_TS(), and dazukoAddIncludePath_TS_compat1(). |
|
Definition at line 55 of file dazuko_transport.h. Referenced by dazuko_handle_user_request_compat1(). |
|
Definition at line 45 of file dazuko_transport.h. Referenced by dazuko_handle_request(), and dazukoGetAccess_TS(). |
|
Definition at line 47 of file dazuko_transport.h. Referenced by dazuko_handle_request(), and dazukoInitializeCache_TS(). |
|
Definition at line 83 of file dazuko_transport.h. Referenced by dazuko_handle_user_request_compat1(), dazuko_handle_user_request_compat12(), and dazukoGetAccess_TS_compat1(). |
|
Definition at line 84 of file dazuko_transport.h. Referenced by dazuko_handle_user_request_compat1(), dazuko_handle_user_request_compat12(), and dazukoReturnAccess_TS_compat1(). |
|
Definition at line 82 of file dazuko_transport.h. Referenced by dazuko_handle_user_request_compat1(), dazuko_handle_user_request_compat12(), dazuko_set_path_compat1(), dazukoRegister_TS_compat1(), dazukoRemoveAllPaths_TS_compat1(), and dazukoSetAccessMask_TS_compat1(). |
|
Definition at line 42 of file dazuko_transport.h. Referenced by dazuko_handle_request(), dazuko_handle_user_request_compat1(), dazuko_handle_user_request_compat12(), dazuko_set_option(), dazukoRegister_TS_compat1(), and dazukoRegister_TS_inner(). |
|
Definition at line 48 of file dazuko_transport.h. Referenced by dazuko_handle_request(), and dazukoRegisterTrusted(). |
|
Definition at line 43 of file dazuko_transport.h. Referenced by dazuko_handle_request(), dazuko_set_option(), dazukoRemoveAllPaths_TS(), and dazukoRemoveAllPaths_TS_compat1(). |
|
Definition at line 50 of file dazuko_transport.h. Referenced by dazuko_handle_request(), dazuko_set_option(), and dazukoRemoveAllTrusted_TS(). |
|
Definition at line 51 of file dazuko_transport.h. Referenced by dazuko_handle_request(), dazuko_handle_request_remove_trusted(), dazuko_set_option(), and dazukoRemoveTrusted_TS(). |
|
Definition at line 46 of file dazuko_transport.h. Referenced by dazuko_handle_request(), and dazukoReturnAccess_TS(). |
|
Definition at line 39 of file dazuko_transport.h. Referenced by dazuko_handle_request(), dazuko_handle_request_set_access_mask(), dazuko_handle_user_request_compat1(), dazuko_set_option(), dazukoSetAccessMask_TS(), and dazukoSetAccessMask_TS_compat1(). |
|
Definition at line 44 of file dazuko_transport.h. Referenced by dazuko_handle_request(), dazuko_set_option(), and dazukoUnregister_TS(). |
|
Definition at line 49 of file dazuko_transport.h. Referenced by dazuko_handle_request(), and dazukoUnregisterTrusted(). |
|
Definition at line 170 of file dazuko_transport.c. References getinteger(). Referenced by dazuko_handle_user_request(). 00171 { 00172 /* this is a wrapper to getinteger that does NOT 00173 * increment the buffer pointer */ 00174 00175 unsigned char *p = ll; 00176 00177 return getinteger(&p, size, 4); 00178 }
|
|
Definition at line 304 of file dazuko_transport.c. Referenced by dazuko_reqstream_hl2ll(), dazuko_reqstream_ll2hl(), dazuko_reqstream_updll(), and process_request(). 00305 { 00306 /* 00307 * a request consists of: 00308 * chunk0 length (as 4-byte integer) 00309 * used flag, sizeof char/int/void* (as single bytes) 00310 * type, in size, out size, out used (as integers) 00311 * in buff, out buff (as pointers) 00312 */ 00313 return (4 + (4 * size_chr) + (4 * size_int) + (2 * size_ptr)); 00314 }
|
|
Definition at line 320 of file dazuko_transport.c. References dazuko_reqstream_dim_chunk0(), putbyte(), putinteger(), and putpointer(). Referenced by process_request(). 00321 { 00322 unsigned char *wrptr; 00323 int size_chr; 00324 int size_int; 00325 int size_ptr; 00326 int size_req; 00327 int type_as_int; 00328 00329 wrptr = ll; 00330 00331 /* prepare to write */ 00332 size_chr = sizeof(char); 00333 size_int = sizeof(int); 00334 size_ptr = sizeof(void *); 00335 size_req = dazuko_reqstream_dim_chunk0(size_chr, size_int, size_ptr); 00336 00337 /* 00338 * we do not support multi byte characters 00339 * and we assume maximum int and ptr sizes 00340 */ 00341 /* 00342 * XXX how to check these at compile time? 00343 * #if (sizeof int < 4) 00344 * etc did not work :( 00345 */ 00346 if (size_chr != 1) 00347 return -1; 00348 00349 /* convert everything to base types */ 00350 type_as_int = (req->type[0] << 8) + (req->type[1] << 0); 00351 00352 /* stream out */ 00353 if (putinteger(&wrptr, size_req, 4) != 0) return -1; 00354 if (putbyte(&wrptr, 0) != 0) return -1; 00355 if (putbyte(&wrptr, size_chr) != 0) return -1; 00356 if (putbyte(&wrptr, size_int) != 0) return -1; 00357 if (putbyte(&wrptr, size_ptr) != 0) return -1; 00358 if (putinteger(&wrptr, type_as_int, size_int) != 0) return -1; 00359 if (putinteger(&wrptr, req->buffer_size, size_int) != 0) return -1; 00360 if (putpointer(&wrptr, req->buffer, size_ptr) != 0) return -1; 00361 if (putinteger(&wrptr, req->reply_buffer_size, size_int) != 0) return -1; 00362 if (putpointer(&wrptr, req->reply_buffer, size_ptr) != 0) return -1; 00363 if (putinteger(&wrptr, req->reply_buffer_size_used, size_int) != 0) return -1; 00364 00365 /* done */ 00366 return 0; 00367 }
|
|
Definition at line 373 of file dazuko_transport.c. References dazuko_request::buffer, dazuko_request::buffer_size, dazuko_reqstream_dim_chunk0(), getbyte(), getinteger(), getpointer(), dazuko_request::reply_buffer, dazuko_request::reply_buffer_size, dazuko_request::reply_buffer_size_used, and dazuko_request::type. Referenced by dazuko_handle_user_request(), and process_request(). 00374 { 00375 unsigned char *rdptr; 00376 int size_req; 00377 int req_used; 00378 int size_chr; 00379 int size_int; 00380 int size_ptr; 00381 int type_as_int; 00382 00383 rdptr = (unsigned char *)ll; 00384 00385 /* only accept streams with our own layout (length part) */ 00386 if (getinteger(&rdptr, &size_req, 4) != 0) return -1; 00387 if (strict) 00388 { 00389 if (size_req != dazuko_reqstream_dim_chunk0(sizeof(char), sizeof(int), sizeof(void *))) 00390 return -1; 00391 } 00392 00393 /* the kernel MUST have updated the stream, otherwise it's invalid */ 00394 if (getbyte(&rdptr, &req_used) != 0) return -1; 00395 if (strict) 00396 { 00397 if (!req_used) 00398 return -1; 00399 } 00400 00401 /* only accept streams with our own layout (type width part) */ 00402 if (getbyte(&rdptr, &size_chr) != 0) return -1; 00403 if (getbyte(&rdptr, &size_int) != 0) return -1; 00404 if (getbyte(&rdptr, &size_ptr) != 0) return -1; 00405 if (strict) 00406 { 00407 if ((size_chr != sizeof(char)) || (size_int != sizeof(int)) || (size_ptr != sizeof(void *))) 00408 return -1; 00409 } 00410 if (size_req != dazuko_reqstream_dim_chunk0(size_chr, size_int, size_ptr)) 00411 return -1; 00412 00413 /* stream in values */ 00414 if (getinteger(&rdptr, &type_as_int, size_int) != 0) return -1; 00415 if (getinteger(&rdptr, &req->buffer_size, size_int) != 0) return -1; 00416 if (getpointer(&rdptr, &req->buffer, size_ptr) != 0) return -1; 00417 if (getinteger(&rdptr, &req->reply_buffer_size, size_int) != 0) return -1; 00418 if (getpointer(&rdptr, &req->reply_buffer, size_ptr) != 0) return -1; 00419 if (getinteger(&rdptr, &req->reply_buffer_size_used, size_int) != 0) return -1; 00420 00421 /* post convert to req */ 00422 req->type[0] = (type_as_int >> 8) & 0xFF; 00423 req->type[1] = (type_as_int >> 0) & 0xFF; 00424 00425 /* done */ 00426 return 0; 00427 }
|
|
Definition at line 433 of file dazuko_transport.c. References dazuko_reqstream_dim_chunk0(), getbyte(), getinteger(), putbyte(), putinteger(), dazuko_request::reply_buffer_size_used, skipinteger(), and skippointer(). Referenced by dazuko_handle_user_request(). 00434 { 00435 unsigned char *wrptr; 00436 int size_chr; 00437 int size_int; 00438 int size_ptr; 00439 int size_req; 00440 00441 wrptr = ll; 00442 00443 /* fetch the complete length spec to check it later */ 00444 if (getinteger(&wrptr, &size_req, 4) != 0) return -1; 00445 00446 /* rather aux a test for minimum length */ 00447 if (size_req < dazuko_reqstream_dim_chunk0(1, 4, 4)) 00448 return -1; 00449 00450 /* set the "used" flag */ 00451 /* 00452 * XXX delay this to a later point in time??? OTOH the update routine 00453 * will return an error when later steps fail and the stream will not 00454 * get passed back to the application, so this seems OK 00455 */ 00456 if (putbyte(&wrptr, 1) != 0) return -1; 00457 00458 /* fetch the data width fields to check them */ 00459 if (getbyte(&wrptr, &size_chr) != 0) return -1; 00460 if (getbyte(&wrptr, &size_int) != 0) return -1; 00461 if (getbyte(&wrptr, &size_ptr) != 0) return -1; 00462 if (size_chr != 1) 00463 return -1; 00464 if (size_req != dazuko_reqstream_dim_chunk0(size_chr, size_int, size_ptr)) 00465 return -1; 00466 00467 /* skip over the fields not of interest, only write back the 00468 * "reply_buffer_size_used" component */ 00469 if (skipinteger(&wrptr, size_int) != 0) return -1; 00470 if (skipinteger(&wrptr, size_int) != 0) return -1; 00471 if (skippointer(&wrptr, size_ptr) != 0) return -1; 00472 if (skipinteger(&wrptr, size_int) != 0) return -1; 00473 if (skippointer(&wrptr, size_ptr) != 0) return -1; 00474 if (putinteger(&wrptr, req->reply_buffer_size_used, size_int) != 0) return -1; 00475 00476 /* done */ 00477 return 0; 00478 }
|