Code Monkey home page Code Monkey logo

oftc-hybrid's Introduction

OFTC

OFTC

Welcome to OFTC, the Open and Free Technology Community.

Our main web presence is at https://www.oftc.net/, including instructions how to connect to our IRC network at irc.oftc.net.

Support

Stop by on #oftc or mail [email protected] if you have any questions regarding operation of the network.

Use this GitHub repository to report general issues with OFTC that are not specific to the other repositories here. Do not submit any passwords or other account data here, issues reported are publically visible.

oftc-hybrid's People

Contributors

adam- avatar ahf avatar cryogen avatar df7cb avatar dwfreed avatar emersion avatar grawity avatar keaston avatar mutantmonkey avatar rmcintosh avatar rnowak avatar svetlana-t avatar tjfontaine avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

oftc-hybrid's Issues

ACCEPT users on messaging with CALLERID enabled

Currently when I /msg someone with umode +g, I need to remember to ACCEPT them or I won't receive their response(s).

It would be more logical if messaging another user automatically ACCEPTed them and I think this is what users expect to happen. This is the behaviour on some other IRCds such as Charybdis and possibly InspIRCd (I am not fully sure).

+z overrides +n

/quote help cmode

"+z - 'Op moderated'. Messages of clients not voiced or op’d go to channel operators."

"+n - 'No external messages'. This will prevent any user who isn't in the channel from sending messages to the channel."

When +n and +z are set, messages from outside get sent to ops instead of being blocked by +n. This differs, for example, from Charybdis's implementation and may be confusing for users. I would recommend at least adding this information to the "help cmode" entry.

remote listener enable

we should be able to enable/disable a listener interface on a remote server, instead of requiring a configuration rehash

Add a user mode that only lets the user speak to operators

This user mode would only be set by servers (similar to how +R works) this theoretical +T mode would only let a user speak to an operator (+o or +P) and wouldn't let them join any new channels, and wouldn't let them speak in any channels they are currently in.

I'm not sure if I care if they are notified or not that they can't speak, though I'm kinda in favor of not telling them.

Feature request: forward PASS command to Services

I would like to login by specifying my password in the pass command, maybe in form of username:password which is widely supported by other networks.

Even better would be supporting SASL PLAIN.

I am not sure if these are issues with OFTC-hybrid or OFTC-IRCServices while they likely require support from both.

Letting users join/message regardless of registration (+R) requirement?

Channel ops with Matrix users on their channels at times ask how it's possible to reduce IRC spam while still allowing Matrix users to join easily e.g. at matrix-org/matrix-appservice-irc#716 .

Is this possible with OFTC-Hybrid or can it become possible?

The solutions on matrix-appservice-irc wiki currently mostly suggests Charybdis specific modes:

  • a mode to require TLS connections, I don't see equivalent in /quote help cmode
  • an extban for muting unidentified users and a ban exception for Matrix users, /quote help extban doesn't find help and I don't see indication in /quote help cmode that this is supported
  • two quiet solutions, but I don't see quiets in the help (but I see them in /msg ChanServ help?)
  • an external bot which I imagine could work, but it's the least popular solution from what I can see.

Typing this issue, I think I may have found a solution:

-- cmode : +M - 'Speak only if registered'. Client may speak only when registered and
-- cmode : identified to NickServ.

Can +v override +M? Do OFTC-IRCservices allow giving autovoice to everyone connecting from a specific IP range or hosts with wildcards (or however you define Matrix users)? How?

hunt_server() with wildcard hits wrong server

/quote shedding quantum* 60 0 :Server maintenance
!oxygen User shedding ENABLED by Myon ([email protected]); interval: 60 seconds, opers: no, reason: "Server maintenance" [helix]
/quote shedding quantum* off
!oxygen User shedding DISABLED by Myon ([email protected]) [helix]
/quote shedding quantum.oftc.net 60 0 :Server maintenance
!quantum User shedding ENABLED by Myon ([email protected]); interval: 60 seconds, opers: no, reason: "Server maintenance" [helix]

Use the IP_FREEBIND setsockopt(2) option

We should look into using IP_FREEBIND so the ipv6 listeners come up more reliably on system boot. Currently hybrid tends to need a reload to listen on the v6 addresses.

(Thanks to Martin Pitt for the suggestion.)

Disable idle-kline prevention for authenticated users

