]> git.ipfire.org Git - thirdparty/postfix.git/commitdiff
snapshot-19990328
authorWietse Venema <wietse@porcupine.org>
Sun, 28 Mar 1999 05:00:00 +0000 (00:00 -0500)
committerWietse Venema <wietse@porcupine.org>
Thu, 17 Jan 2013 03:34:02 +0000 (22:34 -0500)
42 files changed:
postfix/.indent.pro
postfix/bounce/.indent.pro
postfix/cleanup/.indent.pro
postfix/dns/.indent.pro
postfix/fsstone/.indent.pro
postfix/global/.indent.pro
postfix/global/mail_version.h
postfix/global/maps.c
postfix/local/.indent.pro
postfix/master/.indent.pro
postfix/pickup/.indent.pro
postfix/pipe/.indent.pro
postfix/postalias/.indent.pro
postfix/postcat/.indent.pro
postfix/postconf/.indent.pro
postfix/postdrop/.indent.pro
postfix/postfix/.indent.pro
postfix/postkick/.indent.pro
postfix/postlock/.indent.pro
postfix/postlog/.indent.pro
postfix/postmap/.indent.pro
postfix/postsuper/.indent.pro
postfix/qmgr/.indent.pro
postfix/sendmail/.indent.pro
postfix/showq/.indent.pro
postfix/smtp/.indent.pro
postfix/smtpd/.indent.pro
postfix/smtpd/smtpd_check.c
postfix/smtpstone/.indent.pro
postfix/trivial-rewrite/.indent.pro
postfix/util/.indent.pro
postfix/util/dict.h
postfix/util/dict_db.c
postfix/util/dict_dbm.c
postfix/util/dict_env.c
postfix/util/dict_ldap.c
postfix/util/dict_ni.c
postfix/util/dict_nis.c
postfix/util/dict_nisplus.c
postfix/util/dict_pcre.c
postfix/util/dict_regexp.c
postfix/util/dict_unix.c

index f683dc2bc1d1a54952a8451503a9d650b17d5076..a39288416150661c21a3dc49ca2ff8e6c13e9aa9 100644 (file)
@@ -28,7 +28,7 @@
 -TDICT_OPEN_INFO
 -TDICT_PCRE
 -TDICT_REGEXP
--TDICT_REGEXP_LINE
+-TDICT_REGEXP_RULE
 -TDICT_UNIX
 -TDNS_FIXED
 -TDNS_REPLY
index f683dc2bc1d1a54952a8451503a9d650b17d5076..a39288416150661c21a3dc49ca2ff8e6c13e9aa9 100644 (file)
@@ -28,7 +28,7 @@
 -TDICT_OPEN_INFO
 -TDICT_PCRE
 -TDICT_REGEXP
--TDICT_REGEXP_LINE
+-TDICT_REGEXP_RULE
 -TDICT_UNIX
 -TDNS_FIXED
 -TDNS_REPLY
index f683dc2bc1d1a54952a8451503a9d650b17d5076..a39288416150661c21a3dc49ca2ff8e6c13e9aa9 100644 (file)
@@ -28,7 +28,7 @@
 -TDICT_OPEN_INFO
 -TDICT_PCRE
 -TDICT_REGEXP
--TDICT_REGEXP_LINE
+-TDICT_REGEXP_RULE
 -TDICT_UNIX
 -TDNS_FIXED
 -TDNS_REPLY
index f683dc2bc1d1a54952a8451503a9d650b17d5076..a39288416150661c21a3dc49ca2ff8e6c13e9aa9 100644 (file)
@@ -28,7 +28,7 @@
 -TDICT_OPEN_INFO
 -TDICT_PCRE
 -TDICT_REGEXP
--TDICT_REGEXP_LINE
+-TDICT_REGEXP_RULE
 -TDICT_UNIX
 -TDNS_FIXED
 -TDNS_REPLY
index f683dc2bc1d1a54952a8451503a9d650b17d5076..a39288416150661c21a3dc49ca2ff8e6c13e9aa9 100644 (file)
@@ -28,7 +28,7 @@
 -TDICT_OPEN_INFO
 -TDICT_PCRE
 -TDICT_REGEXP
--TDICT_REGEXP_LINE
+-TDICT_REGEXP_RULE
 -TDICT_UNIX
 -TDNS_FIXED
 -TDNS_REPLY
index f683dc2bc1d1a54952a8451503a9d650b17d5076..a39288416150661c21a3dc49ca2ff8e6c13e9aa9 100644 (file)
@@ -28,7 +28,7 @@
 -TDICT_OPEN_INFO
 -TDICT_PCRE
 -TDICT_REGEXP
--TDICT_REGEXP_LINE
+-TDICT_REGEXP_RULE
 -TDICT_UNIX
 -TDNS_FIXED
 -TDNS_REPLY
index 49562d6a84cff4467db74d08b9ac508c422889da..cd0a40af2423b23aa65bdc7b0f8f6dac39aab0c5 100644 (file)
@@ -15,7 +15,7 @@
   * Version of this program.
   */
 #define VAR_MAIL_VERSION       "mail_version"
-#define DEF_MAIL_VERSION       "Snapshot-19990327"
+#define DEF_MAIL_VERSION       "Snapshot-19990328"
 extern char *var_mail_version;
 
 /* LICENSE
index 13b9280e54d10ffaeb00dc4b16c41de00b37d9d5..71cf6b337cfaab8c4dc40bf9a1c6fe5ac1e9189f 100644 (file)
@@ -6,13 +6,15 @@
 /* SYNOPSIS
 /*     #include <maps.h>
 /*
-/*     MAPS    *maps_create(title, map_names)
+/*     MAPS    *maps_create(title, map_names, flags)
 /*     const char *title;
 /*     const char *map_names;
+/*     int     flags;
 /*
-/*     const char *maps_find(maps, key)
+/*     const char *maps_find(maps, key, flags)
 /*     MAPS    *maps;
 /*     const char *key;
+/*     int     flags;
 /*
 /*     void    maps_free(maps)
 /*     MAPS    *maps;
 /*     named dictionaries.
 /*     The result is a handle that must be specified along with all
 /*     other maps_xxx() operations.
+/*     see dict_open(3) for a description of flags.
 /*
 /*     maps_find() searches the specified list of dictionaries
 /*     in the specified order for the named key. The result is in
 /*     memory that is overwritten upon each call.
+/*     The flags argument is either 0 or specifies a filter:
+/*     for example, DICT_FLAG_FIXED | DICT_FLAG_PATTERN selects
+/*     dictionaries that have fixed keys or pattern keys.
 /*
 /*     maps_free() releases storage claimed by maps_create()
 /*     and conveniently returns a null pointer.
index f683dc2bc1d1a54952a8451503a9d650b17d5076..a39288416150661c21a3dc49ca2ff8e6c13e9aa9 100644 (file)
@@ -28,7 +28,7 @@
 -TDICT_OPEN_INFO
 -TDICT_PCRE
 -TDICT_REGEXP
--TDICT_REGEXP_LINE
+-TDICT_REGEXP_RULE
 -TDICT_UNIX
 -TDNS_FIXED
 -TDNS_REPLY
index f683dc2bc1d1a54952a8451503a9d650b17d5076..a39288416150661c21a3dc49ca2ff8e6c13e9aa9 100644 (file)
@@ -28,7 +28,7 @@
 -TDICT_OPEN_INFO
 -TDICT_PCRE
 -TDICT_REGEXP
--TDICT_REGEXP_LINE
+-TDICT_REGEXP_RULE
 -TDICT_UNIX
 -TDNS_FIXED
 -TDNS_REPLY
index f683dc2bc1d1a54952a8451503a9d650b17d5076..a39288416150661c21a3dc49ca2ff8e6c13e9aa9 100644 (file)
@@ -28,7 +28,7 @@
 -TDICT_OPEN_INFO
 -TDICT_PCRE
 -TDICT_REGEXP
--TDICT_REGEXP_LINE
+-TDICT_REGEXP_RULE
 -TDICT_UNIX
 -TDNS_FIXED
 -TDNS_REPLY
index f683dc2bc1d1a54952a8451503a9d650b17d5076..a39288416150661c21a3dc49ca2ff8e6c13e9aa9 100644 (file)
@@ -28,7 +28,7 @@
 -TDICT_OPEN_INFO
 -TDICT_PCRE
 -TDICT_REGEXP
--TDICT_REGEXP_LINE
+-TDICT_REGEXP_RULE
 -TDICT_UNIX
 -TDNS_FIXED
 -TDNS_REPLY
index f683dc2bc1d1a54952a8451503a9d650b17d5076..a39288416150661c21a3dc49ca2ff8e6c13e9aa9 100644 (file)
@@ -28,7 +28,7 @@
 -TDICT_OPEN_INFO
 -TDICT_PCRE
 -TDICT_REGEXP
--TDICT_REGEXP_LINE
+-TDICT_REGEXP_RULE
 -TDICT_UNIX
 -TDNS_FIXED
 -TDNS_REPLY
index f683dc2bc1d1a54952a8451503a9d650b17d5076..a39288416150661c21a3dc49ca2ff8e6c13e9aa9 100644 (file)
@@ -28,7 +28,7 @@
 -TDICT_OPEN_INFO
 -TDICT_PCRE
 -TDICT_REGEXP
--TDICT_REGEXP_LINE
+-TDICT_REGEXP_RULE
 -TDICT_UNIX
 -TDNS_FIXED
 -TDNS_REPLY
index f683dc2bc1d1a54952a8451503a9d650b17d5076..a39288416150661c21a3dc49ca2ff8e6c13e9aa9 100644 (file)
@@ -28,7 +28,7 @@
 -TDICT_OPEN_INFO
 -TDICT_PCRE
 -TDICT_REGEXP
--TDICT_REGEXP_LINE
+-TDICT_REGEXP_RULE
 -TDICT_UNIX
 -TDNS_FIXED
 -TDNS_REPLY
index f683dc2bc1d1a54952a8451503a9d650b17d5076..a39288416150661c21a3dc49ca2ff8e6c13e9aa9 100644 (file)
@@ -28,7 +28,7 @@
 -TDICT_OPEN_INFO
 -TDICT_PCRE
 -TDICT_REGEXP
--TDICT_REGEXP_LINE
+-TDICT_REGEXP_RULE
 -TDICT_UNIX
 -TDNS_FIXED
 -TDNS_REPLY
index f683dc2bc1d1a54952a8451503a9d650b17d5076..a39288416150661c21a3dc49ca2ff8e6c13e9aa9 100644 (file)
@@ -28,7 +28,7 @@
 -TDICT_OPEN_INFO
 -TDICT_PCRE
 -TDICT_REGEXP
--TDICT_REGEXP_LINE
+-TDICT_REGEXP_RULE
 -TDICT_UNIX
 -TDNS_FIXED
 -TDNS_REPLY
index f683dc2bc1d1a54952a8451503a9d650b17d5076..a39288416150661c21a3dc49ca2ff8e6c13e9aa9 100644 (file)
@@ -28,7 +28,7 @@
 -TDICT_OPEN_INFO
 -TDICT_PCRE
 -TDICT_REGEXP
--TDICT_REGEXP_LINE
+-TDICT_REGEXP_RULE
 -TDICT_UNIX
 -TDNS_FIXED
 -TDNS_REPLY
index f683dc2bc1d1a54952a8451503a9d650b17d5076..a39288416150661c21a3dc49ca2ff8e6c13e9aa9 100644 (file)
@@ -28,7 +28,7 @@
 -TDICT_OPEN_INFO
 -TDICT_PCRE
 -TDICT_REGEXP
--TDICT_REGEXP_LINE
+-TDICT_REGEXP_RULE
 -TDICT_UNIX
 -TDNS_FIXED
 -TDNS_REPLY
index f683dc2bc1d1a54952a8451503a9d650b17d5076..a39288416150661c21a3dc49ca2ff8e6c13e9aa9 100644 (file)
@@ -28,7 +28,7 @@
 -TDICT_OPEN_INFO
 -TDICT_PCRE
 -TDICT_REGEXP
--TDICT_REGEXP_LINE
+-TDICT_REGEXP_RULE
 -TDICT_UNIX
 -TDNS_FIXED
 -TDNS_REPLY
index f683dc2bc1d1a54952a8451503a9d650b17d5076..a39288416150661c21a3dc49ca2ff8e6c13e9aa9 100644 (file)
@@ -28,7 +28,7 @@
 -TDICT_OPEN_INFO
 -TDICT_PCRE
 -TDICT_REGEXP
--TDICT_REGEXP_LINE
+-TDICT_REGEXP_RULE
 -TDICT_UNIX
 -TDNS_FIXED
 -TDNS_REPLY
index f683dc2bc1d1a54952a8451503a9d650b17d5076..a39288416150661c21a3dc49ca2ff8e6c13e9aa9 100644 (file)
@@ -28,7 +28,7 @@
 -TDICT_OPEN_INFO
 -TDICT_PCRE
 -TDICT_REGEXP
--TDICT_REGEXP_LINE
+-TDICT_REGEXP_RULE
 -TDICT_UNIX
 -TDNS_FIXED
 -TDNS_REPLY
index f683dc2bc1d1a54952a8451503a9d650b17d5076..a39288416150661c21a3dc49ca2ff8e6c13e9aa9 100644 (file)
@@ -28,7 +28,7 @@
 -TDICT_OPEN_INFO
 -TDICT_PCRE
 -TDICT_REGEXP
--TDICT_REGEXP_LINE
+-TDICT_REGEXP_RULE
 -TDICT_UNIX
 -TDNS_FIXED
 -TDNS_REPLY
index f683dc2bc1d1a54952a8451503a9d650b17d5076..a39288416150661c21a3dc49ca2ff8e6c13e9aa9 100644 (file)
@@ -28,7 +28,7 @@
 -TDICT_OPEN_INFO
 -TDICT_PCRE
 -TDICT_REGEXP
--TDICT_REGEXP_LINE
+-TDICT_REGEXP_RULE
 -TDICT_UNIX
 -TDNS_FIXED
 -TDNS_REPLY
index f683dc2bc1d1a54952a8451503a9d650b17d5076..a39288416150661c21a3dc49ca2ff8e6c13e9aa9 100644 (file)
@@ -28,7 +28,7 @@
 -TDICT_OPEN_INFO
 -TDICT_PCRE
 -TDICT_REGEXP
--TDICT_REGEXP_LINE
+-TDICT_REGEXP_RULE
 -TDICT_UNIX
 -TDNS_FIXED
 -TDNS_REPLY
index f683dc2bc1d1a54952a8451503a9d650b17d5076..a39288416150661c21a3dc49ca2ff8e6c13e9aa9 100644 (file)
@@ -28,7 +28,7 @@
 -TDICT_OPEN_INFO
 -TDICT_PCRE
 -TDICT_REGEXP
--TDICT_REGEXP_LINE
+-TDICT_REGEXP_RULE
 -TDICT_UNIX
 -TDNS_FIXED
 -TDNS_REPLY
index f683dc2bc1d1a54952a8451503a9d650b17d5076..a39288416150661c21a3dc49ca2ff8e6c13e9aa9 100644 (file)
@@ -28,7 +28,7 @@
 -TDICT_OPEN_INFO
 -TDICT_PCRE
 -TDICT_REGEXP
--TDICT_REGEXP_LINE
+-TDICT_REGEXP_RULE
 -TDICT_UNIX
 -TDNS_FIXED
 -TDNS_REPLY
index 88f755fc2fa30b0c07fd9091ca512ebd5848ea54..98daaecf46631bbaba1f9a97cfe34d76547c96f9 100644 (file)
@@ -563,7 +563,8 @@ static int reject_unknown_hostname(SMTPD_STATE *state, char *name)
     if (dns_status != DNS_OK)
        return (smtpd_check_reject(state, MAIL_ERROR_POLICY,
                                   "%d <%s>: Host not found",
-                                  var_unk_name_code, name));
+                                  dns_status == DNS_NOTFOUND ?
+                                  var_unk_name_code : 450, name));
     return (SMTPD_CHECK_DUNNO);
 }
 
index f683dc2bc1d1a54952a8451503a9d650b17d5076..a39288416150661c21a3dc49ca2ff8e6c13e9aa9 100644 (file)
@@ -28,7 +28,7 @@
 -TDICT_OPEN_INFO
 -TDICT_PCRE
 -TDICT_REGEXP
--TDICT_REGEXP_LINE
+-TDICT_REGEXP_RULE
 -TDICT_UNIX
 -TDNS_FIXED
 -TDNS_REPLY
index f683dc2bc1d1a54952a8451503a9d650b17d5076..a39288416150661c21a3dc49ca2ff8e6c13e9aa9 100644 (file)
@@ -28,7 +28,7 @@
 -TDICT_OPEN_INFO
 -TDICT_PCRE
 -TDICT_REGEXP
--TDICT_REGEXP_LINE
+-TDICT_REGEXP_RULE
 -TDICT_UNIX
 -TDNS_FIXED
 -TDNS_REPLY
index f683dc2bc1d1a54952a8451503a9d650b17d5076..a39288416150661c21a3dc49ca2ff8e6c13e9aa9 100644 (file)
@@ -28,7 +28,7 @@
 -TDICT_OPEN_INFO
 -TDICT_PCRE
 -TDICT_REGEXP
--TDICT_REGEXP_LINE
+-TDICT_REGEXP_RULE
 -TDICT_UNIX
 -TDNS_FIXED
 -TDNS_REPLY
index 73f2da441147132d256d68fb5303d1afc8fb3ba5..23c0a39170f7f2eca21cd5786549537fb3f080bf 100644 (file)
@@ -37,6 +37,8 @@ typedef struct DICT {
 #define DICT_FLAG_DUP_IGNORE   (1<<1)  /* if file, ignore dups */
 #define DICT_FLAG_TRY0NULL     (1<<2)  /* do not append 0 to key/value */
 #define DICT_FLAG_TRY1NULL     (1<<3)  /* append 0 to key/value */
