return code;
}
+static int
+WritePreamble(struct ubik_trans **tt)
+{
+ int code;
+
+ code = Initdb();
+ if (code)
+ return code;
+
+ code = ubik_BeginTrans(dbase, UBIK_WRITETRANS, tt);
+ if (code)
+ return code;
+
+ code = ubik_SetLock(*tt, 1, 1, LOCKWRITE);
+ if (code)
+ goto out;
+
+ code = read_DbHeader(*tt);
+
+out:
+ if (code)
+ ubik_AbortTrans(*tt);
+
+ return code;
+}
+
+static int
+ReadPreamble(struct ubik_trans **tt)
+{
+ int code;
+
+ code = Initdb();
+ if (code)
+ return code;
+
+ code = ubik_BeginTransReadAny(dbase, UBIK_READTRANS, tt);
+ if (code)
+ return code;
+
+ code = ubik_SetLock(*tt, 1, 1, LOCKREAD);
+ if (code)
+ goto out;
+
+ code = read_DbHeader(*tt);
+
+out:
+ if (code)
+ ubik_AbortTrans(*tt);
+
+ return code;
+}
+
afs_int32
SPR_INewEntry(struct rx_call *call, char aname[], afs_int32 aid, afs_int32 oid)
{
int admin;
stolower(aname);
- code = Initdb();
- if (code != PRSUCCESS)
- return code;
- code = ubik_BeginTrans(dbase, UBIK_WRITETRANS, &tt);
+
+ code = WritePreamble(&tt);
if (code)
return code;
- code = ubik_SetLock(tt, 1, 1, LOCKWRITE);
- if (code)
- ABORT_WITH(tt, code);
- code = read_DbHeader(tt);
- if (code)
- ABORT_WITH(tt, code);
code = WhoIsThis(call, tt, cid);
if (code)
int admin;
char cname[PR_MAXNAMELEN];
stolower(aname);
- code = Initdb();
- if (code)
- return code;
- code = ubik_BeginTrans(dbase, UBIK_WRITETRANS, &tt);
+
+ code = WritePreamble(&tt);
if (code)
return code;
- code = ubik_SetLock(tt, 1, 1, LOCKWRITE);
- if (code)
- ABORT_WITH(tt, code);
- code = read_DbHeader(tt);
- if (code)
- 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
struct ubik_trans *tt;
afs_int32 temp;
- code = Initdb();
- if (code != PRSUCCESS)
- return code;
- code = ubik_BeginTransReadAny(dbase, UBIK_READTRANS, &tt);
+ code = ReadPreamble(&tt);
if (code)
return code;
- code = ubik_SetLock(tt, 1, 1, LOCKREAD);
- if (code)
- ABORT_WITH(tt, code);
- code = read_DbHeader(tt);
- if (code)
- ABORT_WITH(tt, code);
code = WhoIsThis(call, tt, cid);
if (code)
afs_int32 code;
struct ubik_trans *tt;
- code = Initdb();
- if (code != PRSUCCESS)
- return code;
- code = ubik_BeginTransReadAny(dbase, UBIK_READTRANS, &tt);
+ code = ReadPreamble(&tt);
if (code)
return code;
- code = ubik_SetLock(tt, 1, 1, LOCKREAD);
- if (code)
- ABORT_WITH(tt, code);
- code = read_DbHeader(tt);
- if (code)
- ABORT_WITH(tt, code);
code = WhoIsThis(call, tt, cid);
if (code)
struct prentry tentry;
struct prentry uentry;
- code = Initdb();
- if (code != PRSUCCESS)
- return code;
if (gid == ANYUSERID || gid == AUTHUSERID)
return PRPERM;
if (aid == ANONYMOUSID)
return PRPERM;
- code = ubik_BeginTrans(dbase, UBIK_WRITETRANS, &tt);
+
+ code = WritePreamble(&tt);
if (code)
return code;
- code = ubik_SetLock(tt, 1, 1, LOCKWRITE);
- if (code)
- ABORT_WITH(tt, code);
- code = read_DbHeader(tt);
- if (code)
- ABORT_WITH(tt, code);
code = WhoIsThis(call, tt, cid);
if (code)
if (!aid->idlist_val)
return PRNOMEM;
- code = Initdb();
- if (code != PRSUCCESS)
- return code;
- code = ubik_BeginTransReadAny(dbase, UBIK_READTRANS, &tt);
+ code = ReadPreamble(&tt);
if (code)
return code;
- code = ubik_SetLock(tt, 1, 1, LOCKREAD);
- if (code)
- ABORT_WITH(tt, code);
- code = read_DbHeader(tt);
- if (code)
- ABORT_WITH(tt, code);
for (i = 0; i < aname->namelist_len; i++) {
char vname[256];
if (size == 0)
return PRTOOMANY; /* rxgen will probably handle this */
- code = Initdb();
- if (code != PRSUCCESS)
- return code;
- code = ubik_BeginTransReadAny(dbase, UBIK_READTRANS, &tt);
+ code = ReadPreamble(&tt);
if (code)
return code;
- code = ubik_SetLock(tt, 1, 1, LOCKREAD);
- if (code)
- ABORT_WITH(tt, code);
- code = read_DbHeader(tt);
- if (code)
- ABORT_WITH(tt, code);
for (i = 0; i < aid->idlist_len; i++) {
code = IDToName(tt, aid->idlist_val[i], aname->namelist_val[i]);
afs_int32 loc, nptr;
int count;
- code = Initdb();
- if (code)
- return code;
- if (code != PRSUCCESS)
- return code;
if (aid == SYSADMINID || aid == ANYUSERID || aid == AUTHUSERID
|| aid == ANONYMOUSID)
return PRPERM;
- code = ubik_BeginTrans(dbase, UBIK_WRITETRANS, &tt);
+
+ code = WritePreamble(&tt);
if (code)
return code;
- code = ubik_SetLock(tt, 1, 1, LOCKWRITE);
- if (code)
- ABORT_WITH(tt, code);
- code = read_DbHeader(tt);
- if (code)
- ABORT_WITH(tt, code);
code = WhoIsThis(call, tt, cid);
if (code)
afs_int32 loc;
int id = 0;
- code = Initdb();
- if (code)
- return code;
- if (code != PRSUCCESS)
- return code;
if (aid) {
id = aid;
if (aid == SYSADMINID || aid == ANYUSERID || aid == AUTHUSERID
|| aid == ANONYMOUSID)
return PRPERM;
}
- code = ubik_BeginTrans(dbase, UBIK_WRITETRANS, &tt);
+
+ code = WritePreamble(&tt);
if (code)
return code;
- code = ubik_SetLock(tt, 1, 1, LOCKWRITE);
- if (code)
- ABORT_WITH(tt, code);
- code = read_DbHeader(tt);
- if (code)
- ABORT_WITH(tt, code);
code = WhoIsThis(call, tt, cid);
if (code)
struct prentry uentry;
struct prentry gentry;
- code = Initdb();
- if (code != PRSUCCESS)
- return code;
- code = ubik_BeginTrans(dbase, UBIK_WRITETRANS, &tt);
+ code = WritePreamble(&tt);
if (code)
return code;
- code = ubik_SetLock(tt, 1, 1, LOCKWRITE);
- if (code)
- ABORT_WITH(tt, code);
- code = read_DbHeader(tt);
- if (code)
- ABORT_WITH(tt, code);
code = WhoIsThis(call, tt, cid);
if (code)
*over = 0;
alist->prlist_len = 0;
alist->prlist_val = NULL;
- code = Initdb();
- if (code != PRSUCCESS)
- return code;
- code = ubik_BeginTransReadAny(dbase, UBIK_READTRANS, &tt);
+
+ code = ReadPreamble(&tt);
if (code)
return code;
- code = ubik_SetLock(tt, 1, 1, LOCKREAD);
- if (code)
- ABORT_WITH(tt, code);
- code = read_DbHeader(tt);
- if (code)
- ABORT_WITH(tt, code);
temp = FindByID(tt, aid);
if (!temp)
iaddr.s_addr = ntohl(ahost);
alist->prlist_len = 0;
alist->prlist_val = NULL;
- code = Initdb();
- if (code != PRSUCCESS)
- return code;
- code = ubik_BeginTransReadAny(dbase, UBIK_READTRANS, &tt);
+
+ code = ReadPreamble(&tt);
if (code)
return code;
- code = ubik_SetLock(tt, 1, 1, LOCKREAD);
- if (code)
- ABORT_WITH(tt, code);
- code = read_DbHeader(tt);
- if (code)
- ABORT_WITH(tt, code);
if (aid != PRBADID) {
temp = FindByID(tt, aid);
iaddr.s_addr = ntohl(ahost);
alist->prlist_len = 0;
alist->prlist_val = NULL;
- code = Initdb();
- if (code != PRSUCCESS)
- return code;
- code = ubik_BeginTransReadAny(dbase, UBIK_READTRANS, &tt);
+
+ code = ReadPreamble(&tt);
if (code)
return code;
- code = ubik_SetLock(tt, 1, 1, LOCKREAD);
- if (code)
- ABORT_WITH(tt, code);
- code = read_DbHeader(tt);
- if (code)
- ABORT_WITH(tt, code);
code = NameToID(tt, inet_ntoa(iaddr), &hostid);
if (code == PRSUCCESS && hostid != 0) {
afs_int32 code;
struct ubik_trans *tt;
- code = Initdb();
- if (code != PRSUCCESS)
- return code;
- code = ubik_BeginTransReadAny(dbase, UBIK_READTRANS, &tt);
+ code = ReadPreamble(&tt);
if (code)
return code;
- code = ubik_SetLock(tt, 1, 1, LOCKREAD);
- if (code)
- ABORT_WITH(tt, code);
- code = read_DbHeader(tt);
- if (code)
- ABORT_WITH(tt, code);
code = GetMax(tt, uid, gid);
if (code != PRSUCCESS)
afs_int32 code;
struct ubik_trans *tt;
- code = Initdb();
- if (code != PRSUCCESS)
- return code;
- code = ubik_BeginTrans(dbase, UBIK_WRITETRANS, &tt);
+ code = WritePreamble(&tt);
if (code)
return code;
- code = ubik_SetLock(tt, 1, 1, LOCKWRITE);
- if (code)
- ABORT_WITH(tt, code);
- code = read_DbHeader(tt);
- if (code)
- ABORT_WITH(tt, code);
code = WhoIsThis(call, tt, cid);
if (code)
afs_int32 temp;
struct prentry tentry;
- code = Initdb();
- if (code != PRSUCCESS)
- return code;
- code = ubik_BeginTransReadAny(dbase, UBIK_READTRANS, &tt);
+ code = ReadPreamble(&tt);
if (code)
return code;
- code = ubik_SetLock(tt, 1, 1, LOCKREAD);
- if (code)
- ABORT_WITH(tt, code);
- code = read_DbHeader(tt);
- if (code)
- ABORT_WITH(tt, code);
code = WhoIsThis(call, tt, cid);
if (code)
bulkentries->prentries_val = 0;
bulkentries->prentries_len = 0;
- code = Initdb();
- if (code != PRSUCCESS)
- return code;
- code = ubik_BeginTransReadAny(dbase, UBIK_READTRANS, &tt);
+ code = ReadPreamble(&tt);
if (code)
return code;
- code = ubik_SetLock(tt, 1, 1, LOCKREAD);
- if (code)
- ABORT_WITH(tt, code);
- code = read_DbHeader(tt);
- if (code)
- ABORT_WITH(tt, code);
/* Make sure we are an authenticated caller and that we are on the
* SYSADMIN list.
return PRPERM;
stolower(name);
- code = Initdb();
- if (code)
- return code;
if (aid == ANYUSERID || aid == AUTHUSERID || aid == ANONYMOUSID
|| aid == SYSADMINID)
return PRPERM;
- if (code != PRSUCCESS)
- return code;
- code = ubik_BeginTrans(dbase, UBIK_WRITETRANS, &tt);
+
+ code = WritePreamble(&tt);
if (code)
return code;
- code = ubik_SetLock(tt, 1, 1, LOCKWRITE);
- if (code)
- ABORT_WITH(tt, code);
- code = read_DbHeader(tt);
- if (code)
- ABORT_WITH(tt, code);
code = WhoIsThis(call, tt, cid);
if (code)
if (mask == 0)
return 0; /* no-op */
- code = Initdb();
- if (code)
- return code;
+
if (id == ANYUSERID || id == AUTHUSERID || id == ANONYMOUSID)
return PRPERM;
- if (code != PRSUCCESS)
- return code;
- code = ubik_BeginTrans(dbase, UBIK_WRITETRANS, &tt);
+
+ code = WritePreamble(&tt);
if (code)
return code;
- code = ubik_SetLock(tt, 1, 1, LOCKWRITE);
- if (code)
- ABORT_WITH(tt, code);
- code = read_DbHeader(tt);
- if (code)
- ABORT_WITH(tt, code);
code = WhoIsThis(call, tt, cid);
if (code)
alist->prlist_len = 0;
alist->prlist_val = NULL;
- code = Initdb();
- if (code != PRSUCCESS)
- return code;
- code = ubik_BeginTransReadAny(dbase, UBIK_READTRANS, &tt);
+ code = ReadPreamble(&tt);
if (code)
return code;
- code = ubik_SetLock(tt, 1, 1, LOCKREAD);
- if (code)
- ABORT_WITH(tt, code);
- code = read_DbHeader(tt);
- if (code)
- ABORT_WITH(tt, code);
code = WhoIsThis(call, tt, cid);
if (code)
alist->prlist_len = 0;
alist->prlist_val = (afs_int32 *) 0;
- code = Initdb();
- if (code != PRSUCCESS)
- goto done;
- code = ubik_BeginTransReadAny(dbase, UBIK_READTRANS, &tt);
+ code = ReadPreamble(&tt);
if (code)
- goto done;
+ return code;
+
code = ubik_SetLock(tt, 1, 1, LOCKREAD);
if (code)
ABORT_WITH(tt, code);
code = ubik_EndTrans(tt);
- done:
return code;
}
start = *lastP;
*lastP = 0;
- code = Initdb();
- if (code != PRSUCCESS)
- return code;
- code = ubik_BeginTransReadAny(dbase, UBIK_READTRANS, &tt);
+ code = ReadPreamble(&tt);
if (code)
return code;
- code = ubik_SetLock(tt, 1, 1, LOCKREAD);
- if (code)
- ABORT_WITH(tt, code);
- code = read_DbHeader(tt);
- if (code)
- ABORT_WITH(tt, code);
code = WhoIsThis(call, tt, cid);
if (code)
afs_int32 code;
struct ubik_trans *tt;
- code = Initdb();
- if (code != PRSUCCESS)
- return code;
- code = ubik_BeginTransReadAny(dbase, UBIK_READTRANS, &tt);
+ code = ReadPreamble(&tt);
if (code)
return code;
- code = ubik_SetLock(tt, 1, 1, LOCKREAD);
- if (code)
- ABORT_WITH(tt, code);
- code = read_DbHeader(tt);
- if (code)
- ABORT_WITH(tt, code);
{
afs_int32 uloc = FindByID(tt, uid);