dazukoio_core.c File Reference

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "dazukoio.h"
#include "dazukoio_core.h"
#include "dazuko_transport.h"
#include "dazuko_version.h"
#include "dazukoio_linux_compat1.h"

Go to the source code of this file.

Defines

#define DAZUKO_FILENAME_MAX_LENGTH   6144
#define DAZUKO_SET_VERSION(maj, min, rev, rel, txt)
#define DAZUKO_POP_NUMBER(num)

Functions

static char char_to_hex (char c)
static void unescape_string (char *string)
int dazuko_get_value (const char *key, const char *string, char *buffer, size_t buffer_size)
static struct dazuko_requestalloc_request (int type, int request_length, int response_length)
static void free_request (struct dazuko_request **request_ref)
int dazukoVersion (struct dazuko_version *version)
int dazukoIOVersion (struct dazuko_version *version)
int dazukoRegister (const char *groupName, const char *mode)
static int process_request (struct dazuko_id *id, char *buffer, size_t buffer_size, struct dazuko_request *request, int reply_required)
static void dazuko_set_version (const char *reply_buffer)
static int dazukoRegister_TS_inner (dazuko_id_t **dazuko_id, const char *groupName, const char *mode)
int dazukoRegister_TS (dazuko_id_t **dazuko_id, const char *groupName, const char *mode)
int dazukoSetAccessMask (unsigned long accessMask)
int dazukoSetAccessMask_TS (dazuko_id_t *dazuko_id, unsigned long accessMask)
static int dazuko_set_path (dazuko_id_t *dazuko_id, const char *path, int type)
int dazukoAddIncludePath (const char *path)
int dazukoAddIncludePath_TS (dazuko_id_t *dazuko_id, const char *path)
int dazukoAddExcludePath (const char *path)
int dazukoAddExcludePath_TS (dazuko_id_t *dazuko_id, const char *path)
int dazukoRemoveAllPaths (void)
int dazukoRemoveAllPaths_TS (dazuko_id_t *dazuko_id)
int dazukoGetAccess (struct dazuko_access **acc)
int dazukoGetAccess_TS (dazuko_id_t *dazuko_id, struct dazuko_access **acc)
int dazukoReturnAccess (struct dazuko_access **acc)
int dazukoReturnAccess_TS (dazuko_id_t *dazuko_id, struct dazuko_access **acc)
int dazukoUnregister (void)
int dazukoUnregister_TS (dazuko_id_t **dazuko_id)
int dazukoInitializeCache (struct dazuko_cache_settings *cs)
int dazukoInitializeCache_TS (dazuko_id_t *dazuko_id, struct dazuko_cache_settings *cs)
int dazukoRemoveAllTrusted (void)
int dazukoRemoveAllTrusted_TS (dazuko_id_t *dazuko_id)
int dazukoRemoveTrusted (const char *token)
int dazukoRemoveTrusted_TS (dazuko_id_t *dazuko_id, const char *token)

Variables

const char * DAZUKO_VERSION_STAMP = "\nDazukoVersion=" DAZUKO_VERSION_MAJOR "." DAZUKO_VERSION_MINOR "." DAZUKO_VERSION_REVISION "." DAZUKO_VERSION_RELEASE "\n"
const char * VERSION_STRING
dazuko_id_t_GLOBAL_DAZUKO = NULL
static int _GLOBAL_DAZUKO_COMPAT1 = 0
static int _GLOBAL_WITH_REQSTREAM = 0
static int _GLOBAL_WITH_DEVWRITE = 0
static int _SET_DAZUKO_VERSION = 0
static struct dazuko_version _DAZUKO_VERSION


Define Documentation

#define DAZUKO_FILENAME_MAX_LENGTH   6144
 

Definition at line 59 of file dazukoio_core.c.

Referenced by dazukoGetAccess_TS().

#define DAZUKO_POP_NUMBER num   ) 
 

Value:

{ \
        if (p1 == NULL) \
        { \
                error = 1; \
        } \
        else \
        { \
                p2 = strchr(p1, '.'); \
                if (p2 != NULL) \
                { \
                        *p2 = 0; \
                        p2++; \
                } \
                num = atoi(p1); \
                p1 = p2; \
        } \
}

Referenced by dazuko_set_version().

#define DAZUKO_SET_VERSION maj,
min,
rev,
rel,
txt   ) 
 

Value:

{ \
        if (!_SET_DAZUKO_VERSION) \
        { \
                _DAZUKO_VERSION.major = maj; \
                _DAZUKO_VERSION.minor = min; \
                _DAZUKO_VERSION.revision = rev; \
                _DAZUKO_VERSION.release = rel; \
                snprintf(_DAZUKO_VERSION.text, sizeof(_DAZUKO_VERSION.text), txt); \
                _DAZUKO_VERSION.text[sizeof(_DAZUKO_VERSION.text) - 1] = 0; \
                _SET_DAZUKO_VERSION = 1; \
        } \
}

Definition at line 318 of file dazukoio_core.c.

Referenced by dazuko_set_version(), and dazukoRegister_TS_inner().


Function Documentation

static struct dazuko_request* alloc_request int  type,
int  request_length,
int  response_length
[static]
 

Definition at line 158 of file dazukoio_core.c.

References NULL.

Referenced by dazuko_set_path(), dazukoGetAccess_TS(), dazukoInitializeCache_TS(), dazukoRegister_TS_inner(), dazukoRemoveAllPaths_TS(), dazukoRemoveAllTrusted_TS(), dazukoRemoveTrusted_TS(), dazukoReturnAccess_TS(), dazukoSetAccessMask_TS(), and dazukoUnregister_TS().

00159 {
00160         struct dazuko_request   *request;
00161         char                    *s;
00162 
00163         request = (struct dazuko_request *)malloc(sizeof(struct dazuko_request));
00164         if (request == NULL)
00165                 return NULL;
00166 
00167         memset(request, 0, sizeof(struct dazuko_request));
00168 
00169         request->type[0] = (char)type;
00170 
00171         s = (char *)malloc(request_length);
00172         if (s == NULL)
00173         {
00174                 free(request);
00175                 return NULL;
00176         }
00177 
00178         memset(s, 0, request_length);
00179 
00180         request->buffer = s;
00181 
00182         /* Note: buffer and buffer_size should be set after
00183          * calling this function */
00184 
00185         if (response_length > 0)
00186         {
00187                 s = (char *)malloc(response_length);
00188                 if (s == NULL)
00189                 {
00190                         free(request->buffer);
00191                         free(request);
00192                         return NULL;
00193                 }
00194 
00195                 memset(s, 0, response_length);
00196 
00197                 request->reply_buffer = s;
00198                 request->reply_buffer_size = response_length;
00199         }
00200 
00201         return request;
00202 }

static char char_to_hex char  c  )  [inline, static]
 

Definition at line 74 of file dazukoio_core.c.

Referenced by unescape_string().

00075 {
00076         /* ugly, but fast */
00077 
00078         switch (c)
00079         {
00080                 case '1': return 1;
00081                 case '2': return 2;
00082                 case '3': return 3;
00083                 case '4': return 4;
00084                 case '5': return 5;
00085                 case '6': return 6;
00086                 case '7': return 7;
00087                 case '8': return 8;
00088                 case '9': return 9;
00089                 case 'a': case 'A': return 10;
00090                 case 'b': case 'B': return 11;
00091                 case 'c': case 'C': return 12;
00092                 case 'd': case 'D': return 13;
00093                 case 'e': case 'E': return 14;
00094                 case 'f': case 'F': return 15;
00095         }
00096 
00097         return 0;
00098 }

int dazuko_get_value const char *  key,
const char *  string,
char *  buffer,
size_t  buffer_size
 

Definition at line 124 of file dazukoio_core.c.

References NULL.

00125 {
00126         const char      *p1;
00127         const char      *p2;
00128         size_t          size;
00129 
00130         if (buffer == NULL || buffer_size < 1)
00131                 return -1;
00132 
00133         buffer[0] = 0;
00134 
00135         if (key == NULL || string == NULL)
00136                 return -1;
00137 
00138         p1 = strstr(string, key);
00139         if (p1 == NULL)
00140                 return -1;
00141 
00142         p1 += strlen(key);
00143 
00144         for (p2=p1 ; *p2 && *p2!='\n' ; p2++)
00145                 continue;
00146 
00147         size = p2 - p1;
00148         if (size >= buffer_size)
00149                 size = buffer_size - 1;
00150 
00151         memcpy(buffer, p1, size);
00152 
00153         buffer[size] = 0;
00154 
00155         return 0;
00156 }

static int dazuko_set_path dazuko_id_t dazuko_id,
const char *  path,
int  type
[static]
 

Definition at line 644 of file dazukoio_core.c.

References alloc_request(), dazuko_request::buffer, dazuko_request::buffer_size, free_request(), dazuko_id::id, ITOA_SIZE, NULL, process_request(), and xp_verify_id().

Referenced by dazukoAddExcludePath_TS(), and dazukoAddIncludePath_TS().

00645 {
00646         struct dazuko_request   *request;
00647         size_t                  size;
00648         char                    buffer[ITOA_SIZE];
00649 
00650         if (dazuko_id == NULL)
00651                 return -1;
00652 
00653         if (dazuko_id->id < 0)
00654                 return -1;
00655 
00656         if (xp_verify_id(dazuko_id) != 0)
00657                 return -1;
00658 
00659         if (path == NULL)
00660                 return -1;
00661 
00662         size = 1 + 2 + 1 + ITOA_SIZE /* \nID=id */
00663                 + 1 + 2 + 1 + strlen(path) /* \nPT=path */
00664                 + 1 /* \0 */
00665                 ;
00666 
00667         request = alloc_request(type, size, 0);
00668         if (request == NULL)
00669                 return -1;
00670 
00671         snprintf(request->buffer, size, "\nID=%d\nPT=%s", dazuko_id->id, path);
00672         request->buffer[size - 1] = 0;
00673         request->buffer_size = strlen(request->buffer) + 1;
00674 
00675         if (process_request(dazuko_id, buffer, sizeof(buffer), request, 0) != 0)
00676         {
00677                 free_request(&request);
00678                 return -1;
00679         }
00680 
00681         free_request(&request);
00682 
00683         return 0;
00684 }

static void dazuko_set_version const char *  reply_buffer  )  [static]
 

Definition at line 332 of file dazukoio_core.c.

References dazuko_get_value(), DAZUKO_POP_NUMBER, DAZUKO_SET_VERSION, and ITOA_SIZE.

Referenced by dazukoRegister_TS_inner().

00333 {
00334         char    vn_buffer[ITOA_SIZE + DAZUKO_VERSION_TEXT_SIZE];
00335         char    vs_buffer[ITOA_SIZE + DAZUKO_VERSION_TEXT_SIZE];
00336         int     maj = 0;
00337         int     min = 0;
00338         int     rev = 0;
00339         int     rel = 0;
00340         char    *p1;
00341         char    *p2;
00342         int     error = 0;
00343 
00344 #define DAZUKO_POP_NUMBER(num) \
00345 { \
00346         if (p1 == NULL) \
00347         { \
00348                 error = 1; \
00349         } \
00350         else \
00351         { \
00352                 p2 = strchr(p1, '.'); \
00353                 if (p2 != NULL) \
00354                 { \
00355                         *p2 = 0; \
00356                         p2++; \
00357                 } \
00358                 num = atoi(p1); \
00359                 p1 = p2; \
00360         } \
00361 }
00362 
00363         if (dazuko_get_value("\nVN=", reply_buffer, vn_buffer, sizeof(vn_buffer)) != 0)
00364         {
00365                 error = 1;
00366         }
00367 
00368         if (!error && dazuko_get_value("\nVS=", reply_buffer, vs_buffer, sizeof(vs_buffer)) != 0)
00369         {
00370                 error = 1;
00371         }
00372 
00373         if (!error)
00374         {
00375                 p1 = vn_buffer;
00376                 DAZUKO_POP_NUMBER(maj);
00377                 DAZUKO_POP_NUMBER(min);
00378                 DAZUKO_POP_NUMBER(rev);
00379                 DAZUKO_POP_NUMBER(rel);
00380         }
00381 
00382         if (error)
00383         {
00384                 /* this should never occur unless someone used a CVS snapshot */
00385                 DAZUKO_SET_VERSION(2, 1, 0, 0, "2.1.0-prex");
00386         }
00387         else
00388         {
00389                 DAZUKO_SET_VERSION(maj, min, rev, rel, vs_buffer);
00390         }
00391 }

int dazukoAddExcludePath const char *  path  ) 
 

Definition at line 701 of file dazukoio_core.c.

References dazukoAddExcludePath_TS().

00702 {
00703         return dazukoAddExcludePath_TS(_GLOBAL_DAZUKO, path);
00704 }

int dazukoAddExcludePath_TS dazuko_id_t dazuko_id,
const char *  path
 

Definition at line 706 of file dazukoio_core.c.

References _GLOBAL_DAZUKO_COMPAT1, ADD_EXCLUDE_PATH, dazuko_set_path(), and dazukoAddExcludePath_TS_compat1().

Referenced by dazukoAddExcludePath().

00707 {
00708 #if !defined(NO_COMPAT1)
00709         if (_GLOBAL_DAZUKO_COMPAT1)
00710                 return dazukoAddExcludePath_TS_compat1(dazuko_id, path);
00711 #endif
00712 
00713         return dazuko_set_path(dazuko_id, path, ADD_EXCLUDE_PATH);
00714 }

int dazukoAddIncludePath const char *  path  ) 
 

