From 72b551f6b0c6f0ccddbe288e4e02262d5670c08e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakobus=20Sch=C3=BCrz?= Date: Wed, 31 Jul 2019 11:58:39 +0200 Subject: [PATCH] if only a username is given on init, it is used as principal. no pubkey-handling --- gitosis/init.py | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/gitosis/init.py b/gitosis/init.py index 28e7871..ec7fa58 100644 --- a/gitosis/init.py +++ b/gitosis/init.py @@ -6,6 +6,7 @@ import errno import logging import os import sys +import re from pkg_resources import resource_filename from cStringIO import StringIO @@ -32,19 +33,28 @@ class InsecureSSHKeyUsername(Exception): return '%s: %s' % (self.__doc__, ': '.join(self.args)) def ssh_extract_user(pubkey): - _, user = pubkey.rsplit(None, 1) + if re.search(r"\s", pubkey) + _, user = pubkey.rsplit(None, 1) + else: + user = pubkey if ssh.isSafeUsername(user): return user else: raise InsecureSSHKeyUsername(repr(user)) def initial_commit(git_dir, cfg, pubkey, user): + if pubkey is None: + keyfile = 'keydir/principals' + content = user + else: + keyfile = 'keydir/%s.pub' % user + content = pubkey repository.fast_import( git_dir=git_dir, commit_msg='Automatic creation of gitosis repository.', committer='Gitosis Admin <%s>' % user, files=[ - ('keydir/%s.pub' % user, pubkey), + (keyfile, content), ('gitosis.conf', cfg), ], ) @@ -124,6 +134,8 @@ class Main(app.App): log.info('Reading SSH public key...') pubkey = read_ssh_pubkey() user = ssh_extract_user(pubkey) + if not re.search(r"\s", pubkey) + pubkey = None if user is None: log.error('Cannot parse user from SSH public key.') sys.exit(1)