# maximum nick name length!
;MaxNickLength = 9
+ # Normally ngIRCd doesn't send any messages to a client until it is
+ # registered. Enable this option to let the daemon send "NOTICE AUTH"
+ # messages to clients while connecting.
+ ;NoticeAuth = no
+
+ # Let ngIRCd send an "authentication PING" when a new client connects,
+ # and register this client only after receiving the corresponding
+ # "PONG" reply.
+ ;RequireAuthPing = no
+
# Set this hostname for every client instead of the real one.
# Please note: don't use the percentage sign ("%"), it is reserved for
# future extensions!
note that all servers in an IRC network MUST use the same maximum nick name
length!
.TP
-\fBRequireAuthPing\fR
+\fBNoticeAuth\fR (boolean)
+Normally ngIRCd doesn't send any messages to a client until it is registered.
+Enable this option to let the daemon send "NOTICE AUTH" messages to clients
+while connecting. Default: no.
+.TP
++\fBRequireAuthPing\fR (boolean)
+ Let ngIRCd send an "authentication PING" when a new client connects, and
+ register this client only after receiving the corresponding "PONG" reply.
+ Default: no.
+ .TP
-\fBCloakHost\fR
+\fBCloakHost\fR (string)
Set this hostname for every client instead of the real one. Default: empty,
don't change.
.PP
Don't use the percentage sign ("%"), it is reserved for future extensions!
.RE
.TP
-\fBCloakUserToNick\fR
+\fBCloakUserToNick\fR (boolean)
Set every clients' user name to their nick name and hide the one supplied
by the IRC client. Default: no.
.SH [OPERATOR]
printf(" MaxConnectionsIP = %d\n", Conf_MaxConnectionsIP);
printf(" MaxJoins = %d\n", Conf_MaxJoins > 0 ? Conf_MaxJoins : -1);
printf(" MaxNickLength = %u\n", Conf_MaxNickLength - 1);
+ printf(" NoticeAuth = %s\n", yesno_to_str(Conf_NoticeAuth));
printf(" CloakHost = %s\n", Conf_CloakHost);
- printf(" CloakUserToNick = %s\n\n", yesno_to_str(Conf_CloakUserToNick));
+ printf(" CloakUserToNick = %s\n", yesno_to_str(Conf_CloakUserToNick));
+ #ifndef STRICT_RFC
+ printf(" RequireAuthPing = %s\n", yesno_to_str(Conf_AuthPing));
+ #endif
- puts("[FEATURES]");
+ printf("\n[FEATURES]\n");
printf(" DNS = %s\n", yesno_to_str(Conf_DNS));
printf(" Ident = %s\n", yesno_to_str(Conf_Ident));
printf(" PAM = %s\n", yesno_to_str(Conf_PAM));
Conf_PongTimeout = 20;
Conf_ConnectRetry = 60;
Conf_DNS = true;
+ Conf_NoticeAuth = false;
Conf_Oper_Count = 0;
Conf_Channel_Count = 0;
Conf_SyslogFacility = 0;
#endif
#endif
+
+ #ifndef STRICT_RFC
+ Conf_AuthPing = false;
+ #endif
+
Set_Defaults_Optional();
/* Initialize server configuration structures */
Conf_MaxNickLength = Handle_MaxNickLength(Line, Arg);
return;
}
+ if(strcasecmp(Var, "NoticeAuth") == 0) {
+ /* send NOTICE AUTH messages to clients on connect */
+ Conf_NoticeAuth = Check_ArgIsTrue(Arg);
+ return;
+ }
if( strcasecmp( Var, "Listen" ) == 0 ) {
/* IP-Address to bind sockets */
Conf_SyslogFacility);
return;
}
+ #endif
+ #ifndef STRICT_RFC
+ if (strcasecmp(Var, "RequireAuthPing") == 0 ) {
+ /* Require new clients to do an "autheticatin PING-PONG" */
+ Conf_AuthPing = Check_ArgIsTrue(Arg);
+ return;
+ }
#endif
Config_Error(LOG_ERR, "%s, line %d (section \"Global\"): Unknown variable \"%s\"!",
NGIRCd_ConfFile, Line, Var);
/** Enable all usage of PAM, even when compiled with support for it */
GLOBAL bool Conf_PAM;
+/** Enable NOTICE AUTH messages on connect */
+GLOBAL bool Conf_NoticeAuth;
+
/*
* try to connect to remote systems using the ipv6 protocol,
* if they have an ipv6 address? (default yes)
/** Maximum length of a nick name */
GLOBAL unsigned int Conf_MaxNickLength;
+ #ifndef STRICT_RFC
+
+ /** Require "AUTH PING-PONG" on login */
+ GLOBAL bool Conf_AuthPing;
+
+ #endif
+
#ifdef SYSLOG
/* Syslog "facility" */
if (!Conf_Ident)
identsock = -1;
#endif
- if (Conf_DNS)
+ if (Conf_DNS) {
+ if (Conf_NoticeAuth) {
+#ifdef IDENTAUTH
+ if (Conf_Ident)
+ (void)Conn_WriteStr(new_sock,
+ "NOTICE AUTH :*** Looking up your hostname and checking ident");
+ else
+#endif
+ (void)Conn_WriteStr(new_sock,
+ "NOTICE AUTH :*** Looking up your hostname");
+ }
Resolve_Addr(&My_Connections[new_sock].proc_stat, &new_addr,
identsock, cb_Read_Resolver_Result);
+ }
Account_Connection();
return new_sock;
strlcpy(My_Connections[i].host, readbuf,
sizeof(My_Connections[i].host));
Client_SetHostname(c, readbuf);
+ if (Conf_NoticeAuth)
+ (void)Conn_WriteStr(i,
+ "NOTICE AUTH :*** Found your hostname");
#ifdef IDENTAUTH
++identptr;
if (*identptr) {
Log(LOG_INFO, "IDENT lookup for connection %d: \"%s\".", i, identptr);
Client_SetUser(c, identptr, true);
+ if (Conf_NoticeAuth)
+ (void)Conn_WriteStr(i,
+ "NOTICE AUTH :*** Got ident response");
} else {
Log(LOG_INFO, "IDENT lookup for connection %d: no result.", i);
+ if (Conf_NoticeAuth && Conf_Ident)
+ (void)Conn_WriteStr(i,
+ "NOTICE AUTH :*** No ident response");
}
#endif
}
} /* Conn_GetFromProc */
+ #ifndef STRICT_RFC
+
+ GLOBAL long
+ Conn_GetAuthPing(CONN_ID Idx)
+ {
+ assert (Idx != NONE);
+ return My_Connections[Idx].auth_ping;
+ } /* Conn_GetAuthPing */
+
+ GLOBAL void
+ Conn_SetAuthPing(CONN_ID Idx, long ID)
+ {
+ assert (Idx != NONE);
+ My_Connections[Idx].auth_ping = ID;
+ } /* Conn_SetAuthPing */
+
+ #endif
+
+
#ifdef SSL_SUPPORT
/**