There are various reasons why one would want to reset the idle timer, and PRIVMSG self is the usual way to do this. However, https://github.com/oftc/oftc-hybrid/blob/develop/modules/core/m_message.c#L607 explicitly prevents this, apparently to guard against "idle-kline circumvention".

Maybe this prevention could be put in place only against unauthenticated users, such that those authenticated with Services can reset their idle timers as they desire?

Thanks to @setharnold for hand-holding and finding the code.

spy modules schizophrenia

Commit 8a2ba98 removes the spy modules with the comment "not necessary anymore", but master and develop seem to have reverted this change, i.e. the files are still there, including the src/modules.c logic. But the files are not contained in the release tarballs. We should fix this.

Fails to build on bullseye as is (gcc 10)

m_sjoin.c: In function 'ms_sjoin':
m_sjoin.c:559:19: error: writing 1 byte into a region of size 0 [-Werror=stringop-overflow=]
  559 |   *(nick_ptr - 1) = '\0';
      |   ~~~~~~~~~~~~~~~~^~~~~~
m_sjoin.c:120:8: note: at offset -1 to object 'nick_buf' with size 512 declared here
  120 |   char nick_buf[IRCD_BUFSIZE]; /* buffer for modes and prefix */
      |        ^~~~~~~~
m_sjoin.c:560:18: error: writing 1 byte into a region of size 0 [-Werror=stringop-overflow=]
  560 |   *(uid_ptr - 1) = '\0';
      |   ~~~~~~~~~~~~~~~^~~~~~
m_sjoin.c:121:8: note: at offset -1 to object 'uid_buf' with size 512 declared here
  121 |   char uid_buf[IRCD_BUFSIZE];  /* buffer for modes/prefixes for CAP_TS6 servers */
      |        ^~~~~~~
cc1: all warnings being treated as errors

This could be worked around by removing -Werror, or by passing -Wno-error=stringop-overflow and -Wno-error=array-parameter.

RPL_LOAD2HI (263) doesn't include command name

This makes it difficult for clients to figure out which command was the culprit. e.g. if a client sends WHO and LIST together, how to know which one completed and which one timed out?

This is non-conformant per RFC 2812.

Ref:

OFTC sends things like:

:kinetic.oftc.net 263 soju-test-user :Server load is temporarily too heavy. Please wait a while and try again.

New X-Line triggers crash

Adding an X-line while a matching user was connected triggered this:

Sun Nov 27 12:57:31 2016 helix.oftc.net Activating Cloak: tor-exit.dhalgren.org -> 4G4AAA6AQ.tor-irc.dnsbl.oftc.net for ACCOUNTS_PC-101
Mon Nov 28 18:58:24 2016 helix.oftc.net X-line Rejecting [zodiac] [reserved gecos/realname #17], user ACCOUNTS_PC-101[[email protected]] [85.25.103.69]
Program terminated with signal SIGSEGV, Segmentation fault.
#0  0x00007f687c36fdcc in _IO_vfprintf_internal (s=s@entry=0x7fff32387a10, 
    format=<optimized out>, 
    format@entry=0x446ce0 "XLINE %s@%s (%s) active for %s", 
    ap=ap@entry=0x7fff32387b88) at vfprintf.c:1642
1642	vfprintf.c: No such file or directory.
(gdb) bt
#0  0x00007f687c36fdcc in _IO_vfprintf_internal (s=s@entry=0x7fff32387a10, 
    format=<optimized out>, 
    format@entry=0x446ce0 "XLINE %s@%s (%s) active for %s", 
    ap=ap@entry=0x7fff32387b88) at vfprintf.c:1642
#1  0x00007f687c397409 in _IO_vsnprintf (
    string=string@entry=0x7fff32387ba0 "XLINE (null)@", maxlen=<optimized out>, 
    maxlen@entry=512, format=0x446ce0 "XLINE %s@%s (%s) active for %s", 
    args=args@entry=0x7fff32387b88) at vsnprintf.c:119
#2  0x000000000042f079 in sendto_gnotice_flags (flags=1, level=0, 
    origin=0x91b978 <me+184> "helix.oftc.net", source_p=0x91b8c0 <me>, 
    client_p=0x0, pattern=<optimized out>) at send.c:1126
