struct ConnectionClass *c_class;
struct DenyConf *dconf;
struct ServerConf *sconf;
- struct qline *qconf = NULL;
struct s_map *smap;
struct Privs privs;
struct Privs privs_dirty;
%token USERMODE
%token IAUTH
%token TIMEOUT
+%token FAST
/* and now a lot of privileges... */
%token TPRIV_CHAN_LIMIT TPRIV_MODE_LCHAN TPRIV_DEOP_LCHAN TPRIV_WALK_LCHAN
%token TPRIV_LOCAL_KILL TPRIV_REHASH TPRIV_RESTART TPRIV_DIE
MyFree(username);
MyFree(host);
MyFree(ip);
+ MyFree(pass);
} else {
struct ConfItem *aconf = make_conf(CONF_CLIENT);
aconf->username = username;
aconf->name = ip;
aconf->conn_class = c_class ? c_class : find_class("default");
aconf->maximum = maxlinks;
+ aconf->passwd = pass;
}
host = NULL;
username = NULL;
c_class = NULL;
ip = NULL;
+ pass = NULL;
};
clientitems: clientitem clientitems | clientitem;
clientitem: clienthost | clientip | clientusername | clientclass | clientpass | clientmaxlinks | error;
else
{
u = $3;
- h++;
+ *h++ = '\0';
}
DupString(dconf->hostmask, h);
DupString(dconf->usermask, u);
stringlist[stringno++] = $1;
};
-quarantineblock: QUARANTINE '{'
-{
- qconf = (struct qline*) MyCalloc(1, sizeof(*qconf));
-} quarantineitems '}' ';'
+quarantineblock: QUARANTINE '{' quarantineitems '}' ';';
+quarantineitems: quarantineitems quarantineitem | quarantineitem;
+quarantineitem: QSTRING '=' QSTRING ';'
{
- if (qconf->chname == NULL || qconf->reason == NULL)
- {
- parse_error("quarantine blocks need a channel name and a reason.");
- return 0;
- }
+ struct qline *qconf = MyCalloc(1, sizeof(*qconf));
+ DupString(qconf->chname, $1);
+ DupString(qconf->reason, $3);
qconf->next = GlobalQuarantineList;
GlobalQuarantineList = qconf;
- qconf = NULL;
-};
-
-quarantineitems: CHANNEL NAME '=' QSTRING ';'
-{
- DupString(qconf->chname, $4);
-} | REASON '=' QSTRING ';'
-{
- DupString(qconf->reason, $3);
};
pseudoblock: PSEUDO QSTRING '{'
};
pseudoitems: pseudoitem pseudoitems | pseudoitem;
-pseudoitem: pseudoname | pseudoprepend | pseudonick | error;
+pseudoitem: pseudoname | pseudoprepend | pseudonick | pseudoflags | error;
pseudoname: NAME '=' QSTRING ';'
{
DupString(smap->name, $3);
smap->services = nh;
}
};
+pseudoflags: FAST ';'
+{
+ smap->flags |= SMAP_FAST;
+};
iauthblock: IAUTH '{'
{