~ubuntu-branches/ubuntu/hardy/exim4/hardy-proposed

« back to all changes in this revision

Viewing changes to src/exim_dbutil.c

  • Committer: Bazaar Package Importer
  • Author(s): Marc Haber
  • Date: 2005-07-02 06:08:34 UTC
  • mfrom: (1.1.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20050702060834-qk17pd52kb9nt3bj
Tags: 4.52-1
* new upstream version 4.51. (mh)
  * adapt 70_remove_exim-users_references
  * remove 37_gnutlsparams
  * adapt 36_pcre
  * adapt 31_eximmanpage
* fix package priorities to have them in sync with override again. (mh)
* Fix error in nb (Norwegian) translation.
  Thanks to Helge Hafting. (mh). Closes: #315775
* Standards-Version: 3.6.2, no changes needed. (mh)

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* $Cambridge: exim/exim-src/src/exim_dbutil.c,v 1.7 2005/06/27 14:29:43 ph10 Exp $ */
 
2
 
1
3
/*************************************************
2
4
*     Exim - an Internet mail transport agent    *
3
5
*************************************************/
4
6
 
5
 
/* Copyright (c) University of Cambridge 1995 - 2004 */
 
7
/* Copyright (c) University of Cambridge 1995 - 2005 */
6
8
/* See the file NOTICE for conditions of use and distribution. */
7
9
 
8
10
 
61
63
 
62
64
/* Identifiers for the different database types. */
63
65
 
64
 
#define type_retry   1
65
 
#define type_wait    2
66
 
#define type_misc    3
67
 
#define type_callout 4
 
66
#define type_retry     1
 
67
#define type_wait      2
 
68
#define type_misc      3
 
69
#define type_callout   4
 
70
#define type_ratelimit 5
68
71
 
69
72
 
70
73
 
75
78
 
76
79
/* For Berkeley DB >= 2, we can define a function to be called in case of DB
77
80
errors. This should help with debugging strange DB problems, e.g. getting "File
78
 
exists" when you try to open a db file. */
 
81
exists" when you try to open a db file. The API changed at release 4.3. */
79
82
 
80
83
#if defined(USE_DB) && defined(DB_VERSION_STRING)
81
84
void
 
85
#if DB_VERSION_MAJOR > 4 || (DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR >= 3)
 
86
dbfn_bdb_error_callback(const DB_ENV *dbenv, const char *pfx, const char *msg)
 
87
{
 
88
dbenv = dbenv;
 
89
#else
82
90
dbfn_bdb_error_callback(const char *pfx, char *msg)
83
91
{
 
92
#endif
84
93
pfx = pfx;
85
94
printf("Berkeley DB error: %s\n", msg);
86
95
}
111
120
usage(uschar *name, uschar *options)
112
121
{
113
122
printf("Usage: exim_%s%s  <spool-directory> <database-name>\n", name, options);
114
 
printf("       <database-name> = retry | misc | wait-<transport-name> | callout\n");
 
123
printf("  <database-name> = retry | misc | wait-<transport-name> | callout | ratelimit\n");
115
124
exit(1);
116
125
}
117
126
 
133
142
  if (Ustrcmp(argv[2], "misc") == 0) return type_misc;
134
143
  if (Ustrncmp(argv[2], "wait-", 5) == 0) return type_wait;
135
144
  if (Ustrcmp(argv[2], "callout") == 0) return type_callout;
 
145
  if (Ustrcmp(argv[2], "ratelimit") == 0) return type_ratelimit;
136
146
  }
137
147
usage(name, options);
138
148
return -1;              /* Never obeyed */
306
316
  printf("** Failed to get %s lock for %s: %s",
307
317
    ((flags & O_RDONLY) != 0)? "read" : "write", buffer,
308
318
    (errno == ETIMEDOUT)? "timed out" : strerror(errno));
309
 
  close(dbblock->lockfd);
 
319
  (void)close(dbblock->lockfd);
310
320
  return NULL;
311
321
  }
312
322
 
326
336
    ""
327
337
    #endif
328
338
    );
329
 
  close(dbblock->lockfd);
 
