File ncpfs-hg-commit-456.patch of Package ncpfs

changeset:   456:260a30abdb81
user:        Petr Vandrovec <petr@vandrovec.name>
date:        Sat Apr 15 04:41:06 2006 +0200
files:       contrib/ncp_nss_lib/nss_cfgfile.c contrib/ncp_nss_lib/nss_cfgfile.h
description:
Fix nss_ncp strict aliasing problems

It is bad idea to convert pointer to integer to pointer to char pointer,
and in addition this is also unnecessary.  And removal of this typecast
revealed that we believe that 'int' and 'gid_t' and 'uid_t' have same
width.  This is unreasonable assumption, I personally remember time
when uid_t was 16bit, while int was 32bit...


diff -r 69f23e25cc66 -r 260a30abdb81 contrib/ncp_nss_lib/nss_cfgfile.c
--- a/contrib/ncp_nss_lib/nss_cfgfile.c	Sat Apr 15 04:25:06 2006 +0200
+++ b/contrib/ncp_nss_lib/nss_cfgfile.c	Sat Apr 15 04:41:06 2006 +0200
@@ -108,9 +108,9 @@ struct check {
         const char *option; 	/* configuration option */
         int mandatory; 		/* can be empty or null */
 	int found;		/*set to TRUE if found in cfg file */
-        char ** value_ptr; 	/* temporary storage place */
-	int isNum;		/* 1 is numeric, 0 is string*/
-	const char* defValue;
+        char ** char_ptr; 	/* where to store string value */
+	int * int_ptr;		/* where to store integer value */
+	const char* defValue;	/* default value */
 };
 
 
@@ -119,12 +119,12 @@ void printResults (const char * infos,st
 	struct check* ptr;
 	printf ("%s\n",infos);
 	for  (ptr=results; ptr->option; ptr++) {
-		if (ptr->isNum)
-			printf ("option=%s mandatory=%d found=%d value=%d isNum=%d defvalue=%s\n",
-				ptr->option,ptr->mandatory,ptr->found,*(int**)ptr->value_ptr,ptr->isNum,ptr->defValue);
+		if (ptr->int_ptr)
+			printf ("option=%s mandatory=%d found=%d value=%d defvalue=%s\n",
+				ptr->option,ptr->mandatory,ptr->found,*ptr->int_ptr,ptr->defValue);
 		else
-			printf ("option=%s mandatory=%d found=%d value=%s isNum=%d defvalue=%s\n",
-				ptr->option,ptr->mandatory,ptr->found,*ptr->value_ptr,ptr->isNum,ptr->defValue);
+			printf ("option=%s mandatory=%d found=%d value=%s defvalue=%s\n",
+				ptr->option,ptr->mandatory,ptr->found,*ptr->char_ptr,ptr->defValue);
 	}
 
 }
@@ -175,14 +175,14 @@ static int process_line (char* cptr, str
 		eptr++;
 	}
 	*eptr = 0;