+#define DICT_FLAG_FIXED                (1<<4)  /* fixed key map */
+#define DICT_FLAG_PATTERN      (1<<5)  /* keys are patterns */
 
 extern int dict_unknown_allowed;
 extern int dict_errno;
index 70d50a59c77dff8e2cb4b51a21231e3348ea5108..c188d5f28acf467f3bc92459ee1822c91487b5a8 100644 (file)
@@ -206,7 +206,7 @@ static DICT *dict_db_open(const char *path, int flags, int type,
     dict_db->dict.close = dict_db_close;
     dict_db->dict.fd = db->fd(db);
     close_on_exec(dict_db->dict.fd, CLOSE_ON_EXEC);
-    dict_db->dict.flags = dict_flags;
+    dict_db->dict.flags = dict_flags | DICT_FLAG_FIXED;
     if ((flags & (DICT_FLAG_TRY1NULL | DICT_FLAG_TRY0NULL)) == 0)
        dict_db->dict.flags |= (DICT_FLAG_TRY1NULL | DICT_FLAG_TRY0NULL);
     dict_db->db = db;
index 87c6faad3066f8ff4ff29cf095140aa9fce2e7e6..33b802a061c2c999d44ee0d94ef27fad09adfa5a 100644 (file)
@@ -180,8 +180,8 @@ DICT   *dict_dbm_open(const char *path, int open_flags, int dict_flags)
     dict_dbm->dict.close = dict_dbm_close;
     dict_dbm->dict.fd = dbm_dirfno(dbm);
     close_on_exec(dict_dbm->dict.fd, CLOSE_ON_EXEC);
-    dict_dbm->dict.flags = dict_flags;
-    if (dict_flagsflags & (DICT_FLAG_TRY0NULL | DICT_FLAG_TRY1NULL)) == 0)
+    dict_dbm->dict.flags = dict_flags | DICT_FLAG_FIXED;
+    if ((dict_flags & (DICT_FLAG_TRY0NULL | DICT_FLAG_TRY1NULL)) == 0)
        dict_dbm->dict.flags |= (DICT_FLAG_TRY0NULL | DICT_FLAG_TRY1NULL);
     dict_dbm->dbm = dbm;
     dict_dbm->path = mystrdup(path);
