AFS
view release on metacpan or search on metacpan
if (setuid_allowed)
set.status = 0;
else
set.status = 0x2;
vi.in_size = sizeof(set);
vi.in = (char *) &set;
vi.out_size = 0;
vi.out = (char *) 0;
code = pioctl(0, VIOC_SETCELLSTATUS, &vi, 0);
SETCODE(code);
EXTEND(sp, 1);
PUSHs(sv_2mortal(newSViv(code == 0)));
}
}
void
fs_wscell()
CODE:
{
struct ViceIoctl vi;
int32 code;
char space[MAXSIZE];
vi.in_size = 0;
vi.out_size = MAXSIZE;
vi.out = (caddr_t) space;
code = pioctl(NULL, VIOC_GET_WS_CELL, &vi, 0);
SETCODE(code);
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);
if (code == 0) {
ph = newHV();
nh = newHV();
if (parse_acl(space, ph, nh)) {
AV *acl;
acl = newAV();
av_store(acl, 0, newRV_noinc((SV *) ph));
av_store(acl, 1, newRV_noinc((SV *) nh));
EXTEND(sp, 1);
PUSHs(sv_bless(sv_2mortal(newRV_noinc((SV *) acl)), gv_stashpv("AFS::ACL", 1)));
}
else {
hv_undef(ph);
hv_undef(nh);
}
}
}
int32
fs_setacl(dir,acl,follow=1)
char * dir
SV * acl
int32 follow
CODE:
{
struct ViceIoctl vi;
int32 code;
char space[MAXSIZE];
char acls[MAXSIZE], *p;
HV *ph, *nh;
AV *object;
SV **sv;
HE *he;
int plen, nlen;
int32 rights;
char *name, *perm;
if (sv_isa(acl, "AFS::ACL") && SvROK(acl)
&& (SvTYPE(SvRV(acl)) == SVt_PVAV)
) {
object = (AV *) SvRV(acl);
}
else {
croak("acl is not of type AFS::ACL");
}
ph = nh = NULL;
sv = av_fetch(object, 0, 0);
if (sv) {
SV *sph = *sv;
if (SvROK(sph) && (SvTYPE(SvRV(sph)) == SVt_PVHV)) {
ph = (HV *) SvRV(sph);
}
}
sv = av_fetch(object, 1, 0);
if (sv) {
SV *snh = *sv;
if (SvROK(snh) && (SvTYPE(SvRV(snh)) == SVt_PVHV)) {
nh = (HV *) SvRV(snh);
}
}
plen = nlen = 0;
p = acls;
*p = 0;
code = 0;
( run in 0.913 second using v1.01-cache-2.11-cpan-75ffa21a3d4 )