From owner-svn-src-user@freebsd.org  Sun May  6 11:21:33 2018
Return-Path: <owner-svn-src-user@freebsd.org>
Delivered-To: svn-src-user@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id 4ADCFFB6BD6
 for <svn-src-user@mailman.ysv.freebsd.org>;
 Sun,  6 May 2018 11:21:33 +0000 (UTC) (envelope-from des@FreeBSD.org)
Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org
 [IPv6:2610:1c1:1:606c::19:3])
 (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 (Client CN "mxrelay.nyi.freebsd.org",
 Issuer "Let's Encrypt Authority X3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id F190A7B75C;
 Sun,  6 May 2018 11:21:32 +0000 (UTC) (envelope-from des@FreeBSD.org)
Received: from repo.freebsd.org (repo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:0])
 (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 (Client did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id D323641F6;
 Sun,  6 May 2018 11:21:32 +0000 (UTC) (envelope-from des@FreeBSD.org)
Received: from repo.freebsd.org ([127.0.1.37])
 by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w46BLWKa005222;
 Sun, 6 May 2018 11:21:32 GMT (envelope-from des@FreeBSD.org)
Received: (from des@localhost)
 by repo.freebsd.org (8.15.2/8.15.2/Submit) id w46BLWdB005220;
 Sun, 6 May 2018 11:21:32 GMT (envelope-from des@FreeBSD.org)
Message-Id: <201805061121.w46BLWdB005220@repo.freebsd.org>
X-Authentication-Warning: repo.freebsd.org: des set sender to des@FreeBSD.org
 using -f
From: =?UTF-8?Q?Dag-Erling_Sm=c3=b8rgrav?= <des@FreeBSD.org>
Date: Sun, 6 May 2018 11:21:32 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-user@freebsd.org
Subject: svn commit: r333292 - user/des/fbce/db
X-SVN-Group: user
X-SVN-Commit-Author: des
X-SVN-Commit-Paths: user/des/fbce/db
X-SVN-Commit-Revision: 333292
X-SVN-Commit-Repository: base
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-BeenThere: svn-src-user@freebsd.org
X-Mailman-Version: 2.1.25
Precedence: list
List-Id: "SVN commit messages for the experimental &quot; user&quot;
 src tree" <svn-src-user.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/svn-src-user>,
 <mailto:svn-src-user-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-user/>
List-Post: <mailto:svn-src-user@freebsd.org>
List-Help: <mailto:svn-src-user-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/svn-src-user>,
 <mailto:svn-src-user-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Sun, 06 May 2018 11:21:33 -0000

Author: des
Date: Sun May  6 11:21:32 2018
New Revision: 333292
URL: https://svnweb.freebsd.org/changeset/base/333292

Log:
  Add gjb@'s LDAP-snarfing scripts.

Added:
  user/des/fbce/db/genuserlist.pl   (contents, props changed)
  user/des/fbce/db/genuserlist.sh   (contents, props changed)

Added: user/des/fbce/db/genuserlist.pl
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ user/des/fbce/db/genuserlist.pl	Sun May  6 11:21:32 2018	(r333292)
@@ -0,0 +1,72 @@
+#!/usr/bin/env perl
+#
+# $Id$
+#
+
+my $file = "$ARGV[0]";
+my $haveuid = 0;
+my $havekey = 0;
+my $uid = '';
+
+sub usage() {
+    print "Usage: $ARGV[0] /path/to/ldap/data\n";
+    exit (1);
+}
+
+sub main() {
+    if (!$ARGV[0]) {
+	&usage();
+    }
+    open(FILE, $file) or die("Could not open $file\n");
+    while(<FILE>) {
+	chomp($_);
+
+	# Skip commented lines.
+	if ($_ =~ m/^#/) {
+	    next;
+	}
+
+	# Skip empty lines, reset vars.
+	if ($_ =~ m/^$/) {
+	    $haveuid = 0;
+	    $uid = '';
+	    $havekey = 0;
+	    next;
+	}
+
+	# Found the uid field.  Make sure it is not empty, then set
+	# haveuid=1.
+	if ($_ =~ m/^uid: /) {
+	    $_ =~ s/^uid: //;
+	    # The one unfortunate account *with* an ssh key.
+	    if ($_ =~ m/backup/) {
+		next;
+	    }
+	    $uid = $_;
+	    $haveuid = 1;
+	}
+
+	# No need to search for a key if haveuid=0.
+	if ($haveuid eq 1) {
+	    # Have the key.
+	    if ($_ =~ m/^sshPublicKey::? /) {
+		$_ =~ s/^sshPublicKey::? //;
+		# It should not happen, but if a key datafield exists
+		# without a key, bail.
+		if ($_ =~ m//) {
+		    $haveuid = 0;
+		    next;
+		}
+		# Great.  We have found a key for the UID.  Since they
+		# have login access, they can vote.  Good for them.
+		$havekey = 1;
+		print "$uid\n";
+		$haveuid = 0;
+	    }
+	}
+    }
+    close(FILE);
+}
+
+&main();
+

Added: user/des/fbce/db/genuserlist.sh
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ user/des/fbce/db/genuserlist.sh	Sun May  6 11:21:32 2018	(r333292)
@@ -0,0 +1,24 @@
+#!/bin/sh
+
+set -e
+
+users=
+tmpfile="$(mktemp $HOME/tmp.XXXXXXXXXX)"
+
+main() {
+	cd $(realpath $(dirname $(basename ${0})))
+	userlist="$(ldapsearch -x -b \
+		ou=users,dc=freebsd,dc=org \
+		-s children \
+		'(&(objectClass=freebsdAccount)(cn=*)(uid=*)(sshPublicKey=*)(loginShell=*)(!(loginShell=/usr/sbin/nologin))(!(uid=*test))(!(uid=socsvn-import)))' \
+		uid uidNumber loginShell sshPublicKey)"
+	printf "${userlist}" > ${tmpfile}
+	echo "Output written to: ${tmpfile}"
+
+	./genuserlist.pl ${tmpfile} > ./users.txt
+
+	echo "Final output written to: users.txt"
+
+}
+
+main "$@"