Newbie questions about Pliant

Newbie questions about Pliant

Database engine

Message posted by maybe Marcus on 2002/01/20 04:17:37
The following Pliant code defines my database  in a .pli file

module "/pliant/appli/database.pli"

public

type Record
  field Str name
  field Str number

type RecordDb
  field Set:Record entry

gvar Database:RecordDb db
 
db load "/travelLog/simpleDB.pdb"

gvar (Data Set:Record) entry :> db:data:entry
-------------------------------------------------------------------
And the following code tests it:

module "simple.pli"
module "/pliant/fullpliant/user.pli"

var Str id := generate_id
entry create id
-------------------------------------------------------------------
Why my program does not compile if I remove the 'public' instruction in the 
.pli code. What is semantics of this instruction?


Message posted by maybe Patrice Ossona de Mendez on 2002/01/20 09:39:48
Any module has an internal and a public part. Anything which is put in the public
part may be used when linking to the module using a 'module "xxx.pli"' instruction.
The 'public' keyword may be used in two ways:

public
  # indented bloc         ---> the bloc will be 'exported' in the public part

public                    ---> anything will be public from here
# the code continues
# without indentation

The dual keyword is "private". In a module, anything is private by default.

Last, there is another keyword that leads to 'public exportation':

export id  --> only exports the identificator(s) "id".

Message posted by maybe Marcus on 2002/01/21 12:42:06
In the course I am teaching (as some of you know, I use Pliant), I have one
Pliant HTTP server daemon running and softlinks from my students's accounts to 
the Pliant tree. Their accounts have been set up in a way that they do not have
writing permissions outside their root directory (in our labs). 

Now it's time to introduce them to the Pliant database engine. 

In their project, I ask them to implement a site whose access is password 
protected. Since they do not have access to the pliant_security directory, I 
wonder if there is a simple way to circumvent this limitation.

A sanity check: consequently they could not use http_authentification_request 
and the handy allowed method, right?

Message posted by maybe Hubert Tonneau on 2002/01/21 14:03:45
Here is the summary of what I've understood (please post if it's not correct):

You have a 'pliant' user defined on your 'students.school.org' system.
The Pliant tree is installed in /home/pliant/pliant/
So, the Pliant HTTP server security files are stored in /home/pliant/pliant_security/

Let's assuming that you have a student called 'bob',
then there is a symlink from /home/pliant/pliant/bob/ to /home/bob/pliant/bob/
As a result, through the HTTP server, the URL
http://students.school.org/bob/ is executing /home/bob/pliant/bob/index.page

Now, 'bob' user cannot read the HTTP server accounting files, since it belongs
to 'pliant' user at OS level.
The only serious security flow is that 'bob' car read it through writting a
.page that would be something like:
  module "/pliant/admin/file.pli"
  file_copy ...

So, we simply have to prevent the .page files outside /pliant/ to load extra
modules.
Message posted by maybe ingo.hohmann on 2002/01/21 16:59:27
If I understand it correctly:
- you want your students to have full access to the whole pliant system
- your students don't have right access to anything outside their own user
  directories
- the one server running somewhere accesses the data in the users directories
  through "filesystem system level" links
- Your students work only through pliants web interface

Your question is:
How can the students read/add rights the server uses, when they aren't able
to access the pliant_security directory which stores this data?

If I am right so far, then there is no problem: your students don't have to
access this directory, it is always the pliant server which accesses this 
data, and the server has the access rights.

Of course your students can't meddle with the text of the database through some
editor, but if they get administrator access can change / add / rights in the
database through the admin interface.

Of course this might be a bad idea, because they have access to everything the
pliant server has access to, if it ran as root, everything would be possible,
if it runs as a different non-provileged user they don't have much more rights
than with their own accounts.

You may want to have a look at the updated "Admin Interface" patch on the 
code list, I have added the possibility for users to add their own data, maybe
you want to use a similar scheme to give your students access to a subset of 
the admin features. (/pliant/fullpliant/user.page and user-admin.page)

