version 1.19, 2010/06/29 05:55:37 |
version 1.20, 2010/06/29 20:57:33 |
|
|
static void vassign(value_t *, char *); |
static void vassign(value_t *, char *); |
static void vtoken(char *); |
static void vtoken(char *); |
static void vprint(value_t *); |
static void vprint(value_t *); |
static int vaccess(unsigned int, unsigned int); |
|
static char *vinterp(char *, int); |
static char *vinterp(char *, int); |
|
|
static size_t col = 0; |
static size_t col = 0; |
|
|
fclose(fp); |
fclose(fp); |
} |
} |
} |
} |
/* |
|
* To allow definition of exception prior to fork |
|
*/ |
|
vtable[EXCEPTIONS].v_access &= ~(WRITE<<PUBLIC); |
|
} |
} |
|
|
/*VARARGS1*/ |
/*VARARGS1*/ |
static void |
static void |
vassign(value_t *p, char *v) |
vassign(value_t *p, char *v) |
{ |
{ |
if (!vaccess(p->v_access, WRITE)) { |
if (p->v_access & READONLY) { |
printf("access denied\r\n"); |
printf("access denied\r\n"); |
return; |
return; |
} |
} |
|
|
|
|
if (strcmp(s, "all") == 0) { |
if (strcmp(s, "all") == 0) { |
for (p = vtable; p->v_name; p++) |
for (p = vtable; p->v_name; p++) |
if (vaccess(p->v_access, READ)) |
vprint(p); |
vprint(p); |
|
} else { |
} else { |
do { |
do { |
if ((cp = vinterp(s, ' '))) |
if ((cp = vinterp(s, ' '))) |
|
|
} |
} |
} else if ((cp = strchr(s, '?'))) { |
} else if ((cp = strchr(s, '?'))) { |
*cp = '\0'; |
*cp = '\0'; |
if ((p = vlookup(s)) && vaccess(p->v_access, READ)) { |
if (p = vlookup(s)) { |
vprint(p); |
vprint(p); |
return; |
return; |
} |
} |
|
|
printf("\r\n"); |
printf("\r\n"); |
return; |
return; |
} |
} |
} |
|
|
|
static int |
|
vaccess(unsigned int mode, unsigned int rw) |
|
{ |
|
if (mode & (rw<<PUBLIC)) |
|
return (1); |
|
if (mode & (rw<<PRIVATE)) |
|
return (1); |
|
return ((mode & (rw<<ROOT)) && getuid() == 0); |
|
} |
} |
|
|
static value_t * |
static value_t * |