* Exim - an Internet mail transport agent *
*************************************************/
-/* Copyright (c) The Exim Maintainers 2020 - 2022 */
+/* Copyright (c) The Exim Maintainers 2020 - 2024 */
/* Copyright (c) University of Cambridge 1995 - 2018 */
/* See the file NOTICE for conditions of use and distribution. */
/* SPDX-License-Identifier: GPL-2.0-or-later */
BOOL split_spool_directory;
-/* These introduced by the taintwarn handling */
-rmark
-store_mark_3(const char *func, int linenumber)
-{ return NULL; }
-#ifdef ALLOW_INSECURE_TAINTED_DATA
-BOOL allow_insecure_tainted_data;
-#endif
-
/******************************************************************************/
const uschar *hex_digits = CUS"0123456789abcdef";
+/*******************
+* Debug output *
+*******************/
+
+unsigned int debug_selector = 0; /* set -1 for debugging */
+
+void
+debug_printf(const char * fmt, ...)
+{
+va_list ap;
+va_start(ap, fmt); vfprintf(stderr, fmt, ap); va_end(ap);
+}
+void
+debug_printf_indent(const char * fmt, ...)
+{
+va_list ap;
+va_start(ap, fmt); vfprintf(stderr, fmt, ap); va_end(ap);
+}
+
+
+
#ifdef STRERROR_FROM_ERRLIST
/* Some old-fashioned systems still around (e.g. SunOS4) don't have strerror()
in their libraries, but can provide the same facility by this simple
BOOL warn = TRUE;
BOOL duperr = TRUE;
BOOL lastdup = FALSE;
-#if !defined (USE_DB) && !defined(USE_TDB) && !defined(USE_GDBM)
+#if !defined (USE_DB) && !defined(USE_TDB) && !defined(USE_GDBM) && !defined(USE_SQLITE)
int is_db = 0;
struct stat statbuf;
#endif
if (argc != 3)
{
printf("usage: exim_dbmbuild [-nolc] <source file> <dbm base name>\n");
- exit(1);
+ exit(EXIT_FAILURE);
}
if (Ustrcmp(argv[arg], "-") == 0)
else if (!(f = fopen(argv[arg], "rb")))
{
printf("exim_dbmbuild: unable to open %s: %s\n", argv[arg], strerror(errno));
- exit(1);
+ exit(EXIT_FAILURE);
}
/* By default Berkeley db does not put extensions on... which
can be painful! */
-#if defined(USE_DB) || defined(USE_TDB) || defined(USE_GDBM)
+#if defined(USE_DB) || defined(USE_TDB) || defined(USE_GDBM) && !defined(USE_SQLITE)
if (Ustrcmp(argv[arg], argv[arg+1]) == 0)
{
printf("exim_dbmbuild: input and output filenames are the same\n");
- exit(1);
+ exit(EXIT_FAILURE);
}
#endif
if (strlen(argv[arg+1]) > sizeof(temp_dbmname) - 20)
{
printf("exim_dbmbuild: output filename is ridiculously long\n");
- exit(1);
+ exit(EXIT_FAILURE);
}
Ustrcpy(temp_dbmname, US argv[arg+1]);
printf("exim_dbmbuild: unable to create %s: %s\n", temp_dbmname,
strerror(errno));
(void)fclose(f);
- exit(1);
+ exit(EXIT_FAILURE);
}
/* Unless using native db calls, see if we have created <name>.db; if not,
assume .dir & .pag */
-#if !defined(USE_DB) && !defined(USE_TDB) && !defined(USE_GDBM)
+#if !defined(USE_DB) && !defined(USE_TDB) && !defined(USE_GDBM) && !defined(USE_SQLITE)
sprintf(CS real_dbmname, "%s.db", temp_dbmname);
is_db = Ustat(real_dbmname, &statbuf) == 0;
#endif
exim_datum_data_set(&content, buffer);
exim_datum_size_set(&content, bptr - buffer + add_zero);
- switch(rc = exim_dbputb(d, &key, &content))
+ rc = exim_dbputb(d, &key, &content);
+ switch(rc)
{
case EXIM_DBPUTB_OK:
count++;
else
{
keystart = s;
- while (*s != 0 && *s != ':' && !isspace(*s)) s++;
+ while (*s && *s != ':' && !isspace(*s)) s++;
exim_datum_size_set(&key, s - keystart + add_zero);
}
keybuffer[i] = 0;
started = 1;
- while (isspace(*s))s++;
+ while (isspace(*s)) s++;
if (*s == ':')
{
s++;
- while (isspace(*s))s++;
+ while (isspace(*s)) s++;
}
if (*s != 0)
{
exim_datum_data_set(&content, buffer);
exim_datum_size_set(&content, bptr - buffer + add_zero);
- switch(rc = exim_dbputb(d, &key, &content))
+ rc = exim_dbputb(d, &key, &content);
+ switch(rc)
{
case EXIM_DBPUTB_OK:
count++;
printf("%d duplicate key%s \n", dupcount, (dupcount > 1)? "s" : "");
}
- #if defined(USE_DB) || defined(USE_TDB) || defined(USE_GDBM)
+#if defined(USE_DB) || defined(USE_TDB) || defined(USE_GDBM) || defined(USE_SQLITE)
Ustrcpy(real_dbmname, temp_dbmname);
Ustrcpy(buffer, US argv[arg+1]);
if (Urename(real_dbmname, buffer) != 0)
printf("Unable to rename %s as %s\n", real_dbmname, buffer);
return 1;
}
- #else
+#else
/* Rename a single .db file */
}
}
- #endif /* USE_DB || USE_TDB || USE_GDBM */
+#endif /* USE_DB || USE_TDB || USE_GDBM || USE_SQLITE */
}
/* Otherwise unlink the temporary files. */
else
{
printf("dbmbuild abandoned\n");
-#if defined(USE_DB) || defined(USE_TDB) || defined(USE_GDBM)
+#if defined(USE_DB) || defined(USE_TDB) || defined(USE_GDBM) || defined(USE_SQLITE)
/* We created it, so safe to delete despite the name coming from outside */
/* coverity[tainted_string] */
Uunlink(temp_dbmname);
sprintf(CS real_dbmname, "%s.pag", temp_dbmname);
Uunlink(real_dbmname);
}
-#endif /* USE_DB || USE_TDB */
+#endif /* USE_DB || USE_TDB || USE_GDBM || USE_SQLITE */
}
return yield;
}
/* End of exim_dbmbuild.c */
+/* se aw ai sw=2
+*/