]> arthur.barton.de Git - ngircd-alex.git/blobdiff - src/ngircd/conf.c
New configuration option "NoPAM" to disable PAM
[ngircd-alex.git] / src / ngircd / conf.c
index fae2a28c453efc943e419526fd72fecbb864d789..834a1da330e989300993d5377bf6c8b726119ce5 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * ngIRCd -- The Next Generation IRC Daemon
- * Copyright (c)2001-2009 Alexander Barton (alex@barton.de)
+ * Copyright (c)2001-2010 Alexander Barton (alex@barton.de)
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
 #include "array.h"
 #include "ngircd.h"
 #include "conn.h"
-#include "client.h"
 #include "channel.h"
 #include "defines.h"
 #include "log.h"
 #include "match.h"
-#include "resolve.h"
 #include "tool.h"
 
 #include "exp.h"
@@ -291,16 +289,19 @@ Conf_Test( void )
        }
 
        puts( "[GLOBAL]" );
-       printf( "  Name = %s\n", Conf_ServerName );
-       printf( "  Info = %s\n", Conf_ServerInfo );
-       printf( "  Password = %s\n", Conf_ServerPwd );
-       printf( "  AdminInfo1 = %s\n", Conf_ServerAdmin1 );
-       printf( "  AdminInfo2 = %s\n", Conf_ServerAdmin2 );
-       printf( "  AdminEMail = %s\n", Conf_ServerAdminMail );
-       printf( "  MotdFile = %s\n", Conf_MotdFile );
-       printf( "  MotdPhrase = %s\n", Conf_MotdPhrase );
-       printf( "  ChrootDir = %s\n", Conf_Chroot );
-       printf( "  PidFile = %s\n", Conf_PidFile);
+       printf("  Name = %s\n", Conf_ServerName);
+       printf("  Info = %s\n", Conf_ServerInfo);
+#ifndef PAM
+       printf("  Password = %s\n", Conf_ServerPwd);
+#endif
+       printf("  WebircPassword = %s\n", Conf_WebircPwd);
+       printf("  AdminInfo1 = %s\n", Conf_ServerAdmin1);
+       printf("  AdminInfo2 = %s\n", Conf_ServerAdmin2);
+       printf("  AdminEMail = %s\n", Conf_ServerAdminMail);
+       printf("  MotdFile = %s\n", Conf_MotdFile);
+       printf("  MotdPhrase = %s\n", Conf_MotdPhrase);
+       printf("  ChrootDir = %s\n", Conf_Chroot);
+       printf("  PidFile = %s\n", Conf_PidFile);
        printf("  Listen = %s\n", Conf_ListenAddress);
        fputs("  Ports = ", stdout);
        ports_puts(&Conf_ListenPorts);
@@ -330,6 +331,7 @@ Conf_Test( void )
        printf("  PredefChannelsOnly = %s\n", yesno_to_str(Conf_PredefChannelsOnly));
        printf("  NoDNS = %s\n", yesno_to_str(Conf_NoDNS));
        printf("  NoIdent = %s\n", yesno_to_str(Conf_NoIdent));
+       printf("  NoPAM = %s\n", yesno_to_str(Conf_NoPAM));
 
 #ifdef WANT_IPV6
        printf("  ConnectIPv4 = %s\n", yesno_to_str(Conf_ConnectIPv6));
@@ -579,6 +581,7 @@ Set_Defaults(bool InitServers)
        Conf_ConnectRetry = 60;
        Conf_NoDNS = false;
        Conf_NoIdent = false;
+       Conf_NoPAM = false;
 
        Conf_Oper_Count = 0;
        Conf_Channel_Count = 0;
@@ -845,6 +848,13 @@ Handle_GLOBAL( int Line, char *Var, char *Arg )
                        Config_Error_TooLong( Line, Var );
                return;
        }
+       if (strcasecmp(Var, "WebircPassword") == 0) {
+               /* Password required for WEBIRC command */
+               len = strlcpy(Conf_WebircPwd, Arg, sizeof(Conf_WebircPwd));
+               if (len >= sizeof(Conf_WebircPwd))
+                       Config_Error_TooLong(Line, Var);
+               return;
+       }
        if( strcasecmp( Var, "AdminInfo1" ) == 0 ) {
                /* Administrative info #1 */
                len = strlcpy( Conf_ServerAdmin1, Arg, sizeof( Conf_ServerAdmin1 ));
@@ -978,6 +988,11 @@ Handle_GLOBAL( int Line, char *Var, char *Arg )
 #endif
                return;
        }
+       if(strcasecmp(Var, "NoPAM") == 0) {
+               /* don't use PAM library to authenticate users */
+               Conf_NoPAM = Check_ArgIsTrue(Arg);
+               return;
+       }
 #ifdef WANT_IPV6
        /* the default setting for all the WANT_IPV6 special options is 'true' */
        if( strcasecmp( Var, "ConnectIPv6" ) == 0 ) {
@@ -1395,6 +1410,12 @@ Validate_Config(bool Configtest, bool Rehash)
                             "No administrative information configured but required by RFC!");
        }
 
+#ifdef PAM
+       if (Conf_ServerPwd[0])
+               Config_Error(LOG_ERR,
+                            "This server uses PAM, \"Password\" will be ignored!");
+#endif
+
 #ifdef DEBUG
        servers = servers_once = 0;
        for (i = 0; i < MAX_SERVERS; i++) {
@@ -1474,7 +1495,7 @@ Init_Server_Struct( CONF_SERVER *Server )
 
        if( NGIRCd_Passive ) Server->flags = CONF_SFLAG_DISABLED;
 
-       Resolve_Init(&Server->res_stat);
+       Proc_InitStruct(&Server->res_stat);
        Server->conn_id = NONE;
        memset(&Server->bind_addr, 0, sizeof(&Server->bind_addr));
 } /* Init_Server_Struct */