summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorasq <asq@asq.art.pl>2014-04-03 17:15:37 +0200
committerAnna Janackova <anna.janackova@gmail.com>2014-06-24 08:11:44 +0200
commitb70fcc845696f58b2a5d36039df5f2c8c1dd2e04 (patch)
treebbb7c1cb640552e3582872d460ccde16805c56fe
parent44027adce7333c406e3308686b53b31c43161efa (diff)
add option to generate shell-safe passwords
basically excludes characters that might be dangerous if used in shell. many passwords generated by trocla may end up in some sort of bash scripts (initscripts, sourced shell variables, etc) which may yeld problems with default trocla random generator. this can be now changed either in troclarc (with "shellsafe: true") or on (ie. "trocla create foo plain '{ length: 32, shellsafe: true}'").
-rw-r--r--lib/trocla.rb2
-rw-r--r--lib/trocla/util.rb14
2 files changed, 13 insertions, 3 deletions
diff --git a/lib/trocla.rb b/lib/trocla.rb
index 4e7bedb..7755149 100644
--- a/lib/trocla.rb
+++ b/lib/trocla.rb
@@ -22,7 +22,7 @@ class Trocla
plain_pwd = get_password(key,'plain')
if options['random'] && plain_pwd.nil?
- plain_pwd = Trocla::Util.random_str(options['length'])
+ plain_pwd = Trocla::Util.random_str(options['length'],options['shellsafe'])
set_password(key,'plain',plain_pwd) unless format == 'plain'
elsif !options['random'] && plain_pwd.nil?
raise "Password must be present as plaintext if you don't want a random password"
diff --git a/lib/trocla/util.rb b/lib/trocla/util.rb
index 2b1c6c6..ff7e3ce 100644
--- a/lib/trocla/util.rb
+++ b/lib/trocla/util.rb
@@ -2,8 +2,12 @@ require 'securerandom'
class Trocla
class Util
class << self
- def random_str(length=12)
- (1..length).collect{|a| chars[SecureRandom.random_number(chars.size)] }.join.to_s
+ def random_str(length=12,shellsafe=:undef)
+ if shellsafe
+ (1..length).collect{|a| safechars[SecureRandom.random_number(safechars.size)] }.join.to_s
+ else
+ (1..length).collect{|a| chars[SecureRandom.random_number(chars.size)] }.join.to_s
+ end
end
def salt(length=8)
@@ -14,12 +18,18 @@ class Trocla
def chars
@chars ||= normal_chars + special_chars
end
+ def safechars
+ @chars ||= normal_chars + shellsafe_chars
+ end
def normal_chars
@normal_chars ||= ('a'..'z').to_a + ('A'..'Z').to_a + ('0'..'9').to_a
end
def special_chars
@special_chars ||= "+*%/()@&=?![]{}-_.,;:".split(//)
end
+ def shellsafe_chars
+ @shellsafe_chars ||= "+%/@=?_.,:".split(//)
+ end
end
end
end