#3  0x0000000000411f13 in check_conf_klines () at client.c:475
#4  0x000000000040b84d in io_loop () at ircd.c:273
#5  main (argc=0, argv=0x7fff32388218) at ircd.c:748
(gdb) l
1637	in vfprintf.c
(gdb) f 2
#2  0x000000000042f079 in sendto_gnotice_flags (flags=1, level=0, 
    origin=0x91b978 <me+184> "helix.oftc.net", source_p=0x91b8c0 <me>, 
    client_p=0x0, pattern=<optimized out>) at send.c:1126
1126	  vsnprintf(nbuf, IRCD_BUFSIZE, pattern, args);
(gdb) p me
$1 = {node = {data = 0x91b8c0 <me>, prev = 0x7f687d601c60, next = 0x0}, lnode = {
    data = 0x0, prev = 0x0, next = 0x0}, hnext = 0x0, idhnext = 0x0, 
  serv = 0xcb7540, servptr = 0x91b8c0 <me>, from = 0x91b8c0 <me>, whowas = 0x0, 
  lasttime = 1477860292, firsttime = 1477860292, since = 1477860292, tsinfo = 0, 
  umodestime = 0, connect_id = 0, umodes = 0, flags = 0, hopcount = 0, status = 4, 
  handler = 0 '\000', serial = 0, lazyLinkClientExists = 0, away = 0x0, 
  name = "helix.oftc.net", '\000' <repeats 49 times>, 
  id = "4G4\000\000\000\000\000\000\000\000\000", 
  llname = '\000' <repeats 30 times>, 
  username = "\000\000\000\000\000\000\000\000\000\000", 
  host = '\000' <repeats 63 times>, 
  info = "Ume\303\245, Sweden", '\000' <repeats 37 times>, 
  client_host = '\000' <repeats 63 times>, 
  client_server = '\000' <repeats 63 times>, sockhost = '\000' <repeats 53 times>, 
  realhost = '\000' <repeats 62 times>, allow_list = {head = 0x0, tail = 0x0, 
    length = 0}, on_allow_list = {head = 0x0, tail = 0x0, length = 0}, channel = {
    head = 0x0, tail = 0x0, length = 0}, localClient = 0x91f0c0 <meLocalUser>, 
  ip = {ss = {ss_family = 0, __ss_align = 0, 
      __ss_padding = '\000' <repeats 111 times>}, ss_len = 0 '\000', ss_port = 0}, 
  aftype = 0, certfp = '\000' <repeats 40 times>}
(gdb) p source_p 
$2 = (struct Client *) 0x91b8c0 <me>
(gdb) p *source_p 
$3 = {node = {data = 0x91b8c0 <me>, prev = 0x7f687d601c60, next = 0x0}, lnode = {
    data = 0x0, prev = 0x0, next = 0x0}, hnext = 0x0, idhnext = 0x0, 
  serv = 0xcb7540, servptr = 0x91b8c0 <me>, from = 0x91b8c0 <me>, whowas = 0x0, 
  lasttime = 1477860292, firsttime = 1477860292, since = 1477860292, tsinfo = 0, 
  umodestime = 0, connect_id = 0, umodes = 0, flags = 0, hopcount = 0, status = 4, 
  handler = 0 '\000', serial = 0, lazyLinkClientExists = 0, away = 0x0, 
  name = "helix.oftc.net", '\000' <repeats 49 times>, 
  id = "4G4\000\000\000\000\000\000\000\000\000", 
  llname = '\000' <repeats 30 times>, 
  username = "\000\000\000\000\000\000\000\000\000\000", 
  host = '\000' <repeats 63 times>, 
  info = "Ume\303\245, Sweden", '\000' <repeats 37 times>, 
  client_host = '\000' <repeats 63 times>, 
  client_server = '\000' <repeats 63 times>, sockhost = '\000' <repeats 53 times>, 
  realhost = '\000' <repeats 62 times>, allow_list = {head = 0x0, tail = 0x0, 
    length = 0}, on_allow_list = {head = 0x0, tail = 0x0, length = 0}, channel = {
    head = 0x0, tail = 0x0, length = 0}, localClient = 0x91f0c0 <meLocalUser>, 
  ip = {ss = {ss_family = 0, __ss_align = 0, 
      __ss_padding = '\000' <repeats 111 times>}, ss_len = 0 '\000', ss_port = 0}, 
  aftype = 0, certfp = '\000' <repeats 40 times>}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.