Definition at line 686 of file dazukoio_core.c.

References dazukoAddIncludePath_TS().

00687 {
00688         return dazukoAddIncludePath_TS(_GLOBAL_DAZUKO, path);
00689 }

int dazukoAddIncludePath_TS dazuko_id_t dazuko_id,
const char *  path
 

Definition at line 691 of file dazukoio_core.c.

References _GLOBAL_DAZUKO_COMPAT1, ADD_INCLUDE_PATH, dazuko_set_path(), and dazukoAddIncludePath_TS_compat1().

Referenced by dazukoAddIncludePath().

00692 {
00693 #if !defined(NO_COMPAT1)
00694         if (_GLOBAL_DAZUKO_COMPAT1)
00695                 return dazukoAddIncludePath_TS_compat1(dazuko_id, path);
00696 #endif
00697 
00698         return dazuko_set_path(dazuko_id, path, ADD_INCLUDE_PATH);
00699 }

int dazukoGetAccess struct dazuko_access **  acc  ) 
 

Definition at line 764 of file dazukoio_core.c.

References dazukoGetAccess_TS().

00765 {
00766         return dazukoGetAccess_TS(_GLOBAL_DAZUKO, acc);
00767 }

int dazukoGetAccess_TS dazuko_id_t dazuko_id,
struct dazuko_access **  acc
 

Definition at line 769 of file dazukoio_core.c.

References _GLOBAL_DAZUKO_COMPAT1, alloc_request(), dazuko_request::buffer, dazuko_request::buffer_size, DAZUKO_FILENAME_MAX_LENGTH, dazuko_get_value(), dazukoGetAccess_TS_compat1_wrapper(), dazukoReturnAccess_TS_compat1_wrapper(), dazuko_access::event, dazuko_access::file_device, dazuko_access::file_gid, dazuko_access::file_mode, dazuko_access::file_size, dazuko_access::file_uid, dazuko_access::filename, dazuko_access::flags, free_request(), GET_AN_ACCESS, dazuko_id::id, ITOA_SIZE, dazuko_access::mode, NULL, dazuko_access::pid, process_request(), dazuko_request::reply_buffer, dazuko_request::reply_buffer_size_used, dazuko_access::set_event, dazuko_access::set_file_device, dazuko_access::set_file_gid, dazuko_access::set_file_mode, dazuko_access::set_file_size, dazuko_access::set_file_uid, dazuko_access::set_filename, dazuko_access::set_flags, dazuko_access::set_mode, dazuko_access::set_pid, dazuko_access::set_uid, dazuko_access::uid, unescape_string(), and xp_verify_id().

Referenced by dazukoGetAccess().

00770 {
00771         struct dazuko_request   *request;
00772         struct dazuko_access    *temp_acc;
00773         size_t                  size;
00774         size_t                  filename_size;
00775         char                    buffer[ITOA_SIZE];
00776 #if !defined(NO_COMPAT1)
00777         int                     compat1_ret;
00778 #endif
00779 
00780         if (dazuko_id == NULL)
00781                 return -1;
00782 
00783 #if !defined(NO_COMPAT1)
00784         if (_GLOBAL_DAZUKO_COMPAT1)
00785         {
00786                 compat1_ret = dazukoGetAccess_TS_compat1_wrapper(dazuko_id, acc);
00787 
00788                 if (compat1_ret == 0 && !(dazuko_id->write_mode))
00789                 {
00790                         /* we are in read_only mode so we return the access immediately */
00791 
00792                         dazukoReturnAccess_TS_compat1_wrapper(dazuko_id, acc, 1, 0);
00793 
00794                         /* this could be dangerous, we do not check if the return was successfull! */
00795                 }
00796 
00797                 return compat1_ret;
00798         }
00799 #endif
00800 
00801         if (dazuko_id->id < 0)
00802                 return -1;
00803 
00804         if (xp_verify_id(dazuko_id) != 0)
00805                 return -1;
00806 
00807         if (acc == NULL)
00808                 return -1;
00809 
00810         size = 1 + 2 + 1 + ITOA_SIZE /* \nID=id */
00811                 + 1 /* \0 */
00812                 ;
00813 
00814         request = alloc_request(GET_AN_ACCESS, size,
00815                 1 + 2 + 1 + DAZUKO_FILENAME_MAX_LENGTH /* \nFN=filename */
00816                 + 1024 /* miscellaneous access attributes */
00817                 + 1 /* \0 */
00818                 );
00819         if (request == NULL)
00820                 return -1;
00821 
00822         snprintf(request->buffer, size, "\nID=%d", dazuko_id->id);
00823         request->buffer[size - 1] = 0;
00824         request->buffer_size = strlen(request->buffer) + 1;
00825 
00826         temp_acc = (struct dazuko_access *)malloc(sizeof(struct dazuko_access));
00827         if (temp_acc == NULL)
00828         {
00829                 free_request(&request);
00830                 return -1;
00831         }
00832 
00833         memset(temp_acc, 0, sizeof(struct dazuko_access));
00834 
00835         filename_size = DAZUKO_FILENAME_MAX_LENGTH + 1;
00836         temp_acc->filename = (char *)malloc(filename_size);
00837         if (temp_acc->filename == NULL)
00838         {
00839                 free(temp_acc);
00840                 free_request(&request);
00841                 return -1;
00842         }
00843 
00844         if (process_request(dazuko_id, buffer, sizeof(buffer), request, 1) != 0)
00845         {
00846                 free(temp_acc->filename);
00847                 free(temp_acc);
00848                 free_request(&request);
00849                 return -1;
00850         }
00851 
00852         if (request->reply_buffer_size_used > 0)
00853         {
00854                 if (dazuko_get_value("\nFN=", request->reply_buffer, temp_acc->filename, filename_size) == 0)
00855                 {
00856                         temp_acc->set_filename = 1;
00857                         unescape_string(temp_acc->filename);
00858                 }
00859 
00860                 if (dazuko_get_value("\nEV=", request->reply_buffer, buffer, sizeof(buffer)) == 0)
00861                 {
00862                         temp_acc->event = atoi(buffer);
00863                         temp_acc->set_event = 1;
00864                 }
00865 
00866                 if (dazuko_get_value("\nFL=", request->reply_buffer, buffer, sizeof(buffer)) == 0)
00867                 {
00868                         temp_acc->flags = atoi(buffer);
00869                         temp_acc->set_flags = 1;
00870                 }
00871 
00872                 if (dazuko_get_value("\nMD=", request->reply_buffer, buffer, sizeof(buffer)) == 0)
00873                 {
00874                         temp_acc->mode = atoi(buffer);
00875                         temp_acc->set_mode = 1;
00876                 }
00877 
00878                 if (dazuko_get_value("\nUI=", request->reply_buffer, buffer, sizeof(buffer)) == 0)
00879                 {
00880                         temp_acc->uid = atoi(buffer);
00881                         temp_acc->set_uid = 1;
00882                 }
00883 
00884                 if (dazuko_get_value("\nPI=", request->reply_buffer, buffer, sizeof(buffer)) == 0)
00885                 {
00886                         temp_acc->pid = atoi(buffer);
00887                         temp_acc->set_pid = 1;
00888                 }
00889 
00890                 if (dazuko_get_value("\nFS=", request->reply_buffer, buffer, sizeof(buffer)) == 0)
00891                 {
00892                         temp_acc->file_size = atol(buffer);
00893                         temp_acc->set_file_size = 1;
00894                 }
00895 
00896                 if (dazuko_get_value("\nFU=", request->reply_buffer, buffer, sizeof(buffer)) == 0)
00897                 {
00898                         temp_acc->file_uid = atoi(buffer);
00899                         temp_acc->set_file_uid = 1;
00900                 }
00901 
00902                 if (dazuko_get_value("\nFG=", request->reply_buffer, buffer, sizeof(buffer)) == 0)
00903                 {
00904                         temp_acc->file_gid = atoi(buffer);
00905                         temp_acc->set_file_gid = 1;
00906                 }
00907 
00908                 if (dazuko_get_value("\nDT=", request->reply_buffer, buffer, sizeof(buffer)) == 0)
00909                 {
00910                         temp_acc->file_device = atoi(buffer);
00911                         temp_acc->set_file_device = 1;
00912                 }
00913 
00914                 if (dazuko_get_value("\nFM=", request->reply_buffer, buffer, sizeof(buffer)) == 0)
00915                 {
00916                         temp_acc->file_mode = atoi(buffer);
00917                         temp_acc->set_file_mode = 1;
00918                 }
00919         }
00920 
00921         free_request(&request);
00922 
00923         *acc = temp_acc;
00924 
00925         return 0;
00926 }

