mirror of
				https://github.com/osmarks/ngircd.git
				synced 2025-10-30 05:23:00 +00:00 
			
		
		
		
	Merge branch 'master' of git://git.breakpoint.cc/fw/ngircd-fw
This commit is contained in:
		| @@ -103,6 +103,15 @@ | ||||
| 	# Don't do any DNS lookups when a client connects to the server. | ||||
| 	;NoDNS = no | ||||
|  | ||||
| 	# allow both ipv4 and ipv6 clients to connect by opening both | ||||
| 	# ipv4 and ipv6 sockets | ||||
| 	;ListenIPv6 = yes | ||||
| 	;ListenIPv4 = yes | ||||
|  | ||||
| 	# try to connect to other irc servers using ipv4 and ipv6, if possible | ||||
| 	;ConnectIPv6 = yes | ||||
| 	;ConnectIPv4 = yes | ||||
|  | ||||
| 	# Maximum number of simultaneous connection the server is allowed | ||||
| 	# to accept (0: unlimited): | ||||
| 	;MaxConnections = 0 | ||||
|   | ||||
| @@ -158,6 +158,24 @@ If you configure ngircd to connect to other servers, ngircd may still | ||||
| perform a DNS lookup if required. | ||||
| Default: No. | ||||
| .TP | ||||
| \fBListenIPv4\fR | ||||
| Set this to no if you do not want ngircd to accept clients using the standard internet protocol, ipv4. | ||||
| This allows use of ngircd in ipv6-only setups. | ||||
| Default: Yes. | ||||
| .TP | ||||
| \fBListenIPv6\fR | ||||
| Set this to no if you do not want ngircd to accept clients using the new internet protocol, ipv6. | ||||
| Default: Yes. | ||||
| .TP | ||||
| \fBConnectIPv4\fR | ||||
| Set this to no if you do not want ngircd to connect to other irc servers using ipv4. | ||||
| This allows use of ngircd in ipv6-only setups. | ||||
| Default: Yes. | ||||
| .TP | ||||
| \fBConnectIPv6\fR | ||||
| Set this to no if you do not want ngircd to connect to other irc servers using ipv6. | ||||
| Default: Yes. | ||||
| .TP | ||||
| \fBMaxConnections\fR | ||||
| Maximum number of simultaneous connection the server is allowed to accept | ||||
| (0: unlimited). Default: 0. | ||||
|   | ||||
| @@ -152,6 +152,15 @@ Conf_Rehash( void ) | ||||
| } /* Config_Rehash */ | ||||
|  | ||||
|  | ||||
| static const char* | ||||
| yesno_to_str(int boolean_value) | ||||
| { | ||||
| 	if (boolean_value) | ||||
| 		return "yes"; | ||||
| 	return "no"; | ||||
| } | ||||
|  | ||||
|  | ||||
| GLOBAL int | ||||
| Conf_Test( void ) | ||||
| { | ||||
| @@ -201,10 +210,17 @@ Conf_Test( void ) | ||||
| 	printf( "  PingTimeout = %d\n", Conf_PingTimeout ); | ||||
| 	printf( "  PongTimeout = %d\n", Conf_PongTimeout ); | ||||
| 	printf( "  ConnectRetry = %d\n", Conf_ConnectRetry ); | ||||
| 	printf( "  OperCanUseMode = %s\n", Conf_OperCanMode == true ? "yes" : "no" ); | ||||
| 	printf( "  OperServerMode = %s\n", Conf_OperServerMode == true? "yes" : "no" ); | ||||
| 	printf( "  PredefChannelsOnly = %s\n", Conf_PredefChannelsOnly == true ? "yes" : "no" ); | ||||
| 	printf( "  NoDNS = %s\n", Conf_NoDNS ? "yes" : "no"); | ||||
| 	printf( "  OperCanUseMode = %s\n", yesno_to_str(Conf_OperCanMode)); | ||||
| 	printf( "  OperServerMode = %s\n", yesno_to_str(Conf_OperServerMode)); | ||||
| 	printf( "  PredefChannelsOnly = %s\n", yesno_to_str(Conf_PredefChannelsOnly)); | ||||
| 	printf( "  NoDNS = %s\n", yesno_to_str(Conf_NoDNS)); | ||||
|  | ||||
| #ifdef WANT_IPV6 | ||||
| 	printf("  ListenIPv6 = %s\n", yesno_to_str(Conf_ListenIPv6)); | ||||
| 	printf("  ListenIPv4 = %s\n", yesno_to_str(Conf_ListenIPv4)); | ||||
| 	printf("  ConnectIPv4= %s\n", yesno_to_str(Conf_ConnectIPv6)); | ||||
| 	printf("  ConnectIPv6 = %s\n", yesno_to_str(Conf_ConnectIPv4)); | ||||
| #endif | ||||
| 	printf( "  MaxConnections = %ld\n", Conf_MaxConnections); | ||||
| 	printf( "  MaxConnectionsIP = %d\n", Conf_MaxConnectionsIP); | ||||
| 	printf( "  MaxJoins = %d\n", Conf_MaxJoins>0 ? Conf_MaxJoins : -1); | ||||
| @@ -449,6 +465,11 @@ Set_Defaults( bool InitServers ) | ||||
| 	Conf_PredefChannelsOnly = false; | ||||
| 	Conf_OperServerMode = false; | ||||
|  | ||||
| 	Conf_ConnectIPv4 = true; | ||||
| 	Conf_ListenIPv4 = true; | ||||
| 	Conf_ConnectIPv6 = true; | ||||
| 	Conf_ListenIPv6 = true; | ||||
|  | ||||
| 	Conf_MaxConnections = 0; | ||||
| 	Conf_MaxConnectionsIP = 5; | ||||
| 	Conf_MaxJoins = 10; | ||||
| @@ -817,6 +838,33 @@ Handle_GLOBAL( int Line, char *Var, char *Arg ) | ||||
| 		Conf_NoDNS = Check_ArgIsTrue( Arg ); | ||||
| 		return; | ||||
| 	} | ||||
| #ifdef WANT_IPV6 | ||||
| 	/* the default setting for all the WANT_IPV6 special options is 'true' */ | ||||
| 	if( strcasecmp( Var, "ListenIPv6" ) == 0 ) { | ||||
| 		/* listen on ipv6 sockets, if available? */ | ||||
| 		Conf_ListenIPv6 = Check_ArgIsTrue( Arg ); | ||||
| 		return; | ||||
| 	} | ||||
| 	if( strcasecmp( Var, "ListenIPv4" ) == 0 ) { | ||||
| 		/* | ||||
| 		 * listen on ipv4 sockets, if available? | ||||
| 		 * this allows "ipv6-only" setups. | ||||
| 		 */ | ||||
| 		Conf_ListenIPv4 = Check_ArgIsTrue( Arg ); | ||||
| 		return; | ||||
| 	} | ||||
| 	if( strcasecmp( Var, "ConnectIPv6" ) == 0 ) { | ||||
| 		/* connect to other hosts using ipv6, if they have an AAAA record? */ | ||||
| 		Conf_ConnectIPv6 = Check_ArgIsTrue( Arg ); | ||||
| 		return; | ||||
| 	} | ||||
| 	if( strcasecmp( Var, "ConnectIPv4" ) == 0 ) { | ||||
| 		/* connect to other hosts using ipv4. | ||||
| 		 * again, this can be used for ipv6-only setups */ | ||||
| 		Conf_ConnectIPv4 = Check_ArgIsTrue( Arg ); | ||||
| 		return; | ||||
| 	} | ||||
| #endif | ||||
| 	if( strcasecmp( Var, "OperCanUseMode" ) == 0 ) { | ||||
| 		/* Are IRC operators allowed to use MODE in channels they aren't Op in? */ | ||||
| 		Conf_OperCanMode = Check_ArgIsTrue( Arg ); | ||||
| @@ -1138,6 +1186,16 @@ Validate_Config(bool Configtest, bool Rehash) | ||||
| 			     "No administrative information configured but required by RFC!"); | ||||
| 	} | ||||
|  | ||||
| #ifdef WANT_IPV6 | ||||
| 	if (!Conf_ListenIPv4 && !Conf_ListenIPv6) | ||||
| 		Config_Error(LOG_ALERT, | ||||
| 			"Both \"ListenIPv4\" and \"ListenIPv6\" are set to 'no'; no network protocol available!"); | ||||
|  | ||||
| 	if (!Conf_ConnectIPv4 && !Conf_ConnectIPv6) | ||||
| 		Config_Error(LOG_ALERT, | ||||
| 			"Both \"ConnectIPv4\" and \"ConnectIPv6\" are set to 'no'; ngircd will fail to connect to other irc servers"); | ||||
| #endif | ||||
|  | ||||
| #ifdef DEBUG | ||||
| 	servers = servers_once = 0; | ||||
| 	for (i = 0; i < MAX_SERVERS; i++) { | ||||
|   | ||||
| @@ -124,11 +124,20 @@ GLOBAL bool Conf_OperCanMode; | ||||
| /* Disable all DNS functions? */ | ||||
| GLOBAL bool Conf_NoDNS; | ||||
|  | ||||
| /* don't listen for incoming ipv6 connections, even if OS supports it? */ | ||||
| GLOBAL bool Conf_NoListenIpv6; | ||||
| /* listen for incoming ipv6 connections if OS supports it (default: yes)? */ | ||||
| GLOBAL bool Conf_ListenIPv6; | ||||
|  | ||||
| /* don't connect to remote systems unsign ipv6? */ | ||||
| GLOBAL bool Conf_NoConnectIpv6; | ||||
| /* listen for incoming ipv4 connections if OS supports it (default: yes)? */ | ||||
| GLOBAL bool Conf_ListenIPv4; | ||||
|  | ||||
| /* | ||||
|  * try to connect to remote systems using the ipv6 protocol, | ||||
|  * if they have an ipv6 address? (default yes) | ||||
|  */ | ||||
| GLOBAL bool Conf_ConnectIPv6; | ||||
|  | ||||
| /* same as above, but for ipv4 hosts, default: yes  */ | ||||
| GLOBAL bool Conf_ConnectIPv4; | ||||
|  | ||||
| /* If an IRC op gives chanop privileges without being a chanop, | ||||
|  * ircd2 will ignore the command. This enables a workaround: | ||||
|   | ||||
| @@ -315,10 +315,11 @@ Conn_InitListeners( void ) | ||||
| 	} | ||||
|  | ||||
| #ifdef WANT_IPV6 | ||||
| 	if (!Conf_NoListenIpv6) | ||||
| 	if (Conf_ListenIPv6) | ||||
| 		created = ports_initlisteners(&Conf_ListenPorts, AF_INET6, cb_listen); | ||||
| #endif | ||||
| 	created += ports_initlisteners(&Conf_ListenPorts, AF_INET, cb_listen); | ||||
| 	if (Conf_ListenIPv4) | ||||
| 		created += ports_initlisteners(&Conf_ListenPorts, AF_INET, cb_listen); | ||||
|  | ||||
| 	return created; | ||||
| } /* Conn_InitListeners */ | ||||
|   | ||||
| @@ -45,6 +45,10 @@ static void Do_ResolveAddr PARAMS(( const ng_ipaddr_t *Addr, int Sock, int w_fd | ||||
| static void Do_ResolveName PARAMS(( const char *Host, int w_fd )); | ||||
| static bool register_callback PARAMS((RES_STAT *s, void (*cbfunc)(int, short))); | ||||
|  | ||||
| #ifdef WANT_IPV6 | ||||
| extern bool Conf_ConnectIPv4; | ||||
| extern bool Conf_ConnectIPv6; | ||||
| #endif | ||||
|  | ||||
| static pid_t | ||||
| Resolver_fork(int *pipefds) | ||||
| @@ -270,7 +274,7 @@ ForwardLookup(const char *hostname, array *IpAddr) | ||||
| #ifdef HAVE_GETADDRINFO | ||||
| 	int res; | ||||
| 	struct addrinfo *a, *ai_results; | ||||
| 	static const struct addrinfo hints = { | ||||
| 	static struct addrinfo hints = { | ||||
| #ifndef WANT_IPV6 | ||||
| 		.ai_family = AF_INET, | ||||
| #endif | ||||
| @@ -280,6 +284,14 @@ ForwardLookup(const char *hostname, array *IpAddr) | ||||
| 		.ai_socktype = SOCK_STREAM, | ||||
| 		.ai_protocol = IPPROTO_TCP | ||||
| 	}; | ||||
| #ifdef WANT_IPV6 | ||||
| 	assert(Conf_ConnectIPv6 || Conf_ConnectIPv4); | ||||
|  | ||||
| 	if (!Conf_ConnectIPv6) | ||||
| 		hints.ai_family = AF_INET; | ||||
| 	if (!Conf_ConnectIPv4) | ||||
| 		hints.ai_family = AF_INET6; | ||||
| #endif | ||||
| 	res = getaddrinfo(hostname, NULL, &hints, &ai_results); | ||||
| 	switch (res) { | ||||
| 	case 0:	break; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Alexander Barton
					Alexander Barton