index 926a2b9475b64467ac002c0fd8d6d1a771e6ed62..f9f41506d673bd2085046fbd54c86de95c29c625 100644 (file)
@@ -77,7 +77,7 @@ DICT   *dict_env_open(const char *unused_name, int unused_flags, int dict_flags)
     dict->lookup = dict_env_lookup;
     dict->update = dict_env_update;
     dict->close = dict_env_close;
-    dict->flags = dict_flags;
+    dict->flags = dict_flags | DICT_FLAG_FIXED;
     dict->fd = -1;
     return (dict);
 }
index d22adae36cc23c6cdfcfb3a695447451452970c8..a155f84423364d9347651c3b0cd54cac90c5af76 100644 (file)
@@ -321,7 +321,7 @@ DICT   *dict_ldap_open(const char *ldapsource, int dummy, int dict_flags)
     dict_ldap->dict.update = dict_ldap_update;
     dict_ldap->dict.close = dict_ldap_close;
     dict_ldap->dict.fd = -1;
-    dict_ldap->dict.flags = dict_flags;
+    dict_ldap->dict.flags = dict_flags | DICT_FLAG_FIXED;
 
     if (msg_verbose)
         msg_info("%s: using LDAP source %s", myname, ldapsource);
index 5f7aabd85418737611d59eb5c1f02ab704e87336..cb2a09fe0a5fcac1d5bb28df8f7566e21ec74e52 100644 (file)
@@ -184,7 +184,7 @@ DICT   *dict_ni_open(const char *path, int unused_flags, int dict_flags)
     d->dict.update = dict_ni_update;
     d->dict.close = dict_ni_close;
     d->dict.fd = -1;