-	if (ptr->isNum) {
-		*(int*)ptr->value_ptr=strtoul (sptr,&errPtr,0);
+	if (ptr->int_ptr) {
+		*ptr->int_ptr=strtoul (sptr,&errPtr,0);
 		ptr->found= ((*sptr) && !(*errPtr)); //not empty and no error
 	} else {
 		if (eptr>sptr) { // do not take an empty string value
 			char *v=strdup(sptr);
 			if (v) {
-				*ptr->value_ptr=v;
+				*ptr->char_ptr=v;
 				ptr->found= TRUE;
 			}else
 				return 1;
@@ -201,12 +201,12 @@ static int fix_conf (struct check *resul
 				traceForce(0,LOG_ERR, "ncp_nss aborting :missing mandatory information '%s=' in config file %s  ",ptr->option,GLOBALCFGFILE);
 				return 1;
 			}
-			if (ptr->isNum) {
-				*(int*)ptr->value_ptr=strtoul (ptr->defValue,NULL,0);
+			if (ptr->int_ptr) {
+				*ptr->int_ptr=strtoul (ptr->defValue,NULL,0);
 			}else {
 				char * v=strdup(ptr->defValue);
 				if (v)
-					*ptr->value_ptr=v;
+					*ptr->char_ptr=v;
 				else
 					return 1;
 			}
@@ -225,20 +225,20 @@ static struct nss_ncp_conf *read_conf_fi
 		return NULL;
 	{
 		struct check check_confs[] = {
-		/*option	mandat	found	value_ptr		isNum	defValue */
-                {"debug",	FALSE,FALSE,(char**)&conf->debug,	TRUE,	"0"},
-                {"useTree",	FALSE,FALSE,(char**)&conf->useTree,	TRUE,	"0"},
-                {"server",	TRUE, FALSE,        &conf->server,	FALSE,	""},
-                {"startCtx",	FALSE,FALSE,        &conf->startCtx,	FALSE,	""},
-                {"ctrlGroup",	FALSE,FALSE,        &conf->ctrlGroup,	FALSE,	""},
-                {"defGid",	FALSE,FALSE,(char**)&conf->defGid,	TRUE,	"100"},
-		{"defShell",	FALSE,FALSE,        &conf->defShell,	FALSE,	"/bin/bash"},
-                {"fallbackUid",	FALSE,FALSE,(char**)&conf->fallbackUid,	TRUE,	"-1"},
-		{"fallbackGid",	FALSE,FALSE,(char**)&conf->fallbackGid,	TRUE,	"-1"},
-                {"doPasswd",	FALSE,FALSE,(char**)&conf->doPassword,	TRUE,	"0"},
-                {"doGroup",	FALSE,FALSE,(char**)&conf->doGroup,	TRUE,	"0"},
-                {"doShadow",	FALSE,FALSE,(char**)&conf->doShadow,	TRUE,	"0"},
-		{NULL	,	FALSE,FALSE,        NULL,		FALSE,	NULL}
+		/*option	mandat	found	char_ptr		int_ptr			defValue */
+                {"debug",	FALSE,FALSE,	NULL,			&conf->debug,		"0"},
+                {"useTree",	FALSE,FALSE,	NULL,			&conf->useTree,		"0"},
+                {"server",	TRUE, FALSE,	&conf->server,		NULL,			""},
+                {"startCtx",	FALSE,FALSE,	&conf->startCtx,	NULL,			""},
+                {"ctrlGroup",	FALSE,FALSE,	&conf->ctrlGroup,	NULL,			""},
+                {"defGid",	FALSE,FALSE,	NULL,			&conf->defGid,		"100"},
+		{"defShell",	FALSE,FALSE,	&conf->defShell,	NULL,			"/bin/bash"},
+                {"fallbackUid",	FALSE,FALSE,	NULL,			&conf->fallbackUid,	"-1"},
+		{"fallbackGid",	FALSE,FALSE,	NULL,			&conf->fallbackGid,	"-1"},
+                {"doPasswd",	FALSE,FALSE,	NULL,			&conf->doPassword,	"0"},
+                {"doGroup",	FALSE,FALSE,	NULL,			&conf->doGroup,		"0"},
+                {"doShadow",	FALSE,FALSE,	NULL,			&conf->doShadow,	"0"},
+		{NULL	,	FALSE,FALSE,	NULL,			NULL,			NULL}
 		};
 
 		char cfgline[16384];
diff -r 69f23e25cc66 -r 260a30abdb81 contrib/ncp_nss_lib/nss_cfgfile.h
--- a/contrib/ncp_nss_lib/nss_cfgfile.h	Sat Apr 15 04:25:06 2006 +0200
+++ b/contrib/ncp_nss_lib/nss_cfgfile.h	Sat Apr 15 04:41:06 2006 +0200
@@ -11,10 +11,10 @@ struct nss_ncp_conf {
         char *  server;         // name of server or tree
         char *  startCtx;       // start searching is this context (and below)
         char *  ctrlGroup;      // limit search to members of this NDS group for passwd and shadow
-        gid_t   defGid;         // if no primary group found in NDS use this value
+        int     defGid;         // if no primary group found in NDS use this value
         char *  defShell;       // if no shell found in NDS use this value
-        uid_t   fallbackUid;    //  if no UID found in NDS use this one (-1= skip user, NFS_NOBODY= use this UID)
-        gid_t   fallbackGid;    //  if no GID found in NDS use this one (-1= skip group, NFS_NOBODY= use this GID)
+        int     fallbackUid;    //  if no UID found in NDS use this one (-1= skip user, NFS_NOBODY= use this UID)
+        int     fallbackGid;    //  if no GID found in NDS use this one (-1= skip group, NFS_NOBODY= use this GID)
         int     doPassword;     // if  0, will return immediarly NSS_STATUS_UNAVAILABLE even if ncp is listed in /etc/nsswitch.conf
         int     doGroup;        // if  0, will return immediarly NSS_STATUS_UNAVAILABLE even if ncp is listed in /etc/nsswitch.conf
         int     doShadow;       // if  0, will return immediarly NSS_STATUS_UNAVAILABLE even if ncp is listed in /etc/nsswitch.conf

openSUSE Build Service is sponsored by