kind regards,

Ingo
Message posted by maybe Marcus on 2002/01/21 17:11:50
It is basically that (Hubert).

 However, it seems that the system administrator has set up the file permissions
 in a very restrictive way. For instance, I could not delete a file from my own
 directory. Next is my program (.page) and its respective URL.

 module "/pliant/admin/file.pli" 
 text "Before deletion" ;eol 
 var Array:FileInfo f:= (file_list "/people/m3santos/" directories) 
 for (var Int i) 0 f:size-1 
   text f:i:name;eol 
 eol 
 file_delete "/people/m3santos/s.cm" 
 text "After deletion";eol 
 var Array:FileInfo f:= (file_list "/people/m3santos/" directories) 
 for (var Int i) 0 f:size-1 
   text f:i:name;eol 
 ---------------------------------
 http://leda.scs.ryerson.ca:8080/people/m3santos/test.html
Message posted by maybe Marcus on 2002/01/21 17:24:14
It is basically that (Hubert).

 However, it seems that the system administrator has set up the file permissions
 in a very restrictive way. For instance, I could not delete a file from my own
 directory. Next is my program (.page) and its respective URL.

 module "/pliant/admin/file.pli" 
 text "Before deletion" ;eol 
 var Array:FileInfo f:= (file_list "/people/m3santos/" directories) 
 for (var Int i) 0 f:size-1 
   text f:i:name;eol 
 eol 
 file_delete "/people/m3santos/s.cm" 
 text "After deletion";eol 
 var Array:FileInfo f:= (file_list "/people/m3santos/" directories) 
 for (var Int i) 0 f:size-1 
   text f:i:name;eol 
 ---------------------------------
 http://leda.scs.ryerson.ca:8080/people/m3santos/test.html
Message posted by maybe Alan Grimes on 2002/01/21 17:51:54
How the fuck do I get off this list? I came in here a month or so ago and tried to unsubscribe. Apparently I failed and put it off..
But now the trafic volume has reached biblical proportions and getting off has become a priority....

I am probably registered with the user name "AlonzoTG"...
Message posted by maybe Marcus on 2002/01/21 19:36:42
> If I am right so far, then there is no problem: your students don't have to
> access this directory, it is always the pliant server which accesses this 
> data, and the server has the access rights.

However, suppose I ask them to implement their own password secured site. 

They would have to implement their own user management application and 
respective user db file (since they cannont access pliant_security).

Is that right?
Message posted by maybe Hubert Tonneau on 2002/01/21 19:47:18
What your students can access when they are logged in the Pliant HTTP server
is very different from what they can access when they are logged in a Unix
shell:

. what they can access when they are logged in the Pliant HTTP server is:
  everything the operating system user that lauched the Pliant HTTP server
  can access,
  . minus nothing if they are allowed to load modules in their .page files
    residing in their home Unix level directory
  . minus what you decide (also this is not prooved) if you prevent them
    to load modules (using release 71 features)
. what they can access when they are logged in a Unix shell is governed by
  standard Unix rights.

So, if they have a file in their operating system home directory, they can
modify (or delete it) using a Unix text editor, but cannot change it using
Pliant HTTP server files browser.
On the other hand, if their application files stand within Pliant HTTP server
tree (created with the Pliant HTTP server file browser), they cannot modify
it using a standard Unix editor, also this configuration is less surered because
one student might manage to bypass Pliant HTTP server security (through
something like managing to load new modules) and get read write access to
other students application files within the HTTP server tree.
Your student don't need to access the Pliant HTTP server /pliant_security/
directory: if the HTTP server can acces it, it's just fine. They will create
or manage accounts using Pliant HTTP server instructions (also a student that
has access to Pliant accounts database can gain full access to the HTTP
server, so it's not recommended).