projects
/
ircu2.10.12-pk.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
implemented custom KeepConn Time Mode (+K <time>) and relay command for external...
[ircu2.10.12-pk.git]
/
ircd
/
s_user.c
diff --git
a/ircd/s_user.c
b/ircd/s_user.c
index 96d88a15e3db5ab173052a8a5c78159063c90e8f..60144878d25c049b891de1092960fc78262bca20 100644
(file)
--- a/
ircd/s_user.c
+++ b/
ircd/s_user.c
@@
-589,6
+589,7
@@
static const struct UserMode {
{ FLAG_WEBIRC, 'W' },
{ FLAG_SEE_IDLETIME,'t' },
{ FLAG_SECURITY_SERV,'D' },
{ FLAG_WEBIRC, 'W' },
{ FLAG_SEE_IDLETIME,'t' },
{ FLAG_SECURITY_SERV,'D' },
+ { FLAG_KEEPCONN_ENABLED, 'K' },
{ FLAG_HIDDENHOST, 'x' },
{ FLAG_NOTCONN, 'Z' }
};
{ FLAG_HIDDENHOST, 'x' },
{ FLAG_NOTCONN, 'Z' }
};
@@
-1135,7
+1136,7
@@
int set_user_mode(struct Client *cptr, struct Client *sptr, int parc,
char buf[BUFSIZE];
int prop = 0;
int do_host_hiding = 0;
char buf[BUFSIZE];
int prop = 0;
int do_host_hiding = 0;
- char* account = NULL, *fakehost = NULL;
+ char* account = NULL, *fakehost = NULL
, *keepconn = NULL
;
struct Membership *chan;
what = MODE_ADD;
struct Membership *chan;
what = MODE_ADD;
@@
-1307,6
+1308,16
@@
int set_user_mode(struct Client *cptr, struct Client *sptr, int parc,
else
ClearWebIRC(sptr);
break;
else
ClearWebIRC(sptr);
break;
+ case 'K':
+ if (what == MODE_ADD) {
+ if(*(p + 1) == 0)
+ break;
+ keepconn = *(++p);
+ SetKeepConnEnabled(sptr);
+ } else {
+ ClearKeepConnEnabled(sptr);
+ }
+ break;
case 'r':
if (*(p + 1) && (what == MODE_ADD)) {
account = *(++p);
case 'r':
if (*(p + 1) && (what == MODE_ADD)) {
account = *(++p);
@@
-1383,6
+1394,8
@@
int set_user_mode(struct Client *cptr, struct Client *sptr, int parc,
ClearHiddenOper(sptr);
if (!FlagHas(&setflags, FLAG_OVERRIDECC) && IsOverrideCC(sptr) && !HasPriv(sptr, PRIV_UMODE_OVERRIDECC))
ClearOverrideCC(sptr);
ClearHiddenOper(sptr);
if (!FlagHas(&setflags, FLAG_OVERRIDECC) && IsOverrideCC(sptr) && !HasPriv(sptr, PRIV_UMODE_OVERRIDECC))
ClearOverrideCC(sptr);
+ if (!FlagHas(&setflags, FLAG_KEEPCONN_ENABLED) && IsKeepConnEnabled(sptr) && !HasPriv(sptr, PRIV_SET_KEEPCONN))
+ ClearKeepConnEnabled(sptr);
/* Opers are able to fake the webirc usermode only if FEAT_FAKE_WEBIRC is true. */
if (!FlagHas(&setflags, FLAG_WEBIRC) && IsWebIRC(sptr) && !(feature_bool(FEAT_FAKE_WEBIRC) && IsOper(sptr)))
ClearWebIRC(sptr);
/* Opers are able to fake the webirc usermode only if FEAT_FAKE_WEBIRC is true. */
if (!FlagHas(&setflags, FLAG_WEBIRC) && IsWebIRC(sptr) && !(feature_bool(FEAT_FAKE_WEBIRC) && IsOper(sptr)))
ClearWebIRC(sptr);
@@
-1443,6
+1456,9
@@
int set_user_mode(struct Client *cptr, struct Client *sptr, int parc,
if (!FlagHas(&setflags, FLAG_FAKEHOST) && IsFakeHost(sptr)) {
ircd_strncpy(cli_user(sptr)->fakehost, fakehost, HOSTLEN);
}
if (!FlagHas(&setflags, FLAG_FAKEHOST) && IsFakeHost(sptr)) {
ircd_strncpy(cli_user(sptr)->fakehost, fakehost, HOSTLEN);
}
+ if (!FlagHas(&setflags, FLAG_KEEPCONN_ENABLED) && IsKeepConnEnabled(sptr)) {
+ sptr->keepconn = atoi(keepconn);
+ }
if (IsRegistered(sptr)) {
if(do_host_hiding)
if (IsRegistered(sptr)) {
if(do_host_hiding)