/*
* Copyright 2000, International Business Machines Corporation and others.
* All Rights Reserved.
- *
+ *
* This software has been released under the terms of the IBM Public
* License. For details, see the LICENSE file in the top-level source
* directory or online at http://www.openafs.org/dl/license10.html
*/
-/*
- * (3) add new pts commands:
- *
- * Interactive - allow the pts command
- * to be run interactively.
- * Quit - quit interactive mode.
- * Source - allow input to come from a file(s).
- * Sleep - pause for a specified number
- * of seconds.
- *
- */
-
#include <afsconfig.h>
#include <afs/param.h>
-RCSID
- ("$Header$");
+#include <roken.h>
-#include <stdio.h>
-#include <string.h>
-#ifdef AFS_AIX32_ENV
-#include <signal.h>
-#endif
#include <ctype.h>
-#include <sys/types.h>
-#include <errno.h>
-#include <afs/cmd.h>
+
#ifdef AFS_NT40_ENV
-#include <winsock2.h>
#include <WINNT/afsevent.h>
-#else
-#include <netinet/in.h>
+#include <WINNT/afsreg.h>
#endif
+
#include <afs/cellconfig.h>
+#include <afs/afsutil.h>
+#include <afs/com_err.h>
+#include <afs/cmd.h>
#include <rx/rx.h>
#include <rx/xdr.h>
+
#include "ptclient.h"
+#include "ptuser.h"
#include "pterror.h"
-#include <afs/afsutil.h>
+#include "ptprototypes.h"
#undef FOREIGN
char *whoami;
int force = 0;
-#if defined(SUPERGROUPS)
-
-/*
- * Add new pts commands:
- *
- * Interactive - allow the pts command to be run interactively.
- * Quit - quit interactive mode.
- * Source - allow input to come from a file(s).
- * Sleep - pause for a specified number of seconds.
- */
-
static int finished;
static FILE *source;
extern struct ubik_client *pruclient;
FILE *s_file;
} *shead;
-int
-Interactive(register struct cmd_syndesc *as)
+struct authstate {
+ int sec;
+ const char *confdir;
+ char cell[MAXCELLCHARS];
+};
+
+static int CleanUp(struct cmd_syndesc *as, void *arock);
+
+static int
+pts_Interactive(struct cmd_syndesc *as, void *arock)
{
+ source = stdin;
finished = 0;
return 0;
}
-int
-Quit(register struct cmd_syndesc *as)
+static int
+pts_Quit(struct cmd_syndesc *as, void *arock)
{
finished = 1;
return 0;
}
-int
-Source(register struct cmd_syndesc *as)
+static int
+pts_Source(struct cmd_syndesc *as, void *arock)
{
FILE *fd;
struct sourcestack *sp;
return 0;
}
-int
-Sleep(register struct cmd_syndesc *as)
+static int
+pts_Sleep(struct cmd_syndesc *as, void *arock)
{
int delay;
if (!as->parms[0].items) {
return 1;
}
delay = atoi(as->parms[0].items->data);
+#ifdef AFS_PTHREAD_ENV
+ sleep(delay);
+#else
IOMGR_Sleep(delay);
+#endif
+ return 0;
}
-int
-popsource()
+static int
+popsource(void)
{
- register struct sourcestack *sp;
+ struct sourcestack *sp;
if (!(sp = shead))
return 0;
if (source != stdin)
return 1;
}
-#endif /* SUPERGROUPS */
-
int
-osi_audit()
+osi_audit(void)
{
/* OK, this REALLY sucks bigtime, but I can't tell who is calling
* afsconf_CheckAuth easily, and only *SERVERS* should be calling osi_audit
return 0;
}
-int
-GetGlobals(register struct cmd_syndesc *as)
+#ifdef AFS_NT40_ENV
+static DWORD
+win32_enableCrypt(void)
{
- register afs_int32 code;
- char *cell;
- afs_int32 sec = 1;
+ HKEY parmKey;
+ DWORD dummyLen;
+ DWORD cryptall = 0;
+ DWORD code;
+
+ /* Look up configuration parameters in Registry */
+ code = RegOpenKeyEx(HKEY_LOCAL_MACHINE, AFSREG_CLT_SVC_PARAM_SUBKEY,
+ 0, (IsWow64()?KEY_WOW64_64KEY:0)|KEY_QUERY_VALUE, &parmKey);
+ if (code != ERROR_SUCCESS) {
+ dummyLen = sizeof(cryptall);
+ RegQueryValueEx(parmKey, "SecurityLevel", NULL, NULL,
+ (BYTE *) &cryptall, &dummyLen);
+ }
+ RegCloseKey (parmKey);
+
+ return cryptall;
+}
+#endif /* AFS_NT40_ENV */
+
+static int
+GetGlobals(struct cmd_syndesc *as, void *arock)
+{
+ struct authstate *state = (struct authstate *) arock;
+ afs_int32 code;
+ char *cell = NULL;
+ afs_int32 sec;
+ int changed = 0;
+ const char* confdir;
whoami = as->a0name;
if (!strcmp(as->name, "help"))
return 0;
- if (as->parms[16].items)
+
+ if (*state->cell) {
+ cell = state->cell;
+ }
+ sec = state->sec;
+
+ if (state->confdir == NULL) {
+ changed = 1;
+ }
+
+ if (as->parms[16].items) {
+ changed = 1;
cell = as->parms[16].items->data;
- else
- cell = 0;
- if (as->parms[17].items)
+ }
+ if (as->parms[17].items) { /* -noauth */
+ changed = 1;
sec = 0;
+ }
+ if (as->parms[20].items) { /* -localauth */
+ changed = 1;
+ sec = 2;
+ }
+ if (as->parms[21].items) { /* -auth */
+ changed = 1;
+ sec = 1;
+ }
+ if (as->parms[22].items /* -encrypt */
+#ifdef AFS_NT40_ENV
+ || win32_enableCrypt()
+#endif /* AFS_NT40_ENV */
+ ) {
+ changed = 1;
+ sec = 3;
+ }
+ if (as->parms[18].items || as->parms[20].items) { /* -test, -localauth */
+ changed = 1;
+ confdir = AFSDIR_SERVER_ETC_DIRPATH;
+ } else {
+ if (sec == 2)
+ confdir = AFSDIR_SERVER_ETC_DIRPATH;
+ else
+ confdir = AFSDIR_CLIENT_ETC_DIRPATH;
+ }
- if (as->parms[18].items) { /* testing? */
- code = pr_Initialize(sec, AFSDIR_SERVER_ETC_DIRPATH, cell);
+ if (as->parms[23].items) { /* -config */
+ changed = 1;
+ confdir = as->parms[23].items->data;
+ }
+
+ if (changed) {
+ CleanUp(as, arock);
+ code = pr_Initialize(sec, confdir, cell);
} else {
- code = pr_Initialize(sec, AFSDIR_CLIENT_ETC_DIRPATH, cell);
+ code = 0;
}
if (code) {
- com_err(whoami, code, "while initializing");
+ afs_com_err(whoami, code, "while initializing");
return code;
}
+ state->sec = sec;
+ state->confdir = confdir;
+ if (cell && cell != state->cell)
+ strncpy(state->cell, cell, MAXCELLCHARS-1);
+
+ force = 0;
if (as->parms[19].items)
force = 1;
+
return code;
}
-int
-CleanUp(register struct cmd_syndesc *as)
+static int
+CleanUp(struct cmd_syndesc *as, void *arock)
{
-#if defined(SUPERGROUPS)
if (as && !strcmp(as->name, "help"))
return 0;
if (pruclient) {
pr_End();
rx_Finalize();
}
-#else
- if (!strcmp(as->name, "help"))
- return 0;
- /* Need to shutdown the ubik_client & other connections */
- pr_End();
- rx_Finalize();
-#endif /* SUPERGROUPS */
-
return 0;
}
-int
-CreateGroup(register struct cmd_syndesc *as)
+static int
+CreateGroup(struct cmd_syndesc *as, void *arock)
{
- register afs_int32 code;
+ afs_int32 code;
afs_int32 id;
char *owner;
struct cmd_item *namei;
if (idi) {
code = util_GetInt32(idi->data, &id);
if (code) {
- com_err(whoami, code, "because group id was: '%s'",
+ afs_com_err(whoami, code, "because group id was: '%s'",
idi->data);
return code;
}
- if (id >= 0) {
+ if (id == 0) {
+ printf("0 isn't a valid group id; aborting\n");
+ return EINVAL;
+ }
+ if (id > 0) {
code = PRBADARG;
- com_err(whoami, code, "because group id %d was not negative",
+ afs_com_err(whoami, code, "because group id %d was not negative",
id);
return code;
}
-#if defined(SUPERGROUPS)
- if (id == 0) {
- printf("0 isn't a valid user id; aborting\n");
- return EINVAL;
- }
-#endif
+
idi = idi->next;
} else
id = 0;
code = pr_CreateGroup(namei->data, owner, &id);
if (code) {
if (owner || id)
- com_err(whoami, code,
+ afs_com_err(whoami, code,
"; unable to create group %s with id %d%s%s%s%s",
namei->data, id, owner ? " owned by '" : "",
owner ? owner : "", owner ? "'" : "",
(force ? " (ignored)" : ""));
else
- com_err(whoami, code, "; unable to create group %s %s",
+ afs_com_err(whoami, code, "; unable to create group %s %s",
namei->data, (force ? "(ignored)" : ""));
if (!force)
return code;
return 0;
}
-int
-CreateUser(register struct cmd_syndesc *as)
+static int
+CreateUser(struct cmd_syndesc *as, void *arock)
{
- register afs_int32 code;
+ afs_int32 code;
afs_int32 id;
struct cmd_item *namei;
struct cmd_item *idi;
if (idi) {
code = util_GetInt32(idi->data, &id);
if (code) {
- com_err(whoami, code, "because id was: '%s'", idi->data);
+ afs_com_err(whoami, code, "because id was: '%s'", idi->data);
return code;
}
if (id == 0) {
printf("0 isn't a valid user id; aborting\n");
return EINVAL;
}
+ if (id < 0) {
+ code = PRBADARG;
+ afs_com_err(whoami, code, "because user id %d was not positive",
+ id);
+ return code;
+ }
idi = idi->next;
} else
id = 0;
code = pr_CreateUser(namei->data, &id);
if (code) {
if (id)
- com_err(whoami, code,
+ afs_com_err(whoami, code,
"; unable to create user %s with id %d %s",
namei->data, id, (force ? "(ignored)" : ""));
else
- com_err(whoami, code, "; unable to create user %s %s",
+ afs_com_err(whoami, code, "; unable to create user %s %s",
namei->data, (force ? "(ignored)" : ""));
if (!force)
return code;
#ifdef notdef
-int
-GetNameOrId(register struct cmd_syndesc *as, struct idlist *lids, struct namelist *lnames)
+static int
+GetNameOrId(struct cmd_syndesc *as, struct idlist *lids, struct namelist *lnames)
{
- register afs_int32 code = 0;
+ afs_int32 code = 0;
int n = 0;
struct cmd_item *i;
int goodCount;
if (!(as->parms[0].items || as->parms[1].items)) {
- com_err(whoami, 0, "must specify either a name or an id.");
+ afs_com_err(whoami, 0, "must specify either a name or an id.");
return -1;
}
if (as->parms[0].items && as->parms[1].items) {
- com_err(whoami, 0, "can't specify both a name and id.");
+ afs_com_err(whoami, 0, "can't specify both a name and id.");
return -1;
}
code = pr_NameToId(nl, lids);
if (code)
- com_err(whoami, code, "so couldn't look up names");
+ afs_com_err(whoami, code, "so couldn't look up names");
else {
for (n = 0; n < lids->idlist_len; n++) {
if ((lids->idlist_val[n] == ANONYMOUSID)) {
- com_err(whoami, PRNOENT, "so couldn't look up id for %s",
+ afs_com_err(whoami, PRNOENT, "so couldn't look up id for %s",
nl->namelist_val[n]);
} else
goodCount++;
for (i = as->parms[1].items; i; i = i->next) {
code = util_GetInt32(i->data, &lids->idlist_val[n]);
if (code)
- com_err(whoami, code =
+ afs_com_err(whoami, code =
PRNOENT, "because a bogus id '%s' was specified",
i->data);
n++;
lnames->namelist_len = 0;
code = pr_IdToName(lids, lnames);
if (code)
- com_err(whoami, code, "translating ids");
+ afs_com_err(whoami, code, "translating ids");
}
}
if (code) {
#endif
-int
-GetNameOrId(register struct cmd_syndesc *as, struct idlist *lids, struct namelist *lnames)
+static int
+GetNameOrId(struct cmd_syndesc *as, struct idlist *lids,
+ struct namelist *lnames)
{
- register afs_int32 code = 0;
+ afs_int32 code = 0;
int n = 0, nd = 0, nm = 0, id, x;
struct cmd_item *i;
struct namelist names, tnames; /* local copy, if not ret. names */
struct idlist ids, tids; /* local copy, if not ret. ids */
int goodCount = 0;
+ /* Initialise our outputs */
+ memset(lids, 0, sizeof(struct idlist));
+ if (lnames)
+ memset(lnames, 0, sizeof(struct namelist));
+
for (i = as->parms[0].items; i; i = i->next)
n++;
- lids->idlist_val = (afs_int32 *) malloc(n * sizeof(afs_int32));
+
+ /* Nothing to do, so bail */
+ if (n == 0)
+ return 0;
+
+ lids->idlist_val = malloc(n * sizeof(afs_int32));
lids->idlist_len = n;
- ids.idlist_val = (afs_int32 *) malloc(n * sizeof(afs_int32));
+ ids.idlist_val = malloc(n * sizeof(afs_int32));
ids.idlist_len = n;
- names.namelist_val = (prname *) malloc(n * PR_MAXNAMELEN);
+ names.namelist_val = malloc(n * PR_MAXNAMELEN);
names.namelist_len = n;
if (lnames) {
- lnames->namelist_val = (prname *) malloc(n * PR_MAXNAMELEN);
+ lnames->namelist_val = malloc(n * PR_MAXNAMELEN);
lnames->namelist_len = 0;
}
for (i = as->parms[0].items; i; i = i->next) {
tids.idlist_val = 0;
code = pr_NameToId(&names, &tids);
if (code)
- com_err(whoami, code, "so couldn't look up names");
+ afs_com_err(whoami, code, "so couldn't look up names");
else {
for (n = 0; n < tids.idlist_len; n++) {
- if ((tids.idlist_val[n] == ANONYMOUSID)) {
- com_err(whoami, PRNOENT, "so couldn't look up id for %s",
+ if (tids.idlist_val[n] == ANONYMOUSID) {
+ afs_com_err(whoami, PRNOENT, "so couldn't look up id for %s",
names.namelist_val[n]);
} else
goodCount++;
tnames.namelist_len = 0;
code = pr_IdToName(&ids, &tnames);
if (code)
- com_err(whoami, code, "translating ids");
+ afs_com_err(whoami, code, "translating ids");
else
goodCount++;
if (lnames) {
}
-int
-AddToGroup(register struct cmd_syndesc *as)
+static int
+AddToGroup(struct cmd_syndesc *as, void *arock)
{
- register afs_int32 code;
+ afs_int32 code;
struct cmd_item *u, *g;
for (u = as->parms[0].items; u; u = u->next) {
for (g = as->parms[1].items; g; g = g->next) {
code = pr_AddToGroup(u->data, g->data);
if (code) {
- com_err(whoami, code,
+ afs_com_err(whoami, code,
"; unable to add user %s to group %s %s", u->data,
g->data, (force ? "(ignored)" : ""));
if (!force)
return 0;
}
-int
-RemoveFromGroup(register struct cmd_syndesc *as)
+static int
+RemoveFromGroup(struct cmd_syndesc *as, void *arock)
{
- register afs_int32 code;
+ afs_int32 code;
struct cmd_item *u, *g;
for (u = as->parms[0].items; u; u = u->next) {
for (g = as->parms[1].items; g; g = g->next) {
code = pr_RemoveUserFromGroup(u->data, g->data);
if (code) {
- com_err(whoami, code,
+ afs_com_err(whoami, code,
"; unable to remove user %s from group %s %s",
u->data, g->data, (force ? "(ignored)" : ""));
if (!force)
return 0;
}
-int
-ListMembership(register struct cmd_syndesc *as)
+static int
+ListMembership(struct cmd_syndesc *as, void *arock)
{
- register afs_int32 code;
+ afs_int32 code;
idlist ids;
namelist names;
int i;
list.namelist_val = 0;
list.namelist_len = 0;
- code = pr_IDListMembers(ids.idlist_val[i], &list);
+ if (as->parms[2].items) { /* -expandgroups */
+ code = pr_IDListExpandedMembers(id, &list);
+ if (!code)
+ printf("Expanded ");
+ } else {
+ code = pr_IDListMembers(id, &list);
+ }
if (code) {
- com_err(whoami, code, "; unable to get membership of %s (id: %d)",
+ afs_com_err(whoami, code, "; unable to get membership of %s (id: %d)",
name, id);
continue;
}
printf(" %s\n", list.namelist_val[j]);
if (list.namelist_val)
free(list.namelist_val);
+ if (as->parms[1].items && id < 0) { /* -supergroups */
+ list.namelist_val = 0;
+ list.namelist_len = 0;
+ code = pr_ListSuperGroups(ids.idlist_val[i], &list);
+ if (code == RXGEN_OPCODE) {
+ continue; /* server does not support supergroups */
+ } else if (code != 0) {
+ afs_com_err(whoami, code,
+ "; unable to get supergroups of %s (id: %d)",
+ name, id);
+ continue;
+ }
+ printf("Groups %s (id: %d) is a member of:\n", name, id);
+ for (j = 0; j < list.namelist_len; j++)
+ printf(" %s\n", list.namelist_val[j]);
+ if (list.namelist_val)
+ free(list.namelist_val);
+ }
}
if (ids.idlist_val)
free(ids.idlist_val);
return 0;
}
-int
-Delete(register struct cmd_syndesc *as)
+static int
+Delete(struct cmd_syndesc *as, void *arock)
{
- register afs_int32 code;
+ afs_int32 code;
idlist ids;
namelist names;
int i;
code = pr_DeleteByID(id);
if (code) {
- com_err(whoami, code, "deleting %s (id: %d) %s", name, id,
+ afs_com_err(whoami, code, "deleting %s (id: %d) %s", name, id,
(force ? "(ignored)" : ""));
if (!force)
return code;
char *flags_dncase = "s mar"; /* legal member acces values */
int flags_shift[5] = { 2, 1, 2, 2, 1 }; /* bits for each */
-int
-CheckEntry(register struct cmd_syndesc *as)
+static int
+CheckEntry(struct cmd_syndesc *as, void *arock)
{
- register afs_int32 code;
+ afs_int32 code;
afs_int32 rcode = 1;
int i, flag = 0, admin = 0;
namelist lnames, names;
code = pr_ListEntry(id, &aentry);
if (code) {
rcode = code;
- com_err(whoami, code, "; unable to find entry for (id: %d)", id);
+ afs_com_err(whoami, code, "; unable to find entry for (id: %d)", id);
continue;
}
code = pr_IdToName(&lids, &lnames);
if (code) {
rcode = code;
- com_err(whoami, code,
+ afs_com_err(whoami, code,
"translating owner (%d) and creator (%d) ids",
aentry.owner, aentry.creator);
continue;
return (rcode);
}
-int
-ListEntries(struct cmd_syndesc *as)
+static int
+ListEntries(struct cmd_syndesc *as, void *arock)
{
afs_int32 code = 0;
afs_int32 flag, startindex, nentries, nextstartindex;
pr_ListEntries(flag, startindex, &nentries, &entriesp,
&nextstartindex);
if (code) {
- com_err(whoami, code, "; unable to list entries\n");
+ afs_com_err(whoami, code, "; unable to list entries");
if (entriesp)
free(entriesp);
break;
return code;
}
-int
-ChownGroup(register struct cmd_syndesc *as)
+static int
+ChownGroup(struct cmd_syndesc *as, void *arock)
{
- register afs_int32 code;
+ afs_int32 code;
char *name;
char *owner;
owner = as->parms[1].items->data;
code = pr_ChangeEntry(name, "", 0, owner);
if (code)
- com_err(whoami, code, "; unable to change owner of %s to %s", name,
+ afs_com_err(whoami, code, "; unable to change owner of %s to %s", name,
owner);
return code;
}
-int
-ChangeName(register struct cmd_syndesc *as)
+static int
+ChangeName(struct cmd_syndesc *as, void *arock)
{
- register afs_int32 code;
+ afs_int32 code;
char *oldname;
char *newname;
newname = as->parms[1].items->data;
code = pr_ChangeEntry(oldname, newname, 0, "");
if (code)
- com_err(whoami, code, "; unable to change name of %s to %s", oldname,
+ afs_com_err(whoami, code, "; unable to change name of %s to %s", oldname,
newname);
return code;
}
-int
-ListMax(register struct cmd_syndesc *as)
+static int
+ListMax(struct cmd_syndesc *as, void *arock)
{
- register afs_int32 code;
+ afs_int32 code;
afs_int32 maxUser, maxGroup;
code = pr_ListMaxUserId(&maxUser);
if (code)
- com_err(whoami, code, "getting maximum user id");
+ afs_com_err(whoami, code, "getting maximum user id");
else {
code = pr_ListMaxGroupId(&maxGroup);
if (code)
- com_err(whoami, code, "getting maximum group id");
+ afs_com_err(whoami, code, "getting maximum group id");
else {
printf("Max user id is %d and max group id is %d.\n", maxUser,
maxGroup);
return code;
}
-int
-SetMax(register struct cmd_syndesc *as)
+static int
+SetMaxCommand(struct cmd_syndesc *as, void *arock)
{
- register afs_int32 code;
+ afs_int32 code;
afs_int32 maxid;
code = 0;
/* set user max */
code = util_GetInt32(as->parms[1].items->data, &maxid);
if (code) {
- com_err(whoami, code, "because id was: '%s'",
+ afs_com_err(whoami, code, "because id was: '%s'",
as->parms[1].items->data);
} else {
code = pr_SetMaxUserId(maxid);
if (code)
- com_err(whoami, code, "so couldn't set Max User Id to %d",
+ afs_com_err(whoami, code, "so couldn't set Max User Id to %d",
maxid);
}
}
/* set group max */
code = util_GetInt32(as->parms[0].items->data, &maxid);
if (code) {
- com_err(whoami, code, "because id was: '%s'",
+ afs_com_err(whoami, code, "because id was: '%s'",
as->parms[0].items->data);
} else {
code = pr_SetMaxGroupId(maxid);
if (code)
- com_err(whoami, code, "so couldn't set Max Group Id to %d",
+ afs_com_err(whoami, code, "so couldn't set Max Group Id to %d",
maxid);
}
}
return code;
}
-int
-SetFields(register struct cmd_syndesc *as)
+static int
+SetFields(struct cmd_syndesc *as, void *arock)
{
- register afs_int32 code;
+ afs_int32 code;
idlist ids;
namelist names;
int i;
int new;
if (strpbrk(access, "76543210") != 0) { /* all octal digits */
- sscanf(access, "%lo", &flags);
+ sscanf(access, "%lo", (long unsigned int *) &flags);
} else { /* interpret flag bit names */
if (strlen(access) != 5) {
form_error:
if (as->parms[2].items) { /* limitgroups */
code = util_GetInt32(as->parms[2].items->data, &ngroups);
if (code) {
- com_err(whoami, code, "because ngroups was: '%s'",
+ afs_com_err(whoami, code, "because ngroups was: '%s'",
as->parms[2].items->data);
return code;
}
if (as->parms[3].items) { /* limitgroups */
code = util_GetInt32(as->parms[3].items->data, &nusers);
if (code) {
- com_err(whoami, code, "because nusers was: '%s'",
+ afs_com_err(whoami, code, "because nusers was: '%s'",
as->parms[3].items->data);
return code;
}
continue;
code = pr_SetFieldsEntry(id, mask, flags, ngroups, nusers);
if (code) {
- com_err(whoami, code, "; unable to set fields for %s (id: %d)",
+ afs_com_err(whoami, code, "; unable to set fields for %s (id: %d)",
name, id);
return code;
}
return 0;
}
-int
-ListOwned(register struct cmd_syndesc *as)
+static int
+ListOwned(struct cmd_syndesc *as, void *arock)
{
- register afs_int32 code;
+ afs_int32 code;
idlist ids;
namelist names;
namelist list;
list.namelist_len = 0;
code = pr_ListOwned(oid, &list, &more);
if (code) {
- com_err(whoami, code,
+ afs_com_err(whoami, code,
"; unable to get owner list for %s (id: %d)", name,
oid);
break;
}
static void
-add_std_args(register struct cmd_syndesc *ts)
+add_std_args(struct cmd_syndesc *ts)
{
char test_help[AFSDIR_PATH_MAX];
cmd_AddParm(ts, "-test", CMD_FLAG, CMD_OPTIONAL | CMD_HIDE, test_help);
cmd_AddParm(ts, "-force", CMD_FLAG, CMD_OPTIONAL,
"Continue oper despite reasonable errors");
+ cmd_AddParm(ts, "-localauth", CMD_FLAG, CMD_OPTIONAL,
+ "use local authentication");
+ cmd_AddParm(ts, "-auth", CMD_FLAG, CMD_OPTIONAL,
+ "use user's authentication (default)");
+ cmd_AddParm(ts, "-encrypt", CMD_FLAG, CMD_OPTIONAL,
+ "encrypt commands");
+ cmd_AddParm(ts, "-config", CMD_SINGLE, CMD_OPTIONAL, "config location");
}
/*
static void add_NameOrId_args (ts)
- register struct cmd_syndesc *ts;
+ struct cmd_syndesc *ts;
{
cmd_AddParm(ts,"-name",CMD_LIST,CMD_OPTIONAL,"user or group name");
cmd_AddParm(ts,"-id",CMD_LIST,CMD_OPTIONAL,"user or group id");
int
main(int argc, char **argv)
{
- register afs_int32 code;
- register struct cmd_syndesc *ts;
-#if defined(SUPERGROUPS)
+ afs_int32 code;
+ struct cmd_syndesc *ts;
+
char line[2048];
char *cp, *lastp;
int parsec;
char *parsev[CMD_MAXPARMS];
char *savec;
-#endif
+ struct authstate state;
+
#ifdef WIN32
WSADATA WSAjunk;
#endif
#ifdef AFS_AIX32_ENV
/*
- * The following signal action for AIX is necessary so that in case of a
- * crash (i.e. core is generated) we can include the user's data section
+ * The following signal action for AIX is necessary so that in case of a
+ * crash (i.e. core is generated) we can include the user's data section
* in the core dump. Unfortunately, by default, only a partial core is
* generated which, in many cases, isn't too useful.
*/
sigaction(SIGSEGV, &nsa, NULL);
#endif
- ts = cmd_CreateSyntax("creategroup", CreateGroup, 0,
+ memset(&state, 0, sizeof(state));
+ state.sec = 1; /* default is auth */
+
+ ts = cmd_CreateSyntax("creategroup", CreateGroup, NULL,
"create a new group");
cmd_AddParm(ts, "-name", CMD_LIST, 0, "group name");
cmd_AddParm(ts, "-owner", CMD_SINGLE, CMD_OPTIONAL, "owner of the group");
add_std_args(ts);
cmd_CreateAlias(ts, "cg");
- ts = cmd_CreateSyntax("createuser", CreateUser, 0, "create a new user");
+ ts = cmd_CreateSyntax("createuser", CreateUser, NULL, "create a new user");
cmd_AddParm(ts, "-name", CMD_LIST, 0, "user name");
cmd_AddParm(ts, "-id", CMD_LIST, CMD_OPTIONAL, "user id");
add_std_args(ts);
cmd_CreateAlias(ts, "cu");
- ts = cmd_CreateSyntax("adduser", AddToGroup, 0, "add a user to a group");
+ ts = cmd_CreateSyntax("adduser", AddToGroup, NULL, "add a user to a group");
cmd_AddParm(ts, "-user", CMD_LIST, 0, "user name");
cmd_AddParm(ts, "-group", CMD_LIST, 0, "group name");
add_std_args(ts);
- ts = cmd_CreateSyntax("removeuser", RemoveFromGroup, 0,
+ ts = cmd_CreateSyntax("removeuser", RemoveFromGroup, NULL,
"remove a user from a group");
cmd_AddParm(ts, "-user", CMD_LIST, 0, "user name");
cmd_AddParm(ts, "-group", CMD_LIST, 0, "group name");
add_std_args(ts);
- ts = cmd_CreateSyntax("membership", ListMembership, 0,
+ ts = cmd_CreateSyntax("membership", ListMembership, NULL,
"list membership of a user or group");
cmd_AddParm(ts, "-nameorid", CMD_LIST, 0, "user or group name or id");
+ cmd_AddParm(ts, "-supergroups", CMD_FLAG, CMD_OPTIONAL, "show supergroups");
+ cmd_AddParm(ts, "-expandgroups", CMD_FLAG, CMD_OPTIONAL, "expand super and sub group membership");
add_std_args(ts);
cmd_CreateAlias(ts, "groups");
- ts = cmd_CreateSyntax("delete", Delete, 0,
+ ts = cmd_CreateSyntax("delete", Delete, NULL,
"delete a user or group from database");
cmd_AddParm(ts, "-nameorid", CMD_LIST, 0, "user or group name or id");
add_std_args(ts);
- ts = cmd_CreateSyntax("examine", CheckEntry, 0, "examine an entry");
+ ts = cmd_CreateSyntax("examine", CheckEntry, NULL, "examine an entry");
cmd_AddParm(ts, "-nameorid", CMD_LIST, 0, "user or group name or id");
add_std_args(ts);
cmd_CreateAlias(ts, "check");
- ts = cmd_CreateSyntax("chown", ChownGroup, 0,
+ ts = cmd_CreateSyntax("chown", ChownGroup, NULL,
"change ownership of a group");
cmd_AddParm(ts, "-name", CMD_SINGLE, 0, "group name");
cmd_AddParm(ts, "-owner", CMD_SINGLE, 0, "new owner");
add_std_args(ts);
- ts = cmd_CreateSyntax("rename", ChangeName, 0, "rename user or group");
+ ts = cmd_CreateSyntax("rename", ChangeName, NULL, "rename user or group");
cmd_AddParm(ts, "-oldname", CMD_SINGLE, 0, "old name");
cmd_AddParm(ts, "-newname", CMD_SINGLE, 0, "new name");
add_std_args(ts);
cmd_CreateAlias(ts, "chname");
- ts = cmd_CreateSyntax("listmax", ListMax, 0, "list max id");
+ ts = cmd_CreateSyntax("listmax", ListMax, NULL, "list max id");
add_std_args(ts);
- ts = cmd_CreateSyntax("setmax", SetMax, 0, "set max id");
+ ts = cmd_CreateSyntax("setmax", SetMaxCommand, NULL, "set max id");
cmd_AddParm(ts, "-group", CMD_SINGLE, CMD_OPTIONAL, "group max");
cmd_AddParm(ts, "-user", CMD_SINGLE, CMD_OPTIONAL, "user max");
add_std_args(ts);
- ts = cmd_CreateSyntax("setfields", SetFields, 0,
+ ts = cmd_CreateSyntax("setfields", SetFields, NULL,
"set fields for an entry");
cmd_AddParm(ts, "-nameorid", CMD_LIST, 0, "user or group name or id");
cmd_AddParm(ts, "-access", CMD_SINGLE, CMD_OPTIONAL, "set privacy flags");
#endif
add_std_args(ts);
- ts = cmd_CreateSyntax("listowned", ListOwned, 0,
+ ts = cmd_CreateSyntax("listowned", ListOwned, NULL,
"list groups owned by an entry or zero id gets orphaned groups");
cmd_AddParm(ts, "-nameorid", CMD_LIST, 0, "user or group name or id");
add_std_args(ts);
- ts = cmd_CreateSyntax("listentries", ListEntries, 0,
+ ts = cmd_CreateSyntax("listentries", ListEntries, NULL,
"list users/groups in the protection database");
cmd_AddParm(ts, "-users", CMD_FLAG, CMD_OPTIONAL, "list user entries");
cmd_AddParm(ts, "-groups", CMD_FLAG, CMD_OPTIONAL, "list group entries");
add_std_args(ts);
-#if defined(SUPERGROUPS)
-
- ts = cmd_CreateSyntax("interactive", Interactive, 0,
+ ts = cmd_CreateSyntax("interactive", pts_Interactive, NULL,
"enter interactive mode");
add_std_args(ts);
cmd_CreateAlias(ts, "in");
- ts = cmd_CreateSyntax("quit", Quit, 0, "exit program");
+ ts = cmd_CreateSyntax("quit", pts_Quit, NULL, "exit program");
add_std_args(ts);
- ts = cmd_CreateSyntax("source", Source, 0, "read commands from file");
+ ts = cmd_CreateSyntax("source", pts_Source, NULL, "read commands from file");
cmd_AddParm(ts, "-file", CMD_SINGLE, 0, "filename");
add_std_args(ts);
- ts = cmd_CreateSyntax("sleep", Sleep, 0, "pause for a bit");
+ ts = cmd_CreateSyntax("sleep", pts_Sleep, NULL, "pause for a bit");
cmd_AddParm(ts, "-delay", CMD_SINGLE, 0, "seconds");
add_std_args(ts);
-#endif /* SUPERGROUPS */
-
- cmd_SetBeforeProc(GetGlobals, 0);
+ cmd_SetBeforeProc(GetGlobals, &state);
-#if defined(SUPERGROUPS)
finished = 1;
- if (code = cmd_Dispatch(argc, argv)) {
- CleanUp(0);
+ source = NULL;
+ if ((code = cmd_Dispatch(argc, argv))) {
+ CleanUp(NULL, NULL);
exit(1);
}
- source = stdin;
- while (!finished) {
+ while (source && !finished) {
if (isatty(fileno(source)))
fprintf(stderr, "pts> ");
if (!fgets(line, sizeof line, source)) {
cmd_ParseLine(line, parsev, &parsec,
sizeof(parsev) / sizeof(*parsev));
if (code) {
- com_err(whoami, code, "parsing line: <%s>", line);
+ afs_com_err(whoami, code, "parsing line: <%s>", line);
exit(2);
}
savec = parsev[0];
parsev[0] = savec;
cmd_FreeArgv(parsev);
}
- CleanUp(0);
+ CleanUp(NULL, NULL);
exit(0);
-
-#else /* SUPERGROUPS */
-
- cmd_SetAfterProc(CleanUp, 0);
- code = cmd_Dispatch(argc, argv);
- exit(code != 0);
-#endif /* SUPERGROUPS */
}