*/
#include "stdinc.h"
-#include "tools.h"
-#include "s_log.h"
+#include "logger.h"
#include "s_conf.h"
#include "s_newconf.h"
#include "hostmask.h"
#include "client.h"
-#include "irc_string.h"
-#include "memory.h"
+#include "match.h"
#include "hash.h"
/* conf_add_fields()
*
- * inputs - pointer to config item, host/pass/user/operreason fields
+ * inputs - pointer to config item, host/pass/user/operreason/date fields
* output - NONE
* side effects - update respective fields with pointers
*/
static void
conf_add_fields(struct ConfItem *aconf, const char *host_field,
const char *pass_field, const char *user_field,
- const char *operreason_field)
+ const char *operreason_field, const char *date_field)
{
if(host_field != NULL)
- DupString(aconf->host, host_field);
+ aconf->host = rb_strdup(host_field);
if(pass_field != NULL)
- DupString(aconf->passwd, pass_field);
+ {
+ if(!EmptyString(date_field))
+ {
+ aconf->passwd = rb_malloc(strlen(pass_field) + strlen(date_field) + 4);
+ rb_sprintf(aconf->passwd, "%s (%s)", pass_field, date_field);
+ }
+ else
+ aconf->passwd = rb_strdup(pass_field);
+ }
if(user_field != NULL)
- DupString(aconf->user, user_field);
+ aconf->user = rb_strdup(user_field);
if(operreason_field != NULL)
- DupString(aconf->spasswd, operreason_field);
+ aconf->spasswd = rb_strdup(operreason_field);
}
/*
char *reason_field = NULL;
char *operreason_field = NULL;
char *host_field = NULL;
+ char *date_field = NULL;
char line[BUFSIZE];
char *p;
continue;
operreason_field = getfield(NULL);
+ date_field = getfield(NULL);
aconf = make_conf();
aconf->status = CONF_KILL;
conf_add_fields(aconf, host_field, reason_field,
- user_field, operreason_field);
+ user_field, operreason_field, date_field);
if(aconf->host != NULL)
- add_conf_by_address(aconf->host, CONF_KILL, aconf->user, aconf);
+ add_conf_by_address(aconf->host, CONF_KILL, aconf->user, NULL, aconf);
}
}
char *reason_field = NULL;
char *host_field = NULL;
char *operreason_field = NULL;
+ char *date_field = NULL;
char line[BUFSIZE];
char *p;
continue;
operreason_field = getfield(NULL);
+ date_field = getfield(NULL);
aconf = make_conf();
aconf->status = CONF_DLINE;
- conf_add_fields(aconf, host_field, reason_field, "", operreason_field);
+ conf_add_fields(aconf, host_field, reason_field, "", operreason_field, date_field);
conf_add_d_conf(aconf);
}
}
+char *
+xline_encode_spaces(const char *mask)
+{
+ int i, j;
+ int spaces = 0;
+ int backslash = 0;
+ char *encoded;
+
+ for (i = 0; mask[i] != '\0'; i++)
+ if (mask[i] == ' ')
+ spaces++;
+ encoded = rb_malloc(i + spaces + 1);
+ for (i = 0, j = 0; mask[i] != '\0'; i++)
+ {
+ if (mask[i] == '\\')
+ backslash = !backslash;
+ else if (mask[i] == ' ')
+ {
+ if (!backslash)
+ encoded[j++] = '\\';
+ encoded[j++] = 's';
+ backslash = 0;
+ continue;
+ }
+ else
+ backslash = 0;
+ encoded[j++] = mask[i];
+ }
+ return encoded;
+}
+
void
parse_x_file(FILE * file)
{
char *reason_field = NULL;
char line[BUFSIZE];
char *p;
+ char *encoded;
while (fgets(line, sizeof(line), file))
{
continue;
/* sanity checking */
- if((find_xline(gecos_field, 0) != NULL) ||
+ if((find_xline_mask(gecos_field) != NULL) ||
(strchr(reason_field, ':') != NULL))
continue;
+ encoded = xline_encode_spaces(gecos_field);
+ if (find_xline_mask(encoded) != NULL)
+ {
+ rb_free(encoded);
+ continue;
+ }
+
aconf = make_conf();
aconf->status = CONF_XLINE;
- DupString(aconf->name, gecos_field);
- DupString(aconf->passwd, reason_field);
+ aconf->name = encoded;
+ aconf->passwd = rb_strdup(reason_field);
- dlinkAddAlloc(aconf, &xline_conf_list);
+ rb_dlinkAddAlloc(aconf, &xline_conf_list);
}
}
aconf->status = CONF_RESV_CHANNEL;
aconf->port = 0;
- DupString(aconf->name, host_field);
- DupString(aconf->passwd, reason_field);
+ aconf->name = rb_strdup(host_field);
+ aconf->passwd = rb_strdup(reason_field);
add_to_resv_hash(aconf->name, aconf);
}
else if(clean_resv_nick(host_field))
{
- if(find_nick_resv(host_field))
+ if(find_nick_resv_mask(host_field))
continue;
aconf = make_conf();
aconf->status = CONF_RESV_NICK;
aconf->port = 0;
- DupString(aconf->name, host_field);
- DupString(aconf->passwd, reason_field);
- dlinkAddAlloc(aconf, &resv_conf_list);
+ aconf->name = rb_strdup(host_field);
+ aconf->passwd = rb_strdup(reason_field);
+ rb_dlinkAddAlloc(aconf, &resv_conf_list);
}
}
}