|
|
ru.unix.bsd- RU.UNIX.BSD ------------------------------------------------------------------ From : Eugene Grosbein 2:5006/1 01 Aug 2002 16:22:00 To : Igor Shevtsov Subject : Re: chmod -------------------------------------------------------------------------------- IS> Как изменить права доступа на ссылку: IS> lrwxr-xr-x .........test->/var/test IS> почитал man сmod, испробовал все комбинации флагов -R -L -H, изменяются IS> права на файд /var/test, а хочется получить: lrwxrwxrwx IS> ........test->/var/test такое вроде должно быть возможным В CURRENT возможно, chmod -h. Кто бы MFC сделал для chmod.c,1.21 ? Приложи патч и у тебя будет: Index: chmod.c =================================================================== RCS file: /home/ncvs/src/bin/chmod/chmod.c,v retrieving revision 1.20 retrieving revision 1.21 diff -u -r1.20 -r1.21 - --- chmod.c 28 May 2001 12:58:10 -0000 1.20 +++ chmod.c 28 May 2001 15:31:11 -0000 1.21 @@ -74,11 +74,12 @@ int vflag; char *ep, *mode; int newmode; + int (*change_mode) __P((const char *, mode_t)); set = NULL; omode = 0; Hflag = Lflag = Pflag = Rflag = fflag = hflag = vflag = 0; - while ((ch = getopt(argc, argv, "HLPRXfgorstuvwx")) != -1) + while ((ch = getopt(argc, argv, "HLPRXfghorstuvwx")) != -1) switch (ch) { case 'H': Hflag = 1; @@ -102,9 +103,10 @@ /* * In System V (and probably POSIX.2) the -h option * causes chmod to change the mode of the symbolic - * link. 4.4BSD's symbolic links don't have modes, - * so it's an undocumented noop. Do syntax checking, - * though. + * link. 4.4BSD's symbolic links didn't have modes, + * so it was an undocumented noop. In FreeBSD 3.0, + * lchmod(2) is introduced and this option does real + * work. */ hflag = 1; break; @@ -148,6 +150,11 @@ } else fts_options = FTS_LOGICAL; + if (hflag) + change_mode = lchmod; + else + change_mode = chmod; + mode = *argv; if (*mode >= '0' && *mode <= '7') { errno = 0; @@ -190,14 +197,17 @@ * don't point to anything and ones that we found * doing a physical walk. */ - continue; + if (!hflag) + continue; + /* else */ + /* FALLTHROUGH */ default: break; } newmode = oct ? omode : getmode(set, p->fts_statp->st_mode); if ((newmode & ALLPERMS) == (p->fts_statp->st_mode & ALLPERMS)) continue; - if (chmod(p->fts_accpath, newmode) && !fflag) { + if ((*change_mode)(p->fts_accpath, newmode) && !fflag) { warn("%s", p->fts_path); rval = 1; } else { @@ -215,6 +225,6 @@ usage() { (void)fprintf(stderr, - "usage: chmod [-fv] [-R [-H | -L | -P]] mode file ...\n"); + "usage: chmod [-fhv] [-R [-H | -L | -P]] mode file ...\n"); exit(1); } Eugene -- "Люди забыли эту истину," - сказал Лис, - "но ты не забывай" --- slrn/0.9.7.4 (FreeBSD) * Origin: Svyaz Service JSC (2:5006/1@fidonet) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.unix.bsd/26093082983bf.html, оценка из 5, голосов 10
|