repo: ngircd
action: commit
revision: 
path_from: 
revision_from: 7df4c12da96b2bbc23556c0c334e1d06dd9e4887:
path_to: 
revision_to: 
git.thebackupbox.net
ngircd
git clone git://git.thebackupbox.net/ngircd
commit 7df4c12da96b2bbc23556c0c334e1d06dd9e4887
Author: Brett Smith 
Date:   Thu Aug 23 12:12:15 2012 -0400

    Dynamically allocate memory for connection password.

diff --git a/src/ngircd/conn.c b/src/ngircd/conn.c
index 4900d7b803361737de363240867cfec6e001c0df..
index ..03c423e35e0d5616e7204e4488ebfe1cf6953bdd 100644
--- a/src/ngircd/conn.c
+++ b/src/ngircd/conn.c
@@ -929,8 +929,12 @@ GLOBAL void
 Conn_SetPassword( CONN_ID Idx, const char *Pwd )
 {
   assert( Idx > NONE );
-  strlcpy( My_Connections[Idx].pwd, Pwd,
-	   sizeof(My_Connections[Idx].pwd) );
+  My_Connections[Idx].pwd = calloc(strlen(Pwd) + 1, sizeof(char));
+  if (My_Connections[Idx].pwd == NULL) {
+    Log(LOG_EMERG, "Can't allocate memory! [Conn_SetPassword]");
+    exit(1);
+  }
+  strcpy( My_Connections[Idx].pwd, Pwd );
 } /* Conn_SetPassword */

 /**
@@ -1160,6 +1164,8 @@ Conn_Close( CONN_ID Idx, const char *LogMsg, const char *FwdMsg, bool InformClie

 	array_free(&My_Connections[Idx].rbuf);
 	array_free(&My_Connections[Idx].wbuf);
+	if (My_Connections[Idx].pwd != NULL)
+	  free(My_Connections[Idx].pwd);

 	/* Clean up connection structure (=free it) */
 	Init_Conn_Struct( Idx );
diff --git a/src/ngircd/conn.h b/src/ngircd/conn.h
index 9ee979f2da4502ed28e00222b610c201880f6d43..
index ..341489aaffe7db4a6330754358f997c9b9bf2c72 100644
--- a/src/ngircd/conn.h
+++ b/src/ngircd/conn.h
@@ -72,7 +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 */
+	char *pwd;			/* password received of the client */
 	array rbuf;			/* Read buffer */
 	array wbuf;			/* Write buffer */
 	time_t signon;			/* Signon ("connect") time */

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