-    d->dict.flags = dict_flags;
+    d->dict.flags = dict_flags | DICT_FLAG_FIXED;
     d->path = mystrdup(path);
 
     return &d->dict;
index a042f32993620a13a454a9fbd129fccca2796134..78d76f52b80348b485a5c565f516dd7079c8dbc5 100644 (file)
@@ -226,7 +226,7 @@ DICT   *dict_nis_open(const char *map, int unused_flags, int dict_flags)
     dict_nis->dict.close = dict_nis_close;
     dict_nis->dict.fd = -1;
     dict_nis->map = mystrdup(map);
-    dict_nis->dict.flags = dict_flags;
+    dict_nis->dict.flags = dict_flags | DICT_FLAG_FIXED;
     if ((dict_flags & (DICT_FLAG_TRY1NULL | DICT_FLAG_TRY0NULL)) == 0)
        dict_nis->dict.flags |= (DICT_FLAG_TRY1NULL | DICT_FLAG_TRY0NULL);
     if (dict_nis_domain == 0)
index 02a8790f12ae2256a8940cbdb596ce465750d837..83a81393636c9c1b4b191d1f994f29aeb901d2d9 100644 (file)
@@ -87,6 +87,6 @@ DICT   *dict_nisplus_open(const char *map, int unused_flags, int dict_flags)
     dict_nisplus->dict.close = dict_nisplus_close;
     dict_nisplus->dict.fd = -1;
     dict_nisplus->map = mystrdup(map);
