AFS
view release on metacpan or search on metacpan
void
fs_pioctl(path,setpath,op,in,setin,setout,follow)
char * path
int32 setpath
int32 op
SV * in
int32 setin
int32 setout
int32 follow
PPCODE:
{
struct ViceIoctl vi;
int32 code;
char space[MAXSIZE];
STRLEN insize;
if (!setpath)
path = NULL;
if (setout) {
space[0] = '\0';
EXTEND(sp, 1);
printf("out_size = %d\n", vi.out_size);
PUSHs(sv_2mortal(newSVpv(vi.out, vi.out_size)));
}
}
void
fs_getvolstats(dir,follow=1)
char * dir
int32 follow
PPCODE:
{
struct ViceIoctl vi;
int32 code;
char space[MAXSIZE];
HV *stats;
vi.out_size = MAXSIZE;
vi.in_size = 0;
vi.out = space;
code = pioctl(dir, VIOCGETVOLSTAT, &vi, follow);
hv_undef(stats);
}
}
}
void
fs_whereis(dir,ip=0,follow=1)
char * dir
int32 ip
int32 follow
PPCODE:
{
struct ViceIoctl vi;
int32 code;
char space[MAXSIZE];
vi.out_size = MAXSIZE;
vi.in_size = 0;
vi.out = space;
code = pioctl(dir, VIOCWHEREIS, &vi, follow);
SETCODE(code);
}
}
}
void
fs_checkservers(fast,cell=0,ip=0)
int32 fast
char * cell
int32 ip
PPCODE:
{
struct chservinfo checkserv;
struct ViceIoctl vi;
int32 code, *num;
char space[MAXSIZE];
checkserv.magic = 0x12345678;
checkserv.tflags = 2;
if (fast)
checkserv.tflags |= 0x1;
XPUSHs(sv_2mortal(newSVpv(h, strlen(h))));
}
}
}
void
fs_getcell(in_index,ip=0)
int32 in_index
int32 ip
PPCODE:
{
struct ViceIoctl vi;
int32 code, max = OMAXHOSTS;
int32 *lp;
char space[MAXSIZE];
lp = (int32 *) space;
*lp++ = in_index;
*lp = 0x12345678;
vi.in_size = sizeof(int32) * 2;
SETCODE(code);
RETVAL = (code == 0);
}
OUTPUT:
RETVAL
void
fs_getquota(path,follow=1)
char * path
int32 follow
PPCODE:
{
struct ViceIoctl vi;
int32 code;
char space[MAXSIZE];
struct VolumeStatus *status;
vi.out_size = MAXSIZE;
vi.in_size = 0;
vi.in = 0;
vi.out = space;
vi.out = (caddr_t) & status;
code = pioctl(NULL, VIOCCKCONN, &vi, 0);
SETCODE(code);
RETVAL = (status == 0);
}
OUTPUT:
RETVAL
int32
fs_getcacheparms()
PPCODE:
{
struct ViceIoctl vi;
int32 code;
int32 stats[16];
vi.in_size = 0;
vi.in = 0;
vi.out_size = sizeof(stats);
vi.out = (char *) stats;
code = pioctl(NULL, VIOCGETCACHEPARMS, &vi, 0);
SETCODE(code);
RETVAL = (code == 0);
}
OUTPUT:
RETVAL
int32
fs_getfid(path,follow=1)
char * path
int32 follow
PPCODE:
{
struct ViceIoctl vi;
int32 code;
struct VenusFid vf;
vi.in_size = 0;
vi.out_size = sizeof(vf);
vi.out = (char *) &vf;
code = pioctl(path, VIOCGETFID, &vi, follow);
SETCODE(code);
SETCODE(code);
ST(0) = sv_newmortal();
if (code == 0) {
sv_setpv(ST(0), format_rights(rights));
}
}
void
fs_getcellstatus(cell=0)
char * cell
PPCODE:
{
struct ViceIoctl vi;
struct afsconf_cell info;
int32 code, flags;
if (cell && (cell[0] == '\0' || cell[0] == '0'))
cell = NULL;
code = internal_GetCellInfo(cell, 0, &info);
if (code != 0) {
else {
XSRETURN_UNDEF;
}
}
}
int32
fs_setcellstatus(setuid_allowed,cell=0)
int32 setuid_allowed
char * cell
PPCODE:
{
struct ViceIoctl vi;
struct afsconf_cell info;
int32 code;
struct set_status {
int32 status;
int32 reserved;
char cell[MAXCELLCHARS];
} set;
ST(0) = sv_newmortal();
if (code == 0) {
sv_setpv(ST(0), space);
}
}
void
fs__getacl(dir,follow=1)
char * dir
int32 follow
PPCODE:
{
struct ViceIoctl vi;
int32 code;
char space[MAXSIZE];
HV *ph, *nh;
vi.out_size = MAXSIZE;
vi.in_size = 0;
vi.out = space;
code = pioctl(dir, VIOCGETAL, &vi, follow);
SETCODE(code);
OUTPUT:
RETVAL
MODULE = AFS PACKAGE = AFS::KTC_PRINCIPAL PREFIX = ktcp_
AFS::KTC_PRINCIPAL
ktcp__new(class,name,...)
char * class
char * name
PPCODE:
{
struct ktc_principal *p;
int32 code;
if (items != 2 && items != 4)
croak("Usage: AFS::KTC_PRINCIPAL->new(USER.INST@CELL) or AFS::KTC_PRINCIPAL->new(USER, INST, CELL)");
p = (struct ktc_principal *) safemalloc(sizeof(struct ktc_principal));
p->name[0] = '\0';
p->instance[0] = '\0';
safefree(p);
}
XSRETURN(1);
}
void
ktcp_set(p,name,...)
AFS::KTC_PRINCIPAL p
char * name
PPCODE:
{
int32 code;
if (items != 2 && items != 4)
croak("Usage: set($user.$inst@$cell) or set($user,$inst,$cell)");
if (items == 2) {
code = ka_ParseLoginName(name, p->name, p->instance, p->cell);
}
else {
# SETCODE(0); this spoils the ERROR code
RETVAL = 1;
}
OUTPUT:
RETVAL
void
ktcp_name(p,name=0)
AFS::KTC_PRINCIPAL p
char * name
PPCODE:
{
int32 code = 0;
if (name != 0) {
int nlen = strlen(name);
if (nlen > MAXKTCNAMELEN - 1)
code = KABADNAME;
else
strcpy(p->name, name);
SETCODE(code);
if (code == 0) {
EXTEND(sp, 1);
PUSHs(sv_2mortal(newSVpv(p->name, strlen(p->name))));
}
}
void
ktcp_instance(p,instance=0)
AFS::KTC_PRINCIPAL p
char * instance
PPCODE:
{
int32 code = 0;
if (instance != 0) {
int ilen = strlen(instance);
if (ilen > MAXKTCNAMELEN - 1)
code = KABADNAME;
else
strcpy(p->instance, instance);
SETCODE(code);
if (code == 0) {
EXTEND(sp, 1);
PUSHs(sv_2mortal(newSVpv(p->instance, strlen(p->instance))));
}
}
void
ktcp_cell(p,cell=0)
AFS::KTC_PRINCIPAL p
char * cell
PPCODE:
{
int32 code = 0;
if (cell != 0) {
int clen = strlen(cell);
if (clen > MAXKTCREALMLEN - 1)
code = KABADNAME;
else
strcpy(p->cell, cell);
SETCODE(code);
}
if (code == 0) {
EXTEND(sp, 1);
PUSHs(sv_2mortal(newSVpv(p->cell, strlen(p->cell))));
}
}
void
ktcp_principal(p)
AFS::KTC_PRINCIPAL p
PPCODE:
{
int32 code = 0;
char buffer[MAXKTCNAMELEN + MAXKTCNAMELEN + MAXKTCREALMLEN + 3];
sprintf(buffer, "%s%s%s%s%s", p->name,
p->instance[0] ? "." : "", p->instance, p->cell[0] ? "@" : "", p->cell);
EXTEND(sp, 1);
PUSHs(sv_2mortal(newSVpv(buffer, strlen(buffer))));
SETCODE(code);
}
if (t && t != &the_null_token) safefree(t);
# SETCODE(0); this spoils the ERROR code
RETVAL = 1;
}
OUTPUT:
RETVAL
int32
ktct_startTime(t)
AFS::KTC_TOKEN t
PPCODE:
{
EXTEND(sp,1);
PUSHs(sv_2mortal(newSViv(t->startTime)));
}
int32
ktct_endTime(t)
AFS::KTC_TOKEN t
PPCODE:
{
EXTEND(sp,1);
PUSHs(sv_2mortal(newSViv(t->endTime)));
}
int32
ktct_kvno(t)
AFS::KTC_TOKEN t
PPCODE:
{
EXTEND(sp,1);
PUSHs(sv_2mortal(newSViv(t->kvno)));
}
int32
ktct_ticketLen(t)
AFS::KTC_TOKEN t
PPCODE:
{
EXTEND(sp,1);
PUSHs(sv_2mortal(newSViv(t->ticketLen)));
}
void
ktct_ticket(t)
AFS::KTC_TOKEN t
PPCODE:
{
EXTEND(sp,1);
PUSHs(sv_2mortal(newSVpv(t->ticket,t->ticketLen)));
}
void
ktct_sessionKey(t)
AFS::KTC_TOKEN t
PPCODE:
{
struct ktc_encryptionKey *key;
SV *sv;
key = (struct ktc_encryptionKey *) safemalloc(sizeof(*key));
*key = t->sessionKey;
sv = sv_newmortal();
EXTEND(sp, 1);
sv_setref_pv(sv, "AFS::KTC_EKEY", (void *) key);
PUSHs(sv);
}
void
ktct_string(t)
AFS::KTC_TOKEN t
PPCODE:
{
EXTEND(sp,1);
PUSHs(sv_2mortal(newSVpv((char*)t,sizeof(*t))));
}
MODULE = AFS PACKAGE = AFS::KTC_EKEY PREFIX = ktck_
int32
ktck_DESTROY(k)
safefree(k);
# SETCODE(0); this spoils the ERROR code
RETVAL = 1;
}
OUTPUT:
RETVAL
void
ktck_string(k)
AFS::KTC_EKEY k
PPCODE:
{
EXTEND(sp,1);
PUSHs(sv_2mortal(newSVpv((char*)k,sizeof(*k))));
}
MODULE = AFS PACKAGE = AFS::VOS PREFIX = vos_
AFS::VOS
vos_new(class=0, verb=Nullsv, timeout=Nullsv, noauth=Nullsv, localauth=Nullsv, tcell=NULL, crypt=Nullsv)
SV * timeout
SV * noauth
SV * localauth
char * tcell
SV * crypt
PREINIT:
int32 code;
extern int verbose;
int itimeout, inoauth, ilocalauth, icrypt;
PPCODE:
{
if (!verb) {
verb = newSViv(0);
}
if (!timeout) {
timeout = newSViv(90);
}
if (!noauth) {
noauth = newSViv(0);
}
afs_int32 aserver, code;
char pname[10];
#ifdef OpenAFS_1_4_64
struct diskPartition64 partition;
#else
struct diskPartition partition;
#endif
struct partList dummyPartList;
int i, cnt;
HV *partlist = (HV*)sv_2mortal((SV*)newHV());
PPCODE:
{
apart = -1;
aserver = GetServer(server);
if (aserver == 0) {
char buffer[256];
sprintf(buffer, "AFS::VOS: server '%s' not found in host table\n", server);
VSETCODE(-1, buffer);
XSRETURN_UNDEF;
}
if (partname && (strlen(partname) != 0)) {
afs_int32 count;
int i;
volintXInfo *xInfoP = (volintXInfo *)0; /*Ptr to current/orig extended vol info*/
int wantExtendedInfo=0; /*Do we want extended vol info?*/
char pname[10];
struct partList dummyPartList;
int all, cnt, ifast=0;
HV *vollist = (HV*)sv_2mortal((SV*)newHV());
PPCODE:
{
if (!fast)
fast = newSViv(0);
if (!extended)
extended = newSViv(0);
if ((!SvIOKp(fast))) {
char buffer[256];
sprintf(buffer, "Flag \"fast\" should be numeric.\n");
VSETCODE(EINVAL, buffer);
afs_int32 totalBack=0;
afs_int32 totalFail=0;
int previdx=-1, error, same;
char *ccode, *itp;
int match = 0;
STRLEN prfxlength=0;
SV *regex;
AV *av;
AV *av1 = (AV*)sv_2mortal((SV*)newAV());
AV *av2 = (AV*)sv_2mortal((SV*)newAV());
PPCODE:
{
/* printf("vos-backupsys DEBUG-1 server %s part %s exclude %d noaction %d \n", servername, partition, (int)SvIV(exclude), (int)SvIV(noaction)); */
if (!exclude)
exclude = newSViv(0);
if (!noaction)
noaction = newSViv(0);
if ((!SvIOKp(exclude))) {
char buffer[256];
sprintf(buffer, "Flag \"exclude\" should be numeric.\n");
VSETCODE(EINVAL, buffer);
void
vos_listpart(cstruct, server)
AFS::VOS cstruct
char *server
PREINIT:
int32 aserver, code;
struct partList dummyPartList;
int i, total, cnt;
char pname[10];
PPCODE:
{
aserver = GetServer(server);
if (aserver == 0) {
char buffer[256];
sprintf(buffer, "AFS::VOS: server '%s' not found in host table\n", server);
VSETCODE(-1, buffer);
XSRETURN_UNDEF;
}
code = UV_ListPartitions(aserver, &dummyPartList, &cnt);
if (code) {
struct nvldbentry entry;
afs_int32 vcode = 0;
volintInfo *pntr = (volintInfo *)0;
afs_int32 volid;
afs_int32 code, err;
int voltype, foundserv = 0, foundentry = 0;
afs_int32 aserver, apart;
char apartName[10];
int previdx = -1;
HV *volinfo = (HV*)sv_2mortal((SV*)newHV());
PPCODE:
{
volid = vsu_GetVolumeID(name, cstruct, &err); /* -id */
if (volid == 0) {
char buffer[256];
if (err)
set_errbuff(buffer, err);
else
sprintf(buffer, "Unknown volume ID or name '%s'\n", name);
VSETCODE(err ? err : -1, buffer);
XSRETURN_UNDEF;
char * class
int verb
int timeout
int noauth
int localauth
char * tcell
int crypt
PREINIT:
int32 code = -1;
extern int verbose;
PPCODE:
{
if (tcell && (tcell[0] == '\0' || tcell[0] == '0'))
tcell = NULL;
/* Initialize the ubik_client connection */
rx_SetRxDeadTime(timeout); /* timeout seconds inactivity before declared dead */
cstruct = (struct ubik_client *) 0;
verbose = verb;
if (crypt) /* -crypt specified */
vsu_SetCrypt(1);
afs_int32 apart;
afs_int32 aserver, code;
afs_int32 vcode;
struct VldbListByAttributes attributes;
nbulkentries arrayEntries;
struct nvldbentry *vllist;
afs_int32 centries, nentries = 0;
int j;
afs_int32 thisindex, nextindex;
HV *status, *stats;
PPCODE:
{
status = (HV *) sv_2mortal((SV *) newHV());
if (name && strlen(name) == 0)
name = NULL;
if (servername && strlen(servername) == 0)
servername = NULL;
if (parti && strlen(parti) == 0)
parti = NULL;
/* printf("DEBUG-0 name %s, server %s, part %s lock %d \n", name, servername, parti, */
int noresolve
int printuuid
PREINIT:
afs_int32 vcode;
afs_int32 i, j;
afs_int32 nentries;
bulkaddrs m_addrs;
ListAddrByAttributes m_attrs;
afsUUID m_uuid, askuuid;
afs_int32 m_unique, m_nentries;
PPCODE:
{
Zero(&m_attrs, 1, ListAddrByAttributes);
m_attrs.Mask = VLADDR_INDEX;
Zero(&m_addrs, 1, bulkaddrs);
Zero(&askuuid, 1, afsUUID);
#ifdef OpenAFS
if (uuid && strlen(uuid) != 0) {
/* -uuid */
afsUUID_from_string(uuid, &askuuid);
register struct nvldbentry *vllist;
SV *vol;
char *itp;
afs_int32 nentries;
int j;
char prefix[VOLSER_MAXVOLNAME+1];
int seenprefix=0;
STRLEN volumelength=0;
afs_int32 totalBack=0, totalFail=0, err;
AV *av;
PPCODE:
{
if (prfx && strlen(prfx) == 0)
prfx = NULL;
if (partition && strlen(partition) == 0)
partition = NULL;
if (server && strlen(server) == 0)
server = NULL;
if (volume && (volumelength = sv_len(volume)) == 0)
volume = NULL;
bos_new(class=0, servname, noauth=0, localauth=0, cell=0, aencrypt=1)
char * class
char *servname
int noauth
int localauth
char *cell
int aencrypt
PREINIT:
int32 code = -1;
AFS__BOS server;
PPCODE:
{
/* printf("bos new DEBUG-1 \n"); */
if (cell && (cell[0] == '\0' || cell[0] == '0'))
cell = NULL;
/* printf("bos new call internal_new DEBUG-2 \n"); */
server = internal_bos_new(&code, servname, localauth, noauth, aencrypt, cell);
/* SETCODE(code); */
/* printf("bos new return internal_new DEBUG-3 \n"); */
AFS::BOS self
int lng
SV* object
PREINIT:
int i;
afs_int32 code = 0;
char ibuffer[BOZO_BSSIZE];
char *tp;
int int32p;
HV *status, *stats;
PPCODE:
{
int32p = (lng != 0 ? 2 : 0);
status = (HV *) sv_2mortal((SV *) newHV());
if (object && (! (SvTYPE(SvRV(object)) == SVt_PVAV))) {
BSETCODE(-1, "AFS::BOS: SERVER not an array reference\n");
XSRETURN_UNDEF;
goto done;
}
OUTPUT:
RETVAL
void
bos_getrestart(self)
AFS::BOS self
PREINIT:
int32 code = 0;
struct ktime generalTime, newBinaryTime;
char messageBuffer[256];
PPCODE:
{
code = BOZO_GetRestartTime(self, 1, &generalTime);
if (code) {
char buffer[256];
sprintf(buffer, "AFS::BOS: failed to retrieve restart information (%s)\n", em(code));
BSETCODE(code, buffer);
XSRETURN_UNDEF;
}
code = BOZO_GetRestartTime(self, 2, &newBinaryTime);
if (code) {
}
void
bos_listusers(self)
AFS::BOS self
PREINIT:
int i;
int32 code = 0;
char tbuffer[256];
char *tp;
PPCODE:
{
for (i = 0;; i++) {
tp = tbuffer;
code = BOZO_ListSUsers(self, i, &tp);
if (code)
break;
XPUSHs(sv_2mortal(newSVpv(tbuffer, strlen(tbuffer))));
}
if (code != 1) {
}
void
bos_listhosts(self)
AFS::BOS self
PREINIT:
int32 i, code = 0;
char tbuffer[256];
char *tp;
AV *av = (AV*)sv_2mortal((SV*)newAV());
PPCODE:
{
tp = tbuffer;
code = BOZO_GetCellName(self, &tp);
if (code) {
char buffer[256];
sprintf(buffer, "AFS::BOS: failed to get cell name (%s)\n", em(code));
BSETCODE(code, buffer);
XSRETURN_UNDEF;
}
/* printf("Cell name is %s\n", tbuffer); */
void
bos_getlog(self, file)
AFS::BOS self
char* file
PREINIT:
register struct rx_call *tcall;
int32 code = 0;
char buf, c[255];
int error, num = 0, i = 0;
PPCODE:
{
tcall = rx_NewCall(self);
code = StartBOZO_GetLog(tcall, file);
if (code) {
char buffer[256];
rx_EndCall(tcall, code);
sprintf(buffer, "AFS::BOS error %d (while reading log)\n", code);
BSETCODE(code, buffer);
XSRETURN_UNDEF;
}
bos_listkeys(self, showkey=0)
AFS::BOS self
int showkey
PREINIT:
afs_int32 i, kvno, code = 0;
struct ktc_encryptionKey tkey;
struct bozo_keyInfo keyInfo;
int everWorked = 0;
char index[5];
HV *list = (HV*)sv_2mortal((SV*)newHV());
PPCODE:
{
for (i = 0;; i++) {
HV *key = (HV *) sv_2mortal((SV *) newHV());
code = BOZO_ListKeys(self, i, &kvno, &tkey, &keyInfo);
if (code)
break;
everWorked = 1;
/* first check if key is returned */
if ((!ka_KeyIsZero((char *) &tkey, sizeof(tkey))) && showkey) {
/* ka_PrintBytes ((char *)&tkey, sizeof(tkey)); */
MODULE = AFS PACKAGE = AFS::PTS PREFIX = pts_
AFS::PTS
pts__new(class=0, sec=1, cell=0)
char * class
int32 sec
char * cell
PREINIT:
int32 code = -1;
AFS__PTS server;
PPCODE:
{
if (cell && (cell[0] == '\0' || cell[0] == '0'))
cell = NULL;
server = internal_pts_new(&code, sec, cell);
# SETCODE(code); wird tiefer gesetzt...
if (code == 0) {
ST(0) = sv_newmortal();
sv_setref_pv(ST(0), "AFS::PTS", (void *) server);
RETVAL = (code == 0);
}
OUTPUT:
RETVAL
void
pts_id(server,object,anon=1)
AFS::PTS server
SV * object
int32 anon
PPCODE:
{
if (!SvROK(object)) {
int32 code, id;
char *name;
name = (char *) SvPV(object, PL_na);
code = internal_pr_id(server, name, &id, anon);
ST(0) = sv_newmortal();
SETCODE(code);
if (code == 0)
sv_setiv(ST(0), id);
}
else {
croak("object is not a scaler, ARRAY reference, or HASH reference");
}
}
void
pts_PR_NameToID(server,object)
AFS::PTS server
SV * object
PPCODE:
{
int32 code, id;
int i, len;
AV *av;
SV *sv;
char *name;
STRLEN namelen;
namelist lnames;
idlist lids;
PUTBACK;
return;
}
}
void
pts_name(server,object,anon=1)
AFS::PTS server
SV * object
int32 anon
PPCODE:
{
if (!SvROK(object)) {
int32 code, id;
char name[PR_MAXNAMELEN];
id = SvIV(object);
code = internal_pr_name(server, id, name);
SETCODE(code);
ST(0) = sv_newmortal();
if (code == 0) {
if (!anon && check_name_for_id(name, id)) {
}
else {
croak("object is not a scaler, ARRAY reference, or HASH reference");
}
}
void
pts_PR_IDToName(server,object)
AFS::PTS server
SV * object
PPCODE:
{
int32 code;
int i, len;
AV *av;
SV *sv;
char *name;
namelist lnames;
idlist lids;
if (!SvROK(object) || SvTYPE(SvRV(object)) != SVt_PVAV) {
return;
}
}
void
pts_members(server,name,convertids=1,over=0)
AFS::PTS server
char * name
int32 convertids
int32 over
PPCODE:
{
int32 code, wentover, id;
int i;
prlist list;
code = internal_pr_id(server, name, &id, 0);
if (code == 0) {
list.prlist_val = 0;
list.prlist_len = 0;
code = ubik_Call(PR_ListElements, server, 0, id, &list, &wentover);
}
SETCODE(code);
}
void
pts_PR_ListElements(server,id,over)
AFS::PTS server
int32 id
int32 over
PPCODE:
{
int32 code, wentover;
int i;
prlist list;
list.prlist_val = 0;
list.prlist_len = 0;
code = ubik_Call(PR_ListElements, server, 0, id, &list, &wentover);
sv_setiv(ST(2), (IV) wentover);
if (code == 0) {
free(list.prlist_val);
SETCODE(code);
}
void
pts_getcps(server,name,convertids=1,over=0)
AFS::PTS server
char * name
int32 convertids
int32 over
PPCODE:
{
int32 code, wentover, id;
int i;
prlist list;
code = internal_pr_id(server, name, &id, 0);
if (code == 0) {
list.prlist_val = 0;
list.prlist_len = 0;
code = ubik_Call(PR_GetCPS, server, 0, id, &list, &wentover);
}
SETCODE(code);
}
void
pts_PR_GetCPS(server,id,over)
AFS::PTS server
int32 id
int32 over
PPCODE:
{
int32 code, wentover;
int i;
prlist list;
list.prlist_val = 0;
list.prlist_len = 0;
code = ubik_Call(PR_GetCPS, server, 0, id, &list, &wentover);
sv_setiv(ST(2), (IV) wentover);
if (code == 0) {
free(list.prlist_val);
SETCODE(code);
}
void
pts_owned(server,name,convertids=1,over=0)
AFS::PTS server
char * name
int32 convertids
int32 over
PPCODE:
{
int32 code, wentover, id;
int i;
prlist list;
code = internal_pr_id(server, name, &id, 0);
if (code == 0) {
list.prlist_val = 0;
list.prlist_len = 0;
code = ubik_Call(PR_ListOwned, server, 0, id, &list, &wentover);
}
SETCODE(code);
}
void
pts_PR_ListOwned(server,id,over)
AFS::PTS server
int32 id
int32 over
PPCODE:
{
int32 code, wentover;
int i;
prlist list;
list.prlist_val = 0;
list.prlist_len = 0;
code = ubik_Call(PR_ListOwned, server, 0, id, &list, &wentover);
sv_setiv(ST(2), (IV) wentover);
if (code == 0) {
sv_setiv(ST(0), id);
}
}
void
pts_listentry(server,name,lookupids=1,convertflags=1)
AFS::PTS server
char * name
int32 lookupids
int32 convertflags
PPCODE:
{
int32 code;
int32 id;
struct prcheckentry entry;
code = internal_pr_id(server, name, &id, 0);
if (code == 0)
code = ubik_Call(PR_ListEntry, server, 0, id, &entry);
SETCODE(code);
parse_prcheckentry(server, stats, &entry, lookupids, convertflags);
EXTEND(sp, 1);
PUSHs(sv_2mortal(newRV_noinc((SV *) stats)));
}
}
void
pts_PR_ListEntry(server,id)
AFS::PTS server
int32 id
PPCODE:
{
int32 code;
struct prcheckentry entry;
code = ubik_Call(PR_ListEntry, server, 0, id, &entry);
SETCODE(code);
if (code == 0) {
HV *stats;
PUSHs(sv_2mortal(newRV_noinc((SV *) stats)));
}
}
void
pts_dumpentry(server,pos,lookupids=1,convertflags=1)
AFS::PTS server
int32 pos
int32 lookupids
int32 convertflags
PPCODE:
{
int32 code;
struct prdebugentry entry;
code = ubik_Call(PR_DumpEntry, server, 0, pos, &entry);
SETCODE(code);
if (code == 0) {
HV *stats;
parse_prdebugentry(server, stats, &entry, lookupids, convertflags);
EXTEND(sp, 1);
PUSHs(sv_2mortal(newRV_noinc((SV *) stats)));
}
}
void
pts_PR_DumpEntry(server,pos)
AFS::PTS server
int32 pos
PPCODE:
{
int32 code;
struct prdebugentry entry;
code = ubik_Call(PR_DumpEntry, server, 0, pos, &entry);
SETCODE(code);
if (code == 0) {
HV *stats;
EXTEND(sp, 1);
PUSHs(sv_2mortal(newRV_noinc((SV *) stats)));
}
}
void
pts_rename(server,name,newname)
AFS::PTS server
char * name
char * newname
PPCODE:
{
int32 code;
int32 id;
code = internal_pr_id(server, name, &id, 0);
if (code == 0)
code = ubik_Call(PR_ChangeEntry, server, 0, id, newname, 0, 0);
SETCODE(code);
ST(0) = sv_2mortal(newSViv(code == 0));
XSRETURN(1);
}
void
pts_chown(server,name,owner)
AFS::PTS server
char * name
char * owner
PPCODE:
{
int32 code;
int32 id, oid;
code = internal_pr_id(server, name, &id, 0);
if (code == 0)
code = internal_pr_id(server, owner, &oid, 0);
if (code == 0)
code = ubik_Call(PR_ChangeEntry, server, 0, id, "", oid, 0);
SETCODE(code);
ST(0) = sv_2mortal(newSViv(code == 0));
XSRETURN(1);
}
void
pts_chid(server,name,newid)
AFS::PTS server
char * name
int32 newid
PPCODE:
{
int32 code;
int32 id;
code = internal_pr_id(server, name, &id, 0);
if (code == 0)
code = ubik_Call(PR_ChangeEntry, server, 0, id, "", 0, newid);
SETCODE(code);
ST(0) = sv_2mortal(newSViv(code == 0));
XSRETURN(1);
}
void
pts_PR_ChangeEntry(server,id,name,oid,newid)
AFS::PTS server
int32 id
char * name
int32 oid
int32 newid
PPCODE:
{
int32 code;
if (name && !*name)
name = NULL;
code = ubik_Call(PR_ChangeEntry, server, 0, id, name, oid, newid);
SETCODE(code);
ST(0) = sv_2mortal(newSViv(code == 0));
XSRETURN(1);
}
void
pts_adduser(server,name,group)
AFS::PTS server
char * name
char * group
PPCODE:
{
int32 code, id, gid;
code = internal_pr_id(server, name, &id, 0);
if (code == 0)
code = internal_pr_id(server, group, &gid, 0);
if (code == 0)
code = ubik_Call(PR_AddToGroup, server, 0, id, gid);
SETCODE(code);
ST(0) = sv_newmortal();
sv_setiv(ST(0), (code == 0));
XSRETURN(1);
}
void
pts_PR_AddToGroup(server,uid,gid)
AFS::PTS server
int32 uid
int32 gid
PPCODE:
{
int32 code;
code = ubik_Call(PR_AddToGroup, server, 0, uid, gid);
SETCODE(code);
ST(0) = sv_newmortal();
sv_setiv(ST(0), (code == 0));
XSRETURN(1);
}
void
pts_removeuser(server,name,group)
AFS::PTS server
char * name
char * group
PPCODE:
{
int32 code, id, gid;
code = internal_pr_id(server, name, &id, 0);
if (code == 0)
code = internal_pr_id(server, group, &gid, 0);
if (code == 0)
code = ubik_Call(PR_RemoveFromGroup, server, 0, id, gid);
SETCODE(code);
ST(0) = sv_newmortal();
sv_setiv(ST(0), (code == 0));
XSRETURN(1);
}
void
pts_PR_RemoveFromGroup(server,uid,gid)
AFS::PTS server
int uid
int gid
PPCODE:
{
int32 code;
code = ubik_Call(PR_RemoveFromGroup, server, 0, uid, gid);
SETCODE(code);
ST(0) = sv_newmortal();
sv_setiv(ST(0), (code == 0));
XSRETURN(1);
}
void
pts_delete(server,name)
AFS::PTS server
char * name
PPCODE:
{
int32 code, id;
code = internal_pr_id(server, name, &id, 0);
if (code == 0)
code = ubik_Call(PR_Delete, server, 0, id);
SETCODE(code);
ST(0) = sv_newmortal();
sv_setiv(ST(0), (code == 0));
XSRETURN(1);
}
void
pts_PR_Delete(server,id)
AFS::PTS server
int32 id
PPCODE:
{
int32 code;
code = ubik_Call(PR_Delete, server, 0, id);
SETCODE(code);
ST(0) = sv_newmortal();
sv_setiv(ST(0), (code == 0));
XSRETURN(1);
}
void
pts_whereisit(server,name)
AFS::PTS server
char * name
PPCODE:
{
int32 code, id, pos;
code = internal_pr_id(server, name, &id, 0);
if (code == 0)
code = ubik_Call(PR_WhereIsIt, server, 0, id, &pos);
SETCODE(code);
ST(0) = sv_newmortal();
if (code == 0)
sv_setiv(ST(0), pos);
XSRETURN(1);
}
void
pts_PR_WhereIsIt(server,id)
AFS::PTS server
int32 id
PPCODE:
{
int32 code,pos;
code = ubik_Call(PR_WhereIsIt, server, 0, id, &pos);
SETCODE(code);
ST(0) = sv_newmortal();
if (code == 0)
sv_setiv(ST(0), pos);
XSRETURN(1);
}
void
pts_listmax(server)
AFS::PTS server
PPCODE:
{
int32 code, uid, gid;
code = ubik_Call(PR_ListMax, server, 0, &uid, &gid);
SETCODE(code);
if (code == 0) {
EXTEND(sp, 2);
PUSHs(sv_2mortal(newSViv(uid)));
PUSHs(sv_2mortal(newSViv(gid)));
}
}
void
pts_PR_ListMax(server)
AFS::PTS server
PPCODE:
{
int32 code, uid, gid;
code = ubik_Call(PR_ListMax, server, 0, &uid, &gid);
SETCODE(code);
if (code == 0) {
EXTEND(sp, 2);
PUSHs(sv_2mortal(newSViv(uid)));
PUSHs(sv_2mortal(newSViv(gid)));
}
}
void
pts_setmax(server,id,isgroup=0)
AFS::PTS server
int32 id
int32 isgroup
PPCODE:
{
int32 code, flag;
flag = 0;
if (isgroup)
flag |= PRGRP;
code = ubik_Call(PR_SetMax, server, 0, id, flag);
SETCODE(code);
ST(0) = sv_newmortal();
sv_setiv(ST(0), (code == 0));
XSRETURN(1);
}
void
pts_PR_SetMax(server,id,gflag)
AFS::PTS server
int32 id
int32 gflag
PPCODE:
{
int32 code;
code = ubik_Call(PR_SetMax, server, 0, id, gflag);
SETCODE(code);
ST(0) = sv_newmortal();
sv_setiv(ST(0), (code == 0));
XSRETURN(1);
}
void
pts_setgroupquota(server,name,ngroups)
AFS::PTS server
char * name
int32 ngroups
PPCODE:
{
int32 code, id, mask;
code = internal_pr_id(server, name, &id, 0);
if (code == 0) {
mask = PR_SF_NGROUPS;
code = ubik_Call(PR_SetFieldsEntry, server, 0, id, mask, 0, ngroups, 0, 0, 0);
}
SETCODE(code);
void
pts_PR_SetFieldsEntry(server,id,mask,flags,ngroups,nusers,spare1,spare2)
AFS::PTS server
int32 id
int32 mask
int32 flags
int32 ngroups
int32 nusers
int32 spare1
int32 spare2
PPCODE:
{
int32 code;
code = ubik_Call(PR_SetFieldsEntry, server, 0,
id, mask, flags, ngroups, nusers, spare1, spare2);
SETCODE(code);
ST(0) = sv_newmortal();
sv_setiv(ST(0), (code == 0));
XSRETURN(1);
}
void
pts_setaccess(server,name,access)
AFS::PTS server
char * name
char * access
PPCODE:
{
int32 code, id, flags, mask;
code = internal_pr_id(server, name, &id, 0);
if (code == 0)
code = parse_pts_setfields(access, &flags);
if (code == 0) {
mask = PR_SF_ALLBITS;
code = ubik_Call(PR_SetFieldsEntry, server, 0, id, mask, flags, 0, 0, 0, 0);
}
ST(0) = sv_newmortal();
sv_setiv(ST(0), (code == 0));
XSRETURN(1);
}
void
pts_ismember(server,name,group)
AFS::PTS server
char * name
char * group
PPCODE:
{
int32 code, id, gid, flag;
code = internal_pr_id(server, name, &id, 0);
if (code == 0)
code = internal_pr_id(server, group, &gid, 0);
if (code == 0)
code = ubik_Call(PR_IsAMemberOf, server, 0, id, gid, &flag);
SETCODE(code);
if (code == 0)
sv_setiv(ST(0), (flag != 0));
XSRETURN(1);
}
void
pts_PR_IsAMemberOf(server,uid,gid)
AFS::PTS server
int32 uid
int32 gid
PPCODE:
{
int32 code, flag;
code = ubik_Call(PR_IsAMemberOf, server, 0, uid, gid, &flag);
SETCODE(code);
ST(0) = sv_newmortal();
if (code == 0)
sv_setiv(ST(0), (flag != 0));
XSRETURN(1);
}
RETVAL = (code == 0);
}
OUTPUT:
RETVAL
void
kas_KAM_GetEntry(server,user,inst)
AFS::KAS server
char * user
char * inst
PPCODE:
{
int32 code;
struct kaentryinfo entry;
code = ubik_Call(KAM_GetEntry, server, 0, user, inst, KAMAJORVERSION, &entry);
SETCODE(code);
if (code == 0) {
HV *stats = newHV();
if (parse_kaentryinfo(stats, &entry)) {
EXTEND(sp, 1);
else {
hv_undef(stats);
}
}
}
void
kas_KAM_Debug(server,version)
AFS::KAS server
int32 version
PPCODE:
{
int32 code;
struct ka_debugInfo entry;
code = ubik_Call(KAM_Debug, server, 0, version, 0, &entry);
SETCODE(code);
if (code == 0) {
HV *stats = newHV();
if (parse_ka_debugInfo(stats, &entry)) {
EXTEND(sp, 1);
else {
hv_undef(stats);
}
}
}
void
kas_KAM_GetStats(server,version)
AFS::KAS server
int32 version
PPCODE:
{
int32 code;
int32 admin_accounts;
struct kasstats kas;
struct kadstats kad;
code = ubik_Call(KAM_GetStats, server, 0, version, &admin_accounts, &kas, &kad);
SETCODE(code);
if (code == 0) {
HV *stats = newHV();
else {
hv_undef(stats);
hv_undef(dstats);
}
}
}
void
kas_KAM_GetRandomKey(server)
AFS::KAS server
PPCODE:
{
int32 code;
struct ktc_encryptionKey *key;
key = (struct ktc_encryptionKey *) safemalloc(sizeof(*key));
code = ubik_Call(KAM_GetRandomKey, server, 0, key);
SETCODE(code);
if (code == 0) {
safefree(key);
}
}
void
kas_KAM_CreateUser(server,user,inst,key)
AFS::KAS server
char * user
char * inst
AFS::KTC_EKEY key
PPCODE:
{
int32 code;
code = ubik_Call(KAM_CreateUser, server, 0, user, inst, *key);
SETCODE(code);
EXTEND(sp, 1);
PUSHs(sv_2mortal(newSViv(code == 0)));
}
void
kas_KAM_SetPassword(server,user,inst,kvno,key)
AFS::KAS server
char * user
char * inst
int32 kvno
AFS::KTC_EKEY key
PPCODE:
{
int32 code;
code = ubik_Call(KAM_SetPassword, server, 0, user, inst, kvno, *key);
SETCODE(code);
EXTEND(sp, 1);
PUSHs(sv_2mortal(newSViv(code == 0)));
}
void
kas_KAM_DeleteUser(server,user,inst)
AFS::KAS server
char * user
char * inst
PPCODE:
{
int32 code;
code = ubik_Call(KAM_DeleteUser, server, 0, user, inst);
SETCODE(code);
EXTEND(sp, 1);
PUSHs(sv_2mortal(newSViv(code == 0)));
}
void
kas_KAM_ListEntry(server,previous,index,count)
AFS::KAS server
int32 previous
int32 index
int32 count
PPCODE:
{
int32 code;
struct kaident ki;
code = ubik_Call(KAM_ListEntry, server, 0, previous, &index, &count, &ki);
sv_setiv(ST(2), (IV) index);
sv_setiv(ST(3), (IV) count);
SETCODE(code);
if (code == 0 && count >= 0) {
EXTEND(sp, 2);
kas_KAM_SetFields(server,name,instance,flags,user_expire,max_ticket_life, maxAssoc, misc_auth_bytes, spare2=0)
AFS::KAS server
char * name
char * instance
int32 flags
int32 user_expire
int32 max_ticket_life
int32 maxAssoc
uint32 misc_auth_bytes
int32 spare2
PPCODE:
{
int32 code;
# tpf nog 03/29/99
# wrong argument list: max_ticket_life was missing
# code = ubik_Call(KAM_SetFields, server, 0, name, instance,
# flags, user_expire, maxAssoc, spare1,spare2);
code = ubik_Call(KAM_SetFields, server, 0, name, instance,
flags, user_expire, max_ticket_life, maxAssoc, misc_auth_bytes, spare2);
SETCODE(code);
PUSHs(sv_2mortal(newSViv(code == 0)));
}
void
kas_ka_ChangePassword(server,name,instance,oldkey,newkey)
AFS::KAS server
char * name
char * instance
AFS::KTC_EKEY oldkey
AFS::KTC_EKEY newkey
PPCODE:
{
int32 code;
code = ka_ChangePassword(name, instance, server, oldkey, newkey);
SETCODE(code);
EXTEND(sp, 1);
PUSHs(sv_2mortal(newSViv(code == 0)));
}
void
kas_ka_GetToken(server,name,instance,start,end,auth_token,auth_domain="")
AFS::KAS server
char * name
char * instance
int32 start
int32 end
AFS::KTC_TOKEN auth_token
char * auth_domain
PPCODE:
{
int32 code;
struct ktc_token *t;
#if defined(AFS_3_4)
#else
char *cname = NULL;
char *cinst = NULL;
char *cell = NULL;
#endif
void
kas_ka_Authenticate(server,name,instance,service,key,start,end,pwexpires=-1)
AFS::KAS server
char * name
char * instance
int32 service
AFS::KTC_EKEY key
int32 start
int32 end
int32 pwexpires
PPCODE:
{
int32 code;
int32 pw;
struct ktc_token *t;
#if defined(AFS_3_4)
#else
char *cell = NULL;
#endif
t = (struct ktc_token *) safemalloc(sizeof(struct ktc_token));
CODE:
{
SETCODE(0);
ST(0) = sv_newmortal();
sv_setpv(ST(0), parse_flags_ptsaccess(flags));
}
void
afs_ka_ParseLoginName(login)
char * login
PPCODE:
{
int32 code;
char name[MAXKTCNAMELEN];
char inst[MAXKTCNAMELEN];
char cell[MAXKTCREALMLEN];
code = ka_ParseLoginName(login, name, inst, cell);
SETCODE(code);
if (code == 0) {
EXTEND(sp, 3);
PUSHs(sv_2mortal(newSVpv(name, strlen(name))));
PUSHs(sv_2mortal(newSVpv(inst, strlen(inst))));
PUSHs(sv_2mortal(newSVpv(cell, strlen(cell))));
}
}
void
afs_ka_StringToKey(str,cell)
char * str
char * cell
PPCODE:
{
struct ktc_encryptionKey *key;
SV *st;
key = (struct ktc_encryptionKey *) safemalloc(sizeof(*key));
ka_StringToKey(str, cell, key);
SETCODE(0);
EXTEND(sp, 1);
}
void
afs_ka_UserAthenticateGeneral(p,pass,life,flags,pwexpires=-1,reason=0)
AFS::KTC_PRINCIPAL p
char * pass
int32 life
int32 flags
int32 pwexpires
char * reason
PPCODE:
{
int32 code, pw = 255;
char *r;
code = ka_UserAuthenticateGeneral(flags,
p->name, p->instance, p->cell, pass, life, &pw, 0, &r);
if (pwexpires != -1)
sv_setiv(ST(4), (IV) pw);
if (reason)
sv_setpv(ST(5), r);
SETCODE(code);
EXTEND(sp, 1);
PUSHs(sv_2mortal(newSViv(code == 0)));
}
void
afs_ka_ReadPassword(prompt,verify=0,cell=0)
char * prompt
int32 verify
char * cell
PPCODE:
{
int32 code = 0;
struct ktc_encryptionKey *key;
SV *st;
if (cell && (cell[0] == '\0' || cell[0] == '0'))
cell = NULL;
if (cell == 0) {
cell = internal_GetLocalCell(&code);
KSETCODE(code, buffer);
safefree(key);
XSRETURN_UNDEF;
}
}
void
afs_ka_UserReadPassword(prompt,reason=0)
char * prompt
char * reason
PPCODE:
{
int32 code;
char buffer[1024];
char *r;
code = ka_UserReadPassword(prompt, buffer, sizeof(buffer) - 1, &r);
SETCODE(code);
if (reason)
sv_setpv(ST(1), r);
if (code == 0) {
EXTEND(sp, 1);
}
}
void
afs_ka_GetAdminToken(p,key,lifetime,newt=1,reason=0)
AFS::KTC_PRINCIPAL p
AFS::KTC_EKEY key
int32 lifetime
int32 newt
char * reason
PPCODE:
{
int32 code;
struct ktc_token *t;
char *message;
t = (struct ktc_token *) safemalloc(sizeof(struct ktc_token));
code = ka_GetAdminToken(p->name, p->instance, p->cell, key, lifetime, t, newt);
SETCODE(code);
}
void
afs_ka_GetAuthToken(p,key,lifetime,pwexpires=-1)
AFS::KTC_PRINCIPAL p
AFS::KTC_EKEY key
int32 lifetime
int32 pwexpires
PPCODE:
{
int32 code;
int32 pw;
code = ka_GetAuthToken(p->name, p->instance, p->cell, key, lifetime, &pw);
SETCODE(code);
if (code == 0) {
if (pwexpires != -1)
sv_setiv(ST(3), (IV) pw);
}
PUSHs(sv_2mortal(newSViv(code == 0)));
}
void
afs_ka_GetServerToken(p,lifetime,newt=1)
AFS::KTC_PRINCIPAL p
int32 lifetime
int32 newt
PPCODE:
{
int32 code;
struct ktc_token *t;
#if defined(AFS_3_4)
#else
int32 dosetpag;
#endif
t = (struct ktc_token *) safemalloc(sizeof(struct ktc_token));
#if defined(AFS_3_4)
sv_setref_pv(st, "AFS::KTC_TOKEN", (void *) t);
PUSHs(st);
}
else {
safefree(t);
}
}
void
afs_ka_nulltoken()
PPCODE:
{
ST(0) = sv_newmortal();
sv_setref_pv(ST(0), "AFS::KTC_TOKEN", (void *) &the_null_token);
XSRETURN(1);
}
void
afs_ka_AuthServerConn(token,service,cell=0)
AFS::KTC_TOKEN token
int32 service
char * cell
PPCODE:
{
int32 code;
AFS__KAS server;
if (token == &the_null_token)
token = NULL;
if (cell && (cell[0] == '\0' || cell[0] == '0'))
cell = NULL;
XSRETURN(1);
}
}
void
afs_ka_SingleServerConn(host,token,service,cell=0)
char * host
AFS::KTC_TOKEN token
int32 service
char * cell
PPCODE:
{
int32 code;
AFS__KAS server;
if (token == &the_null_token)
token = NULL;
code = ka_SingleServerConn(cell, host, service, token, &server);
SETCODE(code);
if (code == 0) {
ST(0) = sv_newmortal();
sv_setref_pv(ST(0), "AFS::KAS", (void *) server);
XSRETURN(1);
}
}
void
afs_ka_des_string_to_key(str)
char * str
PPCODE:
{
struct ktc_encryptionKey *key;
SV *st;
key = (struct ktc_encryptionKey *) safemalloc(sizeof(*key));
des_string_to_key(str, key);
SETCODE(0);
EXTEND(sp, 1);
st = sv_newmortal();
code = setpag();
SETCODE(code);
RETVAL = (code == 0);
}
OUTPUT:
RETVAL
void
afs_expandcell(cell)
char * cell
PPCODE:
{
int32 code;
struct afsconf_cell info;
if (cell && (cell[0] == '\0' || cell[0] == '0'))
cell = NULL;
code = internal_GetCellInfo(cell, 0, &info);
if (code != 0) {
XSRETURN_UNDEF;
else {
SETCODE(code); /* fuer Fehler wird tiefer gesetzt... */
ST(0) = sv_newmortal();
sv_setpv(ST(0), info.name);
XSRETURN(1);
}
}
void
afs_localcell()
PPCODE:
{
int32 code;
char *cell;
cell = internal_GetLocalCell(&code);
if (! code) SETCODE(code); /* fuer Fehler wird tiefer gesetzt... */
ST(0) = sv_newmortal();
sv_setpv(ST(0), cell);
XSRETURN(1);
}
void
afs_getcellinfo(cell=0,ip=0)
char * cell
int32 ip
PPCODE:
{
int32 code;
struct afsconf_cell info;
if (cell && (cell[0] == '\0' || cell[0] == '0'))
cell = NULL;
code = internal_GetCellInfo(cell, 0, &info);
if (code != 0) {
XSRETURN_UNDEF;
flag = (int) SvIV(ST(0));
raise_exception = (flag != 0);
}
RETVAL = raise_exception;
}
OUTPUT:
RETVAL
void
afs_configdir(...)
PPCODE:
{
char *value;
int32 code;
if (items > 1)
croak("Usage: AFS::configdir(dir)");
if (items == 1) {
STRLEN len;
value = (char *) SvPV(ST(0), len);
else
XSRETURN_UNDEF;
}
}
/* KTC routines */
AFS::KTC_PRINCIPAL
afs_ktc_ListTokens(context)
int32 context
PPCODE:
{
int32 code;
struct ktc_principal *p;
p = (struct ktc_principal *) safemalloc(sizeof(struct ktc_principal));
code = ktc_ListTokens(context, &context, p);
SETCODE(code);
sv_setiv(ST(0), (IV) context);
ST(0) = sv_newmortal();
if (code == 0) {
else {
safefree(p);
}
XSRETURN(1);
}
void
afs_ktc_GetToken(server)
AFS::KTC_PRINCIPAL server
PPCODE:
{
int32 code;
struct ktc_principal *c;
struct ktc_token *t;
c = (struct ktc_principal *) safemalloc(sizeof(struct ktc_principal));
t = (struct ktc_token *) safemalloc(sizeof(struct ktc_token));
code = ktc_GetToken(server, t, sizeof(*t), c);
SETCODE(code);
}
else {
safefree(c);
safefree(t);
}
}
void
afs_ktc_FromString(s)
SV *s
PPCODE:
{
SV *sv;
STRLEN len;
char *str;
struct ktc_token *t;
str = SvPV(s, len);
EXTEND(sp, 1);
if (len == sizeof(struct ktc_token)) {
t = (struct ktc_token *) safemalloc(sizeof(struct ktc_token));
PUSHs(&PL_sv_undef);
}
}
void
afs_ktc_SetToken(server,token,client,flags=0)
AFS::KTC_PRINCIPAL server
AFS::KTC_TOKEN token
AFS::KTC_PRINCIPAL client
int32 flags
PPCODE:
{
int32 code;
code = ktc_SetToken(server, token, client, flags);
SETCODE(code);
ST(0) = sv_2mortal(newSViv(code == 0));
XSRETURN(1);
}
void
afs_ktc_ForgetAllTokens()
PPCODE:
{
int32 code;
code = ktc_ForgetAllTokens();
SETCODE(code);
ST(0) = sv_2mortal(newSViv(code == 0));
XSRETURN(1);
}
void
afs_error_message(code)
int32 code
PPCODE:
{
ST(0) = sv_newmortal();
sv_setpv(ST(0), (char *) error_message(code));
XSRETURN(1);
}
/* this function is generated automatically by constant_gen */
/* You didn't think I would type in this crap did you? */
/* thats what perl is for :-) */
#if defined(AFS_3_4)
void
constant(name, arg=0)
char * name
int arg
PPCODE:
{
ST(0) = sv_newmortal();
errno = EINVAL;
switch (name[0]) {
case 'A':
switch (name[1]) {
case 'F':
switch (name[2]) {
XSRETURN(1);
return;
}
#else
void
constant(name, arg=0)
char * name
int arg
PPCODE:
{
ST(0) = sv_newmortal();
errno = EINVAL;
switch (name[0]) {
case 'A':
switch (name[1]) {
case 'F':
switch (name[2]) {
( run in 0.943 second using v1.01-cache-2.11-cpan-71847e10f99 )