OpenPKG CVS Repository
http://cvs.openpkg.org/
____________________________________________________________________________
Server: cvs.openpkg.org Name: Ralf S. Engelschall
Root: /e/openpkg/cvs Email: [EMAIL PROTECTED]
Module: openpkg-src Date: 04-Jul-2003 16:31:33
Branch: HEAD Handle: 2003070415313200
Added files:
openpkg-src/sendmail sendmail.patch
Modified files:
openpkg-src/sendmail sendmail.spec
Removed files:
openpkg-src/sendmail sendmail-8.12.0-mysqlmap.patch
Log:
rename patch file and apply it unconditionally because it is #ifdef'ed
anyway (and this way it later can be converted to %patch more easily
Summary:
Revision Changes Path
1.2 +0 -474 openpkg-src/sendmail/sendmail-8.12.0-mysqlmap.patch
1.1 +474 -0 openpkg-src/sendmail/sendmail.patch
1.76 +5 -5 openpkg-src/sendmail/sendmail.spec
____________________________________________________________________________
rm -f openpkg-src/sendmail/sendmail-8.12.0-mysqlmap.patch <<'@@ .'
Index: openpkg-src/sendmail/sendmail-8.12.0-mysqlmap.patch
============================================================================
[NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
@@ .
patch -p0 <<'@@ .'
Index: openpkg-src/sendmail/sendmail.patch
============================================================================
$ cvs diff -u -r0 -r1.1 sendmail.patch
--- /dev/null 2003-07-04 16:31:33.000000000 +0200
+++ sendmail.patch 2003-07-04 16:31:33.000000000 +0200
@@ -0,0 +1,474 @@
+--- sendmail-8.12.0/sendmail/conf.c.orig Tue Oct 16 11:24:13 2001
++++ sendmail-8.12.0/sendmail/conf.c Wed Oct 17 18:49:33 2001
+@@ -470,6 +470,12 @@
+ ndbm_map_lookup, ndbm_map_store);
+ #endif /* NDBM */
+
++#if MYSQLMAP
++ MAPDEF("mysql", NULL, MCF_ALIASOK | MCF_NOTPERSIST,
++ mysql_map_parseargs, mysql_map_open, mysql_map_close,
++ mysql_map_lookup, null_map_store);
++#endif
++
+ #if NIS
+ MAPDEF("nis", NULL, MCF_ALIASOK,
+ map_parseargs, nis_map_open, null_map_close,
+@@ -5381,6 +5387,9 @@
+ #if NDBM
+ "NDBM",
+ #endif /* NDBM */
++#if MYSQLMAP
++ "MYSQL",
++#endif /* MYSQLMAP */
+ #if NETINET
+ "NETINET",
+ #endif /* NETINET */
+--- sendmail-8.12.0/sendmail/map.c.orig Tue Oct 16 11:22:26 2001
++++ sendmail-8.12.0/sendmail/map.c Thu Oct 18 09:34:53 2001
+@@ -1822,12 +1822,443 @@
+ }
+
+ #endif /* NDBM */
+-/*
+-** NEWDB (Hash and BTree) Modules
++
++
++/*
++* MySQL map class for Sendmail 8.12.x
++*
++* (c) 2001 Igmar Palsenberg
++* JDI Media Solutions
++*
++* MySQL can be obtained from http://www.mysql.com
++*
++* This version is subject to the Sendmail license. Sendmail Inc. is NOT
++* responsible for this code, they don't have anything to do with it, and
++* don't support it.
++*
++* USE AT YOUR OWN RISK. NO WARRANTY OF ANY KIND IS PROVIDED. PLEASE
++* READ THE INSTRUCTIONS FOR USE OF THIS PATCH BEFORE CONTACTING THE
++* AUTHOR OR SENDMAIL, INC. NO SUPPORT OF ANY KIND WILL BE PROVIDED
++* BY SENDMAIL, INC. FOR THIS PATCH.
++*
++* Please use the [EMAIL PROTECTED] adress for questions, comments,
++* remarks, etc, not my personal address.
++*
++* See http://projects.jdimedia.nl for a HOWTO on installing / using it.
++*
++*/
++#ifdef MYSQLMAP
++#include <mysql/mysql.h>
++
++struct mysql_conn {
++ char * host;
++ char * user;
++ char * passwd;
++ char * db;
++ int port;
++};
++
++static char * parse_opt_arg(char * in, char * option, char ** value)
++{
++ int len = strlen(in);
++ char * tmp;
++
++ /* Skip whitespaces */
++ while ((*in == ' ') || (*in == '\t') && (*in != '\0'))
++ in++;
++ if (*in == '\0')
++ return NULL;
++
++ while ((*in != '-') && (*in != '"'))
++ in++;
++
++ /* " is an error in this case */
++ if (*in == '"')
++ return NULL;
++
++ in++;
++ *option = *in;
++ in++;
++
++ while ((*in == ' ') || (*in == '\t'))
++ in++;
++
++ /* Not a " is an error */
++ if (*in != '"')
++ return NULL;
++ in++;
++
++ tmp = (char *) sm_malloc(sizeof(char) * len);
++ *value = tmp;
++
++ while (*in != '"')
++ *tmp++ = *in++;
++
++ /* Null terminate */
++ *tmp = '\0';
++ in++;
++
++ return in;
++}
++
++static char * parse_delim_arg(char * in, char delim, char ** key, char ** value)
++{
++ int len = strlen(in);
++ char * tmp;
++
++ while ((*in == ' ') || (*in == '\t') && (*in != '\0'))
++ in++;
++ if (*in == '\0')
++ return NULL;
++
++ /* Key */
++ tmp = (char *) sm_malloc(sizeof(char) * len);
++
++ *key = tmp;
++
++ while ((*in != delim) && (*in != '\0') && (*in != ' ') && (*in != '\t'))
++ *tmp++ = *in++;
++
++ if ((*in != delim) ) {
++ free(*key);
++ return NULL;
++ }
++ *tmp = '\0';
++ in++;
++
++ /* Value */
++ tmp = (char *) sm_malloc(sizeof(char) * len);
++ *value = tmp;
++
++ while ((*in != '\0') && (*in != ' ') && (*in != '\t'))
++ *tmp++ = *in++;
++ *tmp = '\0';
++
++ return in;
++}
++
++
++/*
++* Parse MYSQL map definitions. I call it an ugly hack :)
++*
++* return false if failed, true if succeeded
++*
++* Copied from the sendmail generic map_parseargs() code
+ */
++bool
++mysql_map_parseargs(map, args)
++ MAP * map;
++ char * args;
++{
++ char *p = args;
++ char option;
++ char * value;
+
+-#if NEWDB
++ map->map_mflags |= MF_TRY0NULL|MF_TRY1NULL;
++ map->map_spacesub = SpaceSub; /* default value */
++ while (p)
++ {
++ p = parse_opt_arg(p, &option, &value);
++ if (!p)
++ break;
++ switch (option)
++ {
++ case 'N': /* Append NULL byte to all keys */
++ map->map_mflags |= MF_INCLNULL;
++ map->map_mflags &= ~MF_TRY0NULL;
++ break;
++
++ case 'O': /* Adaptive versus never add NULL */
++ map->map_mflags &= ~MF_TRY1NULL;
++ break;
++
++ case 'o': /* Database file is optional */
++ map->map_mflags |= MF_OPTIONAL;
++ break;
++
++ case 'f': /* Don't fold keys to lowercase */
++ map->map_mflags |= MF_NOFOLDCASE;
++ break;
++
++ case 'm': /* Supress replacement on match */
++ map->map_mflags |= MF_MATCHONLY;
++ break;
++
++ case 'A': /* Append values for duplicate keys */
++ map->map_mflags |= MF_APPEND;
++ break;
++
++ case 'q': /* Don't strip quotes */
++ map->map_mflags |= MF_KEEPQUOTES;
++ break;
++
++ case 'a': /* Append tag on successful match */
++ map->map_app = value;
++ value = NULL;
++ break;
++
++ case 'T': /* No idea */
++ map->map_tapp = value;
++ value = NULL;
++ break;
++
++ case 'k': /* No idea */
++ map->map_keycolnm = value;
++ value = NULL;
++ break;
++
++ case 'v': /* Specify the value's column */
++ map->map_valcolnm = value;
++ value = NULL;
++ break;
++
++ case 'z': /* Column delimiter */
++ if (value[0] != '\\')
++ map->map_coldelim = value[0];
++ else
++ {
++ switch (value[1])
++ {
++ case 'n':
++ map->map_coldelim = '\n';
++ break;
++
++ case 't':
++ map->map_coldelim = '\t';
++ break;
++
++ default:
++ map->map_coldelim = '\\';
++ }
++ }
++ break;
++
++ case 't': /* No idea */
++ map->map_mflags |= MF_NODEFER;
++ break;
++
++
++ case 'S': /* No idea */
++ map->map_spacesub = value[0];
++ break;
+
++ case 'D': /* No idea, I need updated docs :( */
++ map->map_mflags |= MF_DEFER;
++ break;
++
++ case 'c':
++ map->map_keycolnm = value;
++ value = NULL;
++ break;
++
++ case 's':
++ map->map_valcolnm = value;
++ value = NULL;
++ break;
++
++ default:
++ syserr("mysql_map_parse_args : illegal option %c map `%s'",
*p, map->map_mname);
++ break;
++ }
++ if (value)
++ sm_free(value);
++ }
++ if (map->map_keycolnm == NULL) {
++ syserr("mysql_map_parse_args : no connect string for MySQL map `%s'",
map->map_mname);
++ return false;
++ }
++
++ if (map->map_valcolnm == NULL) {
++ syserr("mysql_map_parse_args : no select statement for MySQL map
`%s'", map->map_mname);
++ return false;
++ }
++
++ return true;
++}
++
++static bool
++mysql_map_parse_connect(char * cs, struct mysql_conn * conn, MAP * map)
++{
++ char * p;
++ char * key, * value;
++ char * endptr;
++
++ p = cs;
++
++ memset(conn, '\0', sizeof(struct mysql_conn));
++
++ while (p) {
++ p = parse_delim_arg(p, '=', &key, &value);
++ if (!p)
++ continue;
++ if (strcmp(key, "host") == 0) {
++ conn->host = value;
++ } else if (strcmp(key, "user") == 0) {
++ conn->user = value;
++ } else if (strcmp(key, "passwd") == 0) {
++ conn->passwd = value;
++ } else if (strcmp(key, "db") == 0) {
++ conn->db = value;
++ } else if (strcmp(key, "port") == 0) {
++ conn->port = (int) strtoul(value, &endptr, 10);
++ if (*endptr != '\0')
++ conn->port = 0;
++ sm_free(value);
++ } else {
++ syserr("mysql_map_parse_connect : illegal MySQL option %s map
`%s'", key, map->map_mname);
++ }
++ sm_free(key);
++ }
++
++ if ((conn->host == NULL) || (conn->user == NULL) || (conn->passwd == NULL))
++ return false;
++
++ return true;
++}
++
++static void mysql_map_free_conn(struct mysql_conn * conn)
++{
++ if (conn->host)
++ sm_free(conn->host);
++ if (conn->user)
++ sm_free(conn->user);
++ if (conn->passwd)
++ sm_free(conn->passwd);
++ if (conn->db)
++ sm_free(conn->db);
++}
++
++/*
++* Open connection to the MySQL server
++*
++* returns true if all where OK, false if something went wrong
++*
++*/
++bool
++mysql_map_open(map, mode)
++ MAP * map;
++ int mode;
++{
++ MYSQL * mysql;
++ struct mysql_conn conn;
++
++ /* Make sure newaliases doesn't rebuild it */
++ mode &= O_ACCMODE;
++
++ if (mode != O_RDONLY) {
++ errno = EPERM;
++ return false;
++ }
++
++ mysql = mysql_init(NULL);
++
++ if (mysql_map_parse_connect(map->map_keycolnm, &conn, map) == false) {
++ syserr("mysql_map_open : cannot parse map arguments %s for map `%s'",
map->map_keycolnm, map->map_mname);
++ mysql_map_free_conn(&conn);
++ return false;
++ }
++
++ if (!mysql_real_connect(mysql, conn.host, conn.user, conn.passwd, conn.db,
conn.port, NULL, 0)) {
++ mysql_map_free_conn(&conn);
++ syserr("mysql_map_open : cannot open a MySQL connection for map `%s' :
%s", map->map_mname, mysql_error(mysql));
++ return false;
++ }
++ mysql_map_free_conn(&conn);
++ map->map_db1 = (ARBPTR_T) mysql;
++ map->map_pid = getpid();
++
++ return true;
++}
++
++/*
++* Close connection to the MYSQL database
++*
++*
++*/
++void
++mysql_map_close(map)
++ MAP * map;
++{
++ if (map->map_pid == getpid())
++ mysql_close(map->map_db1);
++}
++
++/*
++*
++* Do a map look up.
++*
++* Returns value that comes with the key
++*
++*/
++char *
++mysql_map_lookup(map, name, av, statp)
++ MAP * map;
++ char * name;
++ char ** av;
++ int * statp;
++{
++ MYSQL * mysql = (MYSQL *) map->map_db1;
++ MYSQL_RES * result;
++ MYSQL_ROW row;
++ char * query;
++ char * tmp;
++ int len;
++
++ len = strlen(name) + strlen(map->map_valcolnm) + 5;
++ if (len > MAXNAME)
++ return NULL;
++
++ tmp = (char *) sm_malloc(strlen(name) + 1);
++ strncpy(tmp, name, strlen(name) + 1);
++
++ if (!bitset(MF_NOFOLDCASE, map->map_mflags))
++ makelower(tmp);
++
++ query = (char *) sm_malloc(sizeof(char) * len);
++ /* Create query */
++ snprintf(query, len, map->map_valcolnm, tmp);
++
++ sm_free(tmp);
++
++ /* Query and retreive rows */
++ if (mysql_real_query(mysql, query, strlen(query))) {
++ syserr("mysql_map_lookup : query %s : %s", query, mysql_error(mysql));
++ sm_free(query);
++ return NULL;
++ }
++
++ result = mysql_store_result(mysql);
++ if (result == NULL) {
++ syserr("mysql_map_lookup : store result : %s", mysql_error(mysql));
++ sm_free(query);
++ return NULL;
++ }
++
++ /* 0 rows == no result */
++ if (mysql_num_rows(result) == 0) {
++ sm_free(query);
++ return NULL;
++ }
++
++ row = mysql_fetch_row(result);
++ if (row[0] == NULL || strlen(row[0]) == 0) {
++ sm_free(query);
++ mysql_free_result(result);
++ return NULL;
++ }
++
++ if (bitset(MF_MATCHONLY, map->map_mflags))
++ return map_rewrite(map, name, strlen(name), NULL);
++ else
++ return map_rewrite(map, row[0], strlen(row[0]), av);
++}
++#endif /* MYSQLMAP */
++
++
++/*
++** NEWDB (Hash and BTree) Modules
++*/
++#if NEWDB
+ /*
+ ** BT_MAP_OPEN, HASH_MAP_OPEN -- database open primitives.
+ **
@@ .
patch -p0 <<'@@ .'
Index: openpkg-src/sendmail/sendmail.spec
============================================================================
$ cvs diff -u -r1.75 -r1.76 sendmail.spec
--- openpkg-src/sendmail/sendmail.spec 4 Jul 2003 14:02:42 -0000 1.75
+++ openpkg-src/sendmail/sendmail.spec 4 Jul 2003 14:31:32 -0000 1.76
@@ -49,7 +49,7 @@
Source2: cf.tar
Source3: fsl.sendmail
Source4: rc.sendmail
-Patch0: sendmail-8.12.0-mysqlmap.patch
+Patch0: sendmail.patch
# build information
Prefix: %{l_prefix}
@@ -87,11 +87,11 @@
# unpack standard tarballs
%setup0 -q -c
%setup1 -q -T -D -a 1
-%if "%{with_mysql}" == "yes"
+
+ # apply patches for MySQL map support
( cd sendmail-%{version}
- %{l_patch} -p1 <%{SOURCE sendmail-8.12.0-mysqlmap.patch}
- )
-%endif
+ %{l_patch} -p1 <%{SOURCE sendmail.patch} )
+
# make install process unprivileged
( cd sendmail-%{version}
%{l_shtool} subst \
@@ .
______________________________________________________________________
The OpenPKG Project www.openpkg.org
CVS Repository Commit List [EMAIL PROTECTED]