--- /dev/null
+Puppet::Type.type(:qpid_user).provide(:saslpasswd2) do
+
+ commands :saslpasswd2 => 'saslpasswd2'
+ optional_commands :sasldblistusers2 => 'sasldblistusers2'
+ defaultfor :feature => :posix
+
+ def self.instances
+ sasldblistusers2('-f', resource[:file]).split(/\n/)[1..-2].map do |line|
+ if line =~ /^(\S+)@(\S+):.*$/
+ new(:name => $1, :realm => $2)
+ else
+ raise Puppet::Error, "Cannot parse invalid user line: #{line}"
+ end
+ end
+ end
+
+ def create
+ if not system(%{echo "#{resource[:password]}" | saslpasswd2 -f #{resource[:file]} -u #{resource[:realm]} #{resource[:name]}})
+
+ raise Puppet::Error, "Failed to create user."
+ end
+ end
+
+ def destroy
+ saslpasswd2('-f', resource[:file], '-u', resource[:realm], '-d', resource[:name])
+ end
+
+ def exists?
+ begin
+ out = sasldblistusers2('-f', resource[:file]).split(/\n/)[1..-2].detect do |line|
+ line.match(/^#{resource[:name]}@#{resource[:realm]}:.*$/)
+ end
+ rescue
+ return false
+ end
+ end
+
+end