Access control
authorJamie Cameron <jcameron@webmin.com>
Thu, 13 Dec 2007 20:02:12 +0000 (20:02 +0000)
committerJamie Cameron <jcameron@webmin.com>
Thu, 13 Dec 2007 20:02:12 +0000 (20:02 +0000)
24 files changed:
ldap-server/acl_security.pl [new file with mode: 0644]
ldap-server/add_browser.cgi
ldap-server/config-*-linux
ldap-server/config.info
ldap-server/delete_browser.cgi
ldap-server/down_schema.cgi
ldap-server/edit_acl.cgi [new file with mode: 0644]
ldap-server/edit_browser.cgi
ldap-server/edit_schema.cgi
ldap-server/edit_sfile.cgi
ldap-server/edit_slapd.cgi
ldap-server/gencert.cgi
ldap-server/gencert_form.cgi
ldap-server/index.cgi
ldap-server/lang/en
ldap-server/ldap-server-lib.pl
ldap-server/rename_browser.cgi
ldap-server/save_browser.cgi
ldap-server/save_schema.cgi
ldap-server/save_sfile.cgi
ldap-server/save_slapd.cgi
ldap-server/sdelete_browser.cgi
ldap-server/up_schema.cgi
ldap-server/view_sfile.cgi

diff --git a/ldap-server/acl_security.pl b/ldap-server/acl_security.pl
new file mode 100644 (file)
index 0000000..fcdeb43
--- /dev/null
@@ -0,0 +1,23 @@
+
+do 'ldap-server-lib.pl';
+@acl_functions = ( 'slapd', 'schema', 'acl', 'browser', 'create' );
+
+# acl_security_form(&options)
+# Output HTML for editing security options for the acl module
+sub acl_security_form
+{
+foreach my $f (@acl_functions) {
+       print &ui_table_row($text{'acl_'.$f},
+               &ui_yesno_radio($f, $_[0]->{$f}));
+       }
+}
+
+# acl_security_save(&options)
+# Parse the form for security options for the acl module
+sub acl_security_save
+{
+foreach my $f (@acl_functions) {
+       $_[0]->{$f} = $in{$f};
+       }
+}
+
index 24d33cd..d9309d5 100644 (file)
@@ -3,6 +3,7 @@
 
 require './ldap-server-lib.pl';
 &error_setup($text{'add_err'});
+$access{'browser'} || &error($text{'browser_ecannot'});
 &ReadParse();
 $ldap = &connect_ldap_db();
 ref($ldap) || &error($ldap);
index 4b3c236..887eda7 100644 (file)
@@ -1,3 +1,4 @@
 config_file=/etc/ldap/slapd.conf
 schema_dir=/etc/ldap/schema
 slapd=slapd
+ldap_user=ldap
index 390c54c..ff1883b 100644 (file)
@@ -7,6 +7,7 @@ ssl=Use TLS encryption with LDAP server?,1,-Detect automatically,1-Yes,0-No
 slapd=Full path to OpenLDAP server program,8
 config_file=OpenLDAP server configuration file,8
 schema_dir=OpenLDAP schema directory,7
+ldap_user=User OpenLDAP server runs as,5
 
 line2=User interface settings,11
 browse_max=Maximum number of sub-objects to display,3,Unlimited
index afeb448..e33de69 100644 (file)
@@ -3,6 +3,7 @@
 
 require './ldap-server-lib.pl';
 &error_setup($text{'delete_err'});
+$access{'browser'} || &error($text{'browser_ecannot'});
 &ReadParse();
 $ldap = &connect_ldap_db();
 ref($ldap) || &error($ldap);
index 5fd3584..3edafe1 100644 (file)
@@ -3,6 +3,7 @@
 
 require './ldap-server-lib.pl';
 &local_ldap_server() == 1 || &error($text{'slapd_elocal'});
+$access{'schema'} || &error($text{'schema_ecannot'});
 &ReadParse();
 
 # Find it includes
diff --git a/ldap-server/edit_acl.cgi b/ldap-server/edit_acl.cgi
new file mode 100644 (file)
index 0000000..b87f0f5
--- /dev/null
@@ -0,0 +1,9 @@
+#!/usr/local/bin/perl
+# Show access control settings from config
+
+require './ldap-server-lib.pl';
+&local_ldap_server() == 1 || &error($text{'slapd_elocal'});
+$access{'acl'} || &error($text{'acl_ecannot'});
+&ui_print_header(undef, $text{'acl_title'}, "", "acl");
+
+
index a90e9db..b0faec0 100755 (executable)
@@ -3,6 +3,7 @@
 
 require './ldap-server-lib.pl';
 &ui_print_header(undef, $text{'browser_title'}, "", "browser");
