atheme-legacy / tethys Goto Github PK
View Code? Open in Web Editor NEWa next-generation replacement for charybdis
License: MIT License
a next-generation replacement for charybdis
License: MIT License
please rectify immediately
u_sendto_chan_pfx
Something like this would be nice:
u_sendto_chan_pfx(chan, conn, ST_ALL, CU_PFX_VOICE,
":%H PRIVMSG +%C :%s", src, tgt, text);
It would also be useful in this situation:
u_sendto_chan_pfx(c, NULL, ST_USERS, CU_PFX_OP
":%H MODE %C %s%s", u, c, m.op.buf, m.op.data);
i.e., issue #4
This is essential for proper implementation of away-notify, account-notify, extended-join, etc., i.e. issue #8
Ever since moving from a custom built event loop built on select(3) to mowgli.eventloop, all subsystems that are part of conn.c (conn, origin, toplev) have been broken in subtle ways.
Because the design of conn.c is very closely linked to the API of the event loop, much of conn.c will have to be redone.
This would be either all channel operators, or if free invite is set, all members of the channel.
These don't even exist yet.
MODE #foo +x
(or any other unknown mode char) should send an ERR_UNKNOWNMODE numeric back to the user. Currently these are simply ignored. (Marked with a TODO in https://github.com/atheme/tethys/blob/master/src/mode.c#L86)
The first time a user sends a message that is blocked in a channel with +z, they should be notified that their message was only sent to chanops.
fluttershy ~ > nc 127.0.0.1 6667
> :fluttershy-tethys.yolo-swag.com NOTICE * :*** Looking up your hostname
> :fluttershy-tethys.yolo-swag.com NOTICE * :*** Found your hostname: localhost
< NICK TEST
< USER a a a a
> :fluttershy-tethys.yolo-swag.com 001 TEST :Welcome to the ShadowNET Internet Relay Chat Network TEST
> :fluttershy-tethys.yolo-swag.com 002 TEST :Your host is fluttershy-tethys.yolo-swag.com, running version Tethys-0.1-alpha1
> :fluttershy-tethys.yolo-swag.com 003 TEST :This server was born on Sun Jun 01 at 22:11:46 UTC
> :fluttershy-tethys.yolo-swag.com 005 TEST PREFIX=(ov)@+ CHANTYPES=#& CHANMODES=beIq,k,fl,cgimnpstz MODES=4 MAXLIST=50 CASEMAPPING=rfc1459 NICKLEN=20 TOPICLEN=250 CHANNELLEN=50 AWAYLEN=256 MAXTARGETS=1 EXCEPTS INVEX FNC WHOX :are supported by this server
> :fluttershy-tethys.yolo-swag.com 422 TEST :MOTD missing
< MODE TEST +R
< MODE TEST -i
< MODE TEST +i
> :TEST MODE TEST +i
< QUIT
> :TEST!a@localhost QUIT :Client Quit
IMO there's no real point to add WATCH
too. Should just focus on MONITOR
.
Like, NETWORK=AJITEK
As in the umode +x/h cloaking that charybdis has. The existing module could be ported over if the correct hooks are added, but would a rewrite from scratch be preferable?
When /MODE is used to change the invex or banex lists on a channel, the changes are broadcast to all users on the channel, which is "incorrect" in the sense that it does not fully hide the +eI lists from normal channel users.
-vvv:
[2014/01/15 19:25:36] Tethys-0.1-alpha1 starting...
[2014/01/15 19:25:36] Seeding random number generator...
[2014/01/15 19:25:36] HOOK: 0x00011648(0x00000000) to module:unload
[2014/01/15 19:25:36] HOOK: 0x000128c4(0x00000000) to conf:end
[2014/01/15 19:25:36] HOOK: 0x000145f8(0x00000000) to module:unload
[2014/01/15 19:25:36] HOOK:CALL: conf:start
[2014/01/15 19:25:36] conf: module=core/c_42
[2014/01/15 19:25:36] Loading module core/c_42
[2014/01/15 19:25:36] HOOK:CALL: module:load
[2014/01/15 19:25:36] conf: me.name=pinkie.yolo-swag.com
[2014/01/15 19:25:36] server_conf: me.name=pinkie.yolo-swag.com
[2014/01/15 19:25:36] conf: me.sid=0HI
[2014/01/15 19:25:36] server_conf: me.sid=0HI
[2014/01/15 19:25:36] conf: me.desc=More SUGAR!
[2014/01/15 19:25:36] server_conf: me.desc=More SUGAR!
[2014/01/15 19:25:36] conf: me.net=ShadowNET
[2014/01/15 19:25:36] server_conf: me.net=ShadowNET
[2014/01/15 19:25:36] conf: me.motd=etc/tethys.motd
[2014/01/15 19:25:36] Loading MOTD from etc/tethys.motd
[2014/01/15 19:25:36] !!! ERROR: Could not open MOTD file etc/tethys.motd
[2014/01/15 19:25:36] conf: admin.loc1=Alex Iadicicco
[2014/01/15 19:25:36] conf: admin.loc2=http://github.com/aji
[2014/01/15 19:25:36] conf: admin.email=yes@hello
[2014/01/15 19:25:36] conf: listen=6665-6669
[2014/01/15 19:25:36] Listening on 6665
[2014/01/15 19:25:36] Listening on 6666
[2014/01/15 19:25:36] Listening on 6667
[2014/01/15 19:25:36] Listening on 6668
[2014/01/15 19:25:36] Listening on 6669
[2014/01/15 19:25:36] conf: class=users
[2014/01/15 19:25:36] conf: class.timeout=300
[2014/01/15 19:25:36] conf: class=server
[2014/01/15 19:25:36] conf: class.timeout=900
[2014/01/15 19:25:36] conf: auth=local
[2014/01/15 19:25:36] conf: auth.class=users
[2014/01/15 19:25:36] conf: auth.cidr=127.0.0.1/32
[2014/01/15 19:25:36] conf: auth=lan
[2014/01/15 19:25:36] conf: auth.class=users
[2014/01/15 19:25:36] conf: auth.cidr=192.168.0.0/16
[2014/01/15 19:25:36] conf: auth=world
[2014/01/15 19:25:36] conf: auth.class=users
[2014/01/15 19:25:36] conf: auth.cidr=0.0.0.0/0
[2014/01/15 19:25:36] conf: oper=jilles
[2014/01/15 19:25:36] conf: oper.password=machinegod
[2014/01/15 19:25:36] conf: oper.auth=local
[2014/01/15 19:25:36] conf: link=cod.yolo-swag.com
[2014/01/15 19:25:36] conf: link.host=127.0.0.1
[2014/01/15 19:25:36] conf: link.sendpass=soup
[2014/01/15 19:25:36] conf: link.recvpass=soup
[2014/01/15 19:25:36] conf: link.class=server
[2014/01/15 19:25:36] HOOK:CALL: conf:end
[2014/01/15 19:25:36] 0x000128c4(0x00000000, 0x002ae030)
[2014/01/15 19:25:36] Entering IO loop
[2014/01/15 19:25:40] [*] <- :pinkie.yolo-swag.com NOTICE * :*** Looking up your hostname
[2014/01/15 19:25:40] [*] need_recv=true need_send=true
[2014/01/15 19:25:40] [*] <- :pinkie.yolo-swag.com NOTICE * :*** Couldn't find your hostname: No such domain. Using your ip 127.0.0.1
[2014/01/15 19:25:40] [*] need_recv=true need_send=true
[2014/01/15 19:25:40] [*] need_recv=true need_send=true
[2014/01/15 19:25:40] Connection from 127.0.0.1
[2014/01/15 19:25:40] [*] need_recv=true need_send=false
[2014/01/15 19:25:40] [*] -> PASS soup TS 6 :420
[2014/01/15 19:25:40] (none) INVOKE PASS [0x0000d808]
[2014/01/15 19:25:40] New local server sid=420
[2014/01/15 19:25:40] [] need_recv=true need_send=false
[2014/01/15 19:25:40] [] -> CAPAB :QS EX IE KLN UNKLN ENCAP SERVICES EUID EOPMOD
[2014/01/15 19:25:40] INVOKE CAPAB [0x0000d244]
[2014/01/15 19:25:40] [] need_recv=true need_send=false
[2014/01/15 19:25:40] [] -> SERVER cod.yolo-swag.com 1 :Today's future tomorrow
[2014/01/15 19:25:40] INVOKE SERVER [0x0000d15c]
[2014/01/15 19:25:40] roster[\31]: :%S SID %s %d %s :%s
[2014/01/15 19:25:40] [cod.yolo-swag.com] <- PASS soup TS 6 :0HI
[2014/01/15 19:25:40] [cod.yolo-swag.com] need_recv=true need_send=true
[2014/01/15 19:25:40] [cod.yolo-swag.com] <- CAPAB :QS EX CHW IE EOB KLN UNKLN KNOCK TB ENCAP SERVICES SAVE EUID
[2014/01/15 19:25:40] [cod.yolo-swag.com] need_recv=true need_send=true
[2014/01/15 19:25:40] [cod.yolo-swag.com] <- SERVER pinkie.yolo-swag.com 1 :More SUGAR!
[2014/01/15 19:25:40] [cod.yolo-swag.com] need_recv=true need_send=true
[2014/01/15 19:25:40] [cod.yolo-swag.com] <- SVINFO 6 6 0 :1389839140
[2014/01/15 19:25:40] [cod.yolo-swag.com] need_recv=true need_send=true
[2014/01/15 19:25:40] [cod.yolo-swag.com] <- :0HI PING pinkie.yolo-swag.com cod.yolo-swag.com
[2014/01/15 19:25:40] [cod.yolo-swag.com] need_recv=true need_send=true
[2014/01/15 19:25:40] Adding cod.yolo-swag.com to servers_by_name
[2014/01/15 19:25:40] [cod.yolo-swag.com] need_recv=true need_send=true
[2014/01/15 19:25:40] [cod.yolo-swag.com] need_recv=true need_send=false
[2014/01/15 19:25:40] [cod.yolo-swag.com] -> :420 EUID Ash 1 1389839140 +o user host 0 420100000 * * :Real name
[2014/01/15 19:25:40] cod.yolo-swag.com INVOKE EUID [0x0000de88]
[2014/01/15 19:25:40] New remote user uid=420100000
[2014/01/15 19:25:40] roster[\31]: :%E KILL %U%s
[2014/01/15 19:25:40] roster[\31]: %s
[2014/01/15 19:25:40] [cod.yolo-swag.com] need_recv=true need_send=false
[2014/01/15 19:25:40] !!! ERROR: toplev_recv: recv: Connection reset by peer
[2014/01/15 19:25:40] CONN:ERR: [0x002af150] ERR="Read error"
[2014/01/15 19:25:40] [cod.yolo-swag.com] <- ERROR :Read error
[2014/01/15 19:25:40] Unlinking server sid=420 (cod.yolo-swag.com)
[2014/01/15 19:25:40] Removing cod.yolo-swag.com from all rosters
[2014/01/15 19:25:40] Unlinking user uid=420100000 (Ash)
[2014/01/15 19:25:40] [*] need_recv=false need_send=true
[2014/01/15 19:25:40] !!! ERROR: toplev_send: send: Broken pipe
[2014/01/15 19:25:40] !!! ERROR: toplev_send: send: Broken pipe
[2014/01/15 19:25:40] !!! ERROR: toplev_send: send: Broken pipe
[2014/01/15 19:25:40] !!! ERROR: toplev_send: send: Broken pipe
[2014/01/15 19:25:40] !!! ERROR: toplev_send: send: Broken pipe
[2014/01/15 19:25:40] !!! ERROR: toplev_send: send: Broken pipe
It will repeat that line until killed.
My test TS6 connection code is here. To run it check out the tethys-test
branch and run $(env python2) test.py
in the src
folder.
see also charybdis/inspircd security model. yeah, implement that here and stuff.
Reason for using +S: That's what ircd-seven uses and as far as I know it's the only channel mode that's been used for SSL-only channels, besides +z.
/LIST is not quite up to par with charybdis
Not a priority, but would look cool
There are a large number of TS testing rules for joins, nick changes, etc. that go completely ignored in micro. This is especially problematic since other servers are expecting micro to perform the right collision rules.
When this was moved from the internal implementation to the libmowgli-2 implementation, RDNS requests stopped working. This could possibly be a bug in libmowgli-2, but as the async_resolver example in libmowgli-2 works fine, it is probably more likely that something is wrong with Tethys' usage of it.
Tethys appears to send MAXLIST=50
in RPL_ISUPPORT
(005
), which doesn't look right. For one, Limnoria chokes on that. freenode sends MAXLIST=bqeI:100
.
From http://www.irc.org/tech_docs/005.html:
Parameter Value Servers Explanation Example MAXLIST mode:num[,mode:num,...] all Maximum number entries in the list per mode. MAXLIST=beI:30 (IRCNet)
Do not allocate client data structures until registration
Currently, micro cannot make outgoing connections to servers.
A good feature to add: reasons in the ban lists
Cannot join to #test: Banned: Ban evasion
PASS and USER handling code should be sufficiently modularized to better enable alternative authentication methods.
This functionality will load an updated process image in place of the currently running one, while preserving any open connections.
This could either:
Closer integration of Atheme to Tethys
Discuss more options
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.