9fans - fans of the OS Plan 9 from Bell Labs
 help / color / mirror / Atom feed
From: arisawa <arisawa@ar.aichi-u.ac.jp>
To: Fans of the OS Plan 9 from Bell Labs <9fans@9fans.net>
Subject: Re: [9fans] bug in exportfs
Date: Tue, 22 Dec 2015 19:02:55 +0900	[thread overview]
Message-ID: <23396C1E-C0AC-4DC5-B511-97B307ECB3A4@ar.aichi-u.ac.jp> (raw)
In-Reply-To: <CAK9Gx1d3j3jDFFdTwEZv+8p8WJ0h_-dG-HyKGEGCPrToCiEgQQ@mail.gmail.com>

No.

The difficulty is in the pattern matching rule.
If we want to export only /usr/glenda, then the pattern matching filer must pass
/usr
/usr/glenda
and must not pass
/usr/

have you get solution?

> 2015/12/22 18:25、Peter Hull <peterhull90@gmail.com> のメール:
> 
> Mr Arisawa,
> Did you get any answers to this?
> Peter
> 
> 
> On Thu, 17 Dec 2015 at 13:06 arisawa <arisawa@ar.aichi-u.ac.jp> wrote:
> Thanks for your replay.
> however I don’t understand the intention of the manual.
> real needs in exporting is to export some different directories.
> it is impossible to do so under current code.
> can anyone show an example that exports two or more directories?
> 
> > 2015/12/17 20:40、Peter Hull <peterhull90@gmail.com> のメール:
> >
> > On Wed, Dec 16, 2015 at 11:31 PM, arisawa <arisawa@ar.aichi-u.ac.jp> wrote:
> >> It seems cpu command is buggy in -P option.
> >> the sources of the problem is in command option -P of exportfs.
> >
> > I had a look at the manpage for exportfs(4), it says: "For a file to
> > be exported, all lines with a prefix + must match and all those with
> > prefix - must not match." (http://man.9front.org/4/exportfs)
> >
> > So isn't the original code correct according to the manpage? If any of
> > the regexps in 'include' fail to match, the function returns -1, then
> > if any in 'exclude' do match, -1 is returned.
> >
> >> patternfile sample
> >> + /usr/arisawa
> >> + /usr/glenda
> >> - /adm
> >> - /sys/log
> >> - /mail
> >> - /usr/.*
> >>
> > Is this sample invalid - no path could match /usr/arisawa and
> > /usr/glenda at the same time?
> >
> > Pete
> 
> I said:
> 
> > int
> > excludefile(char *path)
> > {
> >       Reprog **re;
> >       char *p;
> >
> >       if(*(path+1) == 0)
> >               p = "/";
> >       else
> >               p = path+1;
> >
> >       DEBUG(DFD, "checking %s\n", p);
> >       for(re = include; *re != nil; re++){
> > -             if(regexec(*re, p, nil, 0) != 1){
> > +             if(regexec(*re, p, nil, 0) == 1){
> >                       DEBUG(DFD, "excluded+ %s\n", p);
> > -                     return -1;
> > +                     return 0;
> >               }
> >       }
> >       for(re = exclude; *re != nil; re++){
> >               if(regexec(*re, p, nil, 0) == 1){
> >                       DEBUG(DFD, "excluded- %s\n", p);
> >                       return -1;
> >               }
> >       }
> >       return 0;
> > }
> >
> >
> > patternfile sample
> > + /usr/arisawa
> > + /usr/glenda
> > - /adm
> > - /sys/log
> > - /mail
> > - /usr/.*
> 
> however this code has still a problem.
> 
> trailing ‘/‘ is removed in p even if p is a directory.
> assume we have users:
> /usr/rob
> and
> /usr/robin
> then we cannot export only /usr/rob.
> if we wish control this problem, we need tailing ‘/‘ for directory.
> then the code should be
> 
> excludefile(char *path)
> {
>         Reprog **re;
>         char *p,*s;
>         Dir *dir;
> 
>         if(*(path+1) == 0)
>                 p = "/";
>         else
>                 p = path+1;
> 
>         s = p + strlen(p) - 1; /* tail */
>         dir = dirstat(p);
>         /* should not be nil */
>         if((dir->mode)&DMDIR){
>                 /* we have room to append '/'
>                 *  look makepath() in exportfs.c */
>                 *++s = '/';
>                 *++s = 0;
>         }
> 
>         DEBUG(DFD, "checking %s\n", p);
>         for(re = include; *re != nil; re++){
>                 if(regexec(*re, p, nil, 0) == 1){
>                         DEBUG(DFD, "excluded+ %s\n", p);
>                         return 0;
>                 }
>         }
>         for(re = exclude; *re != nil; re++){
>                 if(regexec(*re, p, nil, 0) == 1){
>                         DEBUG(DFD, "excluded- %s\n", p);
>                         return -1;
>                 }
>         }
>         return 0;
> }
> 
> then patternfile sample become:
> 
> + /usr/arisawa/.*
> + /usr/glenda/.*
> - /adm/
> - /sys/log/
> - /mail/
> - /usr/.+
> 
> adding tailing ‘/‘ in p makes the pattern file incompatible to existing one.
> I don’t know it is better to do so.
> 
> 
> 




  reply	other threads:[~2015-12-22 10:02 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-12-16 23:31 arisawa
2015-12-17 11:40 ` Peter Hull
2015-12-17 13:05   ` arisawa
2015-12-22  9:25     ` Peter Hull
2015-12-22 10:02       ` arisawa [this message]
2016-02-13 14:26         ` Charles Forsyth
2016-02-14  2:00           ` Prof Brucee
2016-02-14 10:27             ` hiro
2016-02-14 12:21               ` Charles Forsyth
2016-02-14 12:33           ` Charles Forsyth
2016-02-14 16:38             ` cinap_lenrek
2016-02-14 22:57               ` Charles Forsyth
2016-02-15  1:05                 ` arisawa
2016-02-15  6:12                   ` Bruce Ellis
2016-02-15 10:34                   ` Charles Forsyth
2016-02-15 10:55                     ` lucio
2016-02-15 12:08                       ` Charles Forsyth
2016-02-15 12:13                         ` Brantley Coile
2016-02-15 15:05                           ` lucio
2016-02-15 15:24                             ` erik quanstrom
2016-02-15 12:44                         ` lucio
2016-02-15 12:48                           ` Charles Forsyth
2016-02-15 14:03                             ` lucio
2016-02-15 15:38                           ` erik quanstrom
2016-02-15 15:56                             ` Skip Tavakkolian
2016-02-15 12:18                       ` Charles Forsyth
2016-02-15 15:30                     ` erik quanstrom
2016-02-15 23:32                       ` Charles Forsyth
2016-02-19 14:12                   ` Charles Forsyth

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=23396C1E-C0AC-4DC5-B511-97B307ECB3A4@ar.aichi-u.ac.jp \
    --to=arisawa@ar.aichi-u.ac.jp \
    --cc=9fans@9fans.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).