+$access{'browser'} || &error($text{'browser_ecannot'});
 &ReadParse();
 
 # Connect to LDAP server, or die trying
index b805f57..7c7d41a 100644 (file)
@@ -3,6 +3,7 @@
 
 require './ldap-server-lib.pl';
 &local_ldap_server() == 1 || &error($text{'slapd_elocal'});
+$access{'schema'} || &error($text{'schema_ecannot'});
 &ui_print_header(undef, $text{'schema_title'}, "", "schema");
 &ReadParse();
 
index c3ee9db..d8ac820 100644 (file)
@@ -3,6 +3,7 @@
 
 require './ldap-server-lib.pl';
 &local_ldap_server() == 1 || &error($text{'slapd_elocal'});
+$access{'schema'} || &error($text{'schema_ecannot'});
 &ReadParse();
 &is_under_directory($config{'schema_dir'}, $in{'file'}) ||
        &error($text{'schema_edir'});
index fed7d1d..8e8f740 100644 (file)
@@ -3,6 +3,7 @@
 
 require './ldap-server-lib.pl';
 &local_ldap_server() == 1 || &error($text{'slapd_elocal'});
+$access{'slapd'} || &error($text{'slapd_ecannot'});
 &ui_print_header(undef, $text{'slapd_title'}, "", "slapd");
 &ReadParse();
 $conf = &get_config();
index c20fd01..0a93364 100644 (file)
@@ -3,6 +3,7 @@
 
 require './ldap-server-lib.pl';
 &local_ldap_server() == 1 || &error($text{'slapd_elocal'});
+$access{'slapd'} || &error($text{'slapd_ecannot'});
 &foreign_require("webmin", "webmin-lib.pl");
 &ReadParse();
 &error_setup($text{'gencert_err'});
@@ -21,9 +22,14 @@ else {
        }
 
 # Do it
-$err = &webmin::parse_ssl_key_form(\%in, $keyfile, $certfile);
+$err = &webmin::parse_ssl_key_form(\%in, $keyfile,
+                                  $certfile eq $keyfile ? undef : $certfile);
 &error($err) if ($err);
 
+# Make readable by LDAP user
+&set_ownership_permissions($config{'ldap_user'}, undef, undef,
+                          $keyfile, $certfile);
+
 # Update config to use them
 &lock_file($config{'config_file'});
 &save_directive($conf, "TLSCertificateFile", $certfile);
index 7232713..9b36cc1 100644 (file)
@@ -3,6 +3,7 @@
 
 require './ldap-server-lib.pl';
 &local_ldap_server() == 1 || &error($text{'slapd_elocal'});
+$access{'slapd'} || &error($text{'slapd_ecannot'});
 &foreign_require("webmin", "webmin-lib.pl");
 
 &ui_print_header(undef, $text{'gencert_title'}, "");
index cda2522..e313bc1 100644 (file)
@@ -41,8 +41,9 @@ if ($local) {
        }
 else {
        # Just browser and DN creator?
-       @pages = ( "browse", "create" );
+       @pages = ( "browser", "create" );
        }
+@pages = grep { $access{$_} } @pages;
 @links = map { "edit_".$_.".cgi" } @pages;
 @titles = map { $text{$_."_title"} } @pages;
 @icons = map { "images/$_.gif" } @pages;
index 38c37e4..10309e5 100644 (file)
@@ -63,6 +63,7 @@ slapd_eca=Missing or incorrectly formatted TLS CA certificate file
 slapd_gencert=Generate SSL Certificate
 slapd_gencertdesc=To run your LDAP server in TLS mode, an SSL certificate and private key must first be generated. Click this button to create a self-signed certificate for your system.
 slapd_gencertwarn=Warning - your existing certificate will no longer be used.
+slapd_elocal=You are not allowed to configure the LDAP server
 
 schema_title=Manage Schema
 schema_file=Name
@@ -80,11 +81,14 @@ schema_path=Full filename
 schema_edesc=This page allows you to manually edit an LDAP schema file. This should only be done if you are familiar with the file format, as no checking is done by Webmin.
 schema_return=schema list
 schema_emove=Could not find schema file to move!
