dazuko_transport.h File Reference

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)


Define Documentation

#define ADD_EXCLUDE_PATH   2
 

Definition at line 41 of file dazuko_transport.h.

Referenced by dazuko_handle_request(), dazuko_set_option(), dazukoAddExcludePath_TS(), and dazukoAddExcludePath_TS_compat1().

#define ADD_INCLUDE_PATH   1
 

Definition at line 40 of file dazuko_transport.h.

Referenced by dazuko_handle_request(), dazuko_set_option(), dazukoAddIncludePath_TS(), and dazukoAddIncludePath_TS_compat1().

#define DAZUKO_FILENAME_MAX_LENGTH_COMPAT1   4095
 

Definition at line 55 of file dazuko_transport.h.

Referenced by dazuko_handle_user_request_compat1().

#define GET_AN_ACCESS   6
 

Definition at line 45 of file dazuko_transport.h.

Referenced by dazuko_handle_request(), and dazukoGetAccess_TS().

#define INITIALIZE_CACHE   8
 

Definition at line 47 of file dazuko_transport.h.

Referenced by dazuko_handle_request(), and dazukoInitializeCache_TS().

#define IOCTL_GET_AN_ACCESS   1
 

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().

#define IOCTL_RETURN_ACCESS   2
 

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().

#define IOCTL_SET_OPTION   0
 

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().

#define REGISTER   3
 

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().

#define REGISTER_TRUSTED   9
 

Definition at line 48 of file dazuko_transport.h.

Referenced by dazuko_handle_request(), and dazukoRegisterTrusted().

#define REMOVE_ALL_PATHS   4
 

Definition at line 43 of file dazuko_transport.h.

Referenced by dazuko_handle_request(), dazuko_set_option(), dazukoRemoveAllPaths_TS(), and dazukoRemoveAllPaths_TS_compat1().

#define REMOVE_ALL_TRUSTED   11
 

Definition at line 50 of file dazuko_transport.h.

Referenced by dazuko_handle_request(), dazuko_set_option(), and dazukoRemoveAllTrusted_TS().

#define REMOVE_TRUSTED   12
 

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().

#define RETURN_AN_ACCESS   7
 

Definition at line 46 of file dazuko_transport.h.

Referenced by dazuko_handle_request(), and dazukoReturnAccess_TS().

#define SET_ACCESS_MASK   0
 

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().

#define UNREGISTER   5
 

Definition at line 44 of file dazuko_transport.h.

Referenced by dazuko_handle_request(), dazuko_set_option(), and dazukoUnregister_TS().

#define UNREGISTER_TRUSTED   10
 

Definition at line 49 of file dazuko_transport.h.

Referenced by dazuko_handle_request(), and dazukoUnregisterTrusted().


Function Documentation

int dazuko_reqstream_chunksize unsigned char *  ll,
int *  size
 

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 }

int dazuko_reqstream_dim_chunk0 int  size_chr,
int  size_int,
int  size_ptr
 

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 }

int dazuko_reqstream_hl2ll struct dazuko_request req,
unsigned char *  ll
 

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 }

int dazuko_reqstream_ll2hl unsigned char *  ll,
struct dazuko_request req,
int  strict
 

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 }

int dazuko_reqstream_updll struct dazuko_request req,
unsigned char *  ll
 

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 }


Generated on Sun May 21 14:31:01 2006 for RSBAC by  doxygen 1.4.2