1
0
mirror of https://github.com/samba-team/samba.git synced 2025-08-26 01:49:31 +03:00

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

Volker
(This used to be commit fde042f29e)
This commit is contained in:
Volker Lendecke
2006-12-01 14:54:31 +00:00
committed by Gerald (Jerry) Carter
parent 0d38f8af39
commit e2bebe4865
3 changed files with 80 additions and 47 deletions

View File

@ -83,28 +83,24 @@ static const struct ap_table account_policy_names[] = {
{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;
}
/****************************************************************************

View File

@ -365,38 +365,57 @@ static int net_sam_policy_set(int argc, const char **argv)
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 @@ static int net_sam_policy_show(int argc, const char **argv)
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_show(int argc, const char **argv)
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;
}

View File

@ -885,12 +885,18 @@ int main (int argc, char **argv)
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)) {