int dazukoInitializeCache struct dazuko_cache_settings *  cs  ) 
 

Definition at line 1051 of file dazukoio_core.c.

References dazukoInitializeCache_TS().

01052 {
01053         return dazukoInitializeCache_TS(_GLOBAL_DAZUKO, cs);
01054 }

int dazukoInitializeCache_TS dazuko_id_t dazuko_id,
struct dazuko_cache_settings *  cs
 

Definition at line 1056 of file dazukoio_core.c.

References _GLOBAL_DAZUKO_COMPAT1, alloc_request(), dazuko_request::buffer, dazuko_request::buffer_size, dazuko_get_value(), free_request(), dazuko_id::id, INITIALIZE_CACHE, ITOA_SIZE, NULL, process_request(), dazuko_request::reply_buffer, dazuko_request::reply_buffer_size_used, and xp_verify_id().

Referenced by dazukoInitializeCache().

01057 {
01058         struct dazuko_request   *request;
01059         size_t                  size;
01060         char                    buffer[ITOA_SIZE];
01061         int                     cache_available = 0;
01062 
01063         if (dazuko_id == NULL)
01064                 return -1;
01065 
01066 #if !defined(NO_COMPAT1)
01067         if (_GLOBAL_DAZUKO_COMPAT1)
01068                 return -1;
01069 #endif
01070 
01071         if (dazuko_id->id < 0)
01072                 return -1;
01073 
01074         if (xp_verify_id(dazuko_id) != 0)
01075                 return -1;
01076 
01077         if (cs == NULL)
01078                 return -1;
01079 
01080         size = 1 + 2 + 1 + ITOA_SIZE /* \nID=id */
01081                 + 1 + 2 + 1 + ITOA_SIZE /* \nCT=cachettl */
01082                 + 1 /* \0 */
01083                 ;
01084 
01085         request = alloc_request(INITIALIZE_CACHE, size,
01086                 1 + 2 + 1 + ITOA_SIZE /* \nCA=cacheavailable */
01087                 + 1024 /* miscellaneous cache attributes */
01088                 + 1 /* \0 */
01089                 );
01090         if (request == NULL)
01091                 return -1;
01092 
01093         snprintf(request->buffer, size, "\nID=%d\nCT=%lu", dazuko_id->id, cs->ttl);
01094         request->buffer[size - 1] = 0;
01095         request->buffer_size = strlen(request->buffer) + 1;
01096 
01097         if (process_request(dazuko_id, buffer, sizeof(buffer), request, 1) != 0)
01098         {
01099                 free_request(&request);
01100                 return -1;
01101         }
01102 
01103         if (request->reply_buffer_size_used > 0)
01104         {
01105                 if (dazuko_get_value("\nCA=", request->reply_buffer, buffer, sizeof(buffer)) == 0)
01106                 {
01107                         cache_available = atoi(buffer);
01108                 }
01109         }
01110 
01111         free_request(&request);
01112 
01113         if (cache_available)
01114                 return 0;
01115 
01116         return -1;
01117 }

int dazukoIOVersion struct dazuko_version *  version  ) 
 

Definition at line 240 of file dazukoio_core.c.

References DAZUKO_VERSION_MAJOR, DAZUKO_VERSION_MINOR, DAZUKO_VERSION_RELEASE, DAZUKO_VERSION_REVISION, NULL, and VERSION_STRING.

00241 {
00242         if (version == NULL)
00243                 return -1;
00244 
00245         memset(version, 0, sizeof(struct dazuko_version));
00246 
00247         version->major = atoi(DAZUKO_VERSION_MAJOR);
00248         version->minor = atoi(DAZUKO_VERSION_MINOR);
00249         version->revision = atoi(DAZUKO_VERSION_REVISION);
00250         version->release = atoi(DAZUKO_VERSION_RELEASE);
00251 
00252         snprintf(version->text, sizeof(version->text), "%s", VERSION_STRING);
00253         version->text[sizeof(version->text) - 1] = 0;
00254 
00255         return 0;
00256 }

int dazukoRegister const char *  groupName,
const char *  mode
 

Definition at line 258 of file dazukoio_core.c.

References dazukoRegister_TS().

00259 {
00260         return dazukoRegister_TS(&_GLOBAL_DAZUKO, groupName, mode);
00261 }

int dazukoRegister_TS dazuko_id_t **  dazuko_id,
const char *  groupName,
const char *  mode
 

Definition at line 546 of file dazukoio_core.c.

References _GLOBAL_DAZUKO_COMPAT1, _GLOBAL_WITH_DEVWRITE, _GLOBAL_WITH_REQSTREAM, and dazukoRegister_TS_inner().

Referenced by dazukoRegister().

