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: Thu, 17 Dec 2015 22:05:45 +0900	[thread overview]
Message-ID: <5E232682-7ABD-4564-96C1-89B1540FC4E2@ar.aichi-u.ac.jp> (raw)
In-Reply-To: <CAK9Gx1c0YgDawi59=mct2BsZvNrKFLimACJ0GF2SKY9Ja+QBzQ@mail.gmail.com>

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-17 13:05 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 [this message]
2015-12-22  9:25     ` Peter Hull
2015-12-22 10:02       ` arisawa
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=5E232682-7ABD-4564-96C1-89B1540FC4E2@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).