1
0
mirror of https://github.com/osmarks/ngircd.git synced 2025-12-25 15:06:04 +00:00

Compare commits

...

14 Commits

Author SHA1 Message Date
Alexander Barton
3232c7d245 - Version 0.2.1. 2002-02-17 21:50:38 +00:00
Alexander Barton
2c0a42e935 *** empty log message *** 2002-02-17 19:08:19 +00:00
Alexander Barton
a233adfbd8 - NICK-Aenderungen wurden dem User selber mit dem falschen Prefix geliefert. 2002-02-17 19:03:12 +00:00
Alexander Barton
9f3a9df24a - Client_CheckNick() und Client_CheckID() lieferten u.U. falsche Ergebnisse. 2002-02-17 19:02:49 +00:00
Alexander Barton
44b396d9a5 - Tests auf netdb.h, stdlib.h, sys/wait.h, gethostbyaddr, gethostbyname,
strftime und die "libbe" unter BeOS (fuer syslog) ergaenzt.
2002-02-17 18:47:26 +00:00
Alexander Barton
25e1e8b690 *** empty log message *** 2002-02-17 17:47:01 +00:00
Alexander Barton
b60f369266 - Fehlerhafte Modes werden nun ausfuehrlicher an den Client gemeldet. 2002-02-17 17:43:14 +00:00
Alexander Barton
1b1b718e7e - neue Text-Konstante ERR_UMODEUNKNOWNFLAG2_MSG. 2002-02-17 17:42:53 +00:00
Alexander Barton
ce2738c984 - Beispiel-Konfiguration etwas erweitert. Doku fehlt immer noch ... 2002-02-17 17:34:50 +00:00
Alexander Barton
bec7783ec9 - NICK-Aenderungen werden an alle Server und betroffene Clients gemeldet.
- Neue Funktion IRC_WriteStrRelatedPrefix().
2002-02-17 17:30:21 +00:00
Alexander Barton
db7ea9c4b3 - NICK korrigiert. 2002-02-17 17:18:59 +00:00
anonymous
2d87beed3d *** empty log message *** 2002-02-15 15:15:48 +00:00
Alexander Barton
05a493e1d0 - CVS-Doku um anonymen Zugang ergaenzt. 2002-02-15 15:15:22 +00:00
Alexander Barton
825711973a - Version auf 0.2.1-pre im CVS angehoben ... 2002-02-15 14:57:21 +00:00
9 changed files with 201 additions and 45 deletions

View File

@@ -10,6 +10,14 @@
-- ChangeLog / Aenderungen --
ngIRCd 0.2.x, xx.02.2002
- NICK korrigiert: es werden nun auch alle "betroffenen" User informiert.
- configure-Script erweitert, u.a. bessere Anpassung an BeOS: dort wird
nun die "libbe" zum ngIRCd gelinkt, somit funktioniert auch syslog.
- Fehlerhafte bzw. noch nicht verstandene Modes werden nun ausfuehrlicher
an den Client geliefert.
ngIRCd 0.2.0, 15.02.2002
- Nicknames und Channel-Namen werden etwas besser auf Gueltigkeit ueber-
@@ -95,4 +103,4 @@ ngIRCd 0.0.1, 31.12.2001
--
$Id: ChangeLog,v 1.17 2002/02/15 14:35:55 alex Exp $
$Id: ChangeLog,v 1.20 2002/02/17 19:08:19 alex Exp $

4
README
View File

@@ -1,4 +1,4 @@
ngIRCd - Next Generation IRC Server
(c)2001,2002 by Alexander Barton,
@@ -42,4 +42,4 @@ Das README liest du gerade ,-)
--
$Id: README,v 1.4 2002/01/29 00:17:39 alex Exp $
$Id: README,v 1.5 2002/02/15 15:15:48 anonymous Exp $

View File

@@ -9,9 +9,19 @@
# Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
# der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
#
# $Id: configure.in,v 1.24 2002/02/15 14:35:55 alex Exp $
# $Id: configure.in,v 1.27 2002/02/17 21:50:38 alex Exp $
#
# $Log: configure.in,v $
# Revision 1.27 2002/02/17 21:50:38 alex
# - Version 0.2.1.
#
# Revision 1.26 2002/02/17 18:47:26 alex
# - Tests auf netdb.h, stdlib.h, sys/wait.h, gethostbyaddr, gethostbyname,
# strftime und die "libbe" unter BeOS (fuer syslog) ergaenzt.
#
# Revision 1.25 2002/02/15 14:57:21 alex
# - Version auf 0.2.1-pre im CVS angehoben ...
#
# Revision 1.24 2002/02/15 14:35:55 alex
# - Version 0.2.0
#
@@ -89,7 +99,7 @@
AC_INIT
AC_CONFIG_SRCDIR(src/ngircd/ngircd.c)
AM_INIT_AUTOMAKE(ngircd,0.2.0)
AM_INIT_AUTOMAKE(ngircd,0.2.1)
AM_CONFIG_HEADER(src/config.h)
# -- Variablen --
@@ -138,13 +148,13 @@ AC_ARG_WITH(portab,
]
)
AC_CHECK_HEADERS([ \
errno.h fcntl.h netinet/in.h string.h \
sys/socket.h sys/time.h unistd.h \
],,AC_MSG_ERROR([required C header missing!]))
AC_CHECK_HEADERS(arpa/inet.h)
AC_CHECK_HEADERS([ \
errno.h fcntl.h netdb.h netinet/in.h stdlib.h string.h \
sys/socket.h sys/time.h sys/wait.h unistd.h \
],,AC_MSG_ERROR([required C header missing!]))
# -- Datentypen --
AC_MSG_CHECKING(whether socklen_t exists)
@@ -165,14 +175,16 @@ AC_TRY_COMPILE([
AC_FUNC_MALLOC
AC_CHECK_FUNCS([ \
gethostname inet_ntoa memmove memset select \
socket strcasecmp strchr strerror strstr waitpid \
gethostbyaddr gethostbyname gethostname inet_ntoa memmove memset \
select socket strcasecmp strchr strerror strftime strstr waitpid \
],,AC_MSG_ERROR([required function missing!]))
AC_CHECK_FUNCS(inet_aton)
# -- Libraries --
AC_CHECK_LIB(be,syslog)
# -- Konfigurationsoptionen --
AC_ARG_ENABLE(syslog,

View File

@@ -14,12 +14,51 @@ Die Sourcen des ngIRCd werden mit dem "Concurrent Versions System" (CVS)
verwaltet. Somit koennen ohne Probleme mehrere Leute gleichzeitig die Sourcen
bearbeitet.
Dieser Text soll in Zukunft die Grundlagen beschreiben. Tut er aber leider
noch nicht, also frage einfach Alex direkt (siehe AUTHORS-Text), wenn du
daran interessiert bist, Zugriff auf den Quellcode via CVS zu bekommen!
[ ... more to come ... ]
I. Anonymer "Nur-Lesen"-Zugang
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Anonymer Zugriff auf die CVS-Repository von ngIRCd ist im "nur-lesen"-Modus
moeglich. Dazu sind folgende Schritte noetig:
Beim CVS-Server anmelden
$ cvs -d:pserver:anonymous@arthur.ath.cx:/usr/local/CVS/ngircd login
Als Benutzername wird "anonymous" mit einem leeren Passwort verwendet.
Nun ein "Check-Out" der Quellcodes durchfuehren:
$ cvs -d:pserver:anonymous@arthur.ath.cx:/usr/local/CVS/ngircd checkout ngircd
Dadurch wird im aktuellen Verzeichnis der neue Ordner "ngircd" mit allen
Quell-Dateien des ngIRCd erzeugt.
Dieses ist der "Arbeitsordner", alle CVS-Befehle werden in Zukunft aus
diesem Ordner bzw. einem Unterordner davon ausgefuehrt.
Wichtig: wenn ngIRCd "frisch" aus dem CVS compiliert werden soll, so
existiert das configure-Script noch nicht. Dieses muss zunaechst mit dem
Script "autogen.sh" erzeugt werden. Letzteres setzt ein installiertes GNU
automake und GNU autoconf voraus!
CVS-Tree aktualisieren:
$ cvs update
Dieser Befehl aktualisiert alle Dateien im aktuellen Verzeichnis sowie allen
Unterverzeichnissen.
$ cvs update <filename>
So kann eine einzelne Datei aktualisiert werden (auch dann, wenn sie lokal
z.B. geloescht wurde -- praktisch, um eigene "Experimente" rueckgaengig zu
machen ;-))
III. Schreibzugriff
~~~~~~~~~~~~~~~~~~~
Wer Schreibzugriff auf die CVS-Repository wuenscht, der moege sich bitte
mit Alex Barton, <alex@barton.de> in Verbindung setzen.
--
$Id: CVS.txt,v 1.4 2002/01/23 18:20:04 alex Exp $
$Id: CVS.txt,v 1.5 2002/02/15 15:15:22 alex Exp $

View File

@@ -1,4 +1,4 @@
# $Id: sample-ngircd.conf,v 1.2 2002/01/06 16:54:05 alex Exp $
# $Id: sample-ngircd.conf,v 1.3 2002/02/17 17:34:50 alex Exp $
[Global]
Name = irc.the.net
@@ -14,9 +14,14 @@
; Password = ThePwd
[Server]
; Host = host2.the.net
; Host = connect-to-host.the.net
; Name = irc2.the.net
; Port = 6666
; Password = ThePwd
; Password = ThePwd1
[Server]
; Host = wait-for-host.the.net
; Name = irc3.the.net
; Password = ThePwd2
# -eof-

View File

@@ -9,7 +9,7 @@
* Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
* der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
*
* $Id: client.c,v 1.36 2002/02/06 16:49:41 alex Exp $
* $Id: client.c,v 1.37 2002/02/17 19:02:49 alex Exp $
*
* client.c: Management aller Clients
*
@@ -21,6 +21,9 @@
* Server gewesen, so existiert eine entsprechende CONNECTION-Struktur.
*
* $Log: client.c,v $
* Revision 1.37 2002/02/17 19:02:49 alex
* - Client_CheckNick() und Client_CheckID() lieferten u.U. falsche Ergebnisse.
*
* Revision 1.36 2002/02/06 16:49:41 alex
* - neue Funktion Client_IsValidNick(), Nicknames werden besser validiert.
*
@@ -719,7 +722,11 @@ GLOBAL BOOLEAN Client_CheckNick( CLIENT *Client, CHAR *Nick )
assert( Nick != NULL );
/* Nick ungueltig? */
if( ! Client_IsValidNick( Nick )) return IRC_WriteStrClient( Client, ERR_ERRONEUSNICKNAME_MSG, Client_ID( Client ), Nick );
if( ! Client_IsValidNick( Nick ))
{
IRC_WriteStrClient( Client, ERR_ERRONEUSNICKNAME_MSG, Client_ID( Client ), Nick );
return FALSE;
}
/* Nick bereits vergeben? */
c = My_Clients;
@@ -750,7 +757,11 @@ GLOBAL BOOLEAN Client_CheckID( CLIENT *Client, CHAR *ID )
assert( ID != NULL );
/* Nick zu lang? */
if( strlen( ID ) > CLIENT_ID_LEN ) return IRC_WriteStrClient( Client, ERR_ERRONEUSNICKNAME_MSG, Client_ID( Client ), ID );
if( strlen( ID ) > CLIENT_ID_LEN )
{
IRC_WriteStrClient( Client, ERR_ERRONEUSNICKNAME_MSG, Client_ID( Client ), ID );
return FALSE;
}
/* ID bereits vergeben? */
c = My_Clients;

View File

@@ -9,11 +9,24 @@
* Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
* der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
*
* $Id: irc.c,v 1.57 2002/02/13 23:05:29 alex Exp $
* $Id: irc.c,v 1.61 2002/02/17 19:03:12 alex Exp $
*
* irc.c: IRC-Befehle
*
* $Log: irc.c,v $
* Revision 1.61 2002/02/17 19:03:12 alex
* - NICK-Aenderungen wurden dem User selber mit dem falschen Prefix geliefert.
*
* Revision 1.60 2002/02/17 17:43:14 alex
* - Fehlerhafte Modes werden nun ausfuehrlicher an den Client gemeldet.
*
* Revision 1.59 2002/02/17 17:30:21 alex
* - NICK-Aenderungen werden an alle Server und betroffene Clients gemeldet.
* - Neue Funktion IRC_WriteStrRelatedPrefix().
*
* Revision 1.58 2002/02/17 17:18:59 alex
* - NICK korrigiert.
*
* Revision 1.57 2002/02/13 23:05:29 alex
* - Nach Connect eines Users werden LUSERS-Informationen angezeigt.
*
@@ -326,10 +339,10 @@ GLOBAL BOOLEAN IRC_WriteStrChannel( CLIENT *Client, CHANNEL *Chan, BOOLEAN Remot
GLOBAL BOOLEAN IRC_WriteStrChannelPrefix( CLIENT *Client, CHANNEL *Chan, CLIENT *Prefix, BOOLEAN Remote, CHAR *Format, ... )
{
CHAR buffer[1000];
BOOLEAN sock[MAX_CONNECTIONS], ok = CONNECTED, i;
BOOLEAN sock[MAX_CONNECTIONS], ok = CONNECTED;
CL2CHAN *cl2chan;
CLIENT *c;
INT s;
INT s, i;
va_list ap;
assert( Client != NULL );
@@ -422,6 +435,74 @@ GLOBAL VOID IRC_WriteStrServersPrefix( CLIENT *ExceptOf, CLIENT *Prefix, CHAR *F
} /* IRC_WriteStrServersPrefix */
GLOBAL BOOLEAN IRC_WriteStrRelatedPrefix( CLIENT *Client, CLIENT *Prefix, BOOLEAN Remote, CHAR *Format, ... )
{
BOOLEAN sock[MAX_CONNECTIONS], ok = CONNECTED;
CL2CHAN *chan_cl2chan, *cl2chan;
CHAR buffer[1000];
CHANNEL *chan;
va_list ap;
CLIENT *c;
INT i, s;
assert( Client != NULL );
assert( Prefix != NULL );
assert( Format != NULL );
va_start( ap, Format );
vsnprintf( buffer, 1000, Format, ap );
va_end( ap );
/* initialisieren */
for( i = 0; i < MAX_CONNECTIONS; i++ ) sock[i] = FALSE;
/* An alle Clients, die in einem Channel mit dem "Ausloeser" sind,
* den Text schicken. An Remote-Server aber jeweils nur einmal. */
chan_cl2chan = Channel_FirstChannelOf( Client );
while( chan_cl2chan )
{
/* Channel des Users durchsuchen */
chan = Channel_GetChannel( chan_cl2chan );
cl2chan = Channel_FirstMember( chan );
while( cl2chan )
{
c = Channel_GetClient( cl2chan );
if( ! Remote )
{
if( Client_Conn( c ) <= NONE ) c = NULL;
else if( Client_Type( c ) == CLIENT_SERVER ) c = NULL;
}
if( c ) c = Client_NextHop( c );
if( c && ( c != Client ))
{
/* Ok, anderer Client */
s = Client_Conn( c );
assert( s >= 0 );
assert( s < MAX_CONNECTIONS );
sock[s] = TRUE;
}
cl2chan = Channel_NextMember( chan, cl2chan );
}
/* naechsten Channel */
chan_cl2chan = Channel_NextChannelOf( Client, chan_cl2chan );
}
/* Senden ... */
for( i = 0; i < MAX_CONNECTIONS; i++ )
{
if( sock[i] )
{
ok = Conn_WriteStr( i, ":%s %s", Client_ID( Prefix ), buffer );
if( ! ok ) break;
}
}
return ok;
} /* IRC_WriteStrRelatedPrefix */
GLOBAL BOOLEAN IRC_PASS( CLIENT *Client, REQUEST *Req )
{
assert( Client != NULL );
@@ -774,19 +855,11 @@ GLOBAL BOOLEAN IRC_NICK( CLIENT *Client, REQUEST *Req )
if( ! Client_CheckNick( target, Req->argv[0] )) return CONNECTED;
}
if( Client_Type( Client ) == CLIENT_USER )
{
/* Nick-Aenderung: allen mitteilen! */
Log( LOG_INFO, "User \"%s\" changed nick: \"%s\" -> \"%s\".", Client_Mask( target ), Client_ID( target ), Req->argv[0] );
IRC_WriteStrClient( Client, "NICK :%s", Req->argv[0] );
IRC_WriteStrServersPrefix( NULL, Client, "NICK :%s", Req->argv[0] );
}
else if( Client_Type( Client ) == CLIENT_SERVER )
{
/* Nick-Aenderung: allen mitteilen! */
Log( LOG_DEBUG, "User \"%s\" changed nick: \"%s\" -> \"%s\".", Client_Mask( target ), Client_ID( target ), Req->argv[0] );
IRC_WriteStrServersPrefix( Client, target, "NICK :%s", Req->argv[0] );
}
/* Nick-Aenderung: allen mitteilen! */
Log( LOG_INFO, "User \"%s\" changed nick: \"%s\" -> \"%s\".", Client_Mask( target ), Client_ID( target ), Req->argv[0] );
if( Client_Type( Client ) == CLIENT_USER ) IRC_WriteStrClientPrefix( Client, Client, "NICK :%s", Req->argv[0] );
IRC_WriteStrServersPrefix( Client, target, "NICK :%s", Req->argv[0] );
IRC_WriteStrRelatedPrefix( target, target, FALSE, "NICK :%s", Req->argv[0] );
/* Client-Nick registrieren */
Client_SetID( target, Req->argv[0] );
@@ -1240,7 +1313,7 @@ GLOBAL BOOLEAN IRC_MODE( CLIENT *Client, REQUEST *Req )
break;
default:
Log( LOG_DEBUG, "Unknown mode \"%c%c\" from \"%s\"!?", set ? '+' : '-', *mode_ptr, Client_ID( Client ));
ok = IRC_WriteStrClient( Client, ERR_UMODEUNKNOWNFLAG_MSG, Client_ID( Client ));
ok = IRC_WriteStrClient( Client, ERR_UMODEUNKNOWNFLAG2_MSG, Client_ID( Client ), set ? '+' : '-', *mode_ptr );
x[0] = '\0';
}
}
@@ -1270,7 +1343,7 @@ GLOBAL BOOLEAN IRC_MODE( CLIENT *Client, REQUEST *Req )
break;
default:
Log( LOG_DEBUG, "Unknown channel-user-mode \"%c%c\" from \"%s\" on \"%s\" at %s!?", set ? '+' : '-', *mode_ptr, Client_ID( Client ), Client_ID( chan_cl ), Channel_Name( chan ));
ok = IRC_WriteStrClient( Client, ERR_UMODEUNKNOWNFLAG_MSG, Client_ID( Client ));
ok = IRC_WriteStrClient( Client, ERR_UMODEUNKNOWNFLAG2_MSG, Client_ID( Client ), set ? '+' : '-', *mode_ptr );
x[0] = '\0';
}
}
@@ -1309,7 +1382,7 @@ GLOBAL BOOLEAN IRC_MODE( CLIENT *Client, REQUEST *Req )
break;
default:
Log( LOG_DEBUG, "Unknown channel-mode \"%c%c\" from \"%s\" at %s!?", set ? '+' : '-', *mode_ptr, Client_ID( Client ), Channel_Name( chan ));
ok = IRC_WriteStrClient( Client, ERR_UMODEUNKNOWNFLAG_MSG, Client_ID( Client ));
ok = IRC_WriteStrClient( Client, ERR_UMODEUNKNOWNFLAG2_MSG, Client_ID( Client ), set ? '+' : '-', *mode_ptr );
x[0] = '\0';
}
}

View File

@@ -9,11 +9,14 @@
* Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
* der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
*
* $Id: irc.h,v 1.21 2002/01/27 21:53:57 alex Exp $
* $Id: irc.h,v 1.22 2002/02/17 17:18:59 alex Exp $
*
* irc.h: IRC-Befehle (Header)
*
* $Log: irc.h,v $
* Revision 1.22 2002/02/17 17:18:59 alex
* - NICK korrigiert.
*
* Revision 1.21 2002/01/27 21:53:57 alex
* - IRC_WriteStrServersPrefixID() und IRC_WriteStrClientPrefixID() wieder entfernt.
*
@@ -104,6 +107,7 @@ GLOBAL BOOLEAN IRC_WriteStrChannel( CLIENT *Client, CHANNEL *Chan, BOOLEAN Remot
GLOBAL BOOLEAN IRC_WriteStrChannelPrefix( CLIENT *Client, CHANNEL *Chan, CLIENT *Prefix, BOOLEAN Remote, CHAR *Format, ... );
GLOBAL VOID IRC_WriteStrServers( CLIENT *ExceptOf, CHAR *Format, ... );
GLOBAL VOID IRC_WriteStrServersPrefix( CLIENT *ExceptOf, CLIENT *Prefix, CHAR *Format, ... );
GLOBAL BOOLEAN IRC_WriteStrRelatedPrefix( CLIENT *Client, CLIENT *Prefix, BOOLEAN Remote, CHAR *Format, ... );
GLOBAL BOOLEAN IRC_PASS( CLIENT *Client, REQUEST *Req );
GLOBAL BOOLEAN IRC_NICK( CLIENT *Client, REQUEST *Req );

View File

@@ -9,11 +9,14 @@
* Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
* der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
*
* $Id: messages.h,v 1.28 2002/02/13 23:04:50 alex Exp $
* $Id: messages.h,v 1.29 2002/02/17 17:42:53 alex Exp $
*
* irc.h: IRC-Befehle (Header)
*
* $Log: messages.h,v $
* Revision 1.29 2002/02/17 17:42:53 alex
* - neue Text-Konstante ERR_UMODEUNKNOWNFLAG2_MSG.
*
* Revision 1.28 2002/02/13 23:04:50 alex
* - RPL_MYINFO_MSG korrigiert.
*
@@ -255,7 +258,8 @@
#define ERR_NOOPERHOST_MSG ERR_NOOPERHOST" %s :Not configured for your host"
#define ERR_UMODEUNKNOWNFLAG "501"
#define ERR_UMODEUNKNOWNFLAG_MSG ERR_UMODEUNKNOWNFLAG" %s :Unknown mode flag"
#define ERR_UMODEUNKNOWNFLAG_MSG ERR_UMODEUNKNOWNFLAG" %s :Unknown mode"
#define ERR_UMODEUNKNOWNFLAG2_MSG ERR_UMODEUNKNOWNFLAG" %s :Unknown mode \"%c%c\""
#define ERR_USERSDONTMATCH "502"
#define ERR_USERSDONTMATCH_MSG ERR_USERSDONTMATCH" %s :Can't set/get mode for other users"