78 lines
1.3 KiB
C
78 lines
1.3 KiB
C
extern struct win *windows, *wtab[];
|
|
struct win
|
|
{
|
|
struct win *w_next;
|
|
};
|
|
|
|
struct auser;
|
|
|
|
struct comm
|
|
{
|
|
char *name;
|
|
int flags;
|
|
};
|
|
|
|
extern struct comm comms[];
|
|
|
|
extern int WindowByNoN (char *);
|
|
extern int FindCommnr (char *);
|
|
extern int AclSetPermCmd (struct auser *, char *, struct comm *);
|
|
extern int AclSetPermWin (struct auser *, struct auser *, char *, struct win *);
|
|
|
|
|
|
int
|
|
AclSetPerm(uu, u, mode, s)
|
|
struct auser *uu, *u;
|
|
char *mode, *s;
|
|
{
|
|
struct win *w;
|
|
int i;
|
|
char *p, ch;
|
|
|
|
do
|
|
{
|
|
}
|
|
while (0);
|
|
|
|
while (*s)
|
|
{
|
|
switch (*s)
|
|
{
|
|
case '*':
|
|
return AclSetPerm(uu, u, mode, "#?");
|
|
case '#':
|
|
if (uu)
|
|
AclSetPermWin(uu, u, mode, (struct win *)1);
|
|
else
|
|
for (w = windows; w; w = w->w_next)
|
|
AclSetPermWin((struct auser *)0, u, mode, w);
|
|
s++;
|
|
break;
|
|
case '?':
|
|
if (uu)
|
|
AclSetPermWin(uu, u, mode, (struct win *)0);
|
|
else
|
|
for (i = 0; i <= 174; i++)
|
|
AclSetPermCmd(u, mode, &comms[i]);
|
|
s++;
|
|
break;
|
|
default:
|
|
for (p = s; *p && *p != ' ' && *p != '\t' && *p != ','; p++)
|
|
;
|
|
if ((ch = *p))
|
|
*p++ = '\0';
|
|
if ((i = FindCommnr(s)) != -1)
|
|
AclSetPermCmd(u, mode, &comms[i]);
|
|
else if (((i = WindowByNoN(s)) >= 0) && wtab[i])
|
|
AclSetPermWin((struct auser *)0, u, mode, wtab[i]);
|
|
else
|
|
return -1;
|
|
if (ch)
|
|
p[-1] = ch;
|
|
s = p;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|