Skip to content

Commit 50e5844

Browse files
committed
manually merge PR76
git-svn-id: svn+ssh://svn.code.sf.net/p/migrid/code/trunk@6087 b75ad72c-e7d7-11dd-a971-7dbc132099af
1 parent cd0a720 commit 50e5844

File tree

7 files changed

+52
-5
lines changed

7 files changed

+52
-5
lines changed

mig/install/MiGserver-template.conf

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,11 @@ auto_add_filter_fields = __AUTO_ADD_FILTER_FIELDS__
2525
# default is to skip each such character. Other valid options include hexlify
2626
# to encode each such character with the corresponding hex codepoint.
2727
auto_add_filter_method = __AUTO_ADD_FILTER_METHOD__
28+
# Optional limit on users who may sign up through autocreate without operator
29+
# interaction. Defaults to allow ANY distinguished name if unset but only for
30+
# auth methods explicitly enabled with auto_add_X_user. Space separated list of
31+
# user field and regexp-filter pattern pairs separated by colons.
32+
auto_add_user_permit = __AUTO_ADD_USER_PERMIT__
2833
# Default account expiry unless set. Renew and web login extends by default.
2934
cert_valid_days = __CERT_VALID_DAYS__
3035
oid_valid_days = __OID_VALID_DAYS__

mig/install/generateconfs.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ def usage(options):
7070
'destination_suffix',
7171
'auto_add_filter_fields',
7272
'auto_add_filter_method',
73+
'auto_add_user_permit',
7374
'base_fqdn',
7475
'public_fqdn',
7576
'public_alias_fqdn',