00547 {
00548         int     rc;
00549 
00550         /* prep: enable highest available mode */
00551         _GLOBAL_WITH_REQSTREAM = 1;
00552 
00553         _GLOBAL_WITH_DEVWRITE = 0;
00554 #if !defined(NO_COMPAT1)
00555         _GLOBAL_DAZUKO_COMPAT1 = 0;
00556 #endif
00557 
00558         /* try to register until success or methods are exhausted */
00559         while (1)
00560         {
00561                 /* stop if we succeeded to register */
00562                 rc = dazukoRegister_TS_inner(dazuko_id, groupName, mode);
00563                 if (rc == 0)
00564                         break;
00565 
00566                 /* try to fallback if possible */
00567 
00568                 if (_GLOBAL_WITH_REQSTREAM)
00569                 {
00570                         /* the "ra=" method failed, fallback to "RA=" */
00571 
00572                         _GLOBAL_WITH_REQSTREAM = 0;
00573                         _GLOBAL_WITH_DEVWRITE = 1;
00574                         continue;
00575                 }
00576 
00577 #if !defined(NO_COMPAT1)
00578                 if (_GLOBAL_WITH_DEVWRITE)
00579                 {
00580                         /* the "RA=" method failed, fallback to compat1 */
00581 
00582                         _GLOBAL_WITH_DEVWRITE = 0;
00583                         _GLOBAL_DAZUKO_COMPAT1 = 1;
00584                         continue;
00585                 }
00586 #endif
00587 
00588                 /* we ran out of alternatives, return with an error */
00589                 break;
00590         }
00591 
00592         return rc;
00593 }

static int dazukoRegister_TS_inner dazuko_id_t **  dazuko_id,
const char *  groupName,
const char *  mode
[static]
 

Definition at line 398 of file dazukoio_core.c.

References _GLOBAL_DAZUKO_COMPAT1, _GLOBAL_WITH_DEVWRITE, _GLOBAL_WITH_REQSTREAM, alloc_request(), dazuko_request::buffer, dazuko_request::buffer_size, dazuko_get_value(), dazuko_set_version(), DAZUKO_SET_VERSION, dazukoRegister_TS_compat1_wrapper(), free_request(), ITOA_SIZE, NULL, process_request(), REGISTER, dazuko_request::reply_buffer, xp_connection_close(), and xp_connection_open().

Referenced by dazukoRegister_TS().

00399 {
00400         struct dazuko_request   *request;
00401         char                    buffer[ITOA_SIZE];
00402         char                    regMode[3];
00403         dazuko_id_t             *temp_id;
00404         size_t                  size;
00405         int                     write_mode = 0;
00406 #if !defined(NO_COMPAT1)
00407         int                     compat1_ret;
00408 #endif
00409 
00410         if (dazuko_id == NULL)
00411                 return -1;
00412 
00413         /* set default group name if one was not given */
00414         if (groupName == NULL)
00415                 groupName = "_GENERIC";
00416 
00417         /* set default mode if one was not given */
00418         if (mode == NULL)
00419                 mode = "r";
00420 
00421         if (strcasecmp(mode, "r") == 0)
00422         {
00423                 strncpy(regMode, "R", sizeof(regMode));
00424                 write_mode = 0;
00425         }
00426         else if (strcasecmp(mode, "r+") == 0 || strcasecmp(mode, "rw") == 0)
00427         {
00428                 strncpy(regMode, "RW", sizeof(regMode));
00429                 write_mode = 1;
00430         }
00431         else
00432         {
00433                 return -1;
00434         }
00435         regMode[sizeof(regMode) - 1] = 0;
00436 
00437 #if !defined(NO_COMPAT1)
00438         /* shortcut for the compat12 layer */
00439         if (_GLOBAL_DAZUKO_COMPAT1)
00440         {
00441                 compat1_ret = dazukoRegister_TS_compat1_wrapper(dazuko_id, groupName);
00442 
00443                 if (compat1_ret == 0)
00444                 {
00445                         (*dazuko_id)->write_mode = write_mode;
00446 
00447                         DAZUKO_SET_VERSION(1, 0, 0, 0, "1.x");
00448                 }
00449 
00450                 return compat1_ret;
00451         }
00452         /* fallthrough to the device writing path */
00453 #endif
00454 
00455         /* create temporary id */
00456         temp_id = (dazuko_id_t *)malloc(sizeof(dazuko_id_t));
00457         if (temp_id == NULL)
00458                 return -1;
00459 
00460         memset(temp_id, 0, sizeof(dazuko_id_t));
00461 
00462         /* open device */
00463         if (xp_connection_open(temp_id) != 0)
00464         {
00465                 free(temp_id);
00466                 return -1;
00467         }
00468 
00469         /* allocate a request, fill in "RM=" and "GN=" */
00470         size = 1 + 2 + 1 + strlen(regMode) /* \nRM=mode */
00471                 + 1 + 2 + 1 + strlen(groupName) /* \nGN=groupName */
00472                 + 1 /* \0 */
00473                 ;
00474 
00475         request = alloc_request(REGISTER, size, 4096);
00476         if (request == NULL)
00477         {
00478                 xp_connection_close(temp_id);
00479                 free(temp_id);
00480                 return -1;
00481         }
00482 
00483         snprintf(request->buffer, size, "\nRM=%s\nGN=%s", regMode, groupName);
00484         request->buffer[size - 1] = 0;
00485         request->buffer_size = strlen(request->buffer) + 1;
00486 
00487         if (process_request(temp_id, buffer, sizeof(buffer), request, 1) != 0)
00488         {
00489                 xp_connection_close(temp_id);
00490                 free(temp_id);
00491                 free_request(&request);
00492 
00493                 return -1;
00494         }
00495 
00496         if (dazuko_get_value("\nID=", request->reply_buffer, buffer, sizeof(buffer)) != 0)
00497         {
00498                 xp_connection_close(temp_id);
00499                 free(temp_id);
00500                 free_request(&request);
00501 
00502                 return -1;
00503         }
00504 
00505         temp_id->id = atoi(buffer);
00506 
00507         if (temp_id->id < 0)
00508         {
00509                 xp_connection_close(temp_id);
00510                 free(temp_id);
00511                 free_request(&request);
00512 
00513                 return -1;
00514         }
00515 
00516         temp_id->write_mode = write_mode;
00517 
00518         if (_GLOBAL_WITH_REQSTREAM)
00519         {
00520                 dazuko_set_version(request->reply_buffer);
00521         }
00522         else if (_GLOBAL_WITH_DEVWRITE)
00523         {
00524                 DAZUKO_SET_VERSION(2, 0, 0, 0, "2.0.x");
00525         }
00526 
00527         free_request(&request);
00528 
00529         *dazuko_id = temp_id;
00530 
00531         return 0;
00532 }

int dazukoRemoveAllPaths void   ) 
 

Definition at line 716 of file dazukoio_core.c.

References dazukoRemoveAllPaths_TS().

00717 {
00718         return dazukoRemoveAllPaths_TS(_GLOBAL_DAZUKO);
00719 }

int dazukoRemoveAllPaths_TS dazuko_id_t dazuko_id  ) 
 

Definition at line 721 of file dazukoio_core.c.