+schema_ecannot=You are not allowed to manage the LDAP schema
 
 acl_title=LDAP Access Control
+acl_ecannot=You are not allowed to configure LDAP access control
 
 browser_title=Browse Database
 browser_econn=The LDAP browser cannot be used : $1
+browser_ecannot=You are not allowed to browse the LDAP database
 browser_base=Browsing:
 browser_ok=Show
 browser_esearch=LDAP search failed : $1
@@ -201,3 +205,9 @@ gencert_same=Current config files
 gencert_dir=Directory
 gencert_err=Failed to generate certificate
 gencert_edest=Destination directory does not exist
+
+acl_slapd=Can configure LDAP server?
+acl_schema=Can manage schema?
+acl_acl=Can edit access control?
+acl_browser=Can browse and edit database?
+acl_create=Can create new tree?
index 3a3ebc9..c2d4600 100644 (file)
@@ -3,8 +3,6 @@
 # XXX initial setup
 # XXX install ldap server
 # XXX default configs for various systems (include search max of 100)
-# XXX LDAP logging in more detail, like we do for SQL
-#      XXX spam, postfix and ldap-useradmin too
 
 do '../web-lib.pl';
 &init_config();
index c8124fe..437d369 100755 (executable)
@@ -3,6 +3,7 @@
 
 require './ldap-server-lib.pl';
 &error_setup($text{'rename_err'});
+$access{'browser'} || &error($text{'browser_ecannot'});
 &ReadParse();
 $ldap = &connect_ldap_db();
 ref($ldap) || &error($ldap);
index 47133bf..a3279b5 100644 (file)
@@ -3,6 +3,7 @@
 
 require './ldap-server-lib.pl';
 &error_setup($text{'save_err'});
+$access{'browser'} || &error($text{'browser_ecannot'});
 &ReadParse();
 $ldap = &connect_ldap_db();
 ref($ldap) || &error($ldap);
index 002a000..b424192 100644 (file)
@@ -3,6 +3,7 @@
 
 require './ldap-server-lib.pl';
 &error_setup($text{'schema_err'});
+$access{'schema'} || &error($text{'schema_ecannot'});
 &local_ldap_server() == 1 || &error($text{'slapd_elocal'});
 &ReadParse();
 
index 7671f3a..e1fa3f0 100644 (file)
@@ -2,11 +2,12 @@
 # Write out a schema file
 
 require './ldap-server-lib.pl';
+&error_setup($text{'schema_eerr'});
 &local_ldap_server() == 1 || &error($text{'slapd_elocal'});
+$access{'schema'} || &error($text{'schema_ecannot'});
 &ReadParseMime();
 
 # Validate
-&error_setup($text{'schema_eerr'});
 &is_under_directory($config{'schema_dir'}, $in{'file'}) ||
        &error($text{'schema_edir'});
 $in{'data'} =~ s/\r//g;
index a343e90..c5834ae 100644 (file)
@@ -3,6 +3,7 @@
 
 require './ldap-server-lib.pl';
 &error_setup($text{'slapd_err'});
+$access{'slapd'} || &error($text{'slapd_ecannot'});
 &local_ldap_server() == 1 || &error($text{'slapd_elocal'});
 &ReadParse();
 
index e7830ac..d067c38 100644 (file)
@@ -3,6 +3,7 @@
 
 require './ldap-server-lib.pl';
 &error_setup($text{'sdelete_err'});
+$access{'browser'} || &error($text{'browser_ecannot'});
 &ReadParse();
 $ldap = &connect_ldap_db();
 ref($ldap) || &error($ldap);
index 6fa0f23..ae47747 100644 (file)
@@ -3,6 +3,7 @@
 
 require './ldap-server-lib.pl';
 &local_ldap_server() == 1 || &error($text{'slapd_elocal'});
+$access{'schema'} || &error($text{'schema_ecannot'});
 &ReadParse();
 
 # Find it includes
index daf4b59..99455e1 100644 (file)
@@ -3,6 +3,7 @@
 
 require './ldap-server-lib.pl';
 &local_ldap_server() == 1 || &error($text{'slapd_elocal'});
+$access{'schema'} || &error($text{'schema_ecannot'});
 &ReadParse();
 &is_under_directory($config{'schema_dir'}, $in{'file'}) ||
        &error($text{'schema_edir'});