-    dict_nisplus->dict.flags = dict_flags;
+    dict_nisplus->dict.flags = dict_flags | DICT_FLAG_FIXED;
     return (&dict_nisplus->dict);
 }
index d2e6121db95883bcb42027a74e21fb24884e9556..f6803dd4c92ec54291b4c60aa87a2cd6c136fa69 100644 (file)
@@ -158,6 +158,7 @@ static const char *dict_pcre_lookup(DICT *dict, const char *name)
        return (0);
 
     /* Search for a matching expression */
+    ctxt.matches = 0;
     for (pcre_list = dict_pcre->head; pcre_list; pcre_list = pcre_list->next) {
        if (pcre_list->pattern) {
            ctxt.matches = pcre_exec(pcre_list->pattern, pcre_list->hints,
@@ -233,7 +234,7 @@ static void dict_pcre_close(DICT *dict)
 /*
  * dict_pcre_open - load and compile a file containing regular expressions
  */
-DICT   *dict_pcre_open(const char *map, int unused_flags)
+DICT   *dict_pcre_open(const char *map, int unused_flags, int dict_flags)
 {
     DICT_PCRE *dict_pcre;
     VSTREAM *map_fp;
@@ -258,7 +259,7 @@ DICT   *dict_pcre_open(const char *map, int unused_flags)
     dict_pcre->dict.close = dict_pcre_close;
     dict_pcre->dict.fd = -1;
     dict_pcre->map = mystrdup(map);
-    dict_pcre->dict.flags = dict_flags;
+    dict_pcre->dict.flags = dict_flags | DICT_FLAG_PATTERN;
     dict_pcre->head = NULL;
 
     if (dict_pcre_init == 0) {
index b3c402463d03921c82f5cced2521b095da3d64b2..7fe2cbf40fac83e1d414333b831b2ce73ef2b453 100644 (file)
@@ -218,6 +218,9 @@ static void dict_regexp_close(DICT *dict)
        myfree((char *) rule->replace);
        myfree((char *) rule);
     }
+    if (dict_regexp->pmatch)
+       myfree((char *) dict_regexp->pmatch);
+    myfree(dict_regexp->map);
     myfree((char *) dict_regexp);
 }
 
@@ -342,6 +345,7 @@ static DICT_REGEXP_RULE *dict_regexp_parseline(int lineno, char *line, int *nsub
     rule->expr[1] = expr2;
     rule->replace = mystrdup(p);
     rule->lineno = lineno;
+    rule->next = NULL;
     return rule;
 }
 
@@ -368,7 +372,9 @@ DICT   *dict_regexp_open(const char *map, int unused_flags, int dict_flags)
     dict_regexp->dict.close = dict_regexp_close;
     dict_regexp->dict.fd = -1;
     dict_regexp->map = mystrdup(map);
-    dict_regexp->dict.flags = dict_flags;
+    dict_regexp->dict.flags = dict_flags | DICT_FLAG_PATTERN;
+    dict_regexp->head = 0;
+    dict_regexp->pmatch = 0;
 
     if ((map_fp = vstream_fopen(map, O_RDONLY, 0)) == 0) {
        msg_fatal("open %s: %m", map);
@@ -394,9 +400,10 @@ DICT   *dict_regexp_open(const char *map, int unused_flags, int dict_flags)
            last_rule = rule;
        }
     }
-    last_rule->next = NULL;
 
-    dict_regexp->pmatch = (regmatch_t *) mymalloc(sizeof(regmatch_t) * max_nsub);
+    if (max_nsub > 0)
+       dict_regexp->pmatch =
+           (regmatch_t *) mymalloc(sizeof(regmatch_t) * max_nsub);
     dict_regexp->nmatch = max_nsub;
 
     vstring_free(line_buffer);
@@ -405,4 +412,4 @@ DICT   *dict_regexp_open(const char *map, int unused_flags, int dict_flags)
     return (&dict_regexp->dict);
 }
 
-#endif                                 /* NO_POSIX_REGEXP */
+#endif
index efc94513047afc21a25a23168b20641361bcf033..00b775b7ba5532c9d4f1444efa9af36c8be152da 100644 (file)
@@ -122,6 +122,6 @@ DICT   *dict_unix_open(const char *map, int unused_flags, int dict_flags)
     dict_unix->dict.close = dict_unix_close;
     dict_unix->dict.fd = -1;
     dict_unix->map = mystrdup(map);
-    dict_unix->dict.flags = dict_flags;
+    dict_unix->dict.flags = dict_flags | DICT_FLAG_FIXED;
     return (&dict_unix->dict);
 }