svn commit: samba r19978 - in branches: SAMBA_3_0/source/lib SAMBA_3_0/source/utils SAMBA_3_0_24/source/lib SAMBA_3_0_24/source/utils

vlendec at samba.org vlendec at samba.org
Fri Dec 1 14:54:32 GMT 2006


Author: vlendec
Date: 2006-12-01 14:54:31 +0000 (Fri, 01 Dec 2006)
New Revision: 19978

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=19978

Log:
More "net sam policy" improvements. Thanks to Karolin Seeger <ks at sernet.de>

Volker
Modified:
   branches/SAMBA_3_0/source/lib/account_pol.c
   branches/SAMBA_3_0/source/utils/net_sam.c
   branches/SAMBA_3_0/source/utils/pdbedit.c
   branches/SAMBA_3_0_24/source/lib/account_pol.c
   branches/SAMBA_3_0_24/source/utils/net_sam.c
   branches/SAMBA_3_0_24/source/utils/pdbedit.c


Changeset:
Modified: branches/SAMBA_3_0/source/lib/account_pol.c
===================================================================
--- branches/SAMBA_3_0/source/lib/account_pol.c	2006-12-01 14:18:35 UTC (rev 19977)
+++ branches/SAMBA_3_0/source/lib/account_pol.c	2006-12-01 14:54:31 UTC (rev 19978)
@@ -83,28 +83,24 @@
 	{0, NULL, 0, "", NULL}
 };
 
