Author: vlendec
Date: 2006-09-15 15:27:13 +0000 (Fri, 15 Sep 2006)
New Revision: 18556

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

Log:
Implement "net sam policy", thanks to Karolin Seeger <[EMAIL PROTECTED]>.

Volker

Modified:
   branches/SAMBA_3_0/source/utils/net_sam.c


Changeset:
Modified: branches/SAMBA_3_0/source/utils/net_sam.c
===================================================================
--- branches/SAMBA_3_0/source/utils/net_sam.c   2006-09-15 14:42:24 UTC (rev 
18555)
+++ branches/SAMBA_3_0/source/utils/net_sam.c   2006-09-15 15:27:13 UTC (rev 
18556)
@@ -387,6 +387,80 @@
 }
 
 /*
+ * Change account policies
+ */
+
+static int net_sam_policy(int argc, const char **argv)
+{
+       
+       const char *account_policy = NULL;
+       uint32 value, old_value;
+       int field;
+
+       if ((argc < 1) || (argc > 2)) {
+               d_fprintf(stderr, "usage: net sam policy \"<account policy>\" "
+                         "-> show current value\n");
+               d_fprintf(stderr, "usage: net sam policy \"<account policy>\" "
+                         "<value> -> set a new value\n");
+               return -1;
+       }
+
+       account_policy = argv[0];
+       field = account_policy_name_to_fieldnum(account_policy);
+
+       if (field == 0) {
+               char *apn = account_policy_names_list();
+               d_fprintf(stderr, "No account policy by that name!\n");
+               if (apn) {
+                       d_fprintf(stderr, "Valid account policies "
+                                 "are:\n%s\n", apn);
+               }
+               SAFE_FREE(apn);
+               return -1;
+       }
+
+       if (!pdb_get_account_policy(field, &old_value)) {
+               fprintf(stderr, "Valid account policy, but unable to "
+                       "fetch value!\n");
+               return -1;
+       }
+
+       if (argc == 1) {
+               /*
+                * Just read the value
+                */
+
+               printf("Account policy \"%s\" description: %s\n",
+                      account_policy, account_policy_get_desc(field));
+               printf("Account policy \"%s\" value is: %d\n", account_policy,
+                      old_value);
+               return 0;
+       }
+
+       /*
+        * Here we know we have 2 args, so set it
+        */
+       
+       value = strtoul(argv[1], NULL, 10);
+
+       printf("Account policy \"%s\" description: %s\n", account_policy,
+              account_policy_get_desc(field));
+       printf("Account policy \"%s\" value was: %d\n", account_policy,
+              old_value);
+
+       if (!pdb_set_account_policy(field, value)) {
+               d_fprintf(stderr, "Setting account policy %s to %u failed \n",
+                         account_policy, value);
+       }
+
+       printf("Account policy \"%s\" value is now: %d\n", account_policy,
+              value);
+
+       return 0;
+}
+
+
+/*
  * Map a unix group to a domain group
  */
 
@@ -1232,6 +1306,8 @@
                  "Show details of a SAM entry" },
                { "set", net_sam_set,
                  "Set details of a SAM account" },
+               { "policy", net_sam_policy,
+                 "Set account policies" },
 #ifdef HAVE_LDAP
                { "provision", net_sam_provision,
                  "Provision a clean User Database" },

Reply via email to