aboutsummaryrefslogtreecommitdiff
path: root/3.11/kinit.rb
diff options
context:
space:
mode:
Diffstat (limited to '3.11/kinit.rb')
-rwxr-xr-x3.11/kinit.rb36
1 files changed, 36 insertions, 0 deletions
diff --git a/3.11/kinit.rb b/3.11/kinit.rb
new file mode 100755
index 0000000..5174839
--- /dev/null
+++ b/3.11/kinit.rb
@@ -0,0 +1,36 @@
+#!/usr/bin/env ruby
+
+require 'io/console'
+require 'json'
+require 'net/http'
+require 'openssl'
+require 'uri'
+
+uri = URI.parse("http://localhost:4567/login")
+
+header = {'Content-Type': 'text/json'}
+
+print "Username: "; un = gets.strip
+print "Password: "; pw = STDIN.noecho(&:gets).strip; puts
+
+login = {
+ "username": un
+}
+
+http = Net::HTTP.new(uri.host, uri.port)
+request = Net::HTTP::Post.new(uri.request_uri, header)
+request.body = login.to_json
+
+response = http.request(request)
+eticket = [response.body].pack("H*").unpack("C*").pack("c*")
+
+cipher = OpenSSL::Cipher::AES.new(256, :CBC).decrypt
+cipher.key = Digest::SHA2.digest(pw)
+begin
+ ticket = cipher.update(eticket) + cipher.final
+ File.open(".keytab", ?w) do |f|
+ f.puts "_TGS:#{ticket}"
+ end
+rescue OpenSSL::Cipher::CipherError
+ puts "Invalid password?"
+end