Loading...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 | --- setmode.c.orig 2008-02-08 00:45:35.000000000 -0800 +++ setmode.c 2008-02-17 19:36:02.000000000 -0800 @@ -70,12 +70,15 @@ typedef struct bitcmd { #define CMD2_OBITS 0x08 #define CMD2_UBITS 0x10 +#define compress_mode _sm_compress_mode + static BITCMD *addcmd(BITCMD *, int, int, int, u_int); -static void compress_mode(BITCMD *); +__private_extern__ void compress_mode(BITCMD *); #ifdef SETMODE_DEBUG static void dumpmode(BITCMD *); #endif +#ifndef BUILDING_VARIANT /* * Given the old mode and an array of bitcmd structures, apply the operations * described in the bitcmd structures to the old mode, and return the new mode. @@ -151,6 +154,7 @@ common: if (set->cmd2 & CMD2_CLR) { return (newmode); } } +#endif /* BUILDING_VARIANT */ #define ADDCMD(a, b, c, d) \ if (set >= endset) { \ @@ -169,7 +173,11 @@ common: if (set->cmd2 & CMD2_CLR) { } \ set = addcmd(set, (a), (b), (c), (d)) +#ifndef VARIANT_LEGACY +#define STANDARD_BITS (S_ISUID|S_ISGID|S_IRWXU|S_IRWXG|S_IRWXO|S_ISTXT) +#else /* VARIANT_LEGACY */ #define STANDARD_BITS (S_ISUID|S_ISGID|S_IRWXU|S_IRWXG|S_IRWXO) +#endif /* !VARIANT_LEGACY */ void * setmode(p) @@ -211,12 +219,21 @@ setmode(p) */ if (isdigit((unsigned char)*p)) { perml = strtol(p, &ep, 8); - if (*ep || perml < 0 || perml & ~(STANDARD_BITS|S_ISTXT)) { +#ifndef VARIANT_LEGACY + if (*ep || perml < 0 || perml & ~STANDARD_BITS) +#else /* VARIANT_LEGACY */ + if (*ep || perml < 0 || perml & ~(STANDARD_BITS|S_ISTXT)) +#endif /* !VARIANT_LEGACY */ + { free(saveset); return (NULL); } perm = (mode_t)perml; +#ifndef VARIANT_LEGACY + ADDCMD('=', STANDARD_BITS, perm, mask); +#else /* VARIANT_LEGACY */ ADDCMD('=', (STANDARD_BITS|S_ISTXT), perm, mask); +#endif /* !VARIANT_LEGACY */ set->cmd = 0; return (saveset); } @@ -253,7 +270,9 @@ getop: if ((op = *p++) != '+' && op != if (op == '=') equalopdone = 0; +#ifdef VARIANT_LEGACY who &= ~S_ISTXT; +#endif /* VARIANT_LEGACY */ for (perm = 0, permXbits = 0;; ++p) { switch (*p) { case 'r': @@ -267,7 +286,9 @@ getop: if ((op = *p++) != '+' && op != case 't': /* If only "other" bits ignore sticky. */ if (!who || who & ~S_IRWXO) { +#ifdef VARIANT_LEGACY who |= S_ISTXT; +#endif /* VARIANT_LEGACY */ perm |= S_ISTXT; } break; @@ -402,13 +423,14 @@ dumpmode(set) } #endif +#ifndef BUILDING_VARIANT /* * Given an array of bitcmd structures, compress by compacting consecutive * '+', '-' and 'X' commands into at most 3 commands, one of each. The 'u', * 'g' and 'o' commands continue to be separate. They could probably be * compacted, but it's not worth the effort. */ -static void +__private_extern__ void compress_mode(set) BITCMD *set; { @@ -457,3 +479,4 @@ compress_mode(set) } } } +#endif /* BUILDING_VARIANT */ |