Merge branch 'router_dynamic_modules'
[exim.git] / src / src / exim_dbmbuild.c
index 43628234dd7436877281628e216d97b855633945..f8fbd2b8c5450773365889a5d650708ccd1d4171 100644 (file)
@@ -2,7 +2,7 @@
 *     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 */
@@ -76,14 +76,6 @@ uschar *             queue_name;
 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
-
 /******************************************************************************/
 
 
@@ -96,6 +88,27 @@ if it is made static. */
 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
@@ -177,7 +190,7 @@ BOOL lowercase = TRUE;
 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
@@ -207,7 +220,7 @@ while (argc > 1)
 if (argc != 3)
   {
   printf("usage: exim_dbmbuild [-nolc] <source file> <dbm base name>\n");
-  exit(1);
+  exit(EXIT_FAILURE);
   }
 
 if (Ustrcmp(argv[arg], "-") == 0)
@@ -215,17 +228,17 @@ 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
 
@@ -235,7 +248,7 @@ if (Ustrcmp(argv[arg], argv[arg+1]) == 0)
 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]);
@@ -255,13 +268,13 @@ if (!(d = exim_dbopen(temp_dbmname, dirname, O_RDWR|O_CREAT|O_EXCL, 0644)))
   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
@@ -333,7 +346,8 @@ while (Ufgets(line, max_insize, f) != NULL)
       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++;
@@ -379,7 +393,7 @@ while (Ufgets(line, max_insize, f) != NULL)
     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);
       }
 
@@ -401,11 +415,11 @@ while (Ufgets(line, max_insize, f) != NULL)
     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)
       {
@@ -423,7 +437,8 @@ if (started)
   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++;
@@ -462,7 +477,7 @@ if (yield == 0 || yield == 1)
     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)
@@ -470,7 +485,7 @@ if (yield == 0 || yield == 1)
     printf("Unable to rename %s as %s\n", real_dbmname, buffer);
     return 1;
     }
-  #else
+#else
 
   /* Rename a single .db file */
 
@@ -506,7 +521,7 @@ if (yield == 0 || yield == 1)
       }
     }
 
-  #endif /* USE_DB || USE_TDB || USE_GDBM */
+#endif /* USE_DB || USE_TDB || USE_GDBM || USE_SQLITE */
   }
 
 /* Otherwise unlink the temporary files. */
@@ -514,7 +529,7 @@ if (yield == 0 || yield == 1)
 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);
@@ -531,10 +546,12 @@ else
     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
+*/