Rev 5296: * fix handling of local string type parameters (needed to get "ptr" in http://samba.sernet.de/ma/bzr/SAMBA_3_0-registry.bzr/

Michael Adam ma at sernet.de
Wed Mar 21 15:59:04 GMT 2007


At http://samba.sernet.de/ma/bzr/SAMBA_3_0-registry.bzr/

------------------------------------------------------------
revno: 5296
revision-id: ma at sernet.de-20070321155901-50f3cb442459b7e5
parent: ma at sernet.de-20070321111540-96c903c02ca88d77
committer: Michael Adam <ma at sernet.de>
branch nick: SAMBA_3_0-registry.bzr
timestamp: Wed 2007-03-21 16:59:01 +0100
message:
  * fix handling of local string type parameters (needed to get "ptr"
    correct before accessing the values).
  
  * add support for P_ENUM parameters
modified:
  source/utils/net_conf.c        net_conf.c-20070228210606-uywdn1acd043wgvt-1
=== modified file 'source/utils/net_conf.c'
--- a/source/utils/net_conf.c	2007-03-20 15:20:51 +0000
+++ b/source/utils/net_conf.c	2007-03-21 15:59:01 +0000
@@ -286,8 +286,7 @@
 	struct share_iterator *shares;
 	struct share_params *share;
 	struct parm_struct *parm;
-	int i = 0;
-	char *utf8_s1;
+	int pnum = 0;
 
 	ctx = talloc_init("net_conf_import");
 
@@ -319,30 +318,51 @@
 	while ((share = next_share(shares)) != NULL) {
 		d_printf("TEST: snum    %i : [%s]\n", share->service,
 			 lp_servicename(share->service));
-		i = 0;
-		while ((parm = lp_next_parameter(share->service, &i, 0)))
+		pnum = 0;
+		while ((parm = lp_next_parameter(share->service, &pnum, 0)))
 		{
+			void *ptr = parm->ptr;
+			int i = 0;
+
+			if (parm->p_class == P_LOCAL && share->service >= 0) {
+				ptr = lp_local_ptr(share->service, ptr);
+			}
+
 			if (parm->type != P_SEP) {
-				d_printf("TEST: param %3d : %s = ", i, 
+				d_printf("TEST: param %3d : %s = ", pnum, 
 					 parm->label);
 			}
 			switch (parm->type) {
 			case P_CHAR:
-				d_printf("%c", *(char *)(parm->ptr));
+				d_printf("%c", *(char *)ptr);
 				break;
 			case P_STRING:
 			case P_USTRING:
-				d_printf("%s\n", *(char **)(parm->ptr));
+				d_printf("%s\n", *(char **)ptr);
 				break;
 			case P_GSTRING:
 			case P_UGSTRING:
-				d_printf("%s\n", (char *)(parm->ptr));
+				d_printf("%s\n", (char *)ptr);
 				break;
 			case P_BOOL:
-				d_printf("%s\n", BOOLSTR(*(BOOL *)(parm->ptr)));
+				d_printf("%s\n", BOOLSTR(*(BOOL *)ptr));
 				break;
 			case P_BOOLREV:
-				d_printf("%s\n", BOOLSTR(!*(BOOL *)(parm->ptr)));
+				d_printf("%s\n", BOOLSTR(!*(BOOL *)ptr));
+				break;
+			case P_ENUM:
+                        	for (i = 0; parm->enum_list[i].name; i++) {
+                        	        if (*(int *)ptr == 
+					    parm->enum_list[i].value) 
+					{
+                        	                d_printf("%s\n",
+                        	                         parm->enum_list[i].name);
+                        	                break;
+                        	        }
+                        	}
+				break;
+			case P_LIST:
+				d_printf("<type list coming soon...>\n");
 				break;
 			case P_SEP:
 				break;



More information about the samba-cvs mailing list