[26208] in Source-Commits

home help back first fref pref prev next nref lref last post

/svn/athena r25455 - in trunk/third/moira: clients/chpobox clients/eunice clients/moira db debian gen incremental/ldap reg_svr regtape server

daemon@ATHENA.MIT.EDU (Jonathan D Reed)
Wed Feb 29 15:24:50 2012

Date: Wed, 29 Feb 2012 15:24:48 -0500
From: Jonathan D Reed <jdreed@MIT.EDU>
Message-Id: <201202292024.q1TKOmFU009642@drugstore.mit.edu>
To: source-commits@MIT.EDU
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Author: jdreed
Date: 2012-02-29 15:24:47 -0500 (Wed, 29 Feb 2012)
New Revision: 25455

Added:
   trunk/third/moira/gen/printer-list.gen
Removed:
   trunk/third/moira/gen/cups-cluster.pc
   trunk/third/moira/gen/cups-cluster.sh
   trunk/third/moira/gen/install_dirs
   trunk/third/moira/gen/install_quotas
   trunk/third/moira/gen/nagios-printers.gen
   trunk/third/moira/gen/nagios-printers.sh
   trunk/third/moira/gen/nagios-wsh.gen
   trunk/third/moira/gen/nagios-wsh.sh
   trunk/third/moira/gen/nfs.pc
   trunk/third/moira/gen/nfs.sh
   trunk/third/moira/gen/zero_quotas
Modified:
   trunk/third/moira/clients/chpobox/chpobox.c
   trunk/third/moira/clients/eunice/eunice.c
   trunk/third/moira/clients/moira/printer.c
   trunk/third/moira/db/schema.sql
   trunk/third/moira/debian/changelog
   trunk/third/moira/gen/Makefile.in
   trunk/third/moira/gen/dhcp.pc
   trunk/third/moira/gen/dhcp.sh
   trunk/third/moira/gen/directory.pc
   trunk/third/moira/gen/nagios-cluster.gen
   trunk/third/moira/gen/spwatch.gen
   trunk/third/moira/gen/warehouse-lists.pc
   trunk/third/moira/incremental/ldap/winad.c
   trunk/third/moira/reg_svr/errors
   trunk/third/moira/reg_svr/reg_svr.pc
   trunk/third/moira/regtape/staff.pc
   trunk/third/moira/regtape/student.pc
   trunk/third/moira/server/increment.pc
   trunk/third/moira/server/qsetup.pc
   trunk/third/moira/server/queries2.c
Log:
In moira:
  * Re-snapshot moira at r4073 to pick up new changes to clients; the
    eunice issue described in the previous entry is no longer relevant


Modified: trunk/third/moira/clients/chpobox/chpobox.c
===================================================================
--- trunk/third/moira/clients/chpobox/chpobox.c	2012-02-17 19:10:33 UTC (rev 25454)
+++ trunk/third/moira/clients/chpobox/chpobox.c	2012-02-29 20:24:47 UTC (rev 25455)
@@ -1,4 +1,4 @@
-/* $Id: chpobox.c 3956 2010-01-05 20:56:56Z zacheiss $
+/* $Id: chpobox.c 4073 2012-02-28 17:02:47Z zacheiss $
  *
  * Talk to the Moira database to change a person's home mail machine. This may
  * be an Athena machine, or a completely arbitrary address.
@@ -38,7 +38,7 @@
 
 #define argis(a, b) (!strcmp(*arg + 1, a) || !strcmp(*arg + 1, b))
 
-RCSID("$HeadURL: svn+ssh://svn.mit.edu/moira/trunk/moira/clients/chpobox/chpobox.c $ $Id: chpobox.c 3956 2010-01-05 20:56:56Z zacheiss $");
+RCSID("$HeadURL: svn+ssh://svn.mit.edu/moira/trunk/moira/clients/chpobox/chpobox.c $ $Id: chpobox.c 4073 2012-02-28 17:02:47Z zacheiss $");
 
 int get_pobox(int argc, char **argv, void *callarg);
 void usage(void);
@@ -63,7 +63,7 @@
   else
     whoami++;
 
-  if (argc > 5)
+  if (argc > 7)
     usage();
 
   while (++arg - argv < argc)

Modified: trunk/third/moira/clients/eunice/eunice.c
===================================================================
--- trunk/third/moira/clients/eunice/eunice.c	2012-02-17 19:10:33 UTC (rev 25454)
+++ trunk/third/moira/clients/eunice/eunice.c	2012-02-29 20:24:47 UTC (rev 25455)
@@ -1,4 +1,4 @@
-/* $Id: eunice.c 3977 2010-02-12 21:12:04Z zacheiss $
+/* $Id: eunice.c 4051 2011-09-08 18:46:37Z zacheiss $
  *
  * Command line oriented Moira print queue tool.
  *
@@ -21,13 +21,18 @@
 #include <stdlib.h>
 #include <string.h>
 
-RCSID("$HeadURL: svn+ssh://svn.mit.edu/moira/trunk/moira/clients/eunice/eunice.c $ $Id: eunice.c 3977 2010-02-12 21:12:04Z zacheiss $");
+RCSID("$HeadURL: svn+ssh://svn.mit.edu/moira/trunk/moira/clients/eunice/eunice.c $ $Id: eunice.c 4051 2011-09-08 18:46:37Z zacheiss $");
 
 struct member {
   int type;
   char *name, *tag;
 };
 
+struct string_list {
+  char *string;
+  struct string_list *next;
+};
+
 const char *deflogserver = "WSLOGGER.MIT.EDU";
 
 /* legacy variables that we need to set regardless */
@@ -39,36 +44,40 @@
 
 /* flags from command line */
 int info_flag, verbose, noauth, duplex_default, hold_default;
-int create_flag, setmac, delete_flag, rename_flag, ka, banner, update_flag;
+int create_flag, delete_flag, rename_flag, ka, banner, update_flag, update_hwaddr_flag;
 char *lpracl, *lpcacl, *report_list;
 char *contact, *newname, *printserver, *type, *hwtype, *mac, *hostname, *queuename;
 char *duplexname, *logserver, *location, *realname, *pr_status;
 
 char *queuename, *whoami, *testqueue;
 
+struct string_list *hwaddr_add_queue, *hwaddr_remove_queue;
+
 void usage(char **argv);
 int show_printer_info(char *queuename);
 int save_printer_info(int argc, char **argv, void *hint);
-int save_hwaddr(int argc, char **argv, void *hint);
+int show_hwaddrs(int argc, char **argv, void *hint);
 void recursive_display_list_members(void);
 char *get_username(void);
 int wrap_mr_query(char *handle, int argc, char **argv,
 		  int (*callback)(int, char **, void *), void *callarg);
 void print_query(char *query_name, int argc, char **argv);
 int CountArgs(char **info);
