aboutsummaryrefslogtreecommitdiff
path: root/rp/config/rpki-manage
diff options
context:
space:
mode:
Diffstat (limited to 'rp/config/rpki-manage')
-rwxr-xr-xrp/config/rpki-manage46
1 files changed, 46 insertions, 0 deletions
diff --git a/rp/config/rpki-manage b/rp/config/rpki-manage
new file mode 100755
index 00000000..ac3cc967
--- /dev/null
+++ b/rp/config/rpki-manage
@@ -0,0 +1,46 @@
+#!/usr/bin/env python
+
+# Using a Python script to run sudo to run a Python script is a bit
+# silly, but it lets us use rpki.autoconf to locate sudo, lets us
+# avoid needing a custom setuid wrapper, lets us avoid another pass
+# through the adventures of shell quoting and tokenization, and
+# generally is just a lot simpler to implement correctly.
+#
+# OK, it's probably a few milliseconds slower. Big deal.
+
+if __name__ == "__main__":
+
+ import os
+ import pwd
+ import sys
+ import rpki.autoconf
+
+ try:
+ uid = pwd.getpwnam(rpki.autoconf.RPKI_USER).pw_uid
+ except:
+ uid = None
+
+ if uid is None or uid == os.geteuid():
+
+ # django-admin seems to have problems creating the superuser account when
+ # $LANG is unset or is set to something totally incompatible with UTF-8.
+
+ if os.environ.get("LANG") in (None, "", "C"):
+ os.environ["LANG"] = "en_US.UTF-8"
+
+ os.environ.setdefault("DJANGO_SETTINGS_MODULE", "rpki.django_settings.gui")
+
+ from django.core.management import execute_from_command_line
+
+ execute_from_command_line()
+
+ else:
+
+ try:
+ argv = [rpki.autoconf.SUDO, "-u", rpki.autoconf.RPKI_USER, sys.executable]
+ argv.extend(os.path.abspath(a) if i == 0 else a for i, a in enumerate(sys.argv))
+ os.execv(argv[0], argv)
+ sys.exit("rpki-manage startup failure, no exception so don't know why, sorry")
+
+ except Exception as e:
+ sys.exit("Couldn't exec sudo python rpki-manage: {!s}".format(e))