[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdebase/workspace/kdm/backend
From:       Oswald Buddenhagen <ossi () kde ! org>
Date:       2010-02-28 20:39:43
Message-ID: 1267389583.277742.31990.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 1097270 by ossi:

make getPAMXauthData() not read a file needlessly

 M  +18 -24    client.c  


--- trunk/KDE/kdebase/workspace/kdm/backend/client.c #1097269:1097270
@@ -309,34 +309,28 @@
 # endif
 
 # ifdef PAM_XDISPLAY
-/* Inspired by Eamon Walsh's patch for gdm. */
 static struct pam_xauth_data *
-getPAMXauthData( const char *xauth_file )
+getPAMXauthData( void )
 {
-	FILE *fp;
-	Xauth *auth;
+	int i;
 	struct pam_xauth_data *ret;
 
-	if (!(fp = fopen( xauth_file, "r" )))
-		return 0;
-
-	auth = XauReadAuth( fp );
-	fclose( fp );
-	if (!auth)
-		return 0;
-
-	if ((ret = malloc( sizeof(*ret) + auth->name_length + 1 + auth->data_length ))) {
-		ret->name = (char *)ret + sizeof(*ret);
-		ret->namelen = auth->name_length;
-		memcpy( ret->name, auth->name, auth->name_length );
-		ret->name[ret->namelen] = 0;
-		ret->data = ret->name + ret->namelen + 1;
-		ret->datalen = auth->data_length;
-		memcpy( ret->data, auth->data, auth->data_length );
+	for (i = 0; i < td->authNum; i++) {
+		Xauth *auth = td->authorizations[i];
+		if (auth->data_length > 0) {
+			if ((ret = malloc( sizeof(*ret) + auth->name_length + 1 + auth->data_length ))) {
+				ret->name = (char *)ret + sizeof(*ret);
+				ret->namelen = auth->name_length;
+				memcpy( ret->name, auth->name, auth->name_length );
+				ret->name[ret->namelen] = 0;
+				ret->data = ret->name + ret->namelen + 1;
+				ret->datalen = auth->data_length;
+				memcpy( ret->data, auth->data, auth->data_length );
+			}
+			return ret;
+		}
 	}
-
-	XauDisposeAuth( auth );
-	return ret;
+	return 0;
 }
 # endif
 
@@ -382,7 +376,7 @@
 	                           displayName( td ) )) != PAM_SUCCESS)
 		debug( "setting PAM_XDISPLAY failed: %s\n",
 		       pam_strerror( 0, pretc ) );
-	else if (td->authFile && (pam_xauth = getPAMXauthData( td->authFile ))) {
+	else if ((pam_xauth = getPAMXauthData())) {
 		pretc = pam_set_item( pamh, PAM_XAUTHDATA, pam_xauth );
 		free( pam_xauth );
 		if (pretc != PAM_SUCCESS)
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic