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]