/*
* 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
* to groups. This is an error in normal AFS.
* 2. If adding a group to a group call AddToSGEntry
* to add the id of the group it's a member of.
- *
+ *
* (4) function Delete
*
* 1. Print a messsage if an error is returned from
- * FindByID() and PTDEBUG is defined.
- * 2. If removing a group from a group call
- * RemoveFromSGEntry to remove the id of the
- * group it's a member of.
+ * FindByID() and PTDEBUG is defined.
+ * 2. If removing a group from a group call
+ * RemoveFromSGEntry to remove the id of the
+ * group it's a member of.
* 3. Remove supergroup continuation records.
*
- * (5) function RemoveFromGroup
- *
+ * (5) function RemoveFromGroup
+ *
* 1. Eliminate the code that tests for adding groups
- * to groups. This is an error in normal AFS.
- * 2. If removing a group from a group call
- * RemoveFromSGEntry to remove the id of the
+ * to groups. This is an error in normal AFS.
+ * 2. If removing a group from a group call
+ * RemoveFromSGEntry to remove the id of the
* group it's a member of.
*
- * (6) Add new functions PR_ListSuperGroups and
+ * (6) Add new functions PR_ListSuperGroups and
* listSuperGroups.
- *
+ *
* (7) function isAMemberOf
- *
+ *
* 1. Allow groups to be members of groups.
*
* Transarc does not currently use opcodes past 520, but
#include <afsconfig.h>
#include <afs/param.h>
+#include <afs/stds.h>
+#include <roken.h>
+#include <afs/opr.h>
-#include <afs/stds.h>
#include <ctype.h>
-#include <stdio.h>
+
#include <lock.h>
#include <afs/afsutil.h>
#include <ubik.h>
#include <rx/rx.h>
#include <rx/rxkad.h>
#include <afs/auth.h>
-#ifdef AFS_NT40_ENV
-#include <winsock2.h>
-#else
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#endif
-#include <string.h>
+#include <afs/cellconfig.h>
+
#include "ptserver.h"
#include "pterror.h"
#include "ptprototypes.h"
#include "afs/audit.h"
-#ifdef AFS_ATHENA_STDENV
-#include <krb.h>
-#endif
-
extern int restricted;
extern struct ubik_dbase *dbase;
extern int pr_noAuth;
-extern char *pr_realmName;
extern int prp_group_default;
extern int prp_user_default;
+extern struct afsconf_dir *prdir;
-static afs_int32 iNewEntry(struct rx_call *call, char aname[], afs_int32 aid,
+static afs_int32 iNewEntry(struct rx_call *call, char aname[], afs_int32 aid,
afs_int32 oid, afs_int32 *cid);
-static afs_int32 newEntry(struct rx_call *call, char aname[], afs_int32 flag,
- afs_int32 oid, afs_int32 *aid, afs_int32 *cid);
+static afs_int32 newEntry(struct rx_call *call, char aname[], afs_int32 flag,
+ afs_int32 oid, afs_int32 *aid, afs_int32 *cid);
static afs_int32 whereIsIt(struct rx_call *call, afs_int32 aid, afs_int32 *apos,
afs_int32 *cid);
-static afs_int32 dumpEntry(struct rx_call *call, afs_int32 apos,
+static afs_int32 dumpEntry(struct rx_call *call, afs_int32 apos,
struct prdebugentry *aentry, afs_int32 *cid);
-static afs_int32 addToGroup(struct rx_call *call, afs_int32 aid, afs_int32 gid,
+static afs_int32 addToGroup(struct rx_call *call, afs_int32 aid, afs_int32 gid,
afs_int32 *cid);
static afs_int32 nameToID(struct rx_call *call, namelist *aname, idlist *aid);
static afs_int32 idToName(struct rx_call *call, idlist *aid, namelist *aname);
static afs_int32 Delete(struct rx_call *call, afs_int32 aid, afs_int32 *cid);
-static afs_int32 UpdateEntry(struct rx_call *call, afs_int32 aid, char *name,
+static afs_int32 UpdateEntry(struct rx_call *call, afs_int32 aid, char *name,
struct PrUpdateEntry *uentry, afs_int32 *cid);
-static afs_int32 removeFromGroup(struct rx_call *call, afs_int32 aid,
+static afs_int32 removeFromGroup(struct rx_call *call, afs_int32 aid,
afs_int32 gid, afs_int32 *cid);
-static afs_int32 getCPS(struct rx_call *call, afs_int32 aid, prlist *alist,
+static afs_int32 getCPS(struct rx_call *call, afs_int32 aid, prlist *alist,
afs_int32 *over, afs_int32 *cid);
static afs_int32 getCPS2(struct rx_call *call, afs_int32 aid, afs_uint32 ahost,
prlist *alist, afs_int32 *over, afs_int32 *cid);
static afs_int32 getHostCPS(struct rx_call *call, afs_uint32 ahost,
prlist *alist, afs_int32 *over);
static afs_int32 listMax(struct rx_call *call, afs_int32 *uid, afs_int32 *gid);
-static afs_int32 setMax(struct rx_call *call, afs_int32 aid, afs_int32 gflag,
+static afs_int32 setMax(struct rx_call *call, afs_int32 aid, afs_int32 gflag,
afs_int32 *cid);
-static afs_int32 listEntry(struct rx_call *call, afs_int32 aid,
+static afs_int32 listEntry(struct rx_call *call, afs_int32 aid,
struct prcheckentry *aentry, afs_int32 *cid);
-static afs_int32 listEntries(struct rx_call *call, afs_int32 flag,
- afs_int32 startindex, prentries *bulkentries,
+static afs_int32 listEntries(struct rx_call *call, afs_int32 flag,
+ afs_int32 startindex, prentries *bulkentries,
afs_int32 *nextstartindex, afs_int32 *cid);
static afs_int32 put_prentries(struct prentry *tentry, prentries *bulkentries);
-static afs_int32 changeEntry(struct rx_call *call, afs_int32 aid, char *name,
+static afs_int32 changeEntry(struct rx_call *call, afs_int32 aid, char *name,
afs_int32 oid, afs_int32 newid, afs_int32 *cid);
-static afs_int32 setFieldsEntry(struct rx_call *call, afs_int32 id,
- afs_int32 mask, afs_int32 flags,
- afs_int32 ngroups, afs_int32 nusers,
- afs_int32 spare1, afs_int32 spare2,
+static afs_int32 setFieldsEntry(struct rx_call *call, afs_int32 id,
+ afs_int32 mask, afs_int32 flags,
+ afs_int32 ngroups, afs_int32 nusers,
+ afs_int32 spare1, afs_int32 spare2,
afs_int32 *cid);
static afs_int32 listElements(struct rx_call *call, afs_int32 aid,
prlist *alist, afs_int32 *over, afs_int32 *cid);
#if defined(SUPERGROUPS)
-static afs_int32 listSuperGroups(struct rx_call *call, afs_int32 aid,
- prlist *alist, afs_int32 *over,
+static afs_int32 listSuperGroups(struct rx_call *call, afs_int32 aid,
+ prlist *alist, afs_int32 *over,
afs_int32 *cid);
#endif
static afs_int32 listOwned(struct rx_call *call, afs_int32 aid, prlist *alist,
afs_int32 *lastP, afs_int32 *cid);
static afs_int32 isAMemberOf(struct rx_call *call, afs_int32 uid, afs_int32 gid,
afs_int32 *flag, afs_int32 *cid);
-static afs_int32 addWildCards(struct ubik_trans *tt, prlist *alist,
+static afs_int32 addWildCards(struct ubik_trans *tt, prlist *alist,
afs_uint32 host);
-static afs_int32 WhoIsThisWithName(struct rx_call *acall,
- struct ubik_trans *at, afs_int32 *aid,
+static afs_int32 WhoIsThisWithName(struct rx_call *acall,
+ struct ubik_trans *at, afs_int32 *aid,
char *aname);
/* when we abort, the ubik cachedVersion will be reset, so we'll read in the
#define ABORT_WITH(tt,code) return(ubik_AbortTrans(tt),code)
static int
-CreateOK(struct ubik_trans *ut, afs_int32 cid, afs_int32 oid, afs_int32 flag,
+CreateOK(struct ubik_trans *ut, afs_int32 cid, afs_int32 oid, afs_int32 flag,
int admin)
{
- if (restricted && !admin)
+ if (restricted && !admin)
return 0;
if (flag & PRFOREIGN) {
- /* Foreign users are recognized by the '@' sign and
+ /* Foreign users are recognized by the '@' sign and
* not by the PRFOREIGN flag.
*/
return 0;
afs_int32
WhoIsThis(struct rx_call *acall, struct ubik_trans *at, afs_int32 *aid)
{
- int foreign = 0;
- /* aid is set to the identity of the caller, if known, else ANONYMOUSID */
- /* returns -1 and sets aid to ANONYMOUSID on any failure */
- register struct rx_connection *tconn;
- register afs_int32 code;
- char tcell[MAXKTCREALMLEN];
- char name[MAXKTCNAMELEN];
- char inst[MAXKTCNAMELEN];
- int ilen;
- char vname[256];
-
- *aid = ANONYMOUSID;
- tconn = rx_ConnectionOf(acall);
- code = rx_SecurityClassOf(tconn);
- if (code == 0)
- return 0;
- else if (code == 1) { /* vab class */
- goto done; /* no longer supported */
- } else if (code == 2) { /* kad class */
- if ((code = rxkad_GetServerInfo(acall->conn, NULL, 0 /*was &exp */ ,
- name, inst, tcell, NULL)))
- goto done;
-#if 0
- /* This test is unnecessary, since rxkad_GetServerInfo already check.
- * In addition, this is wrong since exp must be unsigned. */
- if (exp < FT_ApproxTime())
- goto done;
-#endif
- if (tcell[0])
- foreign = afs_is_foreign_ticket_name(name,inst,tcell,pr_realmName);
-
- strncpy(vname, name, sizeof(vname));
- if ((ilen = strlen(inst))) {
- if (strlen(vname) + 1 + ilen >= sizeof(vname))
- goto done;
- strcat(vname, ".");
- strcat(vname, inst);
- }
- if (foreign) {
- if (strlen(vname) + strlen(tcell) + 1 >= sizeof(vname))
- goto done;
- strcat(vname, "@");
- strcat(vname, tcell);
- }
- if (strcmp(AUTH_SUPERUSER, vname) == 0)
- *aid = SYSADMINID; /* special case for the fileserver */
- else {
- lcstring(vname, vname, sizeof(vname));
- code = NameToID(at, vname, aid);
- }
- }
- done:
- if (code && !pr_noAuth)
- return -1;
- return 0;
+ int code = WhoIsThisWithName(acall, at, aid, NULL);
+ if (code == 2 && *aid == ANONYMOUSID)
+ return PRNOENT;
+ return code;
}
afs_int32
}
static afs_int32
-iNewEntry(struct rx_call *call, char aname[], afs_int32 aid, afs_int32 oid,
+iNewEntry(struct rx_call *call, char aname[], afs_int32 aid, afs_int32 oid,
afs_int32 *cid)
{
/* used primarily for conversion - not intended to be used as usual means
* of entering people into the database. */
struct ubik_trans *tt;
- register afs_int32 code;
+ afs_int32 code;
afs_int32 gflag = 0;
int admin;
afs_int32
-SPR_NewEntry(struct rx_call *call, char aname[], afs_int32 flag, afs_int32 oid,
+SPR_NewEntry(struct rx_call *call, char aname[], afs_int32 flag, afs_int32 oid,
afs_int32 *aid)
{
afs_int32 code;
}
static afs_int32
-newEntry(struct rx_call *call, char aname[], afs_int32 flag, afs_int32 oid,
+newEntry(struct rx_call *call, char aname[], afs_int32 flag, afs_int32 oid,
afs_int32 *aid, afs_int32 *cid)
{
- register afs_int32 code;
+ afs_int32 code;
struct ubik_trans *tt;
int admin;
char cname[PR_MAXNAMELEN];
ABORT_WITH(tt, code);
/* this is for cross-cell self registration. It is not added in the
- * SPR_INewEntry because we want self-registration to only do
+ * SPR_INewEntry because we want self-registration to only do
* automatic id assignment.
*/
code = WhoIsThisWithName(call, tt, cid, cname);
static afs_int32
whereIsIt(struct rx_call *call, afs_int32 aid, afs_int32 *apos, afs_int32 *cid)
{
- register afs_int32 code;
+ afs_int32 code;
struct ubik_trans *tt;
afs_int32 temp;
afs_int32
-SPR_DumpEntry(struct rx_call *call, afs_int32 apos,
+SPR_DumpEntry(struct rx_call *call, afs_int32 apos,
struct prdebugentry *aentry)
{
afs_int32 code;
}
static afs_int32
-dumpEntry(struct rx_call *call, afs_int32 apos, struct prdebugentry *aentry,
+dumpEntry(struct rx_call *call, afs_int32 apos, struct prdebugentry *aentry,
afs_int32 *cid)
{
- register afs_int32 code;
+ afs_int32 code;
struct ubik_trans *tt;
code = Initdb();
static afs_int32
addToGroup(struct rx_call *call, afs_int32 aid, afs_int32 gid, afs_int32 *cid)
{
- register afs_int32 code;
+ afs_int32 code;
struct ubik_trans *tt;
afs_int32 tempu;
afs_int32 tempg;
static afs_int32
nameToID(struct rx_call *call, namelist *aname, idlist *aid)
{
- register afs_int32 code;
+ afs_int32 code;
struct ubik_trans *tt;
afs_int32 i;
int size;
for (i = 0; i < aname->namelist_len; i++) {
char vname[256];
char *nameinst, *cell;
+ afs_int32 islocal = 1;
strncpy(vname, aname->namelist_val[i], sizeof(vname));
vname[sizeof(vname)-1] ='\0';
cell++;
}
- if (cell && afs_is_foreign_ticket_name(nameinst,NULL,cell,pr_realmName))
- code = NameToID(tt, aname->namelist_val[i], &aid->idlist_val[i]);
- else
+ if (cell && *cell) {
+ code = afsconf_IsLocalRealmMatch(prdir, &islocal, nameinst, NULL, cell);
+ ViceLog(0,
+ ("PTS_NameToID: afsconf_IsLocalRealmMatch(); code=%d, nameinst=%s, cell=%s\n",
+ code, nameinst, cell));
+ }
+ if (islocal)
code = NameToID(tt, nameinst, &aid->idlist_val[i]);
+ else
+ code = NameToID(tt, aname->namelist_val[i], &aid->idlist_val[i]);
if (code != PRSUCCESS)
aid->idlist_val[i] = ANONYMOUSID;
osi_audit(PTS_NmToIdEvent, code, AUD_STR,
- aname->namelist_val[i], AUD_ID, aid->idlist_val[i],
+ aname->namelist_val[i], AUD_ID, aid->idlist_val[i],
AUD_END);
ViceLog(125, ("PTS_NameToID: code %d aname %s aid %d\n", code,
aname->namelist_val[i], aid->idlist_val[i]));
static afs_int32
idToName(struct rx_call *call, idlist *aid, namelist *aname)
{
- register afs_int32 code;
+ afs_int32 code;
struct ubik_trans *tt;
afs_int32 i;
int size;
static afs_int32
Delete(struct rx_call *call, afs_int32 aid, afs_int32 *cid)
{
- register afs_int32 code;
+ afs_int32 code;
struct ubik_trans *tt;
struct prentry tentry;
afs_int32 loc, nptr;
}
afs_int32
-SPR_UpdateEntry(struct rx_call *call, afs_int32 aid, char *name,
+SPR_UpdateEntry(struct rx_call *call, afs_int32 aid, char *name,
struct PrUpdateEntry *uentry)
{
afs_int32 code;
}
afs_int32
-UpdateEntry(struct rx_call *call, afs_int32 aid, char *name,
+UpdateEntry(struct rx_call *call, afs_int32 aid, char *name,
struct PrUpdateEntry *uentry, afs_int32 *cid)
{
- register afs_int32 code;
+ afs_int32 code;
struct ubik_trans *tt;
struct prentry tentry;
afs_int32 loc;
}
static afs_int32
-removeFromGroup(struct rx_call *call, afs_int32 aid, afs_int32 gid,
+removeFromGroup(struct rx_call *call, afs_int32 aid, afs_int32 gid,
afs_int32 *cid)
{
- register afs_int32 code;
+ afs_int32 code;
struct ubik_trans *tt;
afs_int32 tempu;
afs_int32 tempg;
}
static afs_int32
-getCPS(struct rx_call *call, afs_int32 aid, prlist *alist, afs_int32 *over,
+getCPS(struct rx_call *call, afs_int32 aid, prlist *alist, afs_int32 *over,
afs_int32 *cid)
{
- register afs_int32 code;
+ afs_int32 code;
struct ubik_trans *tt;
afs_int32 temp;
struct prentry tentry;
afs_int32
-SPR_GetCPS2(struct rx_call *call, afs_int32 aid, afs_int32 ahost,
+SPR_GetCPS2(struct rx_call *call, afs_int32 aid, afs_int32 ahost,
prlist *alist, afs_int32 *over)
{
afs_int32 code;
afs_int32 cid = ANONYMOUSID;
code = getCPS2(call, aid, ahost, alist, over, &cid);
- osi_auditU(call, PTS_GetCPS2Event, code, AUD_ID, aid, AUD_HOST, ahost,
+ osi_auditU(call, PTS_GetCPS2Event, code, AUD_ID, aid, AUD_HOST, htonl(ahost),
AUD_END);
ViceLog(125, ("PTS_GetCPS2: code %d cid %d aid %d ahost %d\n", code, cid, aid, ahost));
return code;
getCPS2(struct rx_call *call, afs_int32 aid, afs_uint32 ahost, prlist *alist,
afs_int32 *over, afs_int32 *cid)
{
- register afs_int32 code;
+ afs_int32 code;
struct ubik_trans *tt;
afs_int32 temp;
struct prentry tentry;
afs_int32
-SPR_GetHostCPS(struct rx_call *call, afs_int32 ahost, prlist *alist,
+SPR_GetHostCPS(struct rx_call *call, afs_int32 ahost, prlist *alist,
afs_int32 *over)
{
afs_int32 code;
code = getHostCPS(call, ahost, alist, over);
- osi_auditU(call, PTS_GetHCPSEvent, code, AUD_HOST, ahost, AUD_END);
+ osi_auditU(call, PTS_GetHCPSEvent, code, AUD_HOST, htonl(ahost), AUD_END);
ViceLog(125, ("PTS_GetHostCPS: code %d ahost %d\n", code, ahost));
return code;
}
getHostCPS(struct rx_call *call, afs_uint32 ahost, prlist *alist,
afs_int32 *over)
{
- register afs_int32 code, temp;
+ afs_int32 code, temp;
struct ubik_trans *tt;
struct prentry host_tentry;
afs_int32 hostid;
afs_int32
listMax(struct rx_call *call, afs_int32 *uid, afs_int32 *gid)
{
- register afs_int32 code;
+ afs_int32 code;
struct ubik_trans *tt;
code = Initdb();
static afs_int32
setMax(struct rx_call *call, afs_int32 aid, afs_int32 gflag, afs_int32 *cid)
{
- register afs_int32 code;
+ afs_int32 code;
struct ubik_trans *tt;
code = Initdb();
}
static afs_int32
-listEntry(struct rx_call *call, afs_int32 aid, struct prcheckentry *aentry,
+listEntry(struct rx_call *call, afs_int32 aid, struct prcheckentry *aentry,
afs_int32 *cid)
{
- register afs_int32 code;
+ afs_int32 code;
struct ubik_trans *tt;
afs_int32 temp;
struct prentry tentry;
}
afs_int32
-SPR_ListEntries(struct rx_call *call, afs_int32 flag, afs_int32 startindex,
+SPR_ListEntries(struct rx_call *call, afs_int32 flag, afs_int32 startindex,
prentries *bulkentries, afs_int32 *nextstartindex)
{
afs_int32 code;
}
static afs_int32
-listEntries(struct rx_call *call, afs_int32 flag, afs_int32 startindex,
+listEntries(struct rx_call *call, afs_int32 flag, afs_int32 startindex,
prentries *bulkentries, afs_int32 *nextstartindex, afs_int32 *cid)
{
afs_int32 code;
}
afs_int32
-SPR_ChangeEntry(struct rx_call *call, afs_int32 aid, char *name, afs_int32 oid,
+SPR_ChangeEntry(struct rx_call *call, afs_int32 aid, char *name, afs_int32 oid,
afs_int32 newid)
{
afs_int32 code;
}
static afs_int32
-changeEntry(struct rx_call *call, afs_int32 aid, char *name, afs_int32 oid,
+changeEntry(struct rx_call *call, afs_int32 aid, char *name, afs_int32 oid,
afs_int32 newid, afs_int32 *cid)
{
- register afs_int32 code;
+ afs_int32 code;
struct ubik_trans *tt;
afs_int32 pos;
}
afs_int32
-SPR_SetFieldsEntry(struct rx_call *call,
- afs_int32 id,
- afs_int32 mask, /* specify which fields to update */
- afs_int32 flags, afs_int32 ngroups, afs_int32 nusers,
+SPR_SetFieldsEntry(struct rx_call *call,
+ afs_int32 id,
+ afs_int32 mask, /* specify which fields to update */
+ afs_int32 flags, afs_int32 ngroups, afs_int32 nusers,
afs_int32 spare1, afs_int32 spare2)
{
afs_int32 code;
}
static afs_int32
-setFieldsEntry(struct rx_call *call,
- afs_int32 id,
- afs_int32 mask, /* specify which fields to update */
- afs_int32 flags, afs_int32 ngroups, afs_int32 nusers,
+setFieldsEntry(struct rx_call *call,
+ afs_int32 id,
+ afs_int32 mask, /* specify which fields to update */
+ afs_int32 flags, afs_int32 ngroups, afs_int32 nusers,
afs_int32 spare1, afs_int32 spare2, afs_int32 *cid)
{
- register afs_int32 code;
+ afs_int32 code;
struct ubik_trans *tt;
afs_int32 pos;
struct prentry tentry;
}
afs_int32
-SPR_ListElements(struct rx_call *call, afs_int32 aid, prlist *alist,
+SPR_ListElements(struct rx_call *call, afs_int32 aid, prlist *alist,
afs_int32 *over)
{
afs_int32 code;
}
static afs_int32
-listElements(struct rx_call *call, afs_int32 aid, prlist *alist,
+listElements(struct rx_call *call, afs_int32 aid, prlist *alist,
afs_int32 *over, afs_int32 *cid)
{
- register afs_int32 code;
+ afs_int32 code;
struct ubik_trans *tt;
afs_int32 temp;
struct prentry tentry;
afs_int32
-SPR_ListSuperGroups(struct rx_call *call, afs_int32 aid, prlist *alist,
+SPR_ListSuperGroups(struct rx_call *call, afs_int32 aid, prlist *alist,
afs_int32 *over)
{
#if defined(SUPERGROUPS)
#if defined(SUPERGROUPS)
static afs_int32
-listSuperGroups(struct rx_call *call, afs_int32 aid, prlist *alist,
+listSuperGroups(struct rx_call *call, afs_int32 aid, prlist *alist,
afs_int32 *over, afs_int32 *cid)
{
- register afs_int32 code;
+ afs_int32 code;
struct ubik_trans *tt;
afs_int32 temp;
struct prentry tentry;
#endif /* SUPERGROUPS */
-/*
+/*
* SPR_ListOwned
* List the entries owned by this id. If the id is zero,
* return the orphans list. This will return up to PR_MAXGROUPS
* maximum value is enforced in GetOwnedChain().
*/
afs_int32
-SPR_ListOwned(struct rx_call *call, afs_int32 aid, prlist *alist,
+SPR_ListOwned(struct rx_call *call, afs_int32 aid, prlist *alist,
afs_int32 *lastP)
{
afs_int32 code;
}
afs_int32
-listOwned(struct rx_call *call, afs_int32 aid, prlist *alist, afs_int32 *lastP,
+listOwned(struct rx_call *call, afs_int32 aid, prlist *alist, afs_int32 *lastP,
afs_int32 *cid)
{
- register afs_int32 code;
+ afs_int32 code;
struct ubik_trans *tt;
struct prentry tentry;
afs_int32 head = 0;
}
afs_int32
-SPR_IsAMemberOf(struct rx_call *call, afs_int32 uid, afs_int32 gid,
+SPR_IsAMemberOf(struct rx_call *call, afs_int32 uid, afs_int32 gid,
afs_int32 *flag)
{
afs_int32 code;
isAMemberOf(struct rx_call *call, afs_int32 uid, afs_int32 gid, afs_int32 *flag,
afs_int32 *cid)
{
- register afs_int32 code;
+ afs_int32 code;
struct ubik_trans *tt;
code = Initdb();
}
static afs_int32
-WhoIsThisWithName(struct rx_call *acall, struct ubik_trans *at, afs_int32 *aid,
+WhoIsThisWithName(struct rx_call *acall, struct ubik_trans *at, afs_int32 *aid,
char *aname)
{
+ afs_int32 islocal = 1;
/* aid is set to the identity of the caller, if known, else ANONYMOUSID */
/* returns -1 and sets aid to ANONYMOUSID on any failure */
- register struct rx_connection *tconn;
- register afs_int32 code;
+ struct rx_connection *tconn;
+ afs_int32 code;
char tcell[MAXKTCREALMLEN];
char name[MAXKTCNAMELEN];
char inst[MAXKTCNAMELEN];
else if (code == 1) { /* vab class */
goto done; /* no longer supported */
} else if (code == 2) { /* kad class */
-
- int clen;
-
- if ((code = rxkad_GetServerInfo(acall->conn, NULL, 0 /*was &exp */ ,
+ if ((code = rxkad_GetServerInfo(rx_ConnectionOf(acall), NULL, NULL,
name, inst, tcell, NULL)))
goto done;
-
+ if (tcell[0]) {
+ code = afsconf_IsLocalRealmMatch(prdir, &islocal, name, inst, tcell);
+ if (code)
+ goto done;
+ }
strncpy(vname, name, sizeof(vname));
if ((ilen = strlen(inst))) {
if (strlen(vname) + 1 + ilen >= sizeof(vname))
strcat(vname, ".");
strcat(vname, inst);
}
- if ((clen = strlen(tcell))) {
- int foreign = afs_is_foreign_ticket_name(name,inst,tcell,pr_realmName);
-
- if (foreign) {
- if (strlen(vname) + 1 + clen >= sizeof(vname))
- goto done;
- strcat(vname, "@");
- strcat(vname, tcell);
- lcstring(vname, vname, sizeof(vname));
- code = NameToID(at, vname, aid);
+ if (!islocal) {
+ if (strlen(vname) + strlen(tcell) + 1 >= sizeof(vname))
+ goto done;
+ strcat(vname, "@");
+ strcat(vname, tcell);
+ lcstring(vname, vname, sizeof(vname));
+ code = NameToID(at, vname, aid);
+ if (aname)
strcpy(aname, vname);
- return 2;
- }
+ return 2;
}
if (strcmp(AUTH_SUPERUSER, vname) == 0)