References _GLOBAL_DAZUKO_COMPAT1, alloc_request(), dazuko_request::buffer, dazuko_request::buffer_size, dazukoRemoveAllPaths_TS_compat1(), free_request(), ITOA_SIZE, NULL, process_request(), REMOVE_ALL_PATHS, and xp_verify_id().

Referenced by dazukoRemoveAllPaths().

00722 {
00723         struct dazuko_request   *request;
00724         size_t                  size;
00725         char                    buffer[ITOA_SIZE];
00726 
00727         if (dazuko_id == NULL)
00728                 return -1;
00729 
00730 #if !defined(NO_COMPAT1)
00731         if (_GLOBAL_DAZUKO_COMPAT1)
00732                 return dazukoRemoveAllPaths_TS_compat1(dazuko_id);
00733 #endif
00734 
00735         if (dazuko_id->id < 0)
00736                 return -1;
00737 
00738         if (xp_verify_id(dazuko_id) != 0)
00739                 return -1;
00740 
00741         size = 1 + 2 + 1 + ITOA_SIZE /* \nID=id */
00742                 + 1 /* \0 */
00743                 ;
00744 
00745         request = alloc_request(REMOVE_ALL_PATHS, size, 0);
00746         if (request == NULL)
00747                 return -1;
00748 
00749         snprintf(request->buffer, size, "\nID=%d", dazuko_id->id);
00750         request->buffer[size - 1] = 0;
00751         request->buffer_size = strlen(request->buffer) + 1;
00752 
00753         if (process_request(dazuko_id, buffer, sizeof(buffer), request, 0) != 0)
00754         {
00755                 free_request(&request);
00756                 return -1;
00757         }
00758 
00759         free_request(&request);
00760 
00761         return 0;
00762 }

int dazukoRemoveAllTrusted void   ) 
 

Definition at line 1119 of file dazukoio_core.c.

References dazukoRemoveAllTrusted_TS().

01120 {
01121         return dazukoRemoveAllTrusted_TS(_GLOBAL_DAZUKO);
01122 }

int dazukoRemoveAllTrusted_TS dazuko_id_t dazuko_id  ) 
 

Definition at line 1124 of file dazukoio_core.c.

References _GLOBAL_DAZUKO_COMPAT1, alloc_request(), dazuko_request::buffer, dazuko_request::buffer_size, free_request(), dazuko_id::id, ITOA_SIZE, NULL, process_request(), REMOVE_ALL_TRUSTED, and xp_verify_id().

Referenced by dazukoRemoveAllTrusted().

01125 {
01126         struct dazuko_request   *request;
01127         size_t                  size;
01128         char                    buffer[ITOA_SIZE];
01129 
01130         if (dazuko_id == NULL)
01131                 return -1;
01132 
01133 #if !defined(NO_COMPAT1)
01134         if (_GLOBAL_DAZUKO_COMPAT1)
01135                 return -1;
01136 #endif
01137 
01138         if (dazuko_id->id < 0)
01139                 return -1;
01140 
01141         if (xp_verify_id(dazuko_id) != 0)
01142                 return -1;
01143 
01144         size = 1 + 2 + 1 + ITOA_SIZE /* \nID=id */
01145                 + 1 /* \0 */
01146                 ;
01147 
01148         request = alloc_request(REMOVE_ALL_TRUSTED, size, 0);
01149         if (request == NULL)
01150                 return -1;
01151 
01152         snprintf(request->buffer, size, "\nID=%d", dazuko_id->id);
01153         request->buffer[size - 1] = 0;
01154         request->buffer_size = strlen(request->buffer) + 1;
01155 
01156         if (process_request(dazuko_id, buffer, sizeof(buffer), request, 0) != 0)
01157         {
01158                 free_request(&request);
01159                 return -1;
01160         }
01161 
01162         free_request(&request);
01163 
01164         return 0;
01165 }

int dazukoRemoveTrusted const char *  token  ) 
 

Definition at line 1167 of file dazukoio_core.c.

References dazukoRemoveTrusted_TS().

01168 {
01169         return dazukoRemoveTrusted_TS(_GLOBAL_DAZUKO, token);
01170 }

int dazukoRemoveTrusted_TS dazuko_id_t dazuko_id,
const char *  token
 

Definition at line 1172 of file dazukoio_core.c.

References _GLOBAL_DAZUKO_COMPAT1, alloc_request(), dazuko_request::buffer, dazuko_request::buffer_size, free_request(), dazuko_id::id, ITOA_SIZE, NULL, process_request(), REMOVE_TRUSTED, and xp_verify_id().

Referenced by dazukoRemoveTrusted().

01173 {
01174         struct dazuko_request   *request;
01175         size_t                  size;
01176         char                    buffer[ITOA_SIZE];
01177 
01178         if (dazuko_id == NULL || token == NULL)
01179                 return -1;
01180 
01181 #if !defined(NO_COMPAT1)
01182         if (_GLOBAL_DAZUKO_COMPAT1)
01183                 return -1;
01184 #endif
01185 
01186         if (dazuko_id->id < 0)
01187                 return -1;
01188 
01189         if (xp_verify_id(dazuko_id) != 0)
01190                 return -1;
01191 
01192         size = 1 + 2 + 1 + ITOA_SIZE /* \nID=id */
01193                 + 1 + 2 + 1 + strlen(token) /* \nTT=token */
01194                 + 1 /* \0 */
01195                 ;
01196 
01197         request = alloc_request(REMOVE_TRUSTED, size, 0);
01198         if (request == NULL)
01199                 return -1;
01200 
01201         snprintf(request->buffer, size, "\nID=%d\nTT=%s", dazuko_id->id, token);
01202         request->buffer[size - 1] = 0;
01203         request->buffer_size = strlen(request->buffer) + 1;
01204 
01205         if (process_request(dazuko_id, buffer, sizeof(buffer), request, 0) != 0)
01206         {
01207                 free_request(&request);
01208                 return -1;
01209         }
01210 
01211         free_request(&request);
01212 
01213         return 0;
01214 }

int dazukoReturnAccess struct dazuko_access **  acc  ) 
 

Definition at line 928 of file dazukoio_core.c.

References dazukoReturnAccess_TS().

00929 {
00930         return dazukoReturnAccess_TS(_GLOBAL_DAZUKO, acc);
00931 }

int dazukoReturnAccess_TS dazuko_id_t dazuko_id,
struct dazuko_access **  acc
 

Definition at line 933 of file dazukoio_core.c.

References _GLOBAL_DAZUKO_COMPAT1, alloc_request(), dazuko_request::buffer, dazuko_request::buffer_size, dazukoReturnAccess_TS_compat1_wrapper(), free_request(), ITOA_SIZE, NULL, process_request(), RETURN_AN_ACCESS, and xp_verify_id().

Referenced by dazukoReturnAccess().