mig/shared/accountreq.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
# --- BEGIN_HEADER ---
55
#
66
# accountreq - helpers for certificate/OpenID account requests
7-
# Copyright (C) 2003-2023 The MiG Project lead by Brian Vinter
7+
# Copyright (C) 2003-2024 The MiG Project lead by Brian Vinter
88
#
99
# This file is part of MiG.
1010
#
@@ -1243,6 +1243,17 @@ def user_manage_commands(configuration, mig_user, req_path, user_id, user_dict,
12431243
return cmd_helpers
12441244

12451245

1246+
def auto_add_user_allowed(configuration, user_dict):
1247+
"""Check if user with user_dict is allowed to sign up without operator
1248+
approval e.g. using autocreate based on optional configuration limits.
1249+
"""
1250+
1251+
for (key, val) in configuration.auto_add_user_permit:
1252+
if not re.match(val, user_dict.get(key, 'NO SUCH FIELD')):
1253+
return False
1254+
return True
1255+
1256+
12461257
def peers_permit_allowed(configuration, user_dict):
12471258
"""Check if user with user_dict is allowed to manage peers based on
12481259
optional configuration limits.

mig/shared/configuration.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,7 @@ def fix_missing(config_file, verbose=True):
137137
'auto_add_oid_user': False,
138138
'auto_add_oidc_user': False,
139139
'auto_add_resource': False,
140+
'auto_add_user_permit': 'distinguished_name:.*',
140141
'auto_add_filter_method': '',
141142
'auto_add_filter_fields': '',
142143
'server_fqdn': fqdn,
@@ -670,6 +671,7 @@ class Configuration:
670671
auto_add_oid_user = False
671672
auto_add_oidc_user = False
672673
auto_add_resource = False
674+
auto_add_user_permit = [('distinguished_name', '.*')]
673675
auto_add_filter_method = ''
674676
auto_add_filter_fields = []
675677

@@ -2524,6 +2526,12 @@ def reload_config(self, verbose, skip_log=False):
25242526
if config.has_option('GLOBAL', 'auto_add_resource'):
25252527
self.auto_add_resource = config.getboolean('GLOBAL',
25262528
'auto_add_resource')
2529+
# Limit sign up without operator interaction using ID fields regex.
2530+
# For autocreate auto_add_X_user must be True and auto_add_user_permit
2531+
# specification must match actual user on all given fields.
2532+
if config.has_option('GLOBAL', 'auto_add_user_permit'):
2533+
req = config.get('GLOBAL', 'auto_add_user_permit').split()
2534+
self.auto_add_user_permit = [i.split(':', 2) for i in req]
25272535

25282536
# Apply requested automatic filtering of selected auto add user fields
25292537
if config.has_option('GLOBAL', 'auto_add_filter_method'):

mig/shared/functionality/autocreate.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
import time
4545

4646
from mig.shared import returnvalues
47+
from mig.shared.accountreq import auto_add_user_allowed
4748
from mig.shared.accountstate import default_account_expire
4849
from mig.shared.bailout import filter_output_objects
4950
from mig.shared.base import client_id_dir, canonical_user, mask_creds, \
@@ -725,6 +726,16 @@ def main(client_id, user_arguments_dict, environ=None):
725726
configuration.auto_add_oidc_user:
726727
fill_user(user_dict)
727728

729+
if not auto_add_user_allowed(configuration, user_dict):
730+
logger.warning('autocreate not permitted for %s' % client_id)
731+
output_objects.append({
732+
'object_type': 'error_text', 'text':
733+
"""Your credentials do not fit the automatic account sign up
734+
criteria permitted on this site.
735+
Please contact the %(short_title)s support (%(support_email)s) if you think it
736+
should be enabled.""" % fill_helper})
737+
return (output_objects, returnvalues.ERROR)
738+
728739
# IMPORTANT: do NOT log credentials
729740
logger.info('create user: %s' % mask_creds(user_dict))
730741

mig/shared/install.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,7 @@ def generate_confs(
238238
auto_add_oidc_user=False,
239239
auto_add_filter_fields='',
240240
auto_add_filter_method='skip',
241+
auto_add_user_permit='distinguished_name:.*',
241242
cert_valid_days=365,
242243
oid_valid_days=365,
243244
oidc_valid_days=365,
@@ -503,6 +504,7 @@ def generate_confs(
503504
user_dict['__AUTO_ADD_OIDC_USER__'] = "%s" % auto_add_oidc_user
504505
user_dict['__AUTO_ADD_FILTER_FIELDS__'] = auto_add_filter_fields
505506
user_dict['__AUTO_ADD_FILTER_METHOD__'] = auto_add_filter_method
507+
user_dict['__AUTO_ADD_USER_PERMIT__'] = auto_add_user_permit
506508
user_dict['__CERT_VALID_DAYS__'] = "%s" % cert_valid_days
507509
user_dict['__OID_VALID_DAYS__'] = "%s" % oid_valid_days
508510
user_dict['__OIDC_VALID_DAYS__'] = "%s" % oidc_valid_days
@@ -946,7 +948,8 @@ def generate_confs(
946948
sys_timezone = None
947949
try:
948950
timezone_cmd = ["/usr/bin/timedatectl", "status"]
949-
timezone_proc = subprocess_popen(timezone_cmd, stdout=subprocess_pipe)
951+
timezone_proc = subprocess_popen(
952+
timezone_cmd, stdout=subprocess_pipe)
950953
for line in timezone_proc.stdout.readlines():
951954
line = ensure_native_string(line.strip())
952955
if not line.startswith("Time zone: "):
@@ -964,11 +967,13 @@ def generate_confs(
964967
user_dict['__SEAFILE_TIMEZONE__'] = timezone
965968

966969
if seafile_secret == keyword_auto:
967-
seafile_secret = ensure_native_string(base64.b64encode(os.urandom(32))).lower()
970+
seafile_secret = ensure_native_string(
971+
base64.b64encode(os.urandom(32))).lower()
968972
user_dict['__SEAFILE_SECRET_KEY__'] = seafile_secret
969973

970974
if seafile_ccnetid == keyword_auto:
971-
seafile_ccnetid = ensure_native_string(base64.b64encode(os.urandom(20))).lower()
975+
seafile_ccnetid = ensure_native_string(
976+
base64.b64encode(os.urandom(20))).lower()
972977
user_dict['__SEAFILE_CCNET_ID__'] = seafile_ccnetid
973978

974979
user_dict['__SEAFILE_SHORT_NAME__'] = short_title.replace(' ', '-')
@@ -1742,7 +1747,6 @@ def generate_confs(
17421747
crypto_salt = ensure_native_string(base64.b16encode(os.urandom(16)))
17431748
user_dict['__CRYPTO_SALT__'] = crypto_salt
17441749

1745-
17461750
# Greedy match trailing space for all the values to uncomment stuff
17471751
strip_trailing_space = ['__IF_SEPARATE_PORTS__', '__APACHE_PRE2.4__',
17481752
'__APACHE_RECENT__']
@@ -2164,6 +2168,7 @@ def create_user(
21642168
auto_add_oidc_user = False
21652169
auto_add_filter_fields = ''
21662170
auto_add_filter_method = 'skip'
2171+
auto_add_user_permit = 'distinguished_name:.*'
21672172
cert_valid_days = 365
21682173
oid_valid_days = 365
21692174
oidc_valid_days = 365
@@ -2310,6 +2315,7 @@ def create_user(
23102315
auto_add_oidc_user,
23112316
auto_add_filter_fields,
23122317
auto_add_filter_method,
2318+
auto_add_user_permit,
23132319
cert_valid_days,
23142320
oid_valid_days,
23152321
oidc_valid_days,

tests/fixture/confs-stdlocal/MiGserver.conf

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,11 @@ auto_add_filter_fields =
2525
# default is to skip each such character. Other valid options include hexlify
2626
# to encode each such character with the corresponding hex codepoint.
2727
auto_add_filter_method = skip
28+
# Optional limit on users who may sign up through autocreate without operator
29+
# interaction. Defaults to allow ANY distinguished name if unset but only for
30+
# auth methods explicitly enabled with auto_add_X_user. Space separated list of
31+
# user field and regexp-filter pattern pairs separated by colons.
32+
auto_add_user_permit = distinguished_name:.*
2833
# Default account expiry unless set. Renew and web login extends by default.
2934
cert_valid_days = 365
3035
oid_valid_days = 365

0 commit comments

Comments
 (0)