repo: ngircd
action: commit
revision: 
path_from: 
revision_from: 0d5de60584f094ef3b7c27806d6cd7f79e861d7b:
path_to: 
revision_to: 
git.thebackupbox.net
ngircd
git clone git://git.thebackupbox.net/ngircd
commit 0d5de60584f094ef3b7c27806d6cd7f79e861d7b
Author: Brett Smith 
Date:   Thu Aug 23 11:07:08 2012 -0400

    Move client password from the Client to the Connection struct.

    This is a relatively naive implementation, basically doing the bare minimum
    necessary to make the switchover go.  Subsequent commits can focus on
    improving the implementation.

diff --git a/src/ngircd/client.c b/src/ngircd/client.c
index 49e273950ea6aeb955e909b1764021970b4fe982..
index ..5ca99c03570c20b97bb92ab40b58f0c82c6f5f27 100644
--- a/src/ngircd/client.c
+++ b/src/ngircd/client.c
@@ -440,18 +440,6 @@ Client_SetFlags( CLIENT *Client, const char *Flags )
 } /* Client_SetFlags */


-GLOBAL void
-Client_SetPassword( CLIENT *Client, const char *Pwd )
-{
-	/* set password sent by client */
-
-	assert( Client != NULL );
-	assert( Pwd != NULL );
-
-	strlcpy(Client->pwd, Pwd, sizeof(Client->pwd));
-} /* Client_SetPassword */
-
-
 GLOBAL void
 Client_SetAway( CLIENT *Client, const char *Txt )
 {
@@ -714,14 +702,6 @@ Client_HostnameCloaked(CLIENT *Client)
 } /* Client_HostnameCloaked */


-GLOBAL char *
-Client_Password( CLIENT *Client )
-{
-	assert( Client != NULL );
-	return Client->pwd;
-} /* Client_Password */
-
-
 GLOBAL char *
 Client_Modes( CLIENT *Client )
 {
diff --git a/src/ngircd/client.h b/src/ngircd/client.h
index 4dbcc7a072232eacfe7cf45020cd2136fb774eb2..
index ..16b2a61ab8564808ad6c58066898602e30431cab 100644
--- a/src/ngircd/client.h
+++ b/src/ngircd/client.h
@@ -47,7 +47,6 @@ typedef struct _CLIENT
 	CONN_ID conn_id;		/* ID of the connection (if local) or NONE (remote) */
 	struct _CLIENT *introducer;	/* ID of the servers which the client is connected to */
 	struct _CLIENT *topserver;	/* toplevel servers (only valid if client is a server) */
-	char pwd[CLIENT_PASS_LEN];	/* password received of the client */
 	char host[CLIENT_HOST_LEN];	/* hostname of the client */
 	char user[CLIENT_USER_LEN];	/* user name ("login") */
 #if defined(PAM) && defined(IDENTAUTH)
@@ -109,7 +108,6 @@ GLOBAL char *Client_OrigUser PARAMS(( CLIENT *Client ));
 #endif
 GLOBAL char *Client_Hostname PARAMS(( CLIENT *Client ));
 GLOBAL char *Client_HostnameCloaked PARAMS(( CLIENT *Client ));
-GLOBAL char *Client_Password PARAMS(( CLIENT *Client ));
 GLOBAL char *Client_Modes PARAMS(( CLIENT *Client ));
 GLOBAL char *Client_Flags PARAMS(( CLIENT *Client ));
 GLOBAL CLIENT *Client_Introducer PARAMS(( CLIENT *Client ));
@@ -129,7 +127,6 @@ GLOBAL void Client_SetID PARAMS(( CLIENT *Client, const char *Nick ));
 GLOBAL void Client_SetUser PARAMS(( CLIENT *Client, const char *User, bool Idented ));
 GLOBAL void Client_SetOrigUser PARAMS(( CLIENT *Client, const char *User ));
 GLOBAL void Client_SetInfo PARAMS(( CLIENT *Client, const char *Info ));
-GLOBAL void Client_SetPassword PARAMS(( CLIENT *Client, const char *Pwd ));
 GLOBAL void Client_SetType PARAMS(( CLIENT *Client, int Type ));
 GLOBAL void Client_SetHops PARAMS(( CLIENT *Client, int Hops ));
 GLOBAL void Client_SetToken PARAMS(( CLIENT *Client, int Token ));
diff --git a/src/ngircd/conn.c b/src/ngircd/conn.c
index 06236fd43e2ab1269e91e1065efa11786da0ed40..
index ..4900d7b803361737de363240867cfec6e001c0df 100644
--- a/src/ngircd/conn.c
+++ b/src/ngircd/conn.c
@@ -918,6 +918,20 @@ va_dcl
 	return ok;
 } /* Conn_WriteStr */

+GLOBAL const char*
+Conn_Password( CONN_ID Idx )
+{
+  assert( Idx > NONE );
+  return My_Connections[Idx].pwd;
+} /* Conn_Password */
+
+GLOBAL void
+Conn_SetPassword( CONN_ID Idx, const char *Pwd )
+{
+  assert( Idx > NONE );
+  strlcpy( My_Connections[Idx].pwd, Pwd,
+	   sizeof(My_Connections[Idx].pwd) );
+} /* Conn_SetPassword */

 /**
  * Append Data to the outbound write buffer of a connection.
diff --git a/src/ngircd/conn.h b/src/ngircd/conn.h
index 4752ec1ede359ee4764066d0b80b578599ff6b74..
index ..9ee979f2da4502ed28e00222b610c201880f6d43 100644
--- a/src/ngircd/conn.h
+++ b/src/ngircd/conn.h
@@ -72,6 +72,7 @@ typedef struct _Connection
 	ng_ipaddr_t addr;		/* Client address */
 	PROC_STAT proc_stat;		/* Status of resolver process */
 	char host[HOST_LEN];		/* Hostname */
