00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035 #ifndef DAZUKO_XP_H
00036 #define DAZUKO_XP_H
00037
00038 #include "dazuko_transport.h"
00039 #include "dazuko_events.h"
00040
00041
00042 #define DAZUKO_DIFFERENT 0
00043 #define DAZUKO_SUSPICIOUS 1
00044 #define DAZUKO_CHILD 2
00045 #define DAZUKO_SAME 3
00046
00047
00048 #define DAZUKO_NONE 0
00049 #define DAZUKO_REGULAR 1
00050 #define DAZUKO_DIRECTORY 2
00051 #define DAZUKO_LINK 3
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072 struct event_properties
00073 {
00074 int flags;
00075 char set_flags;
00076 int mode;
00077 char set_mode;
00078 int uid;
00079 char set_uid;
00080 int pid;
00081 char set_pid;
00082 };
00083
00084 struct file_properties
00085 {
00086 unsigned long size;
00087 char set_size;
00088 int uid;
00089 char set_uid;
00090 int gid;
00091 char set_gid;
00092 int mode;
00093 char set_mode;
00094 int device_type;
00095 char set_device_type;
00096 int type;
00097 char set_type;
00098 };
00099
00100 struct dazuko_file_listnode
00101 {
00102 char *filename;
00103 int filename_length;
00104 struct dazuko_file_listnode *next;
00105 };
00106
00107 struct dazuko_file_struct
00108 {
00109
00110
00111
00112
00113 char *filename;
00114 int filename_length;
00115 struct dazuko_file_listnode *aliases;
00116 struct file_properties file_p;
00117 struct xp_file_struct *extra_data;
00118 };
00119
00120
00121
00122
00123
00124
00125
00126 void xp_init_mutex(struct xp_mutex *mutex);
00127 void xp_down(struct xp_mutex *mutex);
00128 void xp_up(struct xp_mutex *mutex);
00129 void xp_destroy_mutex(struct xp_mutex *mutex);
00130
00131
00132 void xp_init_rwlock(struct xp_rwlock *rwlock);
00133 void xp_write_lock(struct xp_rwlock *rwlock);
00134 void xp_write_unlock(struct xp_rwlock *rwlock);
00135 void xp_read_lock(struct xp_rwlock *rlock);
00136 void xp_read_unlock(struct xp_rwlock *rlock);
00137 void xp_destroy_rwlock(struct xp_rwlock *rwlock);
00138
00139
00140 int xp_init_queue(struct xp_queue *queue);
00141 int xp_wait_until_condition(struct xp_queue *queue, int (*cfunction)(void *), void *cparam, int allow_interrupt);
00142 int xp_notify(struct xp_queue *queue);
00143 int xp_destroy_queue(struct xp_queue *queue);
00144
00145
00146 void* xp_malloc(size_t size);
00147 int xp_free(void *ptr);
00148 int xp_copyin(const void *user_src, void *kernel_dest, size_t size);
00149 int xp_copyout(const void *kernel_src, void *user_dest, size_t size);
00150 int xp_verify_user_writable(const void *user_ptr, size_t size);
00151 int xp_verify_user_readable(const void *user_ptr, size_t size);
00152
00153
00154 int xp_is_absolute_path(const char *path);
00155
00156
00157 int xp_atomic_set(struct xp_atomic *atomic, int value);
00158 int xp_atomic_inc(struct xp_atomic *atomic);
00159 int xp_atomic_dec(struct xp_atomic *atomic);
00160 int xp_atomic_read(struct xp_atomic *atomic);
00161
00162
00163 int xp_sys_hook(void);
00164 int xp_sys_unhook(void);
00165
00166
00167 int xp_fill_file_struct(struct dazuko_file_struct *dfs);
00168
00169
00170 int xp_id_compare(struct xp_daemon_id *id1, struct xp_daemon_id *id2, int check_related);
00171 int xp_id_free(struct xp_daemon_id *id);
00172 struct xp_daemon_id* xp_id_copy(struct xp_daemon_id *id);
00173
00174
00175 int xp_set_event_properties(struct event_properties *event_p, struct xp_daemon_id *xp_id);
00176
00177
00178 int xp_init_cache(unsigned long ttl);
00179
00180
00181 int xp_print(const char *fmt, ...);
00182
00183
00184 #ifdef DEBUG
00185 #define DPRINT(fmt) xp_print fmt
00186 #else
00187 #define DPRINT(fmt)
00188 #endif
00189
00190
00191
00192
00193
00194
00195 struct slot_list;
00196
00197 int dazuko_vsnprintf(char *str, size_t size, const char *format, va_list ap);
00198 int dazuko_snprintf(char *str, size_t size, const char *format, ...);
00199 int dazuko_is_our_daemon(struct xp_daemon_id *xp_id, struct slot_list **slotlist);
00200 int dazuko_get_value(const char *key, const char *string, char **value);
00201 int dazuko_unregister_daemon(struct xp_daemon_id *xp_id);
00202 int dazuko_handle_user_request(const char *request_buffer, struct xp_daemon_id *xp_id);
00203 int dazuko_handle_user_request_compat1(void *ptr, int cmd, struct xp_daemon_id *xp_id);
00204 int dazuko_get_filename_length(const char *filename);
00205 void dazuko_bzero(void *p, int len);
00206 int dazuko_check_access(unsigned long event, int daemon_is_allowed, struct xp_daemon_id *xp_id, struct slot_list **cached_lookup);
00207 int dazuko_process_access(unsigned long event, struct dazuko_file_struct *kfs, struct event_properties *event_p, struct slot_list *cached_lookup);
00208 int dazuko_init(void);
00209 int dazuko_exit(void);
00210
00211 #endif