+struct string_list *add_to_string_list(struct string_list *old_list, char *s);
 
 static char *states[] = {
   "Reserved (0)",
   "Active (1)",
-  "None (2)",
-  "Deleted (3)"
+  "Active, No IP ACL (2)",
+  "Deleted (3)",
+  "Active, BOOTP only (4)"
 };
 
 static char *PrnState(int state)
 {
   static char buf[BUFSIZ];
   
-  if (state < 0 || state > 3)
+  if (state < 0 || state > 4)
     {
       sprintf(buf, "Unknown (%d)", state);
       return buf;
@@ -89,13 +98,13 @@
 
   /* clear all flags & lists */
   i = info_flag = verbose = noauth = 0;
-  setmac = create_flag = delete_flag = update_flag = 0;
+  create_flag = delete_flag = update_flag = update_hwaddr_flag = 0;
   ka = duplex_default = hold_default = banner = -1;
   location = lpracl = lpcacl = report_list = pr_status = NULL;
   logserver = duplexname = realname = newname = printserver = type = hwtype = mac = hostname = NULL;
+  hwaddr_add_queue = hwaddr_remove_queue = NULL;
+  contact = NULL;
 
-
-  contact = NULL;
   whoami = argv[0];
 
   success = 1;
@@ -285,17 +294,28 @@
 	      else
 		usage(argv);
 	    }
-	  else if (argis("m", "mac"))
+	  else if (argis("ahw", "addhwaddr"))
 	    {
 	      if (arg - argv < argc - 1)
 		{
 		  ++arg;
-		  setmac++;
-		  mac = *arg;
+		  hwaddr_add_queue=add_to_string_list(hwaddr_add_queue, *arg);
 		}
 	      else
 		usage(argv);
+	      update_hwaddr_flag++;
 	    }
+	  else if (argis("dhw", "delhwaddr"))
+	    {
+	      if (arg - argv < argc - 1)
+		{
+		  ++arg;
+		  hwaddr_remove_queue=add_to_string_list(hwaddr_remove_queue, *arg);
+		}
+	      else
+		usage(argv);
+	      update_hwaddr_flag++;
+	    }
 	  else if (argis("b", "banner"))
 	    {
 	      update_flag++;
@@ -352,7 +372,7 @@
     usage(argv);
 
 
-  if (!update_flag && !rename_flag && !delete_flag && !create_flag && !setmac)
+  if (!update_flag && !rename_flag && !delete_flag && !create_flag && !update_hwaddr_flag)
     info_flag++;
 
   /* fire up Moira */
@@ -582,25 +602,68 @@
   if (info_flag)
     show_printer_info(queuename);
 
-  if (setmac)
-    {
-      status = wrap_mr_query("get_printer", 1, &queuename, save_printer_info, pargv);
+  /* add hwaddrs if necessary */
+  if (hwaddr_add_queue) {
+    struct string_list *q = hwaddr_add_queue;
+
+    status = wrap_mr_query("get_printer", 1, &queuename, save_printer_info, pargv);
+    if (status)
+      { 
+	com_err(whoami, status, "while getting printer information");
+	exit(1);
+      }
+
+    if (hostname == NULL)
+      uargv[0] = pargv[PRN_HOSTNAME + 1];
+    else
+      uargv[0] = hostname;
+
+    while(q) {
+
+      uargv[1] = q->string;
+
+      status = wrap_mr_query("add_host_hwaddr", 2, uargv, NULL, NULL);
       if (status)
 	{
-	  com_err(whoami, status, "while getting printer information");
+	  com_err(whoami, status, "while adding host hardware address");
 	  exit(1);
 	}
 
-      if (hostname == NULL)
-	uargv[0] = (char *) strdup (pargv[PRN_HOSTNAME + 1]);
-      else
-        uargv[0] = (char *) strdup (hostname);
-      uargv[1] = (char *) strdup (mac);
-      if ((status = wrap_mr_query("update_host_hwaddr", 2, uargv, NULL, NULL)))
-        com_err(whoami, status, "updating ethernet address.");
+      q = q->next;
     }
+  }
 
+  /* delete hwaddrs if necessary */
+  if (hwaddr_remove_queue) {
+    struct string_list *q = hwaddr_remove_queue;
 
+    status = wrap_mr_query("get_printer", 1, &queuename, save_printer_info, pargv);
+    if (status)
+      {
+        com_err(whoami, status, "while getting printer information");
+        exit(1);
+      }
+
+    if (hostname == NULL)
+      uargv[0] = pargv[PRN_HOSTNAME + 1];
+    else
+      uargv[0] = hostname;
+
+    while(q) {
+
+      uargv[1] = q->string;
+
+      status = wrap_mr_query("delete_host_hwaddr", 2, uargv, NULL, NULL);
+      if (status)
+        {
+          com_err(whoami, status, "while deleting host hardware address");
+          exit(1);
+        }
+
+      q = q->next;
+    }
+  }
+  
   if (delete_flag)
     {
       status = wrap_mr_query("delete_printer", 1, &queuename,
@@ -624,48 +687,59 @@
 #define USAGE_OPTIONS_FORMAT "  %-39s%s\n"
   fprintf(stderr, "Usage: %s queue [options]\n", argv[0]);
   fprintf(stderr, "Options are\n");
-  fprintf(stderr, USAGE_OPTIONS_FORMAT, "-v  | -verbose",
+  fprintf(stderr, USAGE_OPTIONS_FORMAT, "-v   | -verbose",
 	  "-C   | -create");
-  fprintf(stderr, USAGE_OPTIONS_FORMAT, "-D  | -delete",
+  fprintf(stderr, USAGE_OPTIONS_FORMAT, "-D   | -delete",
 	  "-R   | -rename newname");
-  fprintf(stderr, USAGE_OPTIONS_FORMAT, "-i  | -info",
+  fprintf(stderr, USAGE_OPTIONS_FORMAT, "-i   | -info",
 	  "-L   | -location location");
-  fprintf(stderr, USAGE_OPTIONS_FORMAT, "-H  | -hostname host",
+  fprintf(stderr, USAGE_OPTIONS_FORMAT, "-H   | -hostname host",
 	  "-c   | -contact contact");
-  fprintf(stderr, USAGE_OPTIONS_FORMAT, "-r  | -remotename name",
+  fprintf(stderr, USAGE_OPTIONS_FORMAT, "-r   | -remotename name",
 	  "-T   | -type printer_type");
-  fprintf(stderr, USAGE_OPTIONS_FORMAT, "-M  | -model model",
+  fprintf(stderr, USAGE_OPTIONS_FORMAT, "-M   | -model model",
 	  "-s   | -printserver print_server");
-  fprintf(stderr, USAGE_OPTIONS_FORMAT, "-K  | -kerbauth",
+  fprintf(stderr, USAGE_OPTIONS_FORMAT, "-K   | -kerbauth",
 	  "-b   | -banner");
-  fprintf(stderr, USAGE_OPTIONS_FORMAT, "-NK | -nokerbauth",
+  fprintf(stderr, USAGE_OPTIONS_FORMAT, "-NK  | -nokerbauth",
 	  "-nb  | -nobanner");
-  fprintf(stderr, USAGE_OPTIONS_FORMAT, "-DD | -duplexdefault",
-	  "-HD | -holddefault");
-  fprintf(stderr, USAGE_OPTIONS_FORMAT, "-ND | -noduplexdefault",
-	  "-NH | -noholddefault");
-  fprintf(stderr, USAGE_OPTIONS_FORMAT, "-S | -status status",
-	  "-rl | -reportlist list");
-  fprintf(stderr, USAGE_OPTIONS_FORMAT, "-l  | -lpcacl list",
+  fprintf(stderr, USAGE_OPTIONS_FORMAT, "-DD  | -duplexdefault",
+	  "-HD  | -holddefault");
+  fprintf(stderr, USAGE_OPTIONS_FORMAT, "-ND  | -noduplexdefault",
+	  "-NH  | -noholddefault");
+  fprintf(stderr, USAGE_OPTIONS_FORMAT, "-S   | -status status",
+	  "-rl  | -reportlist list");
+  fprintf(stderr, USAGE_OPTIONS_FORMAT, "-l   | -lpcacl list",
 	  "-ac  | -lpracl list");
-  fprintf(stderr, USAGE_OPTIONS_FORMAT, "-d  | -duplex name",
+  fprintf(stderr, USAGE_OPTIONS_FORMAT, "-d   | -duplex name",
 	  "-n   | -noauth");
-  fprintf(stderr, USAGE_OPTIONS_FORMAT, "-m  | -mac hwaddr", 
-	  "-db  | -database host[:port]");
+  fprintf(stderr, USAGE_OPTIONS_FORMAT, "-ahw | -addhwaddr hwaddr", 
+	  "-dhw | -delhwaddr hwaddr");
+  fprintf(stderr, "  %-39s\n" , "-db  | -database host[:port]");
   exit(1);
 }
 
+static int show_has_hwaddrs;
+
+int show_hwaddrs(int argc, char **argv, void *hint)
+{
+  if(!show_has_hwaddrs++)
+    printf("Hardware Addresses:  %s", argv[1]);
+  else
+    printf(", %s", argv[1]);
+
+  return MR_CONT;
+}
+
 int show_printer_info(char *queuename)
 {
-  char hwaddr[20];
   char *pargv[PRN_END + 1];
   int status, banner, i;
+  struct mqelem *elem = NULL;
 
   for (i = 0; i < PRN_END + 1; i++)
     pargv[i] = NULL;
 
-  memset (hwaddr,'\0',sizeof(hwaddr));
-
   status = wrap_mr_query("get_printer", 1, &queuename, save_printer_info, pargv);
   if (status)
     {
@@ -673,23 +747,30 @@
       exit (1);
     }
 
-  status = wrap_mr_query("get_host_hwaddr", 1, &pargv[PRN_HOSTNAME + 1], 
-    save_hwaddr, &hwaddr);
-
-  if (status)
-    sprintf (hwaddr,"none");
-
   banner = atoi(pargv[PRN_BANNER + 1]);
 
-  printf("Printer: %-18s Duplex queue: %-18s\n", pargv[PRN_NAME + 1],
-          *pargv[PRN_DUPLEXNAME + 1] ? pargv[PRN_DUPLEXNAME + 1] : "[none]");
-  printf("Status: %-10s\n", PrnState(atoi(pargv[PRN_STATUS + 1])));
+  printf("Printer: %-18s Duplex queue: %-17s Status: %-10s\n", pargv[PRN_NAME + 1],
+	 *pargv[PRN_DUPLEXNAME + 1] ? pargv[PRN_DUPLEXNAME + 1] : "[none]",
+	 PrnState(atoi(pargv[PRN_STATUS + 1])));
   printf("Duplex by Default: %-8s Hold by Default: %-18s\n",
 	 atoi(pargv[PRN_DUPLEXDEFAULT + 1]) ? "yes" : "no",
 	 atoi(pargv[PRN_HOLDDEFAULT + 1]) ? "yes" : "no");
-  printf("Type: %-10s Hardware type: %-10s Hardware address: %s\n",
-          pargv[PRN_TYPE + 1], pargv[PRN_HWTYPE + 1], hwaddr);
+  printf("Type: %-10s Hardware type: %-10s\n",
+          pargv[PRN_TYPE + 1], pargv[PRN_HWTYPE + 1]);
   printf("Printer hostname: %s\n", pargv[PRN_HOSTNAME + 1]);
+
+  show_has_hwaddrs = 0;
+  status = wrap_mr_query("get_host_hwaddr_mapping", 1, &pargv[PRN_HOSTNAME + 1], show_hwaddrs, &elem);
+  if (status)
+    {
+      if (status != MR_NO_MATCH)
+	com_err(whoami, status, "while getting hardware addresses");
+      else
+	printf("Hardware Addresses: none\n");
+    }
+  else
+    printf("\n");
+  
   printf("Printer log host: %s\n", pargv[PRN_LOGHOST + 1]);
   printf("Spool host: %s\n", pargv[PRN_RM + 1]);
   printf("Remote Printer Name: %-10s Banner page: %s\n", pargv[PRN_RP + 1],
@@ -719,13 +800,6 @@
   return MR_CONT;
 }
 
-int save_hwaddr(int argc, char **argv, void *hint)
-{
-  char *p = hint;
-  strcpy(p,argv[0]);
-  return MR_CONT;
-}
-
 int wrap_mr_query(char *handle, int argc, char **argv,
 		  int (*callback)(int, char **, void *), void *callarg) 
 {
@@ -785,3 +859,13 @@
 
   return number;
 }
+
+struct string_list *add_to_string_list(struct string_list *old_list, char *s) {
+  struct string_list *new_list;
+
+  new_list = (struct string_list *)malloc(sizeof(struct string_list *));
+  new_list->next = old_list;
+  new_list->string = s;
+
+  return new_list;
+}

Modified: trunk/third/moira/clients/moira/printer.c
===================================================================
--- trunk/third/moira/clients/moira/printer.c	2012-02-17 19:10:33 UTC (rev 25454)
+++ trunk/third/moira/clients/moira/printer.c	2012-02-29 20:24:47 UTC (rev 25455)
@@ -1,4 +1,4 @@
-/* $Id: printer.c 4030 2011-03-04 21:01:14Z zacheiss $
+/* $Id: printer.c 4051 2011-09-08 18:46:37Z zacheiss $
  *
  *	This is the file printer.c for the Moira Client, which allows users
  *      to quickly and easily maintain most parts of the Moira database.
@@ -23,7 +23,7 @@
 #include <stdlib.h>
 #include <string.h>
 
-RCSID("$HeadURL: svn+ssh://svn.mit.edu/moira/trunk/moira/clients/moira/printer.c $ $Id: printer.c 4030 2011-03-04 21:01:14Z zacheiss $");
+RCSID("$HeadURL: svn+ssh://svn.mit.edu/moira/trunk/moira/clients/moira/printer.c $ $Id: printer.c 4051 2011-09-08 18:46:37Z zacheiss $");
 
 void RealDeletePrn(char **info, Bool one_item);
 void ChangePrn(char **info, Bool one_item);
@@ -48,14 +48,15 @@
   "Reserved (0)",
   "Active (1)",
   "Active, No IP ACL (2)",
-  "Deleted (3)"
+  "Deleted (3)",
+  "Active, BOOTP only (4)"
 };
 
 static char *PrnState(int state)
 {
   static char buf[BUFSIZ];
 
-  if (state < 0 || state > 3)
+  if (state < 0 || state > 4)
     {
       sprintf(buf, "Unknown (%d)", state);
       return buf;

Modified: trunk/third/moira/db/schema.sql
===================================================================
--- trunk/third/moira/db/schema.sql	2012-02-17 19:10:33 UTC (rev 25454)
+++ trunk/third/moira/db/schema.sql	2012-02-29 20:24:47 UTC (rev 25455)
@@ -45,7 +45,7 @@
 	sigwho       	INTEGER		DEFAULT 0	NOT NULL,
 	signature    	VARCHAR(68)	DEFAULT CHR(0)	NOT NULL,
 	secure       	INTEGER		DEFAULT 0	NOT NULL,       
-	pin		VARCHAR(10)	DEFAULT CHR(0)	NOT NULL,
+	pin		VARCHAR(20)	DEFAULT CHR(0)	NOT NULL,
 	reservations	VARCHAR(10)	DEFAULT CHR(0)	NOT NULL,
 	flag         	INTEGER		DEFAULT 0	NOT NULL,
 	created		DATE		DEFAULT SYSDATE	NOT NULL,
@@ -81,7 +81,7 @@
 	statuschange	DATE    	DEFAULT SYSDATE	NOT NULL,
 	snet_id		INTEGER		DEFAULT 0	NOT NULL,
 	address		VARCHAR(16)	DEFAULT CHR(0)	NOT NULL,
-	hwaddr		VARCHAR(12)	DEFAULT CHR(0)	NOT NULL,
+	unusedhwaddr		VARCHAR(12)	DEFAULT CHR(0)	NOT NULL,
 	owner_type	VARCHAR(8) 	DEFAULT CHR(0)	NOT NULL,
 	owner_id	INTEGER		DEFAULT 0	NOT NULL,
 	acomment	INTEGER		DEFAULT 0	NOT NULL,

Modified: trunk/third/moira/debian/changelog
===================================================================
--- trunk/third/moira/debian/changelog	2012-02-17 19:10:33 UTC (rev 25454)
+++ trunk/third/moira/debian/changelog	2012-02-29 20:24:47 UTC (rev 25455)
@@ -1,3 +1,10 @@
+debathena-moira (4.0.0-r4073-0debathena1) unstable; urgency=low
+
+  * Re-snapshot moira at r4073 to pick up new changes to clients; the
+    eunice issue described in the previous entry is no longer relevant
+
+ -- Jonathan Reed <jdreed@mit.edu>  Wed, 29 Feb 2012 15:24:32 -0500
+
 debathena-moira (4.0.0-r4048-0debathena2) unstable; urgency=low
 
   * Revert eunice.c to Moira r3998 / Debathena r24319 because the

Modified: trunk/third/moira/gen/Makefile.in
===================================================================
--- trunk/third/moira/gen/Makefile.in	2012-02-17 19:10:33 UTC (rev 25454)
+++ trunk/third/moira/gen/Makefile.in	2012-02-29 20:24:47 UTC (rev 25455)
@@ -1,4 +1,4 @@
-# $Id: Makefile.in 4040 2011-06-15 21:51:11Z zacheiss $
+# $Id: Makefile.in 4070 2012-02-02 23:09:55Z zacheiss $
 
 SHELL=/bin/sh
 @SET_MAKE@
@@ -32,28 +32,26 @@
 LIB_CFILES=genacl.c
 LIB_TARGET=libdcm.a
 
-OBJS=	acl.lo confluence.lo cups-print.lo cups-cluster.lo dhcp.lo directory.lo events.lo \
-	hesiod.lo hosts.lo mailhub.lo ndb.lo network.lo nfs.lo pobox.lo \
+OBJS=	acl.lo confluence.lo cups-print.lo dhcp.lo directory.lo events.lo \
+	hesiod.lo hosts.lo mailhub.lo ndb.lo network.lo pobox.lo \
 	postoffice.lo print.lo warehouse-lists.lo winad.lo www.lo zephyr.lo
 
-CFILES= acl.c confluence.c cups-print.c cups-cluster.c dhcp.c directory.c events.c \
-	hesiod.c hosts.c mailhub.c ndb.c network.c nfs.c pobox.c \
+CFILES= acl.c confluence.c cups-print.c dhcp.c directory.c events.c \
+	hesiod.c hosts.c mailhub.c ndb.c network.c pobox.c \
 	postoffice.c print.c warehouse-lists.c winad.c www.c zephyr.c
 
-TARGET=	acl.gen confluence.gen cups-print.gen cups-cluster.gen dhcp.gen directory.gen \
+TARGET=	acl.gen confluence.gen cups-print.gen dhcp.gen directory.gen \
 	events.gen hesiod.gen hosts.gen mailhub.gen ndb.gen \
-	network.gen nfs.gen pobox.gen postoffice.gen print.gen \
+	network.gen pobox.gen postoffice.gen print.gen \
 	warehouse-lists.gen winad.gen www.gen zephyr.gen
 
 SCRIPTS=access.gen access.sh acl.sh aliases.sh asa-db.gen ca.gen calendar.gen \
-	cups-print.sh cups-cluster.sh dhcp.sh events.sh hesiod.sh ip-billing.gen \
+	cups-print.sh  dhcp.sh events.sh hesiod.sh ip-billing.gen \
 	ip-billing.sh ldap.gen mailhosts.gen mailhub.sh mailman.gen mailman.sh \
 	nagios-cluster.gen nagios-cluster.sh nagios-colo.gen nagios-colo.sh \
-	nagios-printers.gen nagios-printers.sh nagios-wsh.gen nagios-wsh.sh \
-	ndb.sh nfs.sh null.sh postoffice.sh print.sh print-accounting.gen sapprint.gen \
-	sapprint.sh spwatch.gen tsm.gen tsm.sh ua-elect.gen warehouse.gen warehouse.sh \
-	winstats.gen winstats.sh www.sh zephyr.sh install_dirs \
-	install_quotas zero_quotas
+	ndb.sh null.sh postoffice.sh print.sh print-accounting.gen printer-list.gen \
+        sapprint.gen sapprint.sh spwatch.gen tsm.gen tsm.sh ua-elect.gen warehouse.gen \
+        warehouse.sh winstats.gen winstats.sh www.sh zephyr.sh
 
 .SUFFIXES: .pc .gen .lo
 
@@ -87,9 +85,6 @@
 hosts.gen: hosts.lo libdcm.a $(MR_LIBDEP)
 	$(LIBTOOL) --mode=link $(CC) -static -o $@ $(LDFLAGS) hosts.lo libdcm.a $(SQL_LIBS) $(LIBS)
 
-nfs.gen: nfs.lo libdcm.a $(MR_LIBDEP)
-	$(LIBTOOL) --mode=link $(CC) -static -o $@ $(LDFLAGS) nfs.lo libdcm.a $(SQL_LIBS) $(LIBS)
-
 dhcp.gen: dhcp.lo libdcm.a $(MR_LIBDEP)
 	$(LIBTOOL) --mode=link $(CC) -static -o $@ $(LDFLAGS) dhcp.lo libdcm.a $(SQL_LIBS) $(LIBS)
 
@@ -140,6 +135,3 @@
 
 cups-print.gen: cups-print.lo libdcm.a $(MR_LIBDEP)
 	$(LIBTOOL) --mode=link $(CC) -static -o $@ $(LDFLAGS) cups-print.lo libdcm.a $(SQL_LIBS) $(LIBS)
-
-cups-cluster.gen: cups-cluster.lo libdcm.a $(MR_LIBDEP)
-	$(LIBTOOL) --mode=link $(CC) -static -o $@ $(LDFLAGS) cups-cluster.lo libdcm.a $(SQL_LIBS) $(LIBS)

Modified: trunk/third/moira/gen/dhcp.pc
===================================================================
--- trunk/third/moira/gen/dhcp.pc	2012-02-17 19:10:33 UTC (rev 25454)
+++ trunk/third/moira/gen/dhcp.pc	2012-02-29 20:24:47 UTC (rev 25455)
@@ -1,4 +1,4 @@
-/* $Id: dhcp.pc 4032 2011-03-15 16:32:48Z zacheiss $
+/* $Id: dhcp.pc 4051 2011-09-08 18:46:37Z zacheiss $
  *
  * This generates the dhcpd.conf.print and associated files.
  *
@@ -24,7 +24,7 @@
 
 EXEC SQL INCLUDE sqlca;
 
-RCSID("$HeadURL: svn+ssh://svn.mit.edu/moira/trunk/moira/gen/dhcp.pc $ $Id: dhcp.pc 4032 2011-03-15 16:32:48Z zacheiss $");
+RCSID("$HeadURL: svn+ssh://svn.mit.edu/moira/trunk/moira/gen/dhcp.pc $ $Id: dhcp.pc 4051 2011-09-08 18:46:37Z zacheiss $");
 
 char *whoami = "dhcp.gen";
 char *db = "moira/moira";
@@ -105,7 +105,7 @@
     FROM printers pr, machine m, machine m2, hwaddrmap hw
     WHERE pr.type != 'ALIAS' AND pr.mach_id != 0
     AND pr.mach_id = m.mach_id AND m.mach_id = hw.mach_id AND m.status != 3
-    AND pr.loghost = m2.mach_id AND (pr.status = 1 OR pr.status = 2)
+    AND pr.loghost = m2.mach_id AND (pr.status = 1 OR pr.status = 2 OR pr.status = 4)
     ORDER BY hw.hwaddr, m.name;
   EXEC SQL OPEN csr_boot;
   while (1)
@@ -167,7 +167,7 @@
     WHERE pr.hwtype LIKE 'HP%' AND pr.mach_id != 0
     AND pr.mach_id = m.mach_id AND m.mach_id = hw.mach_id AND m.status != 3
     AND pr.rm = m2.mach_id AND pr.loghost = m3.mach_id AND pr.type != 'ALIAS'
-    AND (pr.status = 1 OR pr.status = 2);
+    AND (pr.status = 1 OR pr.status = 2 OR pr.status = 4);
   EXEC SQL OPEN csr_boot2;
   while (1)
     {
@@ -205,7 +205,7 @@
 	fprintf(out, "trap-dest: %s\n", logaddr);
 
       /* Don't output any allow: lines for status 2 printers; they should be unrestricted. */
-      if (status == 1)
+      if (status == 1 || status == 4)
 	{
 	  if (*logaddr)
 	    fprintf(out, "allow: %s\n", logaddr);

Modified: trunk/third/moira/gen/dhcp.sh
===================================================================
--- trunk/third/moira/gen/dhcp.sh	2012-02-17 19:10:33 UTC (rev 25454)
+++ trunk/third/moira/gen/dhcp.sh	2012-02-29 20:24:47 UTC (rev 25455)
@@ -1,5 +1,5 @@
 #! /bin/sh
-# $Id: dhcp.sh 3956 2010-01-05 20:56:56Z zacheiss $
+# $Id: dhcp.sh 4058 2011-11-16 21:32:41Z zacheiss $
 
 if [ -d /var/athena ] && [ -w /var/athena ]; then
     exec >/var/athena/moira_update.log 2>&1
@@ -20,6 +20,7 @@
 BOOTFOOT=/var/boot/dhcpd.conf.foot
 BOOTFILE=/var/boot/dhcpd.conf
 PSWDFILE=/var/boot/hp.add
+ACLFILE=/var/boot/ip-acl.add
 
 # Alert if the tar file or other needed files do not exist
 test -r $TARFILE || exit $MR_MISSINGFILE
@@ -32,6 +33,10 @@
 
 # Append passwords, etc., to the new files
 for f in `find /var/boot/hp -name \*.new -print`; do
+    grep '^allow:' $f >/dev/null 2>&1
+    if [ $? = 0 ]; then
+        cat $ACLFILE >> $f
+    fi
     cat $PSWDFILE >> $f
     mv $f /var/boot/hp/`basename $f .new`
 done

Modified: trunk/third/moira/gen/directory.pc
===================================================================
--- trunk/third/moira/gen/directory.pc	2012-02-17 19:10:33 UTC (rev 25454)
+++ trunk/third/moira/gen/directory.pc	2012-02-29 20:24:47 UTC (rev 25455)
@@ -1,4 +1,4 @@
-/* $Id: directory.pc 4042 2011-06-28 15:57:24Z zacheiss $
+/* $Id: directory.pc 4061 2011-12-07 20:33:13Z zacheiss $
  *
  * This generates a master /etc/passwd containing all active (status != 0)
  * accounts.
@@ -20,7 +20,7 @@
 
 EXEC SQL INCLUDE sqlca;
 
-RCSID("$HeadURL: svn+ssh://svn.mit.edu/moira/trunk/moira/gen/directory.pc $ $Id: directory.pc 4042 2011-06-28 15:57:24Z zacheiss $");
+RCSID("$HeadURL: svn+ssh://svn.mit.edu/moira/trunk/moira/gen/directory.pc $ $Id: directory.pc 4061 2011-12-07 20:33:13Z zacheiss $");
 
 char *whoami = "directory.gen";
 char *db = "moira/moira";
@@ -64,7 +64,8 @@
     login, last, first, middle, office_addr, office_phone, 
     home_addr, home_phone, clearid, type 
     FROM users WHERE status = 1 AND type != 'SYSTEM' AND type != 'STAFF'
-    AND type != 'TEST' AND type != 'REGTEST' AND type != 'SHARED' AND type NOT LIKE 'GUES%';
+    AND type != 'TEST' AND type != 'REGTEST' AND type != 'SHARED'
+    AND type != 'MGMT' AND type != 'DOOMED' AND type NOT LIKE 'GUES%';
   EXEC SQL OPEN x;
   while (1)
     {

Modified: trunk/third/moira/gen/nagios-cluster.gen
===================================================================
--- trunk/third/moira/gen/nagios-cluster.gen	2012-02-17 19:10:33 UTC (rev 25454)
+++ trunk/third/moira/gen/nagios-cluster.gen	2012-02-29 20:24:47 UTC (rev 25455)
@@ -1,6 +1,6 @@
 #!/moira/bin/perl -Tw
 
-# $Id: nagios-cluster.gen 4047 2011-08-22 21:04:03Z jweiss $
+# $Id: nagios-cluster.gen 4054 2011-10-02 15:55:43Z zacheiss $
 # The following exit codes are defined and MUST BE CONSISTENT with the
 # error codes the library uses:
 $MR_DBMS_ERR = 47836421;
@@ -116,8 +116,9 @@
 print OUT "\n### Printers\n\n";
 
 $sth0 = $dbh->prepare("SELECT UNIQUE m.name FROM machine m, printers p " .
-		     "WHERE (p.type = 'DORM' OR p.type ='CLUSTER') " .
-		     "AND p.mach_id = m.mach_id AND m.status=1")
+		      "WHERE (p.type = 'DORM' OR p.type ='CLUSTER') " .
+		      "AND p.mach_id = m.mach_id AND m.status=1 " .
+		      "AND (p.status = 1 OR p.status = 4)")
     || exit $MR_DBMS_ERR;
 
 $sth0->execute || exit $MR_DBMS_ERR;
@@ -147,6 +148,12 @@
 	use			hpjd-service
 	}
 
+define service{
+	host_name		$name
+	contact_groups		noone
+	use			ipacl-service
+	}
+
 END
 
 }

Added: trunk/third/moira/gen/printer-list.gen
===================================================================
--- trunk/third/moira/gen/printer-list.gen	                        (rev 0)
+++ trunk/third/moira/gen/printer-list.gen	2012-02-29 20:24:47 UTC (rev 25455)
@@ -0,0 +1,35 @@
+#!/moira/bin/perl -Tw
+
+# $Id: nagios-cluster.gen 4047 2011-08-22 21:04:03Z jweiss $
+# The following exit codes are defined and MUST BE CONSISTENT with the
+# error codes the library uses:
+$MR_DBMS_ERR = 47836421;
+$MR_OCONFIG = 47836460;
+
+$outfile = '/moira/dcm/printer-list.out';
+
+use DBI;
+
+umask 022;
+open(OUT, ">$outfile") || exit $MR_OCONFIG;
+
+$dbh = DBI->connect("dbi:Oracle:moira", "moira", "moira")
+  || exit $MR_DBMS_ERR;
+
+$sth0 = $dbh->prepare("SELECT UNIQUE m.name FROM machine m, printers p " .
+		      "WHERE (p.type = 'DORM' OR p.type ='CLUSTER') " .
+		      "AND p.mach_id = m.mach_id AND m.status=1 " .
+		      "AND (p.status=4 OR p.status=1)")
+	|| exit $MR_DBMS_ERR;
+
+$sth0->execute || exit $MR_DBMS_ERR;
+
+while (($name) = $sth0->fetchrow_array) {
+    next if $name eq "[NONE]";
+    print OUT "$name\n";
+}
+
+close(OUT);
+$dbh->disconnect;
+
+exit 0;


Property changes on: trunk/third/moira/gen/printer-list.gen
___________________________________________________________________
Added: svn:executable
   + *

Modified: trunk/third/moira/gen/spwatch.gen
===================================================================
--- trunk/third/moira/gen/spwatch.gen	2012-02-17 19:10:33 UTC (rev 25454)
+++ trunk/third/moira/gen/spwatch.gen	2012-02-29 20:24:47 UTC (rev 25455)
@@ -1,5 +1,5 @@
 #!/moira/bin/perl -Tw
-# $Id: spwatch.gen 4030 2011-03-04 21:01:14Z zacheiss $
+# $Id: spwatch.gen 4051 2011-09-08 18:46:37Z zacheiss $
 #
 # The following exit codes are defined and MUST BE CONSISTENT with the
 # error codes the library uses:
@@ -15,7 +15,7 @@
 
 $sth = $dbh->prepare("SELECT m.name FROM printers p, ".
 		     "machine m WHERE p.type = 'SAP' AND p.mach_id = ".
-		     "m.mach_id AND (p.status = 1 OR p.status = 2) AND m.status != 3 " .
+		     "m.mach_id AND (p.status = 1 OR p.status = 2 OR p.status = 4) AND m.status != 3 " .
 		     "ORDER BY m.name") || exit $MR_DBMS_ERR;
 
 $sth->execute || exit $MR_DBMS_ERR;

Modified: trunk/third/moira/gen/warehouse-lists.pc
===================================================================
--- trunk/third/moira/gen/warehouse-lists.pc	2012-02-17 19:10:33 UTC (rev 25454)
+++ trunk/third/moira/gen/warehouse-lists.pc	2012-02-29 20:24:47 UTC (rev 25455)
@@ -1,4 +1,4 @@
-/* $Id: warehouse-lists.pc 3956 2010-01-05 20:56:56Z zacheiss $
+/* $Id: warehouse-lists.pc 4052 2011-09-19 14:56:35Z zacheiss $
  *
  * (c) Copyright 2008 by the Massachusetts Institute of Technology.
  */
@@ -92,20 +92,30 @@
 {
   EXEC SQL BEGIN DECLARE SECTION;
   char *l = list;
-  int lid = id;
+  int lid = id, count;
   char acl_type[LIST_ACL_TYPE_SIZE], modtime[LIST_MODTIME_SIZE];
   char acl_name[STRINGS_STRING_SIZE], login[USERS_LOGIN_SIZE];
-  char principal[STRINGS_STRING_SIZE];
-  int acl_id;
+  char principal[STRINGS_STRING_SIZE], description[LIST_DESCRIPTION_SIZE];
+  int acl_id, active, maillist, grouplist, nfsgroup, publicflg, hidden;
   EXEC SQL END DECLARE SECTION;
   char *maybecomma = "";
 
-  EXEC SQL SELECT acl_type, acl_id, modtime INTO :acl_type, :acl_id, :modtime
+  EXEC SQL SELECT acl_type, acl_id, modtime, active, maillist,
+    grouplist, nfsgroup, publicflg, hidden, description INTO :acl_type,
+    :acl_id, :modtime, :active, :maillist, :grouplist, :nfsgroup,
+    :publicflg, :hidden, :description	    
     FROM list WHERE list_id = :lid;
-
+  
   strtrim(acl_type);
   strtrim(modtime);
-  
+  strtrim(description);
+
+  for (count = 0; count < strlen(description); count++)
+    {
+      if (description[count] == '|')
+	description[count] = '-';
+    }
+
   strcpy(acl_name, "NONE");
   if (strcmp(acl_type, "LIST") == 0)
     EXEC SQL SELECT name into :acl_name FROM list WHERE list_id = :acl_id;
@@ -115,7 +125,8 @@
     EXEC SQL SELECT string into :acl_name FROM strings WHERE string_id = :acl_id;
   strtrim(acl_name);
 
-  fprintf(out, "%s|%s|%s|", list, acl_type, acl_name);
+  fprintf(out, "%s|%s|%s|%d|%d|%d|%d|%d|%d|%s|", list, acl_type,
+	  acl_name, active, maillist, grouplist, nfsgroup, publicflg, hidden, description);
 
   EXEC SQL DECLARE u_cursor CURSOR FOR
     SELECT UNIQUE u.login FROM users u, imembers i, list l

Modified: trunk/third/moira/incremental/ldap/winad.c
===================================================================
--- trunk/third/moira/incremental/ldap/winad.c	2012-02-17 19:10:33 UTC (rev 25454)
+++ trunk/third/moira/incremental/ldap/winad.c	2012-02-29 20:24:47 UTC (rev 25455)
@@ -1,4 +1,4 @@
-/* $HeadURL: svn+ssh://svn.mit.edu/moira/trunk/moira/incremental/ldap/winad.c $ $Id: winad.c 4020 2010-09-02 13:46:09Z zacheiss $ */
+/* $HeadURL: svn+ssh://svn.mit.edu/moira/trunk/moira/incremental/ldap/winad.c $ $Id: winad.c 4062 2011-12-07 21:07:25Z zacheiss $ */
 /* ldap.incr arguments example
  *
  * arguments when moira creates the account - ignored by ldap.incr since the 
@@ -360,13 +360,17 @@
 CN=Massachusetts Institute of Technology,CN=Microsoft Exchange,\
 CN=Services,CN=Configuration,"
 
-#define ALL_ADDRESS_LIST_PREFIX "CN=All Users,CN=All Address Lists,\
+#define ALL_USERS_ADDRESS_LIST_PREFIX "CN=All Users,CN=All Address Lists,\
 CN=Address Lists Container,CN=Massachusetts Institute of Technology,\
 CN=Microsoft Exchange,CN=Services,CN=Configuration,"
 
 #define X500_PREFIX "X500:/o=Massachusetts Institute of Technology/\
 ou=Exchange Administrative Group (FYDIBOHF23SPDLT)/cn=Recipients"
 
+#define RBAC_POLICY_PREFIX "CN=Default Role Assignment Policy,\
+CN=Policies,CN=RBAC,CN=Massachusetts Institute of Technology,\
+CN=Microsoft Exchange,CN=Services,CN=Configuration,"
+
 #define ADD_ATTR(t, v, o) 		\
   mods[n] = malloc(sizeof(LDAPMod));	\
   mods[n]->mod_op = o;	                \
@@ -391,6 +395,7 @@
 #define SET_PASSWORD "SET_PASSWORD:"
 #define EXCHANGE "EXCHANGE:"
 #define REALM "REALM:"
+#define UPDATE_NAME_INFO "UPDATE_NAME_INFO:"
 #define ACTIVE_DIRECTORY "ACTIVE_DIRECTORY:"
 #define PORT "PORT:"
 #define PROCESS_MACHINE_CONTAINER "PROCESS_MACHINE_CONTAINER:"
@@ -441,6 +446,7 @@
 int  GroupPopulateDelete = 0;
 int  group_members = 0;
 int  max_group_members = 0;
+int  update_name_info = 1;
 
 struct sockaddr_in  kdc_server;
 int                 kdc_socket;
@@ -3339,7 +3345,7 @@
 		   LDAP_MOD_REPLACE);
 	  ADD_ATTR("showInAddressBook", address_book_v, LDAP_MOD_REPLACE);
 	} else {
-	  hide_address_lists_v[0] = NULL;
+	  hide_address_lists_v[0] = "FALSE";
 	  ADD_ATTR("msExchHideFromAddressLists", hide_address_lists_v, 
 		   LDAP_MOD_REPLACE);
 	}
@@ -4140,6 +4146,7 @@
   char *homeMDB_v[] = {NULL, NULL};
   char *homeServerName_v[] = {NULL, NULL};
   char *query_base_dn_v[] = {NULL, NULL};
+  char *rbac_policy_link_v[] = {NULL, NULL};
   char *mail_nickname_v[] = {NULL, NULL};
   char *mdbUseDefaults_v[] = {NULL, NULL};
   char userAccountControlStr[80];
@@ -4163,6 +4170,11 @@
   char principal[256];
   char status[256];
   char query_base_dn[256];
+  char rbac_policy_link[256];
+  char mit_address_list[256];
+  char global_address_list[256];
+  char email_address_list[256];
+  char all_users_address_list[256];
   char acBERBuf[N_SD_BER_BYTES];
   LDAPControl sControl = {"1.2.840.113556.1.4.801",
                           { N_SD_BER_BYTES, acBERBuf },
@@ -4204,6 +4216,19 @@
   sprintf(query_base_dn, "%s%s", ADDRESS_LIST_PREFIX, dn_path);
   query_base_dn_v[0] = query_base_dn;
 
+  sprintf(rbac_policy_link, "%s%s", RBAC_POLICY_PREFIX, dn_path);
+  rbac_policy_link_v[0] = rbac_policy_link;
+
+  sprintf(mit_address_list, "%s%s", ADDRESS_LIST_PREFIX, dn_path);
+  address_book_v[0] = mit_address_list;
+  sprintf(global_address_list, "%s%s", GLOBAL_ADDRESS_LIST_PREFIX, dn_path);
+  address_book_v[1] = global_address_list;
+  sprintf(email_address_list, "%s%s", EMAIL_ADDRESS_LIST_PREFIX, dn_path);
+  address_book_v[2] = email_address_list;
+  sprintf(all_users_address_list, "%s%s", ALL_USERS_ADDRESS_LIST_PREFIX, 
+	  dn_path);
+  address_book_v[3] = all_users_address_list;
+
   mail_nickname_v[0] = user_name;
 
   memset(mail, '\0', sizeof(mail));
@@ -4320,10 +4345,13 @@
 	      homeServerName_v[0] = homeServerName;
 
 	      n = 0;
-	      hide_address_lists_v[0] = "FALSE";
+              hide_address_lists_v[0] = "FALSE";
 	      ADD_ATTR("msExchHideFromAddressLists", hide_address_lists_v,
 		       LDAP_MOD_ADD);
 	      ADD_ATTR("msExchQueryBaseDN", query_base_dn_v, LDAP_MOD_REPLACE);
+	      ADD_ATTR("msExchRBACPolicyLink", rbac_policy_link_v, 
+		       LDAP_MOD_REPLACE);
+	      ADD_ATTR("showInAddressBook", address_book_v, LDAP_MOD_REPLACE);
 	      ADD_ATTR("mailNickName", mail_nickname_v, LDAP_MOD_ADD);
 	      ADD_ATTR("homeMDB", homeMDB_v, LDAP_MOD_ADD);
 	      mdbUseDefaults_v[0] = "TRUE";
@@ -4560,12 +4588,15 @@
     strcat(displayName, last);
   }
 
-  if(strlen(displayName))
-    rc = attribute_update(ldap_handle, distinguished_name, displayName, 
-			  "displayName", user_name);
-  else
-    rc = attribute_update(ldap_handle, distinguished_name, user_name,
-			  "displayName", user_name);
+  if(update_name_info) 
+    {
+      if(strlen(displayName))
+	rc = attribute_update(ldap_handle, distinguished_name, displayName, 
+			      "displayName", user_name);
+      else
+	rc = attribute_update(ldap_handle, distinguished_name, user_name,
+			      "displayName", user_name);
+    }
 
   if(!ActiveDirectory)
     {
@@ -4583,27 +4614,30 @@
 			    "eduPersonNickname", user_name);
     }
 
-  if(strlen(first))
-    rc = attribute_update(ldap_handle, distinguished_name, first, 
-			  "givenName", user_name);
-  else
-    rc = attribute_update(ldap_handle, distinguished_name, "",
-			  "givenName", user_name);
-
-  if(strlen(middle) == 1) 
-    rc = attribute_update(ldap_handle, distinguished_name, middle,
-			  "initials", user_name);
-  else 
-    rc = attribute_update(ldap_handle, distinguished_name, "",
-			  "initials", user_name);
+  if(update_name_info) 
+    {
+      if(strlen(first))
+	rc = attribute_update(ldap_handle, distinguished_name, first, 
+			      "givenName", user_name);
+      else
+	rc = attribute_update(ldap_handle, distinguished_name, "",
+			      "givenName", user_name);
+      
+      if(strlen(middle) == 1) 
+	rc = attribute_update(ldap_handle, distinguished_name, middle,
+			      "initials", user_name);
+      else 
+	rc = attribute_update(ldap_handle, distinguished_name, "",
+			      "initials", user_name);
+      
+      if(strlen(last))
+	rc = attribute_update(ldap_handle, distinguished_name, last,
+			      "sn", user_name);
+      else 
+	rc = attribute_update(ldap_handle, distinguished_name, "",
+			      "sn", user_name);
+    }
   
-  if(strlen(last))
-    rc = attribute_update(ldap_handle, distinguished_name, last,
-			  "sn", user_name);
-  else 
-    rc = attribute_update(ldap_handle, distinguished_name, "",
-			  "sn", user_name);
-
   if(ActiveDirectory)
     {
       rc = attribute_update(ldap_handle, distinguished_name, Uid, "uid", 
@@ -4664,7 +4698,7 @@
     {
       if (Exchange)
 	{
-	  hide_address_lists_v[0] = NULL;
+	  hide_address_lists_v[0] = "FALSE";
 	  ADD_ATTR("msExchHideFromAddressLists", hide_address_lists_v,
 		   LDAP_MOD_REPLACE);
 	}
@@ -5020,6 +5054,11 @@
   char proxy_address[256];
   char mail_nickname[256];
   char query_base_dn[256];
+  char rbac_policy_link[256];
+  char mit_address_list[256];
+  char global_address_list[256];
+  char email_address_list[256];
+  char all_users_address_list[256];
   char displayName[256];
   char address_book[1024];
   char alt_recipient[256];
@@ -5059,6 +5098,7 @@
   char *proxy_address_v[] = {NULL, NULL};
   char *mail_nickname_v[] = {NULL, NULL};
   char *query_base_dn_v[] = {NULL, NULL};
+  char *rbac_policy_link_v[] = {NULL, NULL};
   char *address_book_v[] = {NULL, NULL, NULL, NULL, NULL};
   char *homeMDB_v[] = {NULL, NULL};
   char *homeServerName_v[] = {NULL, NULL};
@@ -5129,6 +5169,11 @@
   memset(WinProfileDir, '\0', sizeof(WinProfileDir));
   memset(displayName, '\0', sizeof(displayName));
   memset(query_base_dn, '\0', sizeof(query_base_dn));
+  memset(rbac_policy_link, '\0', sizeof(rbac_policy_link));
+  memset(mit_address_list, '\0', sizeof(mit_address_list));
+  memset(global_address_list, '\0', sizeof(global_address_list));
+  memset(email_address_list, '\0', sizeof(email_address_list));
+  memset(all_users_address_list, '\0', sizeof(all_users_address_list));
   memset(filesys_name, '\0', sizeof(filesys_name));
   strcpy(WinHomeDir, av[U_WINHOMEDIR]);
   strcpy(WinProfileDir, av[U_WINPROFILEDIR]);
@@ -5206,6 +5251,18 @@
     sprintf(contact_mail, "%s@mit.edu", user_name);    
   sprintf(query_base_dn, "%s%s", ADDRESS_LIST_PREFIX, call_args[1]);
   query_base_dn_v[0] = query_base_dn;
+  sprintf(rbac_policy_link, "%s%s", RBAC_POLICY_PREFIX, call_args[1]);
+  rbac_policy_link_v[0] = rbac_policy_link;
+  sprintf(mit_address_list, "%s%s", ADDRESS_LIST_PREFIX, call_args[1]);
+  address_book_v[0] = mit_address_list;
+  sprintf(global_address_list, "%s%s", GLOBAL_ADDRESS_LIST_PREFIX, 
+	  call_args[1]);
+  address_book_v[1] = global_address_list;
+  sprintf(email_address_list, "%s%s", EMAIL_ADDRESS_LIST_PREFIX, call_args[1]);
+  address_book_v[2] = email_address_list;
+  sprintf(all_users_address_list, "%s%s", ALL_USERS_ADDRESS_LIST_PREFIX, 
+	  call_args[1]);
+  address_book_v[3] = all_users_address_list;
   sprintf(alt_recipient, "cn=%s@exchange-forwarding.mit.edu,%s,%s", user_name,
 	  contact_ou, call_args[1]);
   sprintf(search_string, "@%s", uppercase(ldap_domain));
@@ -5269,6 +5326,8 @@
 	}
 
       ADD_ATTR("msExchQueryBaseDN", query_base_dn_v, LDAP_MOD_ADD);
+      ADD_ATTR("msExchRBACPolicyLink", rbac_policy_link_v, LDAP_MOD_ADD);
+      ADD_ATTR("showInAddressBook", address_book_v, LDAP_MOD_ADD);
       ADD_ATTR("mailNickName", mail_nickname_v, LDAP_MOD_ADD);
       ADD_ATTR("homeMDB", homeMDB_v, LDAP_MOD_ADD);
       mdbUseDefaults_v[0] = "TRUE";
@@ -5936,7 +5995,7 @@
 static int illegalchars[] = {
   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* ^@ - ^O */
   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* ^P - ^_ */
-  1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, /* SPACE - / */
+  1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, /* SPACE - / */
   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, /* 0 - ? */
   0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* @ - O */
   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, /* P - _ */
@@ -9002,6 +9061,17 @@
                     max_group_members = atoi(temp1);
                   }
               }
+	    else if(!strncmp(temp, UPDATE_NAME_INFO, 
+			     strlen(UPDATE_NAME_INFO))) 
+	      {
+		if(strlen(temp) > (strlen(UPDATE_NAME_INFO))) 
+		  {
+		    strcpy(temp1, &temp[strlen(UPDATE_NAME_INFO)]);
+		    StringTrim(temp1);
+		    if (!strcasecmp(temp1, "NO"))
+		      update_name_info = 0;
+		  }
+	      }
             else
 	      {
                 if (strlen(ldap_domain) != 0)
@@ -9166,6 +9236,9 @@
   char     sub_filter[1024];
   char     search_path[1024];
   char     range[1024];
+  char     *owningServerName;
+  char     *legacyExchangeDN;
+  char     temp[1024];
   char     *attr_array[3];
   char     *s;
   int      homeMDB_count = -1;
@@ -9205,9 +9278,13 @@
       
       while(gPtr) {
 	if (((s = strstr(gPtr->dn, "Public")) != (char *) NULL) ||
+	    ((s = strstr(gPtr->dn, "public")) != (char *) NULL) || 
 	    ((s = strstr(gPtr->dn, "Recover")) != (char *) NULL) || 
+	    ((s = strstr(gPtr->dn, "recover")) != (char *) NULL) || 
 	    ((s = strstr(gPtr->dn, "Reserve")) != (char *) NULL) ||
-	    ((s = strstr(gPtr->dn, "PF")) != (char *) NULL))
+	    ((s = strstr(gPtr->dn, "reserve")) != (char *) NULL) ||
+	    ((s = strstr(gPtr->dn, "PF")) != (char *) NULL) ||
+	    ((s = strstr(gPtr->dn, "pf")) != (char *) NULL))
 	  {
 	    gPtr = gPtr->next;
 	    continue;
@@ -9309,15 +9386,53 @@
   
   if(group_count) 
     {
-      *homeServerName = strdup(group_base->value);
-      if((s = strrchr(*homeServerName, '/')) != (char *) NULL) 
+      legacyExchangeDN = strdup(group_base->value);
+      if((s = strrchr(legacyExchangeDN, '/')) != (char *) NULL) 
 	{
 	  *s = '\0';
 	}
+
+      if((s = strrchr(legacyExchangeDN, '/')) != (char *) NULL) 
+	{
+	  *s = '\0';
+	}
     } 
 
   linklist_free(group_base);
   
+  /* Ok now we need to lookup the owning server as in Exchange 2010 as this
+     is now handled differently.
+  */
+
+  attr_array[0] = "msExchOwningServer";
+  attr_array[1] = NULL;	
+  
+  group_count = 0;
+  group_base = NULL;
+  
+  if ((rc = linklist_build(ldap_handle, *homeMDB, filter, 
+			   attr_array, &group_base, 
+			   &group_count, 
+			   LDAP_SCOPE_SUBTREE)) != 0) 
+    {
+      com_err(whoami, 0, "Unable to find msExchHomeServerName %s",
+	      ldap_err2string(rc));
+      return(rc);
+    }  
+  
+  if(group_count) 
+    {
+      owningServerName = strdup(group_base->value);
+      if((s = strchr(owningServerName, ',')) != (char *) NULL) 
+	{
+	  *s = '\0';
+	}
+    } 
+
+  sprintf(temp, "%s/%s", legacyExchangeDN, owningServerName);
+  *homeServerName = strdup(temp);
+  linklist_free(group_base);
+  
   return(rc);
 }
       
@@ -9353,10 +9468,6 @@
   int i = 0;
   int spaces = 0;
 
-  if(ActiveDirectory) {
-    return strdup(s);
-  }
-
   memset(string, '\0', sizeof(string));
 
   q = s;

Modified: trunk/third/moira/reg_svr/errors
===================================================================
--- trunk/third/moira/reg_svr/errors	2012-02-17 19:10:33 UTC (rev 25454)
+++ trunk/third/moira/reg_svr/errors	2012-02-29 20:24:47 UTC (rev 25455)
@@ -3,14 +3,14 @@
 to continue. The error is: "%s".
 
 Please try again later. If this problem persists, contact the Athena
-User Accounts Office in N42-105A, x3-1325.
+User Accounts Office at 617-253-1325 or accounts@mit.edu.
 # 2 PROTOCOL_ERROR
 A protocol error has occurred, and the registration applet is unable
 to continue. This may indicate that you are using an out-of-date
 version of the registration applet.
 
 If you are unable to fix this problem, contact the Athena User
-Accounts Office in N42-105A, x3-1325.
+Accounts Office at 617-253-1325 or accounts@mit.edu.
 # 3 DATABASE_CLOSED
 Sorry, it appears that the Moira database (which is needed for account
 registration) is currently closed. Please try again later.
@@ -20,7 +20,7 @@
 out-of-date version of the registration applet.
 
 If you are unable to fix this problem, contact the Athena User
-Accounts Office in N42-105A, x3-1325.
+Accounts Office at 617-253-1325 or accounts@mit.edu.
 # 5 NOT_FOUND_IN_DATABASE
 The registration server was unable to locate you in the accounts
 database. Please make sure you typed in your name and MIT ID number
@@ -28,23 +28,23 @@
 
 If you are a new staff member, this may mean that you have not been
 entered into the database yet. Try again tomorrow. If this problem
-persists, contact the Athena User Accounts Office in N42-105A,
-x3-1325.
+persists, contact the Athena User Accounts Office at 617-253-1325 or 
+accounts@mit.edu.
 # 6 ALREADY_REGISTERED
 You have already registered for an account. The username you selected
 is "%s".
 
 If you don't remember your password, or you do not think that this is
-your account, contact the Athena User Accounts Office in N42-105A,
-x3-1325.
+your account, contact the Athena User Accounts Office at 617-253-1325 or
+accounts@mit.edu.
 # 7 ACCOUNT_DELETED
 Your account, "%s", has been deactivated, and you are not listed as
 eligible for another account. If you have any questions, contact
-the Athena User Accounts Office in N42-105A, x3-1325.
+the Athena User Accounts Office at 617-253-1325 or accounts@mit.edu.
 # 8 NOT_ELIGIBLE
 You were found in the database, but are listed as ineligible for an
 account. If you have any questions, contact the Athena User Accounts
-Office in N42-105A, x3-1325.
+Office at 617-253-1325 or accounts@mit.edu.
 # 9 FOUND
 OK. I've found you in the database: %s, account class %s.
 # 10 FORCED_USERNAME
@@ -57,7 +57,7 @@
 
 If you have lost your Athena Account Coupon, you will need to
 get a new one, by going to either the Student Services Center in
-Building 11, or the Athena User Accounts Office in N42-105A, x3-1325.
+Building 11, or the Athena User Accounts Office at 617-253-1325 or accounts@mit.edu.
 # 12 BAD_USERNAME
 "%s" is not a valid username. Your username must be between %d and %d
 characters long, must start with a lowercase letter, and must consist
@@ -69,7 +69,7 @@
 Oops. Your account was reserved with the username "%s", but that
 username is already taken. You will not be able to register your
 account until this problem is resolved. Please contact the Athena User
-Accounts Office in N42-105A, x3-1325.
+Accounts Office at 617-253-1325 or accounts@mit.edu.
 # 15 USERNAME_OK
 OK. I've reserved the username "%s" for you.
 # 16 PASSWORD_SHORT
@@ -85,13 +85,16 @@
 and password with the Kerberos server. The error was: "%s".
 
 Please try again later. If this problem persists, contact the Athena
-User Accounts Office in N42-105A, x3-1325.
+User Accounts Office at 617-253-1325 or accounts@mit.edu.
 # 20 DONE
 Your account has been registered and will become active later tonight.
 
 You should be able to log in by tomorrow morning using your Kerberos
 username (%s) and the password you chose.
 
+SAPweb Self-Service access (including employee benefits enrollment) will
+be available after 48 hours.
+
 MIT's central email service is in transition.
 
 Please note: To access your email account via a web browser (Firefox, 

Modified: trunk/third/moira/reg_svr/reg_svr.pc
===================================================================
--- trunk/third/moira/reg_svr/reg_svr.pc	2012-02-17 19:10:33 UTC (rev 25454)
+++ trunk/third/moira/reg_svr/reg_svr.pc	2012-02-29 20:24:47 UTC (rev 25455)
@@ -1,4 +1,4 @@
-/* $Id: reg_svr.pc 3960 2010-01-06 06:20:48Z zacheiss $
+/* $Id: reg_svr.pc 4071 2012-02-03 18:02:54Z zacheiss $
  *
  * Server for user registration with Moira and Kerberos.
  *
@@ -39,7 +39,7 @@
 
 EXEC SQL INCLUDE sqlca;
 
-RCSID("$HeadURL: svn+ssh://svn.mit.edu/moira/trunk/moira/reg_svr/reg_svr.pc $ $Id: reg_svr.pc 3960 2010-01-06 06:20:48Z zacheiss $");
+RCSID("$HeadURL: svn+ssh://svn.mit.edu/moira/trunk/moira/reg_svr/reg_svr.pc $ $Id: reg_svr.pc 4071 2012-02-03 18:02:54Z zacheiss $");
 
 char *whoami, *hostname, *shorthostname;
 
@@ -656,7 +656,10 @@
   if (status == MR_SUCCESS)
     {
       if (rc->user_status == US_NO_LOGIN_YET_KERBEROS_ONLY)
-	EXEC SQL UPDATE users SET login = :login WHERE unix_uid = :rc->uid;
+	{
+	  EXEC SQL UPDATE users SET login = :login WHERE unix_uid = :rc->uid;
+	  EXEC SQL COMMIT WORK;
+	}
       else
 	status = register_user(rc->uid, login);
     }

Modified: trunk/third/moira/regtape/staff.pc
===================================================================
--- trunk/third/moira/regtape/staff.pc	2012-02-17 19:10:33 UTC (rev 25454)
+++ trunk/third/moira/regtape/staff.pc	2012-02-29 20:24:47 UTC (rev 25455)
@@ -1,4 +1,4 @@
-/* $Id: staff.pc 4046 2011-08-18 18:46:48Z zacheiss $
+/* $Id: staff.pc 4066 2012-01-19 21:44:57Z zacheiss $
  *
  * Load data into Moira from Personnel Office data file
  *
@@ -19,7 +19,7 @@
 
 EXEC SQL INCLUDE sqlca;
 
-RCSID("$HeadURL: svn+ssh://svn.mit.edu/moira/trunk/moira/regtape/staff.pc $ $Id: staff.pc 4046 2011-08-18 18:46:48Z zacheiss $");
+RCSID("$HeadURL: svn+ssh://svn.mit.edu/moira/trunk/moira/regtape/staff.pc $ $Id: staff.pc 4066 2012-01-19 21:44:57Z zacheiss $");
 
 /* File format is:
  *
@@ -246,7 +246,7 @@
        !strstr(uppercase(e.xtitle), "PROFESSION")) ||
       strstr(uppercase(e.xtitle), "LECTURE"))
     e.type = "FACULTY";
-  if (!strcmp(e.dept, "LINCOLN LAB"))
+  if (strstr(uppercase(e.dept), "LINCOLN LAB"))
     e.type = "LINCOLN";
 
   FixCase(e.dept);

Modified: trunk/third/moira/regtape/student.pc
===================================================================
--- trunk/third/moira/regtape/student.pc	2012-02-17 19:10:33 UTC (rev 25454)
+++ trunk/third/moira/regtape/student.pc	2012-02-29 20:24:47 UTC (rev 25455)
@@ -21,7 +21,7 @@
 
 EXEC SQL INCLUDE sqlca;
 
-RCSID("$HeadURL: svn+ssh://svn.mit.edu/moira/trunk/moira/regtape/student.pc $ $Id: student.pc 4046 2011-08-18 18:46:48Z zacheiss $");
+RCSID("$HeadURL: svn+ssh://svn.mit.edu/moira/trunk/moira/regtape/student.pc $ $Id: student.pc 4060 2011-12-01 19:50:15Z zacheiss $");
 
 /* File format is:
 
@@ -138,9 +138,12 @@
 
   while ((e = get_next_entry(in)))
     {
-      /* Don't require secure registration for cross-registered students. */
-      if (!strcmp(e->reg_type, "Cross-Registered"))
-	process_entry(e, 0);
+      /* Don't require secure registration for cross-registered or
+       * special students.
+       */
+      if (!strcmp(e->reg_type, "Cross-Registered") ||
+          !strcmp(e->reg_type, "Special"))
+	process_entry(e, 0);   
       else
 	process_entry(e, 1);
       EXEC SQL COMMIT WORK;

Modified: trunk/third/moira/server/increment.pc
===================================================================
--- trunk/third/moira/server/increment.pc	2012-02-17 19:10:33 UTC (rev 25454)
+++ trunk/third/moira/server/increment.pc	2012-02-29 20:24:47 UTC (rev 25455)
@@ -1,4 +1,4 @@
-/* $Id: increment.pc 4021 2010-09-02 15:07:00Z zacheiss $
+/* $Id: increment.pc 4068 2012-02-02 21:31:10Z zacheiss $
  *
  * Deal with incremental updates
  *
@@ -21,7 +21,7 @@
 
 EXEC SQL INCLUDE sqlca;
 
-RCSID("$HeadURL: svn+ssh://svn.mit.edu/moira/trunk/moira/server/increment.pc $ $Id: increment.pc 4021 2010-09-02 15:07:00Z zacheiss $");
+RCSID("$HeadURL: svn+ssh://svn.mit.edu/moira/trunk/moira/server/increment.pc $ $Id: increment.pc 4068 2012-02-02 21:31:10Z zacheiss $");
 
 extern char *whoami;
 extern char *table_name[];
@@ -31,7 +31,7 @@
 int inc_running = 0;
 time_t inc_started;
 
-#define MAXARGC 16
+#define MAXARGC 20
 
 EXEC SQL WHENEVER SQLERROR DO dbmserr();
 
@@ -105,10 +105,10 @@
     case MACHINE_TABLE:
       sprintf(stmt_buf, "SELECT m.name, m.mach_id, m.vendor, m.model, m.os, m.location, "
 	      "m.contact, m.billing_contact, m.account_number, m.status, m.address,"
-	      "m.owner_type, m.owner_id, m.acomment, m.ocomment FROM machine m "
+	      "m.owner_type, m.owner_id, m.acomment, m.ocomment, m.snet_id FROM machine m "
 	      "WHERE %s", qual);
       dosql(before);
-      beforec = 15;
+      beforec = 16;
       name = xmalloc(0);
       id = atoi(before[12]);
       if (!strncmp(before[11], "USER", 4))
@@ -132,6 +132,9 @@
       id = atoi(before[14]);
       id_to_name(id, STRINGS_TABLE, &name);
       strcpy(before[14], name);
+      id = atoi(before[15]);
+      id_to_name(id, SUBNET_TABLE, &name);
+      strcpy(before[15], name);
       break;
     case HOSTALIAS_TABLE:
       strcpy(before[0], argv[0]);
@@ -324,10 +327,10 @@
     case MACHINE_TABLE:
       sprintf(stmt_buf, "SELECT m.name, m.mach_id, m.vendor, m.model, m.os, m.location, "
               "m.contact, m.billing_contact, m.account_number, m.status, m.address,"
-              "m.owner_type, m.owner_id, m.acomment, m.ocomment FROM machine m "
+              "m.owner_type, m.owner_id, m.acomment, m.ocomment, m.snet_id FROM machine m "
               "WHERE %s", qual);
       dosql(after);
-      afterc = 15;
+      afterc = 16;
       name = xmalloc(0);
       id = atoi(after[12]);
       if (!strncmp(after[11], "USER", 4))
@@ -351,6 +354,9 @@
       id = atoi(after[14]);
       id_to_name(id, STRINGS_TABLE, &name);
       strcpy(after[14], name);
+      id = atoi(after[15]);
+      id_to_name(id, SUBNET_TABLE, &name);
+      strcpy(after[15], name);
       break;
     case HOSTALIAS_TABLE:
       strcpy(after[0], argv[0]);

Modified: trunk/third/moira/server/qsetup.pc
===================================================================
--- trunk/third/moira/server/qsetup.pc	2012-02-17 19:10:33 UTC (rev 25454)
+++ trunk/third/moira/server/qsetup.pc	2012-02-29 20:24:47 UTC (rev 25455)
@@ -1,4 +1,4 @@
-/* $Id: qsetup.pc 4011 2010-07-06 15:55:47Z zacheiss $
+/* $Id: qsetup.pc 4063 2012-01-04 17:37:23Z zacheiss $
  *
  * Query setup routines
  *
@@ -21,7 +21,7 @@
 
 EXEC SQL INCLUDE sqlca;
 
-RCSID("$HeadURL: svn+ssh://svn.mit.edu/moira/trunk/moira/server/qsetup.pc $ $Id: qsetup.pc 4011 2010-07-06 15:55:47Z zacheiss $");
+RCSID("$HeadURL: svn+ssh://svn.mit.edu/moira/trunk/moira/server/qsetup.pc $ $Id: qsetup.pc 4063 2012-01-04 17:37:23Z zacheiss $");
 
 extern char *whoami;
 extern int dbms_errno, mr_errcode;
@@ -380,7 +380,7 @@
 static int badlistchars[] = {
   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* ^@ - ^O */
   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* ^P - ^_ */
-  1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, /* SPACE - / */
+  1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, /* SPACE - / */
   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, /* 0 - ? */
   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* @ - O */
   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, /* P - _ */

Modified: trunk/third/moira/server/queries2.c
===================================================================
--- trunk/third/moira/server/queries2.c	2012-02-17 19:10:33 UTC (rev 25454)
+++ trunk/third/moira/server/queries2.c	2012-02-29 20:24:47 UTC (rev 25455)
@@ -1,4 +1,4 @@
-/* $Id: queries2.c 4001 2010-04-21 20:38:45Z zacheiss $
+/* $Id: queries2.c 4072 2012-02-08 19:57:50Z zacheiss $
  *
  * This file defines the query dispatch table
  *
@@ -13,7 +13,7 @@
 
 #include "mr_et.h"
 
-RCSID("$HeadURL: svn+ssh://svn.mit.edu/moira/trunk/moira/server/queries2.c $ $Id: queries2.c 4001 2010-04-21 20:38:45Z zacheiss $");
+RCSID("$HeadURL: svn+ssh://svn.mit.edu/moira/trunk/moira/server/queries2.c $ $Id: queries2.c 4072 2012-02-08 19:57:50Z zacheiss $");
 
 /* VALOBJS
  * These are commonly used validation objects, defined here so that they
@@ -5440,7 +5440,7 @@
     USERS_TABLE,
     0,
     gurv_fields,
-    2,
+    1,
     0,
     1,
     NULL,


home help back first fref pref prev next nref lref last post