00934 {
00935         struct dazuko_request   *request;
00936         size_t                  size;
00937         char                    buffer[ITOA_SIZE];
00938 
00939         if (dazuko_id == NULL)
00940                 return -1;
00941 
00942 #if !defined(NO_COMPAT1)
00943         if (_GLOBAL_DAZUKO_COMPAT1)
00944                 return dazukoReturnAccess_TS_compat1_wrapper(dazuko_id, acc, dazuko_id->write_mode, 1);
00945 #endif
00946 
00947         if (dazuko_id->id < 0)
00948                 return -1;
00949 
00950         if (xp_verify_id(dazuko_id) != 0)
00951                 return -1;
00952 
00953         if (acc == NULL)
00954                 return -1;
00955 
00956         if (*acc == NULL)
00957                 return -1;
00958 
00959         if (dazuko_id->write_mode)
00960         {
00961                 size = 1 + 2 + 1 + ITOA_SIZE /* \nID=id */
00962                         + 1 + 2 + 1 + ITOA_SIZE /* \nDN=deny */
00963                         + 1 /* \0 */
00964                         ;
00965 
00966                 request = alloc_request(RETURN_AN_ACCESS, size, 0);
00967                 if (request == NULL)
00968                         return -1;
00969 
00970                 snprintf(request->buffer, size, "\nID=%d\nDN=%d", dazuko_id->id, (*acc)->deny == 0 ? 0 : 1);
00971                 request->buffer[size - 1] = 0;
00972                 request->buffer_size = strlen(request->buffer) + 1;
00973 
00974                 if (process_request(dazuko_id, buffer, sizeof(buffer), request, 0) != 0)
00975                 {
00976                         /* there could be big problems if this happens */
00977 
00978                         if ((*acc)->filename != NULL)
00979                                 free((*acc)->filename);
00980                         free(*acc);
00981                         *acc = NULL;
00982                         free_request(&request);
00983                         return -1;
00984                 }
00985 
00986                 free_request(&request);
00987         }
00988 
00989         if ((*acc)->filename != NULL)
00990                 free((*acc)->filename);
00991         free(*acc);
00992         *acc = NULL;
00993 
00994         return 0;
00995 }

int dazukoSetAccessMask unsigned long  accessMask  ) 
 

Definition at line 595 of file dazukoio_core.c.

References dazukoSetAccessMask_TS().

00596 {
00597         return dazukoSetAccessMask_TS(_GLOBAL_DAZUKO, accessMask);
00598 }

int dazukoSetAccessMask_TS dazuko_id_t dazuko_id,
unsigned long  accessMask
 

Definition at line 600 of file dazukoio_core.c.

References _GLOBAL_DAZUKO_COMPAT1, alloc_request(), dazuko_request::buffer, dazuko_request::buffer_size, dazukoSetAccessMask_TS_compat1(), free_request(), ITOA_SIZE, NULL, process_request(), SET_ACCESS_MASK, and xp_verify_id().

Referenced by dazukoSetAccessMask().

00601 {
00602         struct dazuko_request   *request;
00603         size_t                  size;
00604         char                    buffer[ITOA_SIZE];
00605 
00606         if (dazuko_id == NULL)
00607                 return -1;
00608 
00609 #if !defined(NO_COMPAT1)
00610         if (_GLOBAL_DAZUKO_COMPAT1)
00611                 return dazukoSetAccessMask_TS_compat1(dazuko_id, accessMask);
00612 #endif
00613 
00614         if (dazuko_id->id < 0)
00615                 return -1;
00616 
00617         if (xp_verify_id(dazuko_id) != 0)
00618                 return -1;
00619 
00620         size = 1 + 2 + 1 + ITOA_SIZE /* \nID=id */
00621                 + 1 + 2 + 1 + ITOA_SIZE /* \nAM=accessMask */
00622                 + 1 /* \0 */
00623                 ;
00624 
00625         request = alloc_request(SET_ACCESS_MASK, size, 0);
00626         if (request == NULL)
00627                 return -1;
00628 
00629         snprintf(request->buffer, size, "\nID=%d\nAM=%lu", dazuko_id->id, accessMask);
00630         request->buffer[size - 1] = 0;
00631         request->buffer_size = strlen(request->buffer) + 1;
00632 
00633         if (process_request(dazuko_id, buffer, sizeof(buffer), request, 0) != 0)
00634         {
00635                 free_request(&request);
00636                 return -1;
00637         }
00638 
00639         free_request(&request);
00640 
00641         return 0;
00642 }

int dazukoUnregister void   ) 
 

Definition at line 997 of file dazukoio_core.c.

References dazukoUnregister_TS().

00998 {
00999         return dazukoUnregister_TS(&_GLOBAL_DAZUKO);
01000 }

int dazukoUnregister_TS dazuko_id_t **  dazuko_id  ) 
 

Definition at line 1002 of file dazukoio_core.c.

References _GLOBAL_DAZUKO_COMPAT1, alloc_request(), dazuko_request::buffer, dazuko_request::buffer_size, dazukoUnregister_TS_compat1_wrapper(), free_request(), ITOA_SIZE, NULL, process_request(), UNREGISTER, xp_connection_close(), and xp_verify_id().

Referenced by dazukoUnregister().

01003 {
01004         struct dazuko_request   *request;
01005         size_t                  size;
01006         char                    buffer[ITOA_SIZE];
01007         int                     error = 0;
01008 
01009         if (dazuko_id == NULL)
01010                 return -1;
01011 
01012 #if !defined(NO_COMPAT1)
01013         if (_GLOBAL_DAZUKO_COMPAT1)
01014                 return dazukoUnregister_TS_compat1_wrapper(dazuko_id);
01015 #endif
01016 
01017         if (*dazuko_id == NULL)
01018                 return -1;
01019 
01020         if (xp_verify_id(*dazuko_id) == 0)
01021         {
01022                 size = 1 + 2 + 1 + ITOA_SIZE /* \nID=id */
01023                         + 1 /* \0 */
01024                         ;
01025 
01026                 request = alloc_request(UNREGISTER, size, 0);
01027                 if (request == NULL)
01028                         return -1;
01029 
01030                 snprintf(request->buffer, size, "\nID=%d", (*dazuko_id)->id);
01031                 request->buffer[size - 1] = 0;
01032                 request->buffer_size = strlen(request->buffer) + 1;
01033 
01034                 if (process_request(*dazuko_id, buffer, sizeof(buffer), request, 0) != 0)
01035                 {
01036                         /* there could be big problems if this happens */
01037 
01038                         error = -1;
01039                 }
01040 
01041                 free_request(&request);
01042         }
01043 
01044         xp_connection_close(*dazuko_id);
01045         free(*dazuko_id);
01046         *dazuko_id = NULL;
01047 
01048         return error;
01049 }

int dazukoVersion struct dazuko_version *  version  ) 
 

Definition at line 227 of file dazukoio_core.c.

References _DAZUKO_VERSION, _SET_DAZUKO_VERSION, and NULL.