-char *account_policy_names_list(void)
-{
-	char *nl, *p;
-	int i;
-	size_t len = 0;
+void account_policy_names_list(const char ***names, int *num_names)
+{	
+	const char **nl;
+	int i, count;
 
-	for (i=0; account_policy_names[i].string; i++) {
-		len += strlen(account_policy_names[i].string) + 1;
+	for (count=0; account_policy_names[count].string; count++) {
 	}
-	len++;
-	nl = (char *)SMB_MALLOC(len);
+	nl = SMB_MALLOC_ARRAY(const char *, count);
 	if (!nl) {
-		return NULL;
+		*num_names = 0;
+		return;
 	}
-	p = nl;
 	for (i=0; account_policy_names[i].string; i++) {
-		memcpy(p, account_policy_names[i].string, strlen(account_policy_names[i].string) + 1);
-		p[strlen(account_policy_names[i].string)] = '\n';
-		p += strlen(account_policy_names[i].string) + 1;
+		nl[i] = account_policy_names[i].string;
 	}
-	*p = '\0';
-	return nl;
+	*num_names = count;
+	*names = nl;
+	return;
 }
 
 /****************************************************************************

Modified: branches/SAMBA_3_0/source/utils/net_sam.c
===================================================================
--- branches/SAMBA_3_0/source/utils/net_sam.c	2006-12-01 14:18:35 UTC (rev 19977)
+++ branches/SAMBA_3_0/source/utils/net_sam.c	2006-12-01 14:54:31 UTC (rev 19978)
@@ -365,38 +365,57 @@
 	const char *account_policy = NULL;
 	uint32 value, old_value;
 	int field;
+	char *endptr;
 
         if (argc != 2) {
-                d_fprintf(stderr, "usage: net sam policy set" 
+                d_fprintf(stderr, "usage: net sam policy set " 
 			  "\"<account policy>\" <value> \n");
                 return -1;
         }
 
-	value = strtoul(argv[1], NULL, 10);
 	account_policy = argv[0];
 	field = account_policy_name_to_fieldnum(account_policy);
+	value = strtoul(argv[1], &endptr, 10);
 
-	printf("Account policy \"%s\" description: %s\n", account_policy,
-               account_policy_get_desc(field));
+	if (field == 0) {
+		const char **names;
+                int i, count;
 
+                account_policy_names_list(&names, &count);
+		d_fprintf(stderr, "No account policy \"%s\"!\n\n", argv[0]);
+		d_fprintf(stderr, "Valid account policies are:\n");
+
+		for (i=0; i<count; i++) {
+			d_fprintf(stderr, "%s\n", names[i]);
+		}
+
+		SAFE_FREE(names);
+		return -1;
+	}
+
 	if (!pdb_get_account_policy(field, &old_value)) {
-                fprintf(stderr, "Valid account policy, but unable to "
-                        "fetch value!\n");
-                return -1;
-        }
-	
-        printf("Account policy \"%s\" value was: %d\n", account_policy,
-               old_value);
+		d_fprintf(stderr, "Valid account policy, but unable to fetch "
+			  "value!\n");
+	}
 
-        if (!pdb_set_account_policy(field, value)) {
-                d_fprintf(stderr, "Setting account policy %s to %u failed \n",
-                          account_policy, value);
-        }
+	if ((endptr == argv[1]) || (endptr[0] != '\0')) {
+		d_printf("Unable to set policy \"%s\"! Invalid value %s.\n", 
+			  account_policy, argv[1]); 
+		return -1;
+	}
+		
+	if (!pdb_set_account_policy(field, value)) {
+		d_fprintf(stderr, "Valid account policy, but unable to "
+			  "set value!\n");
+		return -1;
+	}
 
-        printf("Account policy \"%s\" value is now: %d\n", account_policy,
-               value);
+	d_printf("Account policy \"%s\" value was: %d\n", account_policy,
+		 old_value);
 
-        return 0;
+	d_printf("Account policy \"%s\" value is now: %d\n", account_policy,
+		 value);
+	return 0;
 }
 
 static int net_sam_policy_show(int argc, const char **argv)
@@ -415,13 +434,19 @@
         field = account_policy_name_to_fieldnum(account_policy);
 
         if (field == 0) {
-                char *apn = account_policy_names_list();
+		const char **names;
+		int count;
+		int i;
+                account_policy_names_list(&names, &count);
                 d_fprintf(stderr, "No account policy by that name!\n");
-                if (apn) {
+                if (count != 0) {
                         d_fprintf(stderr, "Valid account policies "
-                                  "are:\n%s\n", apn);
+                                  "are:\n");
+			for (i=0; i<count; i++) {
+				d_fprintf(stderr, "%s\n", names[i]);
+			}
                 }
-                SAFE_FREE(apn);
+                SAFE_FREE(names);
                 return -1;
         }
 
@@ -440,12 +465,18 @@
 
 static int net_sam_policy_list(int argc, const char **argv)
 {
-	char *apn = account_policy_names_list();
-        if (apn) {
+	const char **names;
+	int count;
+	int i;
+	account_policy_names_list(&names, &count);
+        if (count != 0) {
         	d_fprintf(stderr, "Valid account policies "
-			  "are:\n\n%s\n", apn);
+			  "are:\n");
+		for (i = 0; i < count ; i++) {
+			d_fprintf(stderr, "%s\n", names[i]);
+		}
 	}
-        SAFE_FREE(apn);
+        SAFE_FREE(names);
         return -1;
 }
 

Modified: branches/SAMBA_3_0/source/utils/pdbedit.c
===================================================================
--- branches/SAMBA_3_0/source/utils/pdbedit.c	2006-12-01 14:18:35 UTC (rev 19977)
+++ branches/SAMBA_3_0/source/utils/pdbedit.c	2006-12-01 14:54:31 UTC (rev 19978)
@@ -885,12 +885,18 @@
 		uint32 value;
 		int field = account_policy_name_to_fieldnum(account_policy);
 		if (field == 0) {
-			char *apn = account_policy_names_list();
-			fprintf(stderr, "No account policy by that name\n");
-			if (apn) {
-				fprintf(stderr, "Account policy names are :\n%s\n", apn);
+			const char **names;
+			int count;
+			int i;
+			account_policy_names_list(&names, &count);
+			fprintf(stderr, "No account policy by that name!\n");
+			if (count !=0) {
+				fprintf(stderr, "Account policy names are:\n");
+				for (i = 0; i < count ; i++) {
+                        		d_fprintf(stderr, "%s\n", names[i]);
+				}
 			}
-			SAFE_FREE(apn);
+			SAFE_FREE(names);
 			exit(1);
 		}
 		if (!pdb_get_account_policy(field, &value)) {

Modified: branches/SAMBA_3_0_24/source/lib/account_pol.c
===================================================================
--- branches/SAMBA_3_0_24/source/lib/account_pol.c	2006-12-01 14:18:35 UTC (rev 19977)
+++ branches/SAMBA_3_0_24/source/lib/account_pol.c	2006-12-01 14:54:31 UTC (rev 19978)
@@ -83,28 +83,24 @@
 	{0, NULL, 0, "", NULL}
 };
 
-char *account_policy_names_list(void)
-{
-	char *nl, *p;
-	int i;
-	size_t len = 0;
+void account_policy_names_list(const char ***names, int *num_names)
+{	
+	const char **nl;
+	int i, count;
 
-	for (i=0; account_policy_names[i].string; i++) {
-		len += strlen(account_policy_names[i].string) + 1;
+	for (count=0; account_policy_names[count].string; count++) {
 	}
-	len++;
-	nl = (char *)SMB_MALLOC(len);
+	nl = SMB_MALLOC_ARRAY(const char *, count);
 	if (!nl) {
-		return NULL;
+		*num_names = 0;
+		return;
 	}
-	p = nl;
 	for (i=0; account_policy_names[i].string; i++) {
-		memcpy(p, account_policy_names[i].string, strlen(account_policy_names[i].string) + 1);
-		p[strlen(account_policy_names[i].string)] = '\n';
-		p += strlen(account_policy_names[i].string) + 1;
+		nl[i] = account_policy_names[i].string;
 	}
-	*p = '\0';
-	return nl;
+	*num_names = count;
+	*names = nl;
+	return;
 }
 
 /****************************************************************************

Modified: branches/SAMBA_3_0_24/source/utils/net_sam.c
===================================================================
--- branches/SAMBA_3_0_24/source/utils/net_sam.c	2006-12-01 14:18:35 UTC (rev 19977)
+++ branches/SAMBA_3_0_24/source/utils/net_sam.c	2006-12-01 14:54:31 UTC (rev 19978)
@@ -365,38 +365,57 @@
 	const char *account_policy = NULL;
 	uint32 value, old_value;
 	int field;
+	char *endptr;
 
         if (argc != 2) {
-                d_fprintf(stderr, "usage: net sam policy set" 
+                d_fprintf(stderr, "usage: net sam policy set " 
 			  "\"<account policy>\" <value> \n");
                 return -1;
         }
 
-	value = strtoul(argv[1], NULL, 10);
 	account_policy = argv[0];
 	field = account_policy_name_to_fieldnum(account_policy);
+	value = strtoul(argv[1], &endptr, 10);
 
-	printf("Account policy \"%s\" description: %s\n", account_policy,
-               account_policy_get_desc(field));
+	if (field == 0) {
+		const char **names;
+                int i, count;
 
+                account_policy_names_list(&names, &count);
+		d_fprintf(stderr, "No account policy \"%s\"!\n\n", argv[0]);
+		d_fprintf(stderr, "Valid account policies are:\n");
+
+		for (i=0; i<count; i++) {
+			d_fprintf(stderr, "%s\n", names[i]);
+		}
+
+		SAFE_FREE(names);
+		return -1;
+	}
+
 	if (!pdb_get_account_policy(field, &old_value)) {
-                fprintf(stderr, "Valid account policy, but unable to "
-                        "fetch value!\n");
-                return -1;
-        }
-	
-        printf("Account policy \"%s\" value was: %d\n", account_policy,
-               old_value);
+		d_fprintf(stderr, "Valid account policy, but unable to fetch "
+			  "value!\n");
+	}
 
-        if (!pdb_set_account_policy(field, value)) {
-                d_fprintf(stderr, "Setting account policy %s to %u failed \n",
-                          account_policy, value);
-        }
+	if ((endptr == argv[1]) || (endptr[0] != '\0')) {
+		d_printf("Unable to set policy \"%s\"! Invalid value %s.\n", 
+			  account_policy, argv[1]); 
+		return -1;
+	}
+		
+	if (!pdb_set_account_policy(field, value)) {
+		d_fprintf(stderr, "Valid account policy, but unable to "
+			  "set value!\n");
+		return -1;
+	}
 
-        printf("Account policy \"%s\" value is now: %d\n", account_policy,
-               value);
+	d_printf("Account policy \"%s\" value was: %d\n", account_policy,
+		 old_value);
 
-        return 0;
+	d_printf("Account policy \"%s\" value is now: %d\n", account_policy,
+		 value);
+	return 0;
 }
 
 static int net_sam_policy_show(int argc, const char **argv)
@@ -415,13 +434,19 @@
         field = account_policy_name_to_fieldnum(account_policy);
 
         if (field == 0) {
-                char *apn = account_policy_names_list();
+		const char **names;
+		int count;
+		int i;
+                account_policy_names_list(&names, &count);
                 d_fprintf(stderr, "No account policy by that name!\n");
-                if (apn) {
+                if (count != 0) {
                         d_fprintf(stderr, "Valid account policies "
-                                  "are:\n%s\n", apn);
+                                  "are:\n");
+			for (i=0; i<count; i++) {
+				d_fprintf(stderr, "%s\n", names[i]);
+			}
                 }
-                SAFE_FREE(apn);
+                SAFE_FREE(names);
                 return -1;
         }
 
@@ -440,12 +465,18 @@
 
 static int net_sam_policy_list(int argc, const char **argv)
 {
-	char *apn = account_policy_names_list();
-        if (apn) {
+	const char **names;
+	int count;
+	int i;
+	account_policy_names_list(&names, &count);
+        if (count != 0) {
         	d_fprintf(stderr, "Valid account policies "
-			  "are:\n\n%s\n", apn);
+			  "are:\n");
+		for (i = 0; i < count ; i++) {
+			d_fprintf(stderr, "%s\n", names[i]);
+		}
 	}
-        SAFE_FREE(apn);
+        SAFE_FREE(names);
         return -1;
 }
 

Modified: branches/SAMBA_3_0_24/source/utils/pdbedit.c
===================================================================
--- branches/SAMBA_3_0_24/source/utils/pdbedit.c	2006-12-01 14:18:35 UTC (rev 19977)
+++ branches/SAMBA_3_0_24/source/utils/pdbedit.c	2006-12-01 14:54:31 UTC (rev 19978)
@@ -885,12 +885,18 @@
 		uint32 value;
 		int field = account_policy_name_to_fieldnum(account_policy);
 		if (field == 0) {
-			char *apn = account_policy_names_list();
-			fprintf(stderr, "No account policy by that name\n");
-			if (apn) {
-				fprintf(stderr, "Account policy names are :\n%s\n", apn);
+			const char **names;
+			int count;
+			int i;
+			account_policy_names_list(&names, &count);
+			fprintf(stderr, "No account policy by that name!\n");
+			if (count !=0) {
+				fprintf(stderr, "Account policy names are:\n");
+				for (i = 0; i < count ; i++) {
+                        		d_fprintf(stderr, "%s\n", names[i]);
+				}
 			}
-			SAFE_FREE(apn);
+			SAFE_FREE(names);
 			exit(1);
 		}
 		if (!pdb_get_account_policy(field, &value)) {



More information about the samba-cvs mailing list