+	char pwd[CLIENT_PASS_LEN];	/* password received of the client */
 	array rbuf;			/* Read buffer */
 	array wbuf;			/* Write buffer */
 	time_t signon;			/* Signon ("connect") time */
@@ -115,6 +116,9 @@ GLOBAL void Conn_Handler PARAMS(( void ));

 GLOBAL bool Conn_WriteStr PARAMS(( CONN_ID Idx, const char *Format, ... ));

+GLOBAL const char* Conn_Password PARAMS(( CONN_ID Idx ));
+GLOBAL void Conn_SetPassword PARAMS(( CONN_ID Idx, const char *Pwd ));
+
 GLOBAL void Conn_Close PARAMS(( CONN_ID Idx, const char *LogMsg, const char *FwdMsg, bool InformClient ));

 GLOBAL void Conn_SyncServerStruct PARAMS(( void ));
diff --git a/src/ngircd/irc-login.c b/src/ngircd/irc-login.c
index 3fb1b902412118e2cad5b58bcae8af0dacec6379..
index ..9e1abdd59e8b0349b535b9b1299989f994a3827c 100644
--- a/src/ngircd/irc-login.c
+++ b/src/ngircd/irc-login.c
@@ -87,7 +87,7 @@ IRC_PASS( CLIENT *Client, REQUEST *Req )
 					  Client_ID(Client));
 	}

-	Client_SetPassword(Client, Req->argv[0]);
+	Conn_SetPassword(Client_Conn(Client), Req->argv[0]);

 	/* Protocol version */
 	if (Req->argc >= 2 && strlen(Req->argv[1]) >= 4) {
diff --git a/src/ngircd/irc-server.c b/src/ngircd/irc-server.c
index cca295ac831dc486675f08778ec3d0de881a63ea..
index ..5d5ee634a42772f1979d79d56bc6ed8d4f4430f4 100644
--- a/src/ngircd/irc-server.c
+++ b/src/ngircd/irc-server.c
@@ -80,7 +80,7 @@ IRC_SERVER( CLIENT *Client, REQUEST *Req )
 			Conn_Close( Client_Conn( Client ), NULL, "Server not configured here", true);
 			return DISCONNECTED;
 		}
-		if( strcmp( Client_Password( Client ), Conf_Server[i].pwd_in ) != 0 )
+		if( strcmp( Conn_Password( Client_Conn( Client ) ), Conf_Server[i].pwd_in ) != 0 )
 		{
 			/* wrong password */
 			Log( LOG_ERR, "Connection %d: Got bad password from server \"%s\"!", Client_Conn( Client ), Req->argv[0] );
diff --git a/src/ngircd/login.c b/src/ngircd/login.c
index 7f0299cb09088622b03787a7815950db772f02c7..
index ..e1959d6662adefe11ef91ba351698203bbfcde63 100644
--- a/src/ngircd/login.c
+++ b/src/ngircd/login.c
@@ -93,13 +93,14 @@ Login_User(CLIENT * Client)
 		 * the beahiour of the daemon compiled without PAM support:
 		 * because there can't be any "server password", all
 		 * passwords supplied are classified as "wrong". */
-		if(Client_Password(Client)[0] == '\0')
+		if(Conn_Password(Client_Conn(Client))[0] == '\0')
 			return Login_User_PostAuth(Client);
 		Client_Reject(Client, "Non-empty password", false);
 		return DISCONNECTED;
 	}

-	if (Conf_PAMIsOptional && strcmp(Client_Password(Client), "") == 0) {
+	if (Conf_PAMIsOptional &&
+	    strcmp(Conn_Password(Client_Conn(Client)), "") == 0) {
 		/* Clients are not required to send a password and to be PAM-
 		 * authenticated at all. If not, they won't become "identified"
 		 * and keep the "~" in their supplied user name.
@@ -129,7 +130,7 @@ Login_User(CLIENT * Client)
 	}
 #else
 	/* Check global server password ... */
-	if (strcmp(Client_Password(Client), Conf_ServerPwd) != 0) {
+	if (strcmp(Conn_Password(Client_Conn(Client)), Conf_ServerPwd) != 0) {
 		/* Bad password! */
 		Client_Reject(Client, "Bad server password", false);
 		return DISCONNECTED;
diff --git a/src/ngircd/pam.c b/src/ngircd/pam.c
index 6382c594db0747f5872b7042cb553713d3abd4f1..
index ..88872c47c5f841d9b008da5fdc59a39281f4f2bb 100644
--- a/src/ngircd/pam.c
+++ b/src/ngircd/pam.c
@@ -102,8 +102,8 @@ PAM_Authenticate(CLIENT *Client) {
 	/* Set supplied client password */
 	if (password)
 		free(password);
-	password = strdup(Client_Password(Client));
-	conv.appdata_ptr = Client_Password(Client);
+	password = strdup(Conn_Password(Client_Conn(Client)));
+	conv.appdata_ptr = Conn_Password(Client_Conn(Client));

 	/* Initialize PAM */
 	retval = pam_start("ngircd", Client_OrigUser(Client), &conv, &pam);

-----END OF PAGE-----