Netgroups.
authorIain Patterson <me@iain.cx>
Tue, 4 Aug 2009 13:41:53 +0000 (14:41 +0100)
committerIain Patterson <me@iain.cx>
Thu, 13 Aug 2009 16:11:25 +0000 (17:11 +0100)
Added netgroups.c since the netgroups binary is needed by sshcolourterm.
Be quiet checking netgroups in sshcolourterm.  This allows, for example,
hacking sshcolourterm for an SGE terminal viz:

    env SSHTERM_SSH=qrsh sshterm

opt/bin/sshcolourterm
src/netgroups.c [new file with mode: 0644]

index 4a5f302..8bae4b0 100755 (executable)
@@ -18,7 +18,7 @@ fi
 # Get colour by netgroup.
 if [ -z "$colour" ]; then
   for netgroup in $(ls "$SSHCOLOURS" | grep ^\@); do
-    if netgroups $netgroup ${fqdn%%.*} 2>/dev/null; then
+    if netgroups $netgroup ${fqdn%%.*} &>/dev/null; then
       colour=$(readlink "$SSHCOLOURS/$netgroup")
       break
     fi
diff --git a/src/netgroups.c b/src/netgroups.c
new file mode 100644 (file)
index 0000000..0a3dd77
--- /dev/null
@@ -0,0 +1,27 @@
+#include <netdb.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+int main(int argc, char **argv) {
+  char *group, *host, *hostp, *userp, *domainp;
+
+  if (argc == 1) {
+    fprintf(stderr, "Usage: netgroups <netgroup> [<hostname>]\n");
+    exit(1);
+  }
+
+  /* What group do we want? */
+  group = argv[1];
+  if (*group == '@') group++;
+
+  /* Do we want to match a host? */
+  host = argv[2];
+
+  if (host) exit(! innetgr(group, host, 0, 0));
+
+  setnetgrent(group);
+  while (getnetgrent(&hostp, &userp, &domainp)) printf("%s\n", hostp);
+  endnetgrent();
+
+  exit(0);
+}