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