]> arthur.barton.de Git - ngircd-alex.git/commitdiff
Merge branch 'bug159-WebircIPA'
authorAlexander Barton <alex@barton.de>
Mon, 26 Aug 2013 21:22:20 +0000 (23:22 +0200)
committerAlexander Barton <alex@barton.de>
Mon, 26 Aug 2013 21:22:20 +0000 (23:22 +0200)
* bug159-WebircIPA:
  Introduce Free_Client() function to free CLIENT structure
  Save client IP address text for "WebIRC" users

doc/sample-ngircd.conf.tmpl
man/ngircd.conf.5.tmpl
src/ngircd/conf.c
src/ngircd/conf.h
src/ngircd/login.c

index 99960e95f0d16a40b827ed67fd08fe60b39741bf..ae1b213950b8484ed4ab0ac92e9c9c03d86cea47 100644 (file)
        ;ConnectIPv6 = yes
        ;ConnectIPv4 = yes
 
-       # Do any DNS lookups when a client connects to the server.
+       # Default user mode(s) to set on new local clients. Please note that
+       # only modes can be set that the client could set on itself, you can't
+       # set "a" (away) or "o" (IRC Op), for example! Default: none.
+       ;DefaultUserModes = i
+
+       # Do DNS lookups when a client connects to the server.
        ;DNS = yes
 
        # Do IDENT lookups if ngIRCd has been compiled with support for it.
index c9d7bf8318c00eb2505432d11b0e6722852e5a43..cf926f9a3b80845f1b45715664a66f1709fddb94 100644 (file)
@@ -258,6 +258,12 @@ Set this to no if you do not want ngIRCd to connect to other IRC servers using
 the IPv6 protocol.
 Default: yes.
 .TP
+\fBDefaultUserModes\fR (string)
+Default user mode(s) to set on new local clients. Please note that only modes
+can be set that the client could set on itself, you can't set "a" (away) or
+"o" (IRC Op), for example!
+Default: none.
+.TP
 \fBDNS\fR (boolean)
 If set to false, ngIRCd will not make any DNS lookups when clients connect.
 If you configure the daemon to connect to other servers, ngIRCd may still
index 79376b80ba8b7c33335a6f0ddc1c61aecfae29c2..b10f4905c9ec7befb08b5b5717cc6397cc48bea9 100644 (file)
@@ -402,6 +402,7 @@ Conf_Test( void )
        printf("  ConnectIPv4 = %s\n", yesno_to_str(Conf_ConnectIPv6));
        printf("  ConnectIPv6 = %s\n", yesno_to_str(Conf_ConnectIPv4));
 #endif
+       printf("  DefaultUserModes = %s\n", Conf_DefaultUserModes);
        printf("  DNS = %s\n", yesno_to_str(Conf_DNS));
 #ifdef IDENT
        printf("  Ident = %s\n", yesno_to_str(Conf_Ident));
@@ -776,6 +777,7 @@ Set_Defaults(bool InitServers)
 #else
        Conf_ConnectIPv6 = false;
 #endif
+       strcpy(Conf_DefaultUserModes, "");
        Conf_DNS = true;
 #ifdef IDENTAUTH
        Conf_Ident = true;
@@ -1706,6 +1708,30 @@ Handle_OPTIONS(const char *File, int Line, char *Var, char *Arg)
                Conf_ConnectIPv4 = Check_ArgIsTrue(Arg);
                return;
        }
+       if (strcasecmp(Var, "DefaultUserModes") == 0) {
+               p = Arg;
+               Conf_DefaultUserModes[0] = '\0';
+               while (*p) {
+                       if (strchr(Conf_DefaultUserModes, *p)) {
+                               /* Mode is already included; ignore it */
+                               p++;
+                               continue;
+                       }
+
+                       if (strchr(USERMODES, *p)) {
+                               len = strlen(Conf_DefaultUserModes) + 1;
+                               assert(len < sizeof(Conf_DefaultUserModes));
+                               Conf_DefaultUserModes[len - 1] = *p;
+                               Conf_DefaultUserModes[len] = '\0';
+                       } else {
+                               Config_Error(LOG_WARNING,
+                                            "%s, line %d: Unknown user mode \"%c\" in \"DefaultUserModes\"!",
+                                            File, Line, *p);
+                       }
+                       p++;
+               }
+               return;
+       }
        if (strcasecmp(Var, "DNS") == 0) {
                Conf_DNS = Check_ArgIsTrue(Arg);
                return;
index 93d6785f2adb9499eb3d000e7fa45689c62d950a..948749de617bc433b6302edac2633eb1fc6e2bbe 100644 (file)
@@ -202,6 +202,9 @@ GLOBAL bool Conf_PAMIsOptional;
 /** Disable all CTCP commands except for /me ? */
 GLOBAL bool Conf_ScrubCTCP;
 
+/** Default user modes for new local clients */
+GLOBAL char Conf_DefaultUserModes[CLIENT_MODE_LEN];
+
 /*
  * try to connect to remote systems using the ipv6 protocol,
  * if they have an ipv6 address? (default yes)
index bbde6359d70434748779ba96a8868134a8e1aa19..4011b8bcadd3216672b2ddfeb67a254eb3dff463 100644 (file)
@@ -19,6 +19,7 @@
 #include "imp.h"
 #include <assert.h>
 #include <stdlib.h>
+#include <stdio.h>
 #include <string.h>
 #include <strings.h>
 #include <unistd.h>
@@ -37,6 +38,7 @@
 #include "ngircd.h"
 #include "pam.h"
 #include "irc-info.h"
+#include "irc-mode.h"
 #include "irc-write.h"
 
 #include "exp.h"
@@ -151,6 +153,9 @@ Login_User(CLIENT * Client)
 GLOBAL bool
 Login_User_PostAuth(CLIENT *Client)
 {
+       REQUEST Req;
+       char modes[CLIENT_MODE_LEN + 1];
+
        assert(Client != NULL);
 
        if (Class_HandleServerBans(Client) != CONNECTED)
@@ -185,8 +190,17 @@ Login_User_PostAuth(CLIENT *Client)
        if (!IRC_Show_MOTD(Client))
                return DISCONNECTED;
 
-       /* Suspend the client for a second ... */
-       IRC_SetPenalty(Client, 1);
+       /* Set default user modes */
+       if (Conf_DefaultUserModes[0]) {
+               snprintf(modes, sizeof(modes), "+%s", Conf_DefaultUserModes);
+               Req.prefix = Client_ThisServer();
+               Req.command = "MODE";
+               Req.argc = 2;
+               Req.argv[0] = Client_ID(Client);
+               Req.argv[1] = modes;
+               IRC_MODE(Client, &Req);
+       } else
+               IRC_SetPenalty(Client, 1);
 
        return CONNECTED;
 }