00228 {
00229         if (version == NULL)
00230                 return -1;
00231 
00232         if (!_SET_DAZUKO_VERSION)
00233                 return -1;
00234 
00235         memcpy(version, &_DAZUKO_VERSION, sizeof(struct dazuko_version));
00236 
00237         return 0;
00238 }

static void free_request struct dazuko_request **  request_ref  )  [static]
 

Definition at line 204 of file dazukoio_core.c.

References dazuko_request::buffer, NULL, and dazuko_request::reply_buffer.

Referenced by dazuko_set_path(), dazukoGetAccess_TS(), dazukoInitializeCache_TS(), dazukoRegister_TS_inner(), dazukoRemoveAllPaths_TS(), dazukoRemoveAllTrusted_TS(), dazukoRemoveTrusted_TS(), dazukoReturnAccess_TS(), dazukoSetAccessMask_TS(), and dazukoUnregister_TS().

00205 {
00206         struct dazuko_request   *request;
00207 
00208         if (request_ref == NULL)
00209                 return;
00210 
00211         request = *request_ref;
00212 
00213         if (request == NULL)
00214                 return;
00215 
00216         if (request->buffer != NULL)
00217                 free(request->buffer);
00218 
00219         if (request->reply_buffer != NULL)
00220                 free(request->reply_buffer);
00221 
00222         free(request);
00223 
00224         *request_ref = NULL;
00225 }

static int process_request struct dazuko_id id,
char *  buffer,
size_t  buffer_size,
struct dazuko_request request,
int  reply_required
[static]
 

Definition at line 263 of file dazukoio_core.c.

References _GLOBAL_WITH_DEVWRITE, _GLOBAL_WITH_REQSTREAM, dazuko_reqstream_dim_chunk0(), dazuko_reqstream_hl2ll(), dazuko_reqstream_ll2hl(), NULL, and xp_process_request().

Referenced by dazuko_set_path(), dazukoGetAccess_TS(), dazukoInitializeCache_TS(), dazukoRegister_TS_inner(), dazukoRemoveAllPaths_TS(), dazukoRemoveAllTrusted_TS(), dazukoRemoveTrusted_TS(), dazukoReturnAccess_TS(), dazukoSetAccessMask_TS(), and dazukoUnregister_TS().

00264 {
00265         unsigned char   *llreq = NULL;
00266         int             error = 0;
00267         size_t          size;
00268 
00269         if (_GLOBAL_WITH_REQSTREAM)
00270         {
00271                 /* we add an extra 4 bytes as "size of chunk 1" */
00272                 size = dazuko_reqstream_dim_chunk0(sizeof(char), sizeof(int), sizeof(void *)) + 4;
00273 
00274                 llreq = (unsigned char *)malloc(size);
00275                 if (llreq == NULL)
00276                         return -1;
00277 
00278                 /* this is especially important for the last 4 bytes */
00279                 memset(llreq, 0, size);
00280 
00281                 if (dazuko_reqstream_hl2ll(request, llreq) != 0)
00282                 {
00283                         free(llreq);
00284                         return -1;
00285                 }
00286                 snprintf(buffer, buffer_size, "\nra=%lu", (unsigned long)llreq);
00287         }
00288         else if (_GLOBAL_WITH_DEVWRITE)
00289         {
00290                 snprintf(buffer, buffer_size, "\nRA=%lu", (unsigned long)request);
00291         }
00292         else
00293         {
00294                 /* why are we here? */
00295 
00296                 return -1;
00297         }
00298 
00299         buffer[buffer_size - 1] = 0;
00300 
00301         error = xp_process_request(id, buffer, strlen(buffer) + 1);
00302 
00303         if (reply_required && !error && _GLOBAL_WITH_REQSTREAM)
00304         {
00305                 if (dazuko_reqstream_ll2hl(llreq, request, 1) != 0)
00306                 {
00307                         /* this could be dangerous if it happens */
00308                         error = -1;
00309                 }
00310         }
00311 
00312         if (llreq != NULL)
00313                 free(llreq);
00314 
00315         return error;
00316 }

static void unescape_string char *  string  )  [static]
 

Definition at line 100 of file dazukoio_core.c.

References char_to_hex().

Referenced by dazukoGetAccess_TS().

00101 {
00102         char    *p;
00103 
00104         for (p=string ; *p ; p++)
00105         {
00106                 /* check if we have \x */
00107                 if ((*p == '\\') && (*(p+1) == 'x'))
00108                 {
00109                         /* this is not cheap, but it should not occur often */
00110 
00111                         /* check if we have two more values following \x */
00112                         if (*(p+2) && *(p+3))
00113                         {
00114                                 *p = char_to_hex(*(p+2));
00115                                 *p <<= 4;
00116                                 *p |= char_to_hex(*(p+3));
00117 
00118                                 memmove(p + 1, p + 4, strlen(p+4) + 1);
00119                         }
00120                 }
00121         }
00122 }


Variable Documentation

struct dazuko_version _DAZUKO_VERSION [static]
 

Definition at line 71 of file dazukoio_core.c.

Referenced by dazukoVersion().

dazuko_id_t* _GLOBAL_DAZUKO = NULL
 

Definition at line 61 of file dazukoio_core.c.

int _GLOBAL_DAZUKO_COMPAT1 = 0 [static]
 

Definition at line 64 of file dazukoio_core.c.

Referenced by dazukoAddExcludePath_TS(), dazukoAddIncludePath_TS(), dazukoGetAccess_TS(), dazukoInitializeCache_TS(), dazukoRegister_TS(), dazukoRegister_TS_inner(), dazukoRemoveAllPaths_TS(), dazukoRemoveAllTrusted_TS(), dazukoRemoveTrusted_TS(), dazukoReturnAccess_TS(), dazukoSetAccessMask_TS(), and dazukoUnregister_TS().

int _GLOBAL_WITH_DEVWRITE = 0 [static]
 

Definition at line 68 of file dazukoio_core.c.

Referenced by dazukoRegister_TS(), dazukoRegister_TS_inner(), and process_request().

int _GLOBAL_WITH_REQSTREAM = 0 [static]
 

Definition at line 67 of file dazukoio_core.c.

Referenced by dazukoRegister_TS(), dazukoRegister_TS_inner(), and process_request().

int _SET_DAZUKO_VERSION = 0 [static]
 

Definition at line 70 of file dazukoio_core.c.

Referenced by dazukoVersion().

const char* DAZUKO_VERSION_STAMP = "\nDazukoVersion=" DAZUKO_VERSION_MAJOR "." DAZUKO_VERSION_MINOR "." DAZUKO_VERSION_REVISION "." DAZUKO_VERSION_RELEASE "\n"
 

Definition at line 48 of file dazukoio_core.c.

const char* VERSION_STRING
 

Initial value:

Definition at line 51 of file dazukoio_core.c.


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