arvados-login-sync 0.1.20150826190127
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/bin/arvados-login-sync +111 -0
- metadata +66 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: d5ca2a17e2809f01578a17f24bfbb2204eecf651
|
4
|
+
data.tar.gz: 7433cbefa9070c125bec912f0128888b9e2dfe7f
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 642f83b3c06d635180e3f5e65cfaa20f074b3f4c82e3e42bc8dd9d5903caa507f151faf6c6a008d9647fc1b5ecc37aca9dcf6c43c47420c27a7ca9e7f12ae926
|
7
|
+
data.tar.gz: dd3182d606d642cd1cab5c19ca2c38f30024418e0eaa05fd7a4b7afca2d4657032269e4c75b974269863d5e6be2253cf1daacd4c66ed923ec96cb4baa5139e71
|
@@ -0,0 +1,111 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'pp'
|
5
|
+
require 'arvados'
|
6
|
+
require 'etc'
|
7
|
+
require 'fileutils'
|
8
|
+
require 'yaml'
|
9
|
+
|
10
|
+
req_envs = %w(ARVADOS_API_HOST ARVADOS_API_TOKEN ARVADOS_VIRTUAL_MACHINE_UUID)
|
11
|
+
req_envs.each do |k|
|
12
|
+
unless ENV[k]
|
13
|
+
abort "Fatal: These environment vars must be set: #{req_envs}"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
keys = ''
|
18
|
+
|
19
|
+
seen = Hash.new
|
20
|
+
|
21
|
+
begin
|
22
|
+
uids = Hash[Etc.to_enum(:passwd).map { |ent| [ent.name, ent.uid] }]
|
23
|
+
gids = Hash[Etc.to_enum(:group).map { |ent| [ent.name, ent.gid] }]
|
24
|
+
arv = Arvados.new({ :suppress_ssl_warnings => false })
|
25
|
+
|
26
|
+
vm_uuid = ENV['ARVADOS_VIRTUAL_MACHINE_UUID']
|
27
|
+
|
28
|
+
logins = arv.virtual_machine.logins(:uuid => vm_uuid)[:items]
|
29
|
+
logins = [] if logins.nil?
|
30
|
+
logins = logins.reject { |l| l[:username].nil? or l[:hostname].nil? or l[:public_key].nil? or l[:virtual_machine_uuid] != vm_uuid }
|
31
|
+
|
32
|
+
# No system users
|
33
|
+
uid_min = 1000
|
34
|
+
open("/etc/login.defs", encoding: "utf-8") do |login_defs|
|
35
|
+
login_defs.each_line do |line|
|
36
|
+
next unless match = /^UID_MIN\s+(\S+)$/.match(line)
|
37
|
+
if match[1].start_with?("0x")
|
38
|
+
base = 16
|
39
|
+
elsif match[1].start_with?("0")
|
40
|
+
base = 8
|
41
|
+
else
|
42
|
+
base = 10
|
43
|
+
end
|
44
|
+
new_uid_min = match[1].to_i(base)
|
45
|
+
uid_min = new_uid_min if (new_uid_min > 0)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
logins.reject! { |l| (uids[l[:username]] || 65535) < uid_min }
|
49
|
+
|
50
|
+
keys = Hash.new()
|
51
|
+
|
52
|
+
# Collect all keys
|
53
|
+
logins.each do |l|
|
54
|
+
keys[l[:username]] = Array.new() if not keys.has_key?(l[:username])
|
55
|
+
key = l[:public_key]
|
56
|
+
# Handle putty-style ssh public keys
|
57
|
+
key.sub!(/^(Comment: "r[^\n]*\n)(.*)$/m,'ssh-rsa \2 \1')
|
58
|
+
key.sub!(/^(Comment: "d[^\n]*\n)(.*)$/m,'ssh-dss \2 \1')
|
59
|
+
key.gsub!(/\n/,'')
|
60
|
+
key.strip
|
61
|
+
|
62
|
+
keys[l[:username]].push(key) if not keys[l[:username]].include?(key)
|
63
|
+
end
|
64
|
+
|
65
|
+
seen = Hash.new()
|
66
|
+
devnull = open("/dev/null", "w")
|
67
|
+
|
68
|
+
logins.each do |l|
|
69
|
+
next if seen[l[:username]]
|
70
|
+
seen[l[:username]] = true if not seen.has_key?(l[:username])
|
71
|
+
@homedir = "/home/#{l[:username]}"
|
72
|
+
|
73
|
+
unless uids[l[:username]]
|
74
|
+
STDERR.puts "Creating account #{l[:username]}"
|
75
|
+
groups = l[:groups] || []
|
76
|
+
# Adding users to the FUSE group has long been hardcoded behavior.
|
77
|
+
groups << "fuse"
|
78
|
+
groups.select! { |name| gids[name] }
|
79
|
+
# Create new user
|
80
|
+
next unless system("useradd", "-m",
|
81
|
+
"-c", l[:username],
|
82
|
+
"-s", "/bin/bash",
|
83
|
+
"-G", groups.join(","),
|
84
|
+
l[:username],
|
85
|
+
out: devnull)
|
86
|
+
end
|
87
|
+
# Create .ssh directory if necessary
|
88
|
+
userdotssh = File.join(@homedir, ".ssh")
|
89
|
+
Dir.mkdir(userdotssh) if !File.exists?(userdotssh)
|
90
|
+
@key = "#######################################################################################
|
91
|
+
# THIS FILE IS MANAGED BY #{$0} -- CHANGES WILL BE OVERWRITTEN #
|
92
|
+
#######################################################################################\n\n"
|
93
|
+
@key += keys[l[:username]].join("\n") + "\n"
|
94
|
+
userauthkeys = File.join(userdotssh, "authorized_keys")
|
95
|
+
if !File.exists?(userauthkeys) or IO::read(userauthkeys) != @key then
|
96
|
+
f = File.new(userauthkeys, 'w')
|
97
|
+
f.write(@key)
|
98
|
+
f.close()
|
99
|
+
end
|
100
|
+
FileUtils.chown_R(l[:username], l[:username], userdotssh)
|
101
|
+
File.chmod(0700, userdotssh)
|
102
|
+
File.chmod(0750, @homedir)
|
103
|
+
end
|
104
|
+
|
105
|
+
devnull.close
|
106
|
+
rescue Exception => bang
|
107
|
+
puts "Error: " + bang.to_s
|
108
|
+
puts bang.backtrace.join("\n")
|
109
|
+
exit 1
|
110
|
+
end
|
111
|
+
|
metadata
ADDED
@@ -0,0 +1,66 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: arvados-login-sync
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.20150826190127
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Arvados Authors
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-08-26 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: arvados
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0.1'
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 0.1.20150615153458
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - "~>"
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0.1'
|
30
|
+
- - ">="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 0.1.20150615153458
|
33
|
+
description: Creates and updates local login accounts for Arvados users. Built from
|
34
|
+
git commit f2afe64c25d1b3e79b38972e69104431a2587935
|
35
|
+
email: gem-dev@curoverse.com
|
36
|
+
executables:
|
37
|
+
- arvados-login-sync
|
38
|
+
extensions: []
|
39
|
+
extra_rdoc_files: []
|
40
|
+
files:
|
41
|
+
- bin/arvados-login-sync
|
42
|
+
homepage: https://arvados.org
|
43
|
+
licenses:
|
44
|
+
- GNU Affero General Public License, version 3.0
|
45
|
+
metadata: {}
|
46
|
+
post_install_message:
|
47
|
+
rdoc_options: []
|
48
|
+
require_paths:
|
49
|
+
- lib
|
50
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 2.1.0
|
55
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
56
|
+
requirements:
|
57
|
+
- - ">="
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: '0'
|
60
|
+
requirements: []
|
61
|
+
rubyforge_project:
|
62
|
+
rubygems_version: 2.4.3
|
63
|
+
signing_key:
|
64
|
+
specification_version: 4
|
65
|
+
summary: Set up local login accounts for Arvados users
|
66
|
+
test_files: []
|