339
  (void)close(dbblock->lockfd);
330
340
  return NULL;
331
341
  }
332
342
 
351
361
dbfn_close(open_db *dbblock)
352
362
{
353
363
EXIM_DBCLOSE(dbblock->dbptr);
354
 
close(dbblock->lockfd);
 
364
(void)close(dbblock->lockfd);
355
365
}
356
366
 
357
367
 
534
544
  dbdata_retry *retry;
535
545
  dbdata_wait *wait;
536
546
  dbdata_callout_cache *callout;
 
547
  dbdata_ratelimit *ratelimit;
537
548
  int count_bad = 0;
538
549
  int i, length;
539
550
  uschar *t;
660
671
        }
661
672
 
662
673
      break;
 
674
 
 
675
      case type_ratelimit:
 
676
      ratelimit = (dbdata_ratelimit *)value;
 
677
 
 
678
      printf("%s.%06d rate: %10.3f key: %s\n",
 
679
        print_time(ratelimit->time_stamp), ratelimit->time_usec,
 
680
        ratelimit->rate, keybuffer);
 
681
 
 
682
      break;
663
683
      }
664
684
    store_reset(value);
665
685
    }
731
751
  dbdata_retry *retry;
732
752
  dbdata_wait *wait;
733
753
  dbdata_callout_cache *callout;
 
754
  dbdata_ratelimit *ratelimit;
734
755
  int i, oldlength;
735
756
  uschar *t;
736
757
  uschar field[256], value[256];
754
775
      printf("No previous record name is set\n");
755
776
      continue;
756
777
      }
757
 
    sscanf(CS buffer, "%s %s", field, value);
 
778
    (void)sscanf(CS buffer, "%s %s", field, value);
758
779
    }
759
780
  else
760
781
    {
761
782
    name[0] = 0;
762
 
    sscanf(CS buffer, "%s %s %s", name, field, value);
 
783
    (void)sscanf(CS buffer, "%s %s %s", name, field, value);
763
784
    }
764
785
 
765
786
  /* Handle an update request */
871
892
              break;
872
893
              }
873
894
            break;
 
895
 
 
896
            case type_ratelimit:
 
897
            ratelimit = (dbdata_ratelimit *)value;
 
898
            switch(fieldno)
 
899
              {
 
900
              case 0:
 
901
              if ((tt = read_time(value)) > 0) ratelimit->time_stamp = tt;
 
902
                else printf("bad time value\n");
 
903
              break;
 
904
 
 
905
              case 1:
 
906
              ratelimit->time_usec = Uatoi(value);
 
907
 
 
908
              case 2:
 
909
              ratelimit->rate = Ustrtod(value, NULL);
 
910
              break;
 
911
 
 
912
              default:
 
913
              printf("unknown field number\n");
 
914
              verify = 0;
 
915
              break;
 
916
              }
 
917
            break;
874
918
            }
875
919
 
876
920
          dbfn_write(dbm, name, record, length);
968
1012
            callout->random_result);
969
1013
        }
970
1014
      break;
 
1015
 
 
1016
      case type_ratelimit:
 
1017
      ratelimit = (dbdata_ratelimit *)value;
 
1018
      printf("0 time stamp:  %s\n", print_time(ratelimit->time_stamp));
 
1019
      printf("1 fract. time: .%06d\n", ratelimit->time_usec);
 
1020
      printf("2 sender rate: % .3f\n", ratelimit->rate);
 
1021
      break;
971
1022
      }
972
1023
    }
973
1024
 
1244
1295
 
1245
1296
    if (Ustat(buffer, &statbuf) != 0)
1246
1297
      {
1247
 
      dbfn_delete(dbm, key);
1248
 
      printf("deleted %s (no message)\n", key);
 
1298
      sprintf(CS(buffer + path_len), "%c/%s-D", id[5], id);
 
1299
      if (Ustat(buffer, &statbuf) != 0)
 
1300
        {
 
1301
        dbfn_delete(dbm, key);
 
1302
        printf("deleted %s (no message)\n", key);
 
1303
        }
1249
1304
      }
1250
1305
    }
1251
1306
  }