Главная страница


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)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 chmod   Igor Shevtsov   31 Jul 2002 20:09:08 
 Re: chmod   Oleg Koreshkov   01 Aug 2002 12:15:27 
 Re: chmod   Eugene Grosbein   01 Aug 2002 16:22:00 
Архивное /ru.unix.bsd/26093082983bf.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional