1 #ifndef __SHAREDANCED_H__ 2 #define __SHAREDANCED_H__ 1 3 4 #ifndef __GNUC__ 5 # ifdef __attribute__ 6 # undef __attribute__ 7 # endif 8 # define __attribute__(a) 9 #endif 10 11 #include <stdio.h> 12 #ifdef STDC_HEADERS 13 # include <stdlib.h> 14 # include <stddef.h> 15 # include <stdarg.h> 16 #else 17 # if HAVE_STDLIB_H 18 # include <stdlib.h> 19 # endif 20 #endif 21 #ifdef HAVE_STRING_H 22 # if !STDC_HEADERS && HAVE_MEMORY_H 23 # include <memory.h> 24 # endif 25 # include <string.h> 26 #else 27 # if HAVE_STRINGS_H 28 # include <strings.h> 29 # endif 30 #endif 31 #include <limits.h> 32 #include <errno.h> 33 #include <ctype.h> 34 #include <signal.h> 35 #ifdef HAVE_UNISTD_H 36 # include <unistd.h> 37 #endif 38 #ifdef TIME_WITH_SYS_TIME 39 # include <sys/time.h> 40 # include <time.h> 41 #else 42 # if HAVE_SYS_TIME_H 43 # include <sys/time.h> 44 # else 45 # include <time.h> 46 # endif 47 #endif 48 #include <syslog.h> 49 #ifndef MAX_SYSLOG_LINE 50 # define MAX_SYSLOG_LINE 4096U 51 #endif 52 53 #include <sys/types.h> 54 #include <sys/stat.h> 55 #ifdef HAVE_FCNTL_H 56 # include <fcntl.h> 57 #elif defined(HAVE_SYS_FCNTL_H) 58 # include <sys/fcntl.h> 59 #endif 60 #ifdef HAVE_IOCTL_H 61 # include <ioctl.h> 62 #elif defined(HAVE_SYS_IOCTL_H) 63 # include <sys/ioctl.h> 64 #endif 65 #include <sys/socket.h> 66 #ifdef HAVE_NETINET_IN_SYSTM_H 67 # include <netinet/in_systm.h> 68 #endif 69 #include <netinet/in.h> 70 #include <netinet/ip.h> 71 #include <netinet/tcp.h> 72 #include <sys/mman.h> 73 #include <pwd.h> 74 #include <grp.h> 75 #include <arpa/inet.h> 76 #include <netdb.h> 77 #include <event.h> 78 79 #ifndef HAVE_GETOPT_LONG 80 # include "bsd-getopt_long.h" 81 #else 82 # include <getopt.h> 83 #endif 84 85 #ifdef HAVE_ALLOCA 86 # ifdef HAVE_ALLOCA_H 87 # include <alloca.h> 88 # endif 89 # define ALLOCA(X) alloca(X) 90 # define ALLOCA_FREE(X) do { } while (0) 91 #else 92 # define ALLOCA(X) malloc(X) 93 # define ALLOCA_FREE(X) free(X) 94 #endif 95 96 #include "gettext.h" 97 #define _(txt) gettext(txt) 98 #define N_(txt) txt 99 100 #include "mysnprintf.h" 101 102 #ifndef errno 103 extern int errno; 104 #endif 105 106 #ifdef TCP_CORK 107 # define CORK_ON(SK) do { int optval = 1; setsockopt(SK, SOL_TCP, TCP_CORK, \ 108 &optval, sizeof optval); } while(0) 109 # define CORK_OFF(SK) do { int optval = 0; setsockopt(SK, SOL_TCP, TCP_CORK, \ 110 &optval, sizeof optval); } while(0) 111 #else 112 # define CORK_ON(SK) do { } while(0) 113 # define CORK_OFF(SK) do { } while(0) 114 #endif 115 116 #ifndef O_NOFOLLOW 117 # define O_NOFOLLOW 0 118 #endif 119 120 #ifndef O_DIRECTORY 121 # define O_DIRECTORY 0 122 #endif 123 124 #ifndef SOL_IP 125 # define SOL_IP IPPROTO_IP 126 #endif 127 #ifndef SOL_TCP 128 # define SOL_TCP IPPROTO_TCP 129 #endif 130 131 #ifndef INADDR_NONE 132 # define INADDR_NONE 0 133 #endif 134 135 #if !defined(O_NDELAY) && defined(O_NONBLOCK) 136 # define O_NDELAY O_NONBLOCK 137 #endif 138 139 #ifndef FNDELAY 140 # define FNDELAY O_NDELAY 141 #endif 142 143 #ifndef HAVE_STRTOULL 144 # ifdef HAVE_STRTOQ 145 # define strtoull(X, Y, Z) strtoq(X, Y, Z) 146 # else 147 # define strtoull(X, Y, Z) strtoul(X, Y, Z) 148 # endif 149 #endif 150 151 #ifndef ULONG_LONG_MAX 152 # define ULONG_LONG_MAX (1ULL << 63) 153 #endif 154 155 #ifdef HAVE_DIRENT_H 156 # include <dirent.h> 157 #endif 158 #ifdef HAVE_SYS_NDIR_H 159 # include <sys/ndir.h> 160 #endif 161 #ifdef HAVE_NDIR_H 162 # include <ndir.h> 163 #endif 164 165 #ifdef STAT_MACROS_BROKEN 166 # undef S_ISBLK 167 # undef S_ISCHR 168 # undef S_ISDIR 169 # undef S_ISFIFO 170 # undef S_ISLNK 171 # undef S_ISMPB 172 # undef S_ISMPC 173 # undef S_ISNWK 174 # undef S_ISREG 175 # undef S_ISSOCK 176 #endif /* STAT_MACROS_BROKEN. */ 177 178 #ifndef S_IFMT 179 # define S_IFMT 0170000 180 #endif 181 #if !defined(S_ISBLK) && defined(S_IFBLK) 182 # define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK) 183 #endif 184 #if !defined(S_ISCHR) && defined(S_IFCHR) 185 # define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR) 186 #endif 187 #if !defined(S_ISDIR) && defined(S_IFDIR) 188 # define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) 189 #endif 190 #if !defined(S_ISREG) && defined(S_IFREG) 191 # define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) 192 #endif 193 #if !defined(S_ISFIFO) && defined(S_IFIFO) 194 # define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO) 195 #endif 196 #if !defined(S_ISLNK) && defined(S_IFLNK) 197 # define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK) 198 #endif 199 #if !defined(S_ISSOCK) && defined(S_IFSOCK) 200 # define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK) 201 #endif 202 #if !defined(S_ISMPB) && defined(S_IFMPB) /* V7 */ 203 # define S_ISMPB(m) (((m) & S_IFMT) == S_IFMPB) 204 # define S_ISMPC(m) (((m) & S_IFMT) == S_IFMPC) 205 #endif 206 #if !defined(S_ISNWK) && defined(S_IFNWK) /* HP/UX */ 207 # define S_ISNWK(m) (((m) & S_IFMT) == S_IFNWK) 208 #endif 209 210 #ifndef S_IEXEC 211 # define S_IEXEC S_IXUSR 212 #endif 213 214 #ifndef S_IXUSR 215 # define S_IXUSR S_IEXEC 216 #endif 217 #ifndef S_IXGRP 218 # define S_IXGRP (S_IEXEC >> 3) 219 #endif 220 #ifndef S_IXOTH 221 # define S_IXOTH (S_IEXEC >> 6) 222 #endif 223 #ifndef S_IXUGO 224 # define S_IXUGO (S_IXUSR | S_IXGRP | S_IXOTH) 225 #endif 226 227 #ifndef STDIN_FILENO 228 # define STDIN_FILENO 0 229 #endif 230 #ifndef STDOUT_FILENO 231 # define STDOUT_FILENO 1 232 #endif 233 #ifndef STDERR_FILENO 234 # define STDERR_FILENO 2 235 #endif 236 237 #ifndef HAVE_SETEUID 238 # ifdef HAVE_SETREUID 239 # define seteuid(X) setreuid(-1, (X)) 240 # elif defined(HAVE_SETRESUID) 241 # define seteuid(X) setresuid(-1, (X), -1) 242 # else 243 # define seteuid(X) (-1) 244 # endif 245 #endif 246 #ifndef HAVE_SETEGID 247 # ifdef HAVE_SETREGID 248 # define setegid(X) setregid(-1, (X)) 249 # elif defined(HAVE_SETRESGID) 250 # define setegid(X) setresgid(-1, (X), -1) 251 # else 252 # define setegid(X) (-1) 253 # endif 254 #endif 255 256 #define DEFAULT_PORT_S "1042" 257 #define DEFAULT_FACILITY LOG_DAEMON 258 #define DEFAULT_BACKLOG 100 259 #define DEFAULT_STORAGE_DIR "/tmp/sharedance" 260 #define DEFAULT_READ_CHUNK_SIZE 4096U 261 #define DEFAULT_MAX_READ_SIZE (32U * 1024U * 1024U) 262 #define DEFAULT_TIMEOUT 60 263 #define DEFAULT_EXPIRATION (30 * 60) 264 265 #define EXPIRE_PAUSE 60 266 #define EXPIRE_NICENESS 15 267 268 #define RETURNCODE_OK "OK\n" 269 270 #define STOREFILE_TMP_PREFIX "." 271 272 typedef enum ClientCommand_ { 273 CC_UNDEF = 0, 274 CC_STORE = 'S', 275 CC_FETCH = 'F', 276 CC_DELETE = 'D' 277 } ClientCommand; 278 279 typedef struct Client_ { 280 unsigned char *read_buf; 281 size_t sizeof_read_buf; 282 size_t offset_read_buf; 283 struct event ev_client_read; 284 int client_fd; 285 ClientCommand client_command; 286 size_t key_len; 287 size_t data_len; 288 size_t total_len; 289 int write_fd; 290 int read_fd; 291 unsigned char *read_mapped_zone; 292 size_t read_mapped_zone_length; 293 struct bufferevent *returncode_bufev; 294 } Client; 295 296 #include "globals.h" 297 298 #endif 299