From: Rick W. <rw...@us...> - 2004-06-04 02:17:12
|
Update of /cvsroot/vpopmail/vpopmail In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv18087 Modified Files: ChangeLog vmysql.c vpopmail.h Log Message: SHOW_TRACE, SHOW_QUERY and DUMP_DATA complete in vmysql. Changelog update Index: vmysql.c =================================================================== RCS file: /cvsroot/vpopmail/vpopmail/vmysql.c,v retrieving revision 1.20 retrieving revision 1.21 diff -u -d -r1.20 -r1.21 --- vmysql.c 3 Jun 2004 23:49:09 -0000 1.20 +++ vmysql.c 4 Jun 2004 02:17:02 -0000 1.21 @@ -251,6 +251,9 @@ /* we were able to connect, so create the database */ snprintf( SqlBufUpdate, SQL_BUF_SIZE, "create database %s", MYSQL_UPDATE_DATABASE ); +#ifdef SHOW_QUERY + fprintf( stderr, "open_update query\n%s\n", SqlBufUpdate ); +#endif if (mysql_query(&mysql_update,SqlBufUpdate)) { /* we could not create the database @@ -381,6 +384,9 @@ if ((err = vauth_open_update()) != 0) return (err); snprintf (SqlBufCreate, SQL_BUF_SIZE, "CREATE TABLE %s ( %s )", table, layout); +#ifdef SHOW_QUERY + fprintf( stderr, "vauth_create_table query\n%s\n", SqlBufCreate ); +#endif if (mysql_query (&mysql_update, SqlBufCreate)) { if (showerror) fprintf (stderr, "vmysql: error creating table '%s': %s\n", table, @@ -472,6 +478,9 @@ #endif ); +#ifdef SHOW_QUERY + fprintf( stderr, "vauth_adduser query\n%s\n", SqlBufUpdate ); +#endif if (mysql_query(&mysql_update,SqlBufUpdate)) { fprintf(stderr, "vmysql: sql error[2]: %s\n", mysql_error(&mysql_update)); return(-1); @@ -527,6 +536,9 @@ , in_domain #endif ); +#ifdef SHOW_QUERY + fprintf( stderr, "vauth_getpw query\n%s\n", SqlBufRead ); +#endif if (mysql_query(&mysql_read,SqlBufRead)) { fprintf(stderr, "vmysql: sql error[3]: %s\n", mysql_error(&mysql_read)); return(NULL); @@ -614,6 +626,9 @@ tmpstr, domain ); #endif +#ifdef SHOW_QUERY + fprintf( stderr, "vauth_deldomain - delete query\n%s\n", SqlBufUpdate ); +#endif if (mysql_query(&mysql_update,SqlBufUpdate)) { return(-1); } @@ -625,6 +640,9 @@ #ifdef ENABLE_AUTH_LOGGING qnprintf( SqlBufUpdate, SQL_BUF_SIZE, "delete from lastauth where domain = '%s'", domain ); +#ifdef SHOW_QUERY + fprintf( stderr, "vauth_deldomain - delete lastauth entry\n%s\n", SqlBufUpdate ); +#endif if (mysql_query(&mysql_update,SqlBufUpdate)) { return(-1); } @@ -663,6 +681,9 @@ , domain #endif ); +#ifdef SHOW_QUERY + fprintf( stderr, "vauth_deluser - delete query\n%s\n", SqlBufUpdate ); +#endif if (mysql_query(&mysql_update,SqlBufUpdate)) { err = -1; } @@ -671,6 +692,9 @@ qnprintf( SqlBufUpdate, SQL_BUF_SIZE, "delete from lastauth where user = '%s' and domain = '%s'", user, domain ); +#ifdef SHOW_QUERY + fprintf( stderr, "vauth_deluser - delete lastauth query\n%s\n", SqlBufUpdate ); +#endif if (mysql_query(&mysql_update,SqlBufUpdate)) { err = -1; } @@ -710,6 +734,9 @@ #endif ); +#ifdef SHOW_QUERY + fprintf( stderr, "vauth_setquota\n%s\n", SqlBufUpdate ); +#endif if (mysql_query(&mysql_update,SqlBufUpdate)) { fprintf(stderr, "vmysql: sql error[4]: %s\n", mysql_error(&mysql_update)); return(-1); @@ -753,6 +780,9 @@ if (res_read!=NULL) mysql_free_result(res_read_getall); res_read = NULL; +#ifdef SHOW_QUERY + fprintf( stderr, "vqpasswd query\n%s\n", SqlBufRead ); +#endif if (mysql_query(&mysql_read_getall,SqlBufRead)) { fprintf(stderr, "vmysql: sql error[5]: %s\n", mysql_error(&mysql_read_getall)); return(NULL); @@ -891,6 +921,9 @@ #endif ); +#ifdef SHOW_QUERY + fprintf( stderr, "vauth_setpw query\n%s\n", SqlBufUpdate ); +#endif if (mysql_query(&mysql_update,SqlBufUpdate)) { fprintf(stderr, "vmysql: sql error[6]: %s\n", mysql_error(&mysql_update)); return(-1); @@ -926,8 +959,14 @@ qnprintf( SqlBufUpdate, SQL_BUF_SIZE, "replace into relay ( ip_addr, timestamp ) values ( '%s', %d )", ipaddr, (int)mytime); +#ifdef SHOW_QUERY + fprintf( stderr, "vpopn_smtp_relay query\n%s\n", SqlBufUpdate ); +#endif if (mysql_query(&mysql_update,SqlBufUpdate)) { vcreate_relay_table(); +#ifdef SHOW_QUERY + fprintf( stderr, "\n%s\n", SqlBufUpdate ); +#endif if (mysql_query(&mysql_update,SqlBufUpdate)) { fprintf(stderr, "vmysql: sql error[7]: %s\n", mysql_error(&mysql_update)); } @@ -948,6 +987,9 @@ if (vauth_open_read() != 0) return; snprintf(SqlBufRead, SQL_BUF_SIZE, "select ip_addr from relay"); +#ifdef SHOW_QUERY + fprintf( stderr, "vupdate_rules query\n%s\n", SqlBufRead ); +#endif if (mysql_query(&mysql_read,SqlBufRead)) { vcreate_relay_table(); if (mysql_query(&mysql_read,SqlBufRead)) { @@ -961,6 +1003,9 @@ } while((row = mysql_fetch_row(res_read))) { snprintf(SqlBufRead, SQL_BUF_SIZE, "%s:allow,RELAYCLIENT=\"\",RBLSMTPD=\"\"\n", row[0]); +#ifdef DUMP_DATA + fprintf( stderr, "\n%s\n", SqlBufRead ); +#endif write(fdm,SqlBufRead, strlen(SqlBufRead)); } mysql_free_result(res_read); @@ -983,6 +1028,9 @@ snprintf( SqlBufUpdate, SQL_BUF_SIZE, "delete from relay where timestamp <= %d", (int)delete_time); +#ifdef SHOW_QUERY + fprintf( stderr, "vclear_open_smtp query\n%s\n", SqlBufUpdate ); +#endif if (mysql_query(&mysql_update,SqlBufUpdate)) { vcreate_relay_table(); return; @@ -1057,6 +1105,9 @@ qnprintf(SqlBufRead, SQL_BUF_SIZE, "select domain from ip_alias_map where ip_addr = '%s'", ip); +#ifdef SHOW_QUERY + fprintf( stderr, "vget_ip_map query\n%s\n", SqlBufRead ); +#endif if (mysql_query(&mysql_read,SqlBufRead)) { return(-1); } @@ -1087,8 +1138,14 @@ qnprintf(SqlBufUpdate,SQL_BUF_SIZE, "replace into ip_alias_map ( ip_addr, domain ) values ( '%s', '%s' )", ip, domain); +#ifdef SHOW_QUERY + fprintf( stderr, "vadd_ip_map query\n%s\n", SqlBufUpdate ); +#endif if (mysql_query(&mysql_update,SqlBufUpdate)) { vcreate_ip_map_table(); +#ifdef SHOW_QUERY + fprintf( stderr, "vadd_ip_map retry\n%s\n", SqlBufUpdate ); +#endif if (mysql_query(&mysql_update,SqlBufUpdate)) { return(-1); } @@ -1110,6 +1167,9 @@ qnprintf( SqlBufUpdate,SQL_BUF_SIZE, "delete from ip_alias_map where ip_addr = '%s' and domain = '%s'", ip, domain); +#ifdef SHOW_QUERY + fprintf( stderr, "vdel_ip_map\n%s\n", SqlBufUpdate ); +#endif if (mysql_query(&mysql_update,SqlBufUpdate)) { return(0); } @@ -1138,6 +1198,9 @@ if (res_read!=NULL) mysql_free_result(res_read); res_read = NULL; +#ifdef SHOW_QUERY + fprintf( stderr, "vshow_ip_map query\n%s\n", SqlBufRead ); +#endif if (mysql_query(&mysql_read,SqlBufRead)) { vcreate_ip_map_table(); if (mysql_query(&mysql_read,SqlBufRead)) { @@ -1184,11 +1247,17 @@ qnprintf(SqlBufRead, SQL_BUF_SIZE, "select %s from dir_control where domain = '%s'", DIR_CONTROL_SELECT, domain ); +#ifdef SHOW_QUERY + fprintf( stderr, "vread_dir_control query\n%s\n", SqlBufRead ); +#endif if (mysql_query(&mysql_read,SqlBufRead)) { vcreate_dir_control(domain); qnprintf(SqlBufRead, SQL_BUF_SIZE, "select %s from dir_control where domain = '%s'", DIR_CONTROL_SELECT, domain ); +#ifdef SHOW_QUERY + fprintf( stderr, "vread_dir_control retry\n%s\n", SqlBufRead ); +#endif if (mysql_query(&mysql_read,SqlBufRead)) { return(-1); } @@ -1221,6 +1290,7 @@ vdir->level_index[2] = atoi(row[14]); strncpy(vdir->the_dir, row[15], MAX_DIR_NAME); + } mysql_free_result(res_read); @@ -1240,6 +1310,28 @@ vdir->level_max = MAX_DIR_LEVELS; vdir->the_dir[0] = 0; } + +#ifdef DUMP_DATA + fprintf( stderr, " curr_users:\t%li\n", vdir->cur_users ); + fprintf( stderr, " level_curr:\t%i\n", vdir->level_cur ); + fprintf( stderr, " level_max:\t%i\n", vdir->level_max ); + + fprintf( stderr, " level_start:\t%i\t%i\t%i\n", + vdir->level_start[0], vdir->level_start[1], + vdir->level_start[2] ); + + fprintf( stderr, " level_end:\t%i\t%i\t%i\n", + vdir->level_end[0], vdir->level_end[1], + vdir->level_end[2] ); + + fprintf( stderr, " level_mod:\t%i\t%i\t%i\n", + vdir->level_mod[0], vdir->level_mod[1], + vdir->level_mod[2] ); + + fprintf( stderr, " level_index:\t%i\t%i\t%i\n", + vdir->level_index[0], vdir->level_index[1], + vdir->level_index[2] ); +#endif return(0); } @@ -1272,8 +1364,14 @@ vdir->level_index[0], vdir->level_index[1], vdir->level_index[2], vdir->the_dir); +#ifdef SHOW_QUERY + fprintf( stderr, "vwrite_dir_control query\n%s\n", SqlBufUpdate ); +#endif if (mysql_query(&mysql_update,SqlBufUpdate)) { vcreate_dir_control(domain); +#ifdef SHOW_QUERY + fprintf( stderr, "vwrite_dir_control retry\n%s\n", SqlBufUpdate ); +#endif if (mysql_query(&mysql_update,SqlBufUpdate)) { fprintf(stderr, "vmysql: sql error[b]: %s\n", mysql_error(&mysql_update)); return(-1); @@ -1304,6 +1402,9 @@ '')\n", domain, MAX_DIR_LEVELS, MAX_DIR_LIST-1, MAX_DIR_LIST-1, MAX_DIR_LIST-1); +#ifdef SHOW_QUERY + fprintf( stderr, "vcreate_dir_control query\n%s\n", SqlBufUpdate ); +#endif if (mysql_query(&mysql_update,SqlBufUpdate)) { fprintf(stderr, "vmysql: sql error[d]: %s\n", mysql_error(&mysql_update)); return; @@ -1323,8 +1424,14 @@ qnprintf(SqlBufUpdate, SQL_BUF_SIZE, "delete from dir_control where domain = '%s'", domain); +#ifdef SHOW_QUERY + fprintf( stderr, "vdel_dir_control query\n%s\n", SqlBufUpdate ); +#endif if (mysql_query(&mysql_update,SqlBufUpdate)) { vcreate_dir_control(domain); +#ifdef SHOW_QUERY + fprintf( stderr, "vdel_dir_control retry\n%s\n", SqlBufUpdate ); +#endif if (mysql_query(&mysql_update,SqlBufUpdate)) { fprintf(stderr, "vmysql: sql error[e]: %s\n", mysql_error(&mysql_update)); return(-1); @@ -1344,8 +1451,14 @@ qnprintf( SqlBufUpdate, SQL_BUF_SIZE, "replace into lastauth set user='%s', domain='%s', \ remote_ip='%s', timestamp=%lu", user, domain, remoteip, time(NULL)); +#ifdef SHOW_QUERY + fprintf( stderr, "vset_lastauth query\n%s\n", SqlBufUpdate ); +#endif if (mysql_query(&mysql_update,SqlBufUpdate)) { vcreate_lastauth_table(); +#ifdef SHOW_QUERY + fprintf( stderr, "vset_lastauth retry\n%s\n", SqlBufUpdate ); +#endif if (mysql_query(&mysql_update,SqlBufUpdate)) { fprintf(stderr, "vmysql: sql error[f]: %s\n", mysql_error(&mysql_update)); } @@ -1368,8 +1481,14 @@ qnprintf( SqlBufRead, SQL_BUF_SIZE, "select timestamp from lastauth where user='%s' and domain='%s'", pw->pw_name, domain); +#ifdef SHOW_QUERY + fprintf( stderr, "vget_lastauty query\n%s\n", SqlBufRead ); +#endif if (mysql_query(&mysql_read,SqlBufRead)) { vcreate_lastauth_table(); +#ifdef SHOW_QUERY + fprintf( stderr, "vget_lastauth retry\n%s\n", SqlBufRead ); +#endif if (mysql_query(&mysql_read,SqlBufRead)) { fprintf(stderr, "vmysql: sql error[g]: %s\n", mysql_error(&mysql_read)); return(0); @@ -1405,8 +1524,14 @@ qnprintf( SqlBufRead, SQL_BUF_SIZE, "select remote_ip from lastauth where user='%s' and domain='%s'", pw->pw_name, domain); +#ifdef SHOW_QUERY + fprintf( stderr, "vget_lastauthip query\n%s\n", SqlBufRead ); +#endif if (mysql_query(&mysql_read,SqlBufRead)) { vcreate_lastauth_table(); +#ifdef SHOW_QUERY + fprintf( stderr, "vget_lastauthip retry\n%s\n", SqlBufRead ); +#endif if (mysql_query(&mysql_read,SqlBufRead)) { fprintf(stderr, "vmysql: sql error[h]: %s\n", mysql_error(&mysql_read)); return(NULL); @@ -1452,8 +1577,14 @@ qnprintf( SqlBufRead, SQL_BUF_SIZE, "select valias_line from valias \ where alias = '%s' and domain = '%s'", alias, domain ); +#ifdef SHOW_QUERY + fprintf( stderr, "valias_select query\n%s\n", SqlBufRead ); +#endif if (mysql_query(&mysql_read,SqlBufRead)) { vcreate_valias_table(); +#ifdef SHOW_QUERY + fprintf( stderr, "valias_select retry\n%s\n", SqlBufRead ); +#endif if (mysql_query(&mysql_read,SqlBufRead)) { fprintf(stderr, "vmysql: sql error[j]: %s\n", mysql_error(&mysql_read)); return(NULL); @@ -1495,8 +1626,14 @@ ( alias, domain, valias_line ) values ( '%s', '%s', '%s')", alias, domain, alias_line ); +#ifdef SHOW_QUERY + fprintf( stderr, "valias_insert query\n%s\n", SqlBufUpdate ); +#endif if (mysql_query(&mysql_update,SqlBufUpdate)) { vcreate_valias_table(); +#ifdef SHOW_QUERY + fprintf( stderr, "valias_insert retry\n%s\n", SqlBufUpdate ); +#endif if (mysql_query(&mysql_update,SqlBufUpdate)) { fprintf(stderr, "vmysql: sql error[k]: %s\n", mysql_error(&mysql_update)); return(-1); @@ -1520,8 +1657,14 @@ "delete from valias where alias = '%s' \ and valias_line = '%s' and domain = '%s'", alias, alias_line, domain ); +#ifdef SHOW_QUERY + fprintf( stderr, "valias_remove query\n%s\n", SqlBufUpdate ); +#endif if (mysql_query(&mysql_update,SqlBufUpdate)) { vcreate_valias_table(); +#ifdef SHOW_QUERY + fprintf( stderr, "valias_remove retry\n%s\n", SqlBufUpdate ); +#endif if (mysql_query(&mysql_update,SqlBufUpdate)) { fprintf(stderr, "vmysql: sql error[l]: %s\n", mysql_error(&mysql_update)); return(-1); @@ -1545,8 +1688,14 @@ "delete from valias where alias = '%s' \ and domain = '%s'", alias, domain ); +#ifdef SHOW_QUERY + fprintf( stderr, "valias_delete query\n%s\n", SqlBufUpdate ); +#endif if (mysql_query(&mysql_update,SqlBufUpdate)) { vcreate_valias_table(); +#ifdef SHOW_QUERY + fprintf( stderr, "valias_delete retry\n%s\n", SqlBufUpdate ); +#endif if (mysql_query(&mysql_update,SqlBufUpdate)) { fprintf(stderr, "vmysql: sql error[l]: %s\n", mysql_error(&mysql_update)); return(-1); @@ -1569,8 +1718,14 @@ "delete from valias where domain = '%s'", domain ); +#ifdef SHOW_QUERY + fprintf( stderr, "valias_delete_domain query\n%s\n", SqlBufUpdate ); +#endif if (mysql_query(&mysql_update,SqlBufUpdate)) { vcreate_valias_table(); +#ifdef SHOW_QUERY + fprintf( stderr, "valias_delete_domain retry\n%s\n", SqlBufUpdate ); +#endif if (mysql_query(&mysql_update,SqlBufUpdate)) { fprintf(stderr, "vmysql: sql error[m]: %s\n", mysql_error(&mysql_update)); return(-1); @@ -1599,8 +1754,14 @@ qnprintf( SqlBufRead, SQL_BUF_SIZE, "select alias, valias_line from valias where domain = '%s' order by alias", domain ); +#ifdef SHOW_QUERY + fprintf( stderr, "vcreate_valias_table query\n%s\n", SqlBufRead ); +#endif if (mysql_query(&mysql_read,SqlBufRead)) { vcreate_valias_table(); +#ifdef SHOW_QUERY + fprintf( stderr, "vcreate_valias_table retry\n%s\n", SqlBufRead ); +#endif if (mysql_query(&mysql_read,SqlBufRead)) { fprintf(stderr, "vmysql: sql error[o]: %s\n", mysql_error(&mysql_read)); return(NULL); @@ -1614,6 +1775,9 @@ { if((row = mysql_fetch_row(res_read))) { strcpy( alias, (row[0])); +#ifdef DUMP_DATA + fprintf(stderr, " alias: %s something: %s\n", row[0], row[1] ); +#endif return(row[1]); } mysql_free_result(res_read); @@ -1633,8 +1797,14 @@ qnprintf( SqlBufRead, SQL_BUF_SIZE, "select distinct alias from valias where domain = '%s' order by alias", domain ); +#ifdef SHOW_QUERY + fprintf( stderr, "valias_select_names query\n%s\n", SqlBufRead ); +#endif if (mysql_query(&mysql_read,SqlBufRead)) { vcreate_valias_table(); +#ifdef SHOW_QUERY + fprintf( stderr, "valias_select_names retry\n%s\n", SqlBufRead ); +#endif if (mysql_query(&mysql_read,SqlBufRead)) { fprintf(stderr, "vmysql: sql error[o]: %s\n", mysql_error(&mysql_read)); return(NULL); @@ -1652,6 +1822,9 @@ { if((row = mysql_fetch_row(res_read))) { strcpy( alias, (row[0])); +#ifdef DUMP_DATA + fprintf(stderr, " alias: %s something: %s\n", row[0], row[1] ); +#endif return(row[1]); } mysql_free_result(res_read); @@ -1691,8 +1864,14 @@ error=%i, timestamp=%d", TheUser, ThePass, TheDomain, TheName, IpAddr, LogLine, verror, (int)mytime); +#ifdef SHOW_QUERY + fprintf( stderr, "logmysql query\n%s\n", SqlBufUpdate ); +#endif if (mysql_query(&mysql_update,SqlBufUpdate)) { vcreate_vlog_table(); +#ifdef SHOW_QUERY + fprintf( stderr, "logmysql retry\n%s\n", SqlBufUpdate ); +#endif if (mysql_query(&mysql_update,SqlBufUpdate)) { fprintf(stderr, "error inserting into vlog table\n"); } @@ -1737,8 +1916,14 @@ "WHERE domain = '%s'", domain); +#ifdef SHOW_QUERY + fprintf( stderr, "vget_limits query\n%s\n", SqlBufRead ); +#endif if (mysql_query(&mysql_read,SqlBufRead)) { vcreate_limits_table(); +#ifdef SHOW_QUERY + fprintf( stderr, "vget_limits retry\n%s\n", SqlBufRead ); +#endif if (mysql_query(&mysql_read,SqlBufRead)) { fprintf(stderr, "vmysql: sql error[p]: %s\n", mysql_error(&mysql_read)); return(-1); @@ -1864,8 +2049,14 @@ limits->perm_quota, limits->perm_defaultquota); +#ifdef SHOW_QUERY + fprintf( stderr, "vset_limits query\n%s\n", SqlBufUpdate ); +#endif if (mysql_query(&mysql_update,SqlBufUpdate)) { vcreate_limits_table(); +#ifdef SHOW_QUERY + fprintf( stderr, "vset_limits retry\n%s\n", SqlBufUpdate ); +#endif if (mysql_query(&mysql_update,SqlBufUpdate)) { fprintf(stderr, "vmysql: sql error[q]: %s\n", mysql_error(&mysql_update)); return(-1); @@ -1883,6 +2074,9 @@ qnprintf(SqlBufUpdate, SQL_BUF_SIZE, "DELETE FROM limits WHERE domain = '%s'", domain); +#ifdef SHOW_QUERY + fprintf( stderr, "vdel_limits query\n%s\n", SqlBufUpdate ); +#endif if (mysql_query(&mysql_update,SqlBufUpdate)) return(-1); return 0; Index: vpopmail.h =================================================================== RCS file: /cvsroot/vpopmail/vpopmail/vpopmail.h,v retrieving revision 1.17 retrieving revision 1.18 diff -u -d -r1.17 -r1.18 --- vpopmail.h 22 May 2004 12:28:21 -0000 1.17 +++ vpopmail.h 4 Jun 2004 02:17:02 -0000 1.18 @@ -19,6 +19,14 @@ #ifndef VPOPMAIL_VPOPMAIL_H #define VPOPMAIL_VPOPMAIL_H +/* Enable expanded debug information. Consider these for ./configure options */ +// Show entry and parms when hitting vpopmail library functions +//#define SHOW_TRACE +// Show database queries +//#define SHOW_QUERY +// Dump returnd data +//#define DUMP_DATA + #define DEFAULT_DOMAIN default_domain() /* max buffer sizes */ Index: ChangeLog =================================================================== RCS file: /cvsroot/vpopmail/vpopmail/ChangeLog,v retrieving revision 1.133 retrieving revision 1.134 diff -u -d -r1.133 -r1.134 --- ChangeLog 27 May 2004 00:52:56 -0000 1.133 +++ ChangeLog 4 Jun 2004 02:17:02 -0000 1.134 @@ -3,6 +3,26 @@ 5.5.2 - unreleased + Rick WIdmer - 3 June 2004 + vpopmail + - In vadddomain program check for existing domain before prompting + for password. + - vget_assign clears the cache when called with a NULL domain. + - Add MIN_LOGIN_INTERVAL to vchkpw.c. If set users must wait this + number of seconds between login attempts. If not the attempt will + fail, and start the time interval again. It may be nasty, but it + keeps coming up on the list... Should this be a ./configure option? + Lastauth logging must be enabled. + - Add new error fields to vcdb.c so it does not fail to compile. oops. + Still need to store error information in the fields as needed. + - Clear sqlerr when defined. + - More work on SHOW_TRACE, SHOW_QUERY, DUMP_DATA. MySQL should be + done now. + + vpopmaild + - Vpopmaild clears the vget_assign cache after delete of domain. + This fixes a bug reported by Rick Macdougall. + Tom Collins - 26 May 2004 - patches from 5.4.4 - Link math lib when compiling for MySQL. - Create ~vpopmail and ~vpopmail/etc in configure script. [930939] |