Prevent hardlink attack on mbox sticky mail directory. fixes: bug #988
[exim.git] / src / src / dummies.c
1 /* $Cambridge: exim/src/src/dummies.c,v 1.5 2009/11/16 19:50:36 nm4 Exp $ */
2
3 /*************************************************
4 *     Exim - an Internet mail transport agent    *
5 *************************************************/
6
7 /* Copyright (c) University of Cambridge 1995 - 2009 */
8 /* See the file NOTICE for conditions of use and distribution. */
9
10 /* This file is not part of the main Exim code. There are little bits of test
11 code for some of Exim's modules, and when they are used, the module they are
12 testing may call other main Exim functions that are not available and/or
13 should not be used in a test. The classic case is log_write(). This module
14 contains dummy versions of such functions - well not really dummies, more like
15 alternates. */
16
17 #include <stdarg.h>
18 #include <stdio.h>
19 #include <errno.h>
20 #include <string.h>
21
22 /* We don't have the full Exim headers dragged in, but this function
23 is used for debugging output. */
24
25 extern int  string_vformat(char *, int, char *, va_list);
26
27
28 /*************************************************
29 *         Handle calls to write the log          *
30 *************************************************/
31
32 /* The message gets written to stderr when log_write() is called from a
33 utility. The message always gets '\n' added on the end of it.
34
35 Arguments:
36   selector  not relevant when running a utility
37   flags     not relevant when running a utility
38   format    a printf() format
39   ...       arguments for format
40
41 Returns:    nothing
42 */
43
44 void
45 log_write(unsigned int selector, int flags, char *format, ...)
46 {
47 va_list ap;
48 va_start(ap, format);
49 vfprintf(stderr, format, ap);
50 fprintf(stderr, "\n");
51 va_end(ap);
52 selector = selector;     /* Keep picky compilers happy */
53 flags = flags;
54 }
55
56
57 /*************************************************
58 *      Handle calls to print debug output        *
59 *************************************************/
60
61 /* The message just gets written to stderr
62
63 Arguments:
64   format    a printf() format
65   ...       arguments for format
66
67 Returns:    nothing
68 */
69
70 void
71 debug_printf(char *format, ...)
72 {
73 va_list ap;
74 char buffer[1024];
75
76 va_start(ap, format);
77
78 if (!string_vformat(buffer, sizeof(buffer), format, ap))
79   {
80   char *s = "**** debug string overflowed buffer ****\n";
81   char *p = buffer + (int)strlen(buffer);
82   int maxlen = sizeof(buffer) - (int)strlen(s) - 3;
83   if (p > buffer + maxlen) p = buffer + maxlen;
84   if (p > buffer && p[-1] != '\n') *p++ = '\n';
85   strcpy(p, s);
86   }
87
88 fprintf(stderr, "%s", buffer);
89 fflush(stderr);
90 va_end(ap);
91 }
92
93
94
95 /*************************************************
96 *              SIGALRM handler                   *
97 *************************************************/
98
99 extern int sigalrm_seen;
100
101 void
102 sigalrm_handler(int sig)
103 {
104 sig = sig;            /* Keep picky compilers happy */
105 sigalrm_seen = 1;
106 }
107
108
109
110 /*************************************************
111 *              Complete Dummies                  *
112 *************************************************/
113
114 int
115 header_checkname(void *h, char *name, int len)
116 {
117 h = h;            /* Keep picky compilers happy */
118 name = name;
119 len = len;
120 return 0;
121 }
122
123 void
124 directory_make(char *parent, char *name, int mode, int panic)
125 {
126 parent = parent;  /* Keep picky compilers happy */
127 name = name;
128 mode = mode;
129 panic = panic;
130 }
131
132 void
133 host_build_sender_fullhost(void) { }
134
135 /* This one isn't needed for test_host */
136
137 #ifndef TEST_HOST
138 char *
139 host_ntoa(int type, const void *arg, char *buffer, int *portptr)
140 {
141 type = type;      /* Keep picky compilers happy */
142 arg = arg;
143 buffer = buffer;
144 portptr = portptr;
145 return NULL;
146 }
147 #endif
148
149
150 /* End of dummies.c */