{"id":87,"date":"2025-02-01T22:34:24","date_gmt":"2025-02-01T22:34:24","guid":{"rendered":"http:\/\/www.scmgalaxy.com\/tutorials\/2008\/11\/24\/a-script-to-find-all-users-who-have-not-set-passwords\/"},"modified":"2025-02-01T22:39:28","modified_gmt":"2025-02-01T22:39:28","slug":"a-script-to-find-all-users-who-have-not-set-passwords","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/a-script-to-find-all-users-who-have-not-set-passwords\/","title":{"rendered":"Ruby and Perl Script to find all Perforce users who have not set passwords"},"content":{"rendered":"\n<p>These scripts will:<br>\u2705 Connect to the <strong>Perforce server<\/strong><br>\u2705 Retrieve a <strong>list of users<\/strong><br>\u2705 Identify users <strong>without passwords<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>1. Prerequisites<\/strong><\/h2>\n\n\n\n<p>Before running the scripts, ensure:<br>\u2714 <strong>Perforce CLI (<code>p4<\/code>)<\/strong> is installed and accessible in <code>PATH<\/code><br>\u2714 You have <strong>Perforce admin privileges<\/strong> (needed to check user settings)<br>\u2714 You can run <code>p4 users<\/code> and <code>p4 -ztag users<\/code> successfully<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>2. Ruby Script: Find Perforce Users Without Passwords<\/strong><\/h1>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-comment\">#!\/usr\/bin\/env ruby<\/span>\n\n<span class=\"hljs-comment\"># Define Perforce server details<\/span>\nP4PORT = <span class=\"hljs-string\">\"perforce.company.com:1666\"<\/span>\nP4USER = <span class=\"hljs-string\">\"admin_user\"<\/span>\n\n<span class=\"hljs-comment\"># Fetch list of users with details<\/span>\nusers_output = `p4 -p <span class=\"hljs-comment\">#{P4PORT} -u #{P4USER} -ztag users`<\/span>\n\n<span class=\"hljs-comment\"># Parse the output and extract users without passwords<\/span>\nusers_without_passwords = &#91;]\n\nusers_output.split(<span class=\"hljs-string\">\"\\n\\n\"<\/span>).each <span class=\"hljs-keyword\">do<\/span> |entry|\n  user = entry.match(\/^... user (\\S+)\/)&amp;.captures&amp;.first\n  auth_method = entry.match(\/^... AuthMethod (\\S+)\/)&amp;.captures&amp;.first || <span class=\"hljs-string\">\"perforce\"<\/span>\n\n  <span class=\"hljs-comment\"># If 'AuthMethod' is missing or 'perforce', the user may not have a password set<\/span>\n  users_without_passwords &lt;&lt; user <span class=\"hljs-keyword\">if<\/span> auth_method == <span class=\"hljs-string\">\"perforce\"<\/span>\nend\n\n<span class=\"hljs-comment\"># Print results<\/span>\nputs <span class=\"hljs-string\">\"Perforce Users Without Passwords:\"<\/span>\n<span class=\"hljs-keyword\">if<\/span> users_without_passwords.<span class=\"hljs-keyword\">empty<\/span>?\n  puts <span class=\"hljs-string\">\"All users have passwords set.\"<\/span>\n<span class=\"hljs-keyword\">else<\/span>\n  users_without_passwords.each { |user| puts user }\nend\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\"><strong>How to Run the Ruby Script<\/strong><\/h3>\n\n\n\n<p>1\ufe0f\u20e3 Save the script as <strong><code>find_p4_users_without_passwords.rb<\/code><\/strong><br>2\ufe0f\u20e3 Replace <code>\"perforce.company.com:1666\"<\/code> and <code>\"admin_user\"<\/code> with actual <strong>Perforce server details<\/strong><br>3\ufe0f\u20e3 Open a terminal and run:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">ruby<\/span> <span class=\"hljs-selector-tag\">find_p4_users_without_passwords<\/span><span class=\"hljs-selector-class\">.rb<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>3. Perl Script: Find Perforce Users Without Passwords<\/strong><\/h1>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-comment\">#!\/usr\/bin\/perl<\/span>\n<span class=\"hljs-keyword\">use<\/span> <span class=\"hljs-title\">strict<\/span>;\n<span class=\"hljs-keyword\">use<\/span> <span class=\"hljs-title\">warnings<\/span>;\n\n<span class=\"hljs-comment\"># Define Perforce server details<\/span>\nmy $P4PORT = <span class=\"hljs-string\">\"perforce.company.com:1666\"<\/span>;\nmy $P4USER = <span class=\"hljs-string\">\"admin_user\"<\/span>;\n\n<span class=\"hljs-comment\"># Run 'p4 -ztag users' command and capture output<\/span>\nmy @users_output = `p4 -p $P4PORT -u $P4USER -ztag users`;\n\n<span class=\"hljs-comment\"># Parse output and extract users without passwords<\/span>\nmy @users_without_passwords;\nmy $current_user;\nmy $auth_method = <span class=\"hljs-string\">\"perforce\"<\/span>;  <span class=\"hljs-comment\"># Default authentication method<\/span>\n\n<span class=\"hljs-keyword\">foreach<\/span> my $line (@users_output) {\n    <span class=\"hljs-keyword\">if<\/span> ($line =~ \/^\\.\\.\\. user (\\S+)\/) {\n        $current_user = $<span class=\"hljs-number\">1<\/span>;\n        $auth_method = <span class=\"hljs-string\">\"perforce\"<\/span>;  <span class=\"hljs-comment\"># Reset to default for new user<\/span>\n    }\n    elsif ($line =~ \/^\\.\\.\\. AuthMethod (\\S+)\/) {\n        $auth_method = $<span class=\"hljs-number\">1<\/span>;\n    }\n\n    <span class=\"hljs-comment\"># If no AuthMethod or \"perforce\", assume no password is set<\/span>\n    <span class=\"hljs-keyword\">if<\/span> ($auth_method eq <span class=\"hljs-string\">\"perforce\"<\/span> &amp;&amp; defined $current_user) {\n        push @users_without_passwords, $current_user;\n        $current_user = undef;  <span class=\"hljs-comment\"># Reset for the next user<\/span>\n    }\n}\n\n<span class=\"hljs-comment\"># Print results<\/span>\n<span class=\"hljs-keyword\">print<\/span> <span class=\"hljs-string\">\"Perforce Users Without Passwords:\\n\"<\/span>;\n<span class=\"hljs-keyword\">if<\/span> (@users_without_passwords) {\n    <span class=\"hljs-keyword\">print<\/span> join(<span class=\"hljs-string\">\"\\n\"<\/span>, @users_without_passwords), <span class=\"hljs-string\">\"\\n\"<\/span>;\n} <span class=\"hljs-keyword\">else<\/span> {\n    <span class=\"hljs-keyword\">print<\/span> <span class=\"hljs-string\">\"All users have passwords set.\\n\"<\/span>;\n}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\"><strong>How to Run the Perl Script<\/strong><\/h3>\n\n\n\n<p>1\ufe0f\u20e3 Save the script as <strong><code>find_p4_users_without_passwords.pl<\/code><\/strong><br>2\ufe0f\u20e3 Replace <code>\"perforce.company.com:1666\"<\/code> and <code>\"admin_user\"<\/code> with actual <strong>Perforce server details<\/strong><br>3\ufe0f\u20e3 Open a terminal and run:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">perl<\/span> <span class=\"hljs-selector-tag\">find_p4_users_without_passwords<\/span><span class=\"hljs-selector-class\">.pl<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>4. Explanation<\/strong><\/h1>\n\n\n\n<p>\u2714 <strong><code>p4 -ztag users<\/code><\/strong> retrieves all Perforce users <strong>with authentication details<\/strong><br>\u2714 The script extracts the <strong>AuthMethod<\/strong> field for each user:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>If <strong>AuthMethod is missing<\/strong> or <strong>set to <code>perforce<\/code><\/strong>, the user likely has <strong>no password<\/strong><br>\u2714 The list of users without passwords is <strong>displayed<\/strong><\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>5. Conclusion<\/strong><\/h1>\n\n\n\n<p>These scripts help <strong>Perforce administrators<\/strong> identify users who have <strong>not set passwords<\/strong>, improving security.<\/p>\n\n\n\n<p>Would you like enhancements like <strong>exporting results to a file<\/strong> or <strong>automating password resets<\/strong>? Let me know! \ud83d\ude0a<\/p>\n","protected":false},"excerpt":{"rendered":"<p>These scripts will:\u2705 Connect to the Perforce server\u2705 Retrieve a list of users\u2705 Identify users without passwords 1. Prerequisites Before running the scripts, ensure:\u2714 Perforce CLI (p4) is installed and accessible in PATH\u2714 You have Perforce admin privileges (needed to check user settings)\u2714 You can run p4 users and p4 -ztag users successfully 2. Ruby&#8230;<\/p>\n","protected":false},"author":1,"featured_media":3611,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","_joinchat":[],"footnotes":""},"categories":[370],"tags":[832,545,1903,1901,175,178,278,1902,1900],"class_list":["post-87","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-perforce","tag-find","tag-how","tag-not-set","tag-passwords","tag-perl","tag-ruby","tag-script","tag-script-to-find-all-users","tag-users"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/87","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/comments?post=87"}],"version-history":[{"count":4,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/87\/revisions"}],"predecessor-version":[{"id":48324,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/87\/revisions\/48324"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media\/3611"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=87"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=87"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=87"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}