* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA
*
- * $Id: bantool.c 26164 2008-10-26 19:52:43Z androsyn $
- *
- *
* The following server admins have either contributed various configs to test against,
* or helped with debugging and feature requests. Many thanks to them.
* stevoo / efnet.port80.se
#include <time.h>
#include "stdinc.h"
-#include "common.h"
#include "rsdb.h"
#define EmptyString(x) ((x == NULL) || (*(x) == '\0'))
-#define CheckEmpty(x) EmptyString(x) ? "" : x
#define BT_VERSION "0.4.1"
/* flags set by command line options */
struct flags
{
- int none;
- int export;
- int import;
- int verify;
- int vacuum;
- int pretend;
- int verbose;
- int wipe;
- int dupes_ok;
-} flag = {YES, NO, NO, NO, NO, NO, NO, NO, NO};
+ bool none;
+ bool export;
+ bool import;
+ bool verify;
+ bool vacuum;
+ bool pretend;
+ bool verbose;
+ bool wipe;
+ bool dupes_ok;
+} flag = {true, false, false, false, false, false, false, false, false};
/* *INDENT-ON* */
static int table_has_rows(const char *table);
static void export_config(const char *conf, int id);
static void import_config(const char *conf, int id);
static void check_schema(void);
-static void print_help(int i_exit);
+static void print_help(int i_exit) __attribute__((noreturn));
static void wipe_schema(void);
static void drop_dupes(const char *user, const char *host, const char *t);
print_help(EXIT_SUCCESS);
break;
case 'i':
- flag.none = NO;
- flag.import = YES;
+ flag.none = false;
+ flag.import = true;
break;
case 'e':
- flag.none = NO;
- flag.export = YES;
+ flag.none = false;
+ flag.export = true;
break;
case 'u':
- flag.none = NO;
- flag.verify = YES;
+ flag.none = false;
+ flag.verify = true;
break;
case 's':
- flag.none = NO;
- flag.vacuum = YES;
+ flag.none = false;
+ flag.vacuum = true;
break;
case 'p':
- flag.pretend = YES;
+ flag.pretend = true;
break;
case 'v':
- flag.verbose = YES;
+ flag.verbose = true;
break;
case 'w':
- flag.wipe = YES;
+ flag.wipe = true;
break;
case 'd':
- flag.dupes_ok = YES;
+ flag.dupes_ok = true;
break;
default: /* '?' */
print_help(EXIT_FAILURE);
rb_strlcpy(etc, ETCPATH, sizeof(ETCPATH));
fprintf(stdout,
- "* ircd-ratbox bantool v.%s ($Id: bantool.c 26164 2008-10-26 19:52:43Z androsyn $)\n",
- BT_VERSION);
+ "* charybdis bantool v.%s\n", BT_VERSION);
- if(flag.pretend == NO)
+ if(flag.pretend == false)
{
if(rsdb_init(db_error_cb) == -1)
{
if(flag.import && flag.wipe)
{
- flag.dupes_ok = YES; /* dont check for dupes if we are wiping the db clean */
+ flag.dupes_ok = true; /* dont check for dupes if we are wiping the db clean */
for(i = 0; i < 3; i++)
fprintf(stdout,
"* WARNING: YOU ARE ABOUT TO WIPE YOUR DATABASE!\n");
wipe_schema();
}
}
- if(flag.verbose && flag.dupes_ok == YES)
+ if(flag.verbose && flag.dupes_ok == true)
fprintf(stdout, "* Allowing duplicate bans...\n");
/* checking for our files to import or export */
for(i = 0; i < LAST_BANDB_TYPE; i++)
{
- rb_snprintf(conf, sizeof(conf), "%s/%s.conf%s",
- etc, bandb_table[i], bandb_suffix[i]);
+ if (snprintf(conf, sizeof(conf), "%s/%s.conf%s",
+ etc, bandb_table[i], bandb_suffix[i]) >= sizeof(conf)) {
+ fprintf(stderr, "* Error: Config filename too long\n");
+ exit(EXIT_FAILURE);
+ }
- if(flag.import && flag.pretend == NO)
+ if(flag.import && flag.pretend == false)
rsdb_transaction(RSDB_TRANS_START);
if(flag.import)
if(flag.export)
export_config(conf, i);
- if(flag.import && flag.pretend == NO)
+ if(flag.import && flag.pretend == false)
rsdb_transaction(RSDB_TRANS_END);
}
if(flag.import)
{
if(count.error && flag.verbose)
- fprintf(stderr, "* I was unable to locate %i config files to import.\n",
+ fprintf(stderr, "* I was unable to locate %u config files to import.\n",
count.error);
- fprintf(stdout, "* Import Stats: Klines: %i, Dlines: %i, Xlines: %i, Resvs: %i \n",
+ fprintf(stdout, "* Import Stats: Klines: %u, Dlines: %u, Xlines: %u, Resvs: %u \n",
count.klines, count.dlines, count.xlines, count.resvs);
fprintf(stdout,
return;
if(strstr(conf, ".perm") != 0)
- rb_snprintf(sql, sizeof(sql),
+ snprintf(sql, sizeof(sql),
"SELECT DISTINCT mask1,mask2,reason,oper,time FROM %s WHERE perm = 1 ORDER BY time",
bandb_table[id]);
else
- rb_snprintf(sql, sizeof(sql),
+ snprintf(sql, sizeof(sql),
"SELECT DISTINCT mask1,mask2,reason,oper,time FROM %s WHERE perm = 0 ORDER BY time",
bandb_table[id]);
{
case BANDB_DLINE:
case BANDB_DLINE_PERM:
- rb_snprintf(buf, sizeof(buf),
+ snprintf(buf, sizeof(buf),
"\"%s\",\"%s\",\"\",\"%s\",\"%s\",%s\n",
table.row[j][mask1],
mangle_reason(table.row[j][reason]),
case BANDB_XLINE:
case BANDB_XLINE_PERM:
- rb_snprintf(buf, sizeof(buf),
+ snprintf(buf, sizeof(buf),
"\"%s\",\"0\",\"%s\",\"%s\",%s\n",
escape_quotes(table.row[j][mask1]),
mangle_reason(table.row[j][reason]),
case BANDB_RESV:
case BANDB_RESV_PERM:
- rb_snprintf(buf, sizeof(buf),
+ snprintf(buf, sizeof(buf),
"\"%s\",\"%s\",\"%s\",%s\n",
table.row[j][mask1],
mangle_reason(table.row[j][reason]),
default: /* Klines */
- rb_snprintf(buf, sizeof(buf),
+ snprintf(buf, sizeof(buf),
"\"%s\",\"%s\",\"%s\",\"\",\"%s\",\"%s\",%s\n",
table.row[j][mask1], table.row[j][mask2],
mangle_reason(table.row[j][reason]),
/* append operreason_field to reason_field */
if(!EmptyString(f_oreason))
- rb_snprintf(newreason, sizeof(newreason), "%s | %s", f_reason, f_oreason);
+ snprintf(newreason, sizeof(newreason), "%s | %s", f_reason, f_oreason);
else
- rb_snprintf(newreason, sizeof(newreason), "%s", f_reason);
+ snprintf(newreason, sizeof(newreason), "%s", f_reason);
- if(flag.pretend == NO)
+ if(flag.pretend == false)
{
- if(flag.dupes_ok == NO)
+ if(flag.dupes_ok == false)
drop_dupes(f_mask1, f_mask2, bandb_table[id]);
rsdb_exec(NULL,
NULL
};
- for(i = 0; i < LAST_BANDB_TYPE; i++)
+ for(i = 0; i < LAST_BANDB_TYPE; i += 2 /* skip over _PERM */)
{
if(!table_exists(bandb_table[i]))
{
columns[j], type);
}
}
-
- i++; /* skip over .perm */
}
}
{
int i;
rsdb_transaction(RSDB_TRANS_START);
- for(i = 0; i < LAST_BANDB_TYPE; i++)
+ for(i = 0; i < LAST_BANDB_TYPE; i += 2 /* double increment to skip over _PERM */)
{
rsdb_exec(NULL, "DROP TABLE %s", bandb_table[i]);
- i++; /* double increment to skip over .perm */
}
rsdb_transaction(RSDB_TRANS_END);
lt = gmtime(&t);
if(lt == NULL)
return NULL;
- rb_snprintf(buf, sizeof(buf), "%d/%d/%d %02d.%02d",
+ snprintf(buf, sizeof(buf), "%d/%d/%d %02d.%02d",
lt->tm_year + 1900, lt->tm_mon + 1, lt->tm_mday, lt->tm_hour, lt->tm_min);
return buf;
}
void
print_help(int i_exit)
{
- fprintf(stderr, "bantool v.%s - the ircd-ratbox database tool.\n", BT_VERSION);
+ fprintf(stderr, "bantool v.%s - the charybdis database tool.\n", BT_VERSION);
fprintf(stderr, "Copyright (C) 2008 Daniel J Reidy <dubkat@gmail.com>\n");
- fprintf(stderr, "$Id: bantool.c 26164 2008-10-26 19:52:43Z androsyn $\n\n");
fprintf(stderr, "This program is distributed in the hope that it will be useful,\n"
"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"