]> andersk Git - moira.git/blobdiff - server/qsupport.qc
update for use with new com_err library
[moira.git] / server / qsupport.qc
index 4198506f0359706edb964d2ecc95af7964c4d21a..ad4f988f763a3f9723fa4926a9cb6e945af75359 100644 (file)
@@ -4,6 +4,8 @@
  *     $Header$
  *
  *     Copyright (C) 1987 by the Massachusetts Institute of Technology
+ *     For copying and distribution information, please see the file
+ *     <mit-copyright.h>.
  *
  */
 
 static char *rcsid_qsupport_qc = "$Header$";
 #endif lint
 
+#include <mit-copyright.h>
 #include "query.h"
 #include "sms_server.h"
 #include <ctype.h>
 
 
 extern char *whoami, *strsave();
-extern int  ingres_errno;
+extern int ingres_errno, sms_errcode;
 
 
 /* Specialized Access Routines */
@@ -56,7 +59,6 @@ access_login(q, argv, cl)
 
     build_qual(q->qual, q->argc, argv, qual);
 ##  retrieve (id = u.users_id) where qual
-    if (ingres_errno != 0) return(ingres_errno);
 ##  inquire_equel(rowcount = "rowcount")
     if (rowcount != 1 || id != cl->users_id)
        return(SMS_PERM);
@@ -93,7 +95,6 @@ access_list(q, argv, cl)
 ##  repeat retrieve (acl_id = list.#acl_id, acl_type = list.#acl_type,
 ##                  gid = list.#gid, flags = list.#public) 
 ##        where list.#list_id = @list_id
-    if (ingres_errno != 0) return(ingres_errno);
 ##  inquire_equel(rowcount = "rowcount")
     if (rowcount != 1)
       return(SMS_INTERNAL);
@@ -141,7 +142,6 @@ access_visible_list(q, argv, cl)
     list_id = *(int *)argv[0];
 ##  repeat retrieve (flags = list.hidden, acl_id = list.#acl_id, 
 ##     acl_type = list.#acl_type) where list.#list_id = @list_id
-    if (ingres_errno != 0) return(ingres_errno);
 ##  inquire_equel(rowcount = "rowcount")
     if (rowcount != 1)
       return(SMS_INTERNAL);
@@ -181,7 +181,6 @@ access_vis_list_by_name(q, argv, cl)
     listname = argv[0];
 ##  repeat retrieve (flags = list.hidden, acl_id = list.#acl_id, 
 ##     acl_type = list.#acl_type) where list.#name = @listname
-    if (ingres_errno != 0) return(ingres_errno);
 ##  inquire_equel(rowcount = "rowcount");
     if (rowcount > 1)
       return(SMS_WILDCARD);
@@ -257,7 +256,6 @@ access_service(q, argv, cl)
     name = argv[0];
 ##  repeat retrieve (acl_id = servers.#acl_id, acl_type = servers.#acl_type)
 ##     where servers.#name = uppercase(@name)
-    if (ingres_errno != 0) return(ingres_errno);
 ##  inquire_equel(rowcount = "rowcount")
     if (rowcount > 1)
       return(SMS_PERM);
@@ -292,7 +290,6 @@ access_filesys(q, argv, cl)
     name = argv[0];
 ##  repeat retrieve (users_id = filesys.owner, list_id = filesys.owners)
 ##     where filesys.label = @name
-    if (ingres_errno != 0) return(ingres_errno);
 ##  inquire_equel(rowcount = "rowcount")
 
     if (rowcount != 1)
@@ -333,7 +330,6 @@ setup_ausr(q, argv, cl)
        if (set_next_object_id("uid", "users"))
          return(SMS_INGRES_ERR);
 ##      repeat retrieve (nuid = values.value) where values.name = "uid"
-       if (ingres_errno != 0) return(ingres_errno);
 ##     inquire_equel(rowcount = "rowcount")
        if (rowcount != 1)
          return(SMS_INTERNAL);
@@ -366,29 +362,23 @@ int setup_dusr(q, argv)
       return(SMS_IN_USE);
 
 ##  repeat delete nfsquota where nfsquota.users_id = @id
-    if (ingres_errno != 0) return(ingres_errno);
 ##  repeat retrieve (flag = any(members.member_id where members.member_id=@id
 ##                      and members.member_type = "USER"))
-    if (ingres_errno != 0) return(ingres_errno);
     if (flag)
        return(SMS_IN_USE);
 ##  repeat retrieve (flag = any(filesys.label where filesys.owner=@id))
-    if (ingres_errno != 0) return(ingres_errno);
     if (flag)
        return(SMS_IN_USE);
 ##  repeat retrieve (flag = any(list.name where list.acl_id=@id and
 ##                     list.acl_type = "USER"))
-    if (ingres_errno != 0) return(ingres_errno);
     if (flag)
        return(SMS_IN_USE);
 ##  repeat retrieve (flag = any(servers.name where servers.acl_id=@id and
 ##                     servers.acl_type = "USER"))
-    if (ingres_errno != 0) return(ingres_errno);
     if (flag)
        return(SMS_IN_USE);
 ##  repeat retrieve (flag=any(hostaccess.acl_id where hostaccess.acl_id=@id and
 ##                     hostaccess.acl_type = "USER"))
-    if (ingres_errno != 0) return(ingres_errno);
     if (flag)
        return(SMS_IN_USE);
     else
@@ -411,7 +401,6 @@ char **argv;
 ##                  flag = any(machine.name where machine.mach_id = u.pop_id 
 ##                                  and u.pop_id != 0 and u.users_id = @id))
 ##     where u.users_id = @id
-    if (ingres_errno != 0) return(ingres_errno);
     if (!flag)
       return(SMS_MACHINE);
     if (strcmp(strtrim(type), "POP"))
@@ -432,7 +421,6 @@ char **argv;
     user = *(int *)argv[0];
 ##  repeat retrieve (type = u.potype, id = u.pop_id)
 ##             where u.users_id = @user
-    if (ingres_errno != 0) return(ingres_errno);
 
     if (!strcmp(strtrim(type), "POP"))
       set_pop_usage(id, -1);
@@ -453,29 +441,23 @@ int setup_dmac(q, argv)
     id = *(int *)argv[0];
 ##  repeat retrieve (flag = any(users.login where users.potype = "POP" 
 ##                                               and users.pop_id=@id))
-    if (ingres_errno != 0) return(ingres_errno);
     if (flag)
        return(SMS_IN_USE);
 ##  repeat retrieve (flag = any(serverhosts.mach_id
 ##                              where serverhosts.mach_id=@id))
-    if (ingres_errno != 0) return(ingres_errno);
     if (flag)
        return(SMS_IN_USE);
 ##  repeat retrieve (flag = any(nfsphys.mach_id where nfsphys.mach_id=@id))
-    if (ingres_errno != 0) return(ingres_errno);
     if (flag)
        return(SMS_IN_USE);
 ##  repeat retrieve (flag = any(hostaccess.mach_id where hostaccess.mach_id=@id))
-    if (ingres_errno != 0) return(ingres_errno);
     if (flag)
        return(SMS_IN_USE);
 ##  repeat retrieve (flag = any(printcap.mach_id where printcap.mach_id=@id))
-    if (ingres_errno != 0) return(ingres_errno);
     if (flag)
        return(SMS_IN_USE);
 
 ##  repeat delete mcmap where mcmap.mach_id = @id
-    if (ingres_errno != 0) return(ingres_errno);
     return(SMS_SUCCESS);
 ##}
 
@@ -492,11 +474,9 @@ int setup_dclu(q, argv)
 
     id = *(int *)argv[0];
 ##  repeat retrieve (flag = any(mcmap.mach_id where mcmap.clu_id=@id))
-    if (ingres_errno != 0) return(ingres_errno);
     if (flag)
        return(SMS_IN_USE);
 ##  repeat retrieve (flag = any(svc.clu_id where svc.clu_id=@id))
-    if (ingres_errno != 0) return(ingres_errno);
     if (flag)
        return(SMS_IN_USE);
     else
@@ -529,7 +509,6 @@ char **argv;
            if (set_next_object_id("gid", "list"))
              return(SMS_INGRES_ERR);
 ##         repeat retrieve (ngid = values.value) where values.name = "gid"
-           if (ingres_errno != 0) return(ingres_errno);
            sprintf(argv[idx], "%d", ngid);
        } else {
            strcpy(argv[idx], "-1");
@@ -553,34 +532,27 @@ int setup_dlis(q, argv)
     id = *(int *)argv[0];
 ##  repeat retrieve (flag = any(members.member_id where members.member_id=@id
 ##                      and members.member_type = "LIST"))
-    if (ingres_errno != 0) return(ingres_errno);
     if (flag)
        return(SMS_IN_USE);
 ##  repeat retrieve (flag = any(members.member_id where members.list_id=@id))
-    if (ingres_errno != 0) return(ingres_errno);
     if (flag)
        return(SMS_IN_USE);
 ##  repeat retrieve (flag = any(filesys.label where filesys.owners=@id))
-    if (ingres_errno != 0) return(ingres_errno);
     if (flag)
        return(SMS_IN_USE);
 ##  repeat retrieve (flag = any(capacls.tag where capacls.list_id=@id))
-    if (ingres_errno != 0) return(ingres_errno);
     if (flag)
        return(SMS_IN_USE);
 ##  repeat retrieve (flag = any(list.name where list.acl_id=@id and
 ##                     list.acl_type = "LIST" and list.list_id != @id))
-    if (ingres_errno != 0) return(ingres_errno);
     if (flag)
        return(SMS_IN_USE);
 ##  repeat retrieve (flag = any(servers.name where servers.acl_id=@id and
 ##                     servers.acl_type = "LIST"))
-    if (ingres_errno != 0) return(ingres_errno);
     if (flag)
        return(SMS_IN_USE);
 ##  repeat retrieve (flag=any(hostaccess.acl_id where hostaccess.acl_id=@id and
 ##                     hostaccess.acl_type = "LIST"))
-    if (ingres_errno != 0) return(ingres_errno);
     if (flag)
        return(SMS_IN_USE);
 ##  repeat retrieve (flag = any(zephyr.class
@@ -588,7 +560,6 @@ int setup_dlis(q, argv)
 ##                   zephyr.sub_type = "LIST" and zephyr.sub_id = @id or
 ##                   zephyr.iws_type = "LIST" and zephyr.iws_id = @id or
 ##                   zephyr.iui_type = "LIST" and zephyr.iui_id = @id))
-    if (ingres_errno != 0) return(ingres_errno);
     if (flag)
         return(SMS_IN_USE);
     else
@@ -610,11 +581,9 @@ int setup_dsin(q, argv)
     name = argv[0];
 ##  repeat retrieve (flag = any(serverhosts.service 
 ##                             where serverhosts.service=uppercase(@name)))
-    if (ingres_errno != 0) return(ingres_errno);
     if (flag)
        return(SMS_IN_USE);
 ##  repeat retrieve (flag = servers.inprogress) where servers.#name = @name
-    if (ingres_errno != 0) return(ingres_errno);
     if (flag)
        return(SMS_IN_USE);
     else
@@ -637,7 +606,6 @@ int setup_dshi(q, argv)
     id = *(int *)argv[1];
 ##  repeat retrieve (flag=serverhosts.inprogress) 
 ##     where serverhosts.service=uppercase(@name) and serverhosts.mach_id=@id
-    if (ingres_errno != 0) return(ingres_errno);
     if (flag)
        return(SMS_IN_USE);
     else
@@ -718,7 +686,6 @@ setup_ufil(q, argv)
        status = check_nfs(mach_id, name, access);
        fid = *(int *)argv[0];
 ##     replace nfsquota (phys_id = var_phys_id) where nfsquota.filsys_id = fid
-       if (ingres_errno != 0) return(ingres_errno);
        return(status);
     } else
       return(SMS_SUCCESS);
@@ -760,14 +727,13 @@ setup_ufil(q, argv)
 ##           endretrieve
         }
 ##  }
-    if (ingres_errno != 0) return(ingres_errno);
 
     return(status);
 ##}
 
 
-/* setup_dfil: free any quota records associated with a filesystem
- * when it is deleted.
+/* setup_dfil: free any quota records and fsgroup info associated with
+ * a filesystem when it is deleted.  Also adjust the allocation numbers.
  */
 
 setup_dfil(q, argv, cl)
@@ -783,10 +749,10 @@ setup_dfil(q, argv, cl)
 ##  range of n is nfsphys
 ##  repeat replace n (allocated=n.allocated-sum(q.quota where q.filsys_id=@id))
 ##     where n.nfsphys_id = fs.phys_id and fs.filsys_id = @id
-    if (ingres_errno != 0) return(ingres_errno);
 
 ##  repeat delete q where q.filsys_id = @id
-    if (ingres_errno != 0) return(ingres_errno);
+##  repeat delete fsgroup where fsgroup.filsys_id = @id
+##  repeat delete fsgroup where fsgroup.group_id = @id
     return(SMS_SUCCESS);
 ##}
 
@@ -804,7 +770,6 @@ setup_dnfp(q, argv, cl)
 
     id = *(int *)argv[0];
 ##  repeat retrieve (exists = any(filesys.label where filesys.phys_id = @id))
-    if (ingres_errno != 0) return(ingres_errno);
     if (exists)
       return(SMS_IN_USE);
     return(SMS_SUCCESS);
@@ -829,10 +794,8 @@ setup_dnfq(q, argv, cl)
 ##  range of q is nfsquota
 ##  repeat retrieve (quota = q.#quota) where q.users_id = @user and
 ##     q.filsys_id = @fs
-    if (ingres_errno != 0) return(ingres_errno);
 ##  repeat replace nfsphys (allocated = nfsphys.allocated - @quota)
 ##     where nfsphys.nfsphys_id = filesys.#phys_id and filesys.filsys_id = @fs
-    if (ingres_errno != 0) return(ingres_errno);
     return(SMS_SUCCESS);
 ##}
 
@@ -860,7 +823,6 @@ set_modtime(q, argv, cl)
 
 ##  replace table (modtime = "now", modby = who, modwith = entity)
 ##      where table.#name = name
-    if (ingres_errno != 0) return(ingres_errno);
     return(SMS_SUCCESS);
 ##}
 
@@ -886,7 +848,6 @@ set_modtime_by_id(q, argv, cl)
     id = *(int *)argv[0];
 ##  replace table (modtime = "now", modby = who, modwith = entity)
 ##      where table.id_name = id
-    if (ingres_errno != 0) return(ingres_errno);
     return(SMS_SUCCESS);
 ##}
 
@@ -908,7 +869,6 @@ set_finger_modtime(q, argv, cl)
 
 ##  repeat replace u (fmodtime = "now", fmodby = @who, fmodwith = @entity)
 ##      where u.#users_id = @users_id
-    if (ingres_errno != 0) return(ingres_errno);
     return(SMS_SUCCESS);
 ##}
 
@@ -930,31 +890,28 @@ set_pobox_modtime(q, argv, cl)
 
 ##  repeat replace users (pmodtime = "now", pmodby = @who, pmodwith = @entity)
 ##      where users.#users_id = @users_id
-    if (ingres_errno != 0) return(ingres_errno);
     return(SMS_SUCCESS);
 ##}
 
 
-/* Sets the modtime on a machine record.  The machine name is in argv[0].
- * This routine is different from the generic set_modtime in that the
- * name is uppercased first.
+/* Like set_modtime, but uppercases the name first.
  */
 
-set_mach_modtime(q, argv, cl)
+set_uppercase_modtime(q, argv, cl)
     struct query *q;
     char **argv;
     client *cl;
 ##{
-##  char *host, *entity;
+##  char *name, *entity, *table;
 ##  int who;
 
     entity = cl->entity;
     who = cl->users_id;
+    table = q->rtable;
+    name = argv[0];
 
-    host = argv[0];
-##  repeat replace m (modtime = "now", modby = @who, modwith = @entity)
-##      where m.name = uppercase(@host)
-    if (ingres_errno != 0) return(ingres_errno);
+##  replace table (modtime = "now", modby = who, modwith = entity)
+##      where table.#name = uppercase(name)
     return(SMS_SUCCESS);
 ##}
 
@@ -979,7 +936,6 @@ set_mach_modtime_by_id(q, argv, cl)
 ##  range of m is machine
 ##  repeat replace m (modtime = "now", modby = @who, modwith = @entity)
 ##      where m.mach_id = @id
-    if (ingres_errno != 0) return(ingres_errno);
     return(SMS_SUCCESS);
 ##}
 
@@ -1004,7 +960,6 @@ set_cluster_modtime_by_id(q, argv, cl)
 ##  range of c is cluster
 ##  repeat replace c (modtime = "now", modby = @who, modwith = @entity)
 ##      where c.clu_id = @id
-    if (ingres_errno != 0) return(ingres_errno);
     return(SMS_SUCCESS);
 ##}
 
@@ -1028,7 +983,6 @@ set_serverhost_modtime(q, argv, cl)
     id = *(int *)argv[1];
 ##  repeat replace sh (modtime = "now", modby = @who, modwith = @entity)
 ##      where sh.service = uppercase(@serv) and sh.mach_id = @id
-    if (ingres_errno != 0) return(ingres_errno);
     return(SMS_SUCCESS);
 ##}
 
@@ -1052,7 +1006,6 @@ set_nfsphys_modtime(q, argv, cl)
     dir = argv[1];
 ##  repeat replace np (modtime = "now", modby = @who, modwith = @entity)
 ##      where np.#dir = @dir and np.mach_id = @id
-    if (ingres_errno != 0) return(ingres_errno);
     return(SMS_SUCCESS);
 ##}
 
@@ -1078,7 +1031,6 @@ set_filesys_modtime(q, argv, cl)
 
 ##  repeat replace fs (modtime = "now", modby = @who, modwith = @entity,
 ##                    #phys_id = @var_phys_id)  where fs.#label = @label
-    if (ingres_errno != 0) return(ingres_errno);
     return(SMS_SUCCESS);
 ##}
 
@@ -1102,7 +1054,6 @@ set_zephyr_modtime(q, argv, cl)
 
 ##  repeat replace z (modtime = "now", modby = @who, modwith = @entity)
 ##                    where z.#class = @class
-    if (ingres_errno != 0) return(ingres_errno);
     return(SMS_SUCCESS);
 ##}
 
@@ -1184,7 +1135,6 @@ followup_ausr(q, argv, cl)
 ##          fmodtime="now", fmodby=@who, fmodwith=@entity,
 ##          potype="NONE", pmodtime="now", pmodby=@who, pmodwith=@entity)
 ##     where u.#login = @login
-    if (ingres_errno != 0) return(ingres_errno);
 
     return(SMS_SUCCESS);
 ##}
@@ -1307,6 +1257,11 @@ followup_glin(q, sq, v, action, actarg, cl)
                strcpy(name, "???");
        } else if (!strcmp(type, "USER")) {
 ##         repeat retrieve (name = users.login) where users.users_id = @id
+##         inquire_equel(rowcount = "rowcount")
+           if (rowcount != 1)
+               strcpy(name, "???");
+       } else if (!strcmp(type, "KERBEROS")) {
+##         repeat retrieve (name = strings.string) where strings.string_id = @id
 ##         inquire_equel(rowcount = "rowcount")
            if (rowcount != 1)
                strcpy(name, "???");
@@ -1365,7 +1320,6 @@ followup_amtl(q, argv, cl)
 ##  range of l is list
 ##  repeat replace l (modtime = "now", modby = @who, modwith = @entity)
 ##      where l.#list_id = @list_id
-    if (ingres_errno != 0) return(ingres_errno);
 
     /* if query is not amtl or if member_type is not LIST then return */
     if (bcmp(q->shortname, "amtl", 4) || bcmp(argv[1], "LIST", 4)) 
@@ -1375,13 +1329,11 @@ followup_amtl(q, argv, cl)
 
     /* is parent list a mailing list? */
 ##  repeat retrieve (exists = l.maillist) where l.#list_id=@list_id
-    if (ingres_errno != 0) return(ingres_errno);
     if (!exists)
        return(SMS_SUCCESS);
 
     /* list is not a user-group; add list to maillist table */
 ##  repeat replace l (maillist = 1) where l.#list_id = @member_id
-    if (ingres_errno != 0) return(ingres_errno);
     return(SMS_SUCCESS);
 ##}
 
@@ -1407,10 +1359,8 @@ followup_anfq(q, argv, cl)
 
 ##  repeat replace nq (modtime = "now", modby = @who, modwith = @entity)
 ##     where nq.filsys_id = @fs and nq.users_id = @user
-    if (ingres_errno != 0) return(ingres_errno);
 ##  repeat replace nfsphys (allocated = nfsphys.allocated + @quota)
 ##     where nfsphys.nfsphys_id = filesys.#phys_id and filesys.filsys_id = @fs
-    if (ingres_errno != 0) return(ingres_errno);
     return(SMS_SUCCESS);
 ##}
 
@@ -1454,6 +1404,11 @@ followup_gzcl(q, sq, v, action, actarg, cl)
                  strcpy(name, "???");
            } else if (!strcmp(argv[i], "USER")) {
 ##             repeat retrieve (name = users.login) where users.users_id = @id
+##             inquire_equel(rowcount = "rowcount")
+               if (rowcount != 1)
+                 strcpy(name, "???");
+           } else if (!strcmp(argv[i], "KERBEROS")) {
+##             repeat retrieve (name = strings.string) where strings.string_id = @id
 ##             inquire_equel(rowcount = "rowcount")
                if (rowcount != 1)
                  strcpy(name, "???");
@@ -1515,6 +1470,11 @@ followup_gsha(q, sq, v, action, actarg, cl)
              strcpy(name, "???");
        } else if (!strcmp(argv[1], "USER")) {
 ##         repeat retrieve (name = users.login) where users.users_id = @id
+##         inquire_equel(rowcount = "rowcount")
+           if (rowcount != 1)
+             strcpy(name, "???");
+       } else if (!strcmp(argv[1], "KERBEROS")) {
+##         repeat retrieve (name = strings.string) where strings.string_id = @id
 ##         inquire_equel(rowcount = "rowcount")
            if (rowcount != 1)
              strcpy(name, "???");
@@ -1560,47 +1520,37 @@ int set_pobox(q, argv, cl)
 
 ##  repeat retrieve (id = users.pop_id, potype = users.#potype)
 ##             where users.users_id = @user
-    if (ingres_errno != 0) return(ingres_errno);
     if (!strcmp(strtrim(potype), "POP"))
       set_pop_usage(id, -1);
 
     if (!strcmp(argv[1], "POP")) {
 ##     repeat retrieve (id=machine.mach_id) where machine.name=uppercase(@box)
-       if (ingres_errno != 0) return(ingres_errno);
 ##     inquire_equel(rowcount = "rowcount")
        if (rowcount != 1)
            return(SMS_MACHINE);
 ##     repeat replace users (#potype = "POP", pop_id = @id)
 ##             where users.users_id = @user
-       if (ingres_errno != 0) return(ingres_errno);
        set_pop_usage(id, 1);
     } else if (!strcmp(argv[1], "SMTP")) {
 ##      range of s is strings
 ##      repeat retrieve (id = s.string_id) where s.string = @box
-       if (ingres_errno != 0) return(ingres_errno);
 ##      inquire_equel (rowcount = "rowcount")
        if (rowcount == 0) {
 ##          range of v is values
 ##          repeat retrieve (id = v.value) where v.name = "strings_id"
-           if (ingres_errno != 0) return(ingres_errno);
            id++;
 ##          repeat replace v (value = @id) where v.name = "strings_id"
-           if (ingres_errno != 0) return(ingres_errno);
 ##         append to strings (string_id = id, string = box)
-           if (ingres_errno != 0) return(ingres_errno);
        }
 ##     repeat replace users (#potype = "SMTP", box_id = @id) 
 ##            where users.users_id = @user
-       if (ingres_errno != 0) return(ingres_errno);
     } else /* argv[1] == "NONE" */ {
 ##     repeat replace users (#potype = "NONE") where users.users_id = @user
-    if (ingres_errno != 0) return(ingres_errno);
     }
 
     set_pobox_modtime(q, argv, cl);
 ##  repeat replace tblstats (updates = tblstats.updates + 1, modtime = "now")
 ##     where tblstats.#table = "users"
-    if (ingres_errno != 0) return(ingres_errno);
     return(SMS_SUCCESS);
 ##}
 
@@ -1666,6 +1616,12 @@ get_list_info(q, aargv, cl, action, actarg)
        } else if (!strcmp(acl_type, "USER")) {
 ##         repeat retrieve (acl_name = users.#login)
 ##             where users.users_id = @acl_id
+##         inquire_equel(rowcount = "rowcount")
+           if (rowcount != 1)
+               strcpy(acl_name, "???");
+       } else if (!strcmp(acl_type, "KERBEROS")) {
+##         repeat retrieve (acl_name = strings.string)
+##             where strings.string_id = @acl_id
 ##         inquire_equel(rowcount = "rowcount")
            if (rowcount != 1)
                strcpy(acl_name, "???");
@@ -1685,10 +1641,9 @@ get_list_info(q, aargv, cl, action, actarg)
     }
 
     sq_destroy(sq);
-#ifdef notdef
 ##  repeat replace tblstats (retrieves = tblstats.retrieves + 1)
 ##     where tblstats.#table = "list"
-#endif
+
     return (SMS_SUCCESS);
 ##}
 
@@ -1715,7 +1670,8 @@ int get_ace_use(q, argv, cl, action, actarg)
 
     atype = argv[0];
     aid = *(int *)argv[1];
-    if (!strcmp(atype, "LIST") || !strcmp(atype, "USER")) {
+    if (!strcmp(atype, "LIST") || !strcmp(atype, "USER") ||
+       !strcmp(atype, "KERBEROS")) {
        return(get_ace_internal(atype, aid, action, actarg));
     }
 
@@ -1759,6 +1715,28 @@ int get_ace_use(q, argv, cl, action, actarg)
          found++;
     }
 
+    if (!strcmp(atype, "RKERBERO")) {
+##     range of m is members
+##     repeat retrieve (listid = m.list_id)
+##             where m.member_type = "KERBEROS" and m.member_id = @aid {
+           sq_save_data(sq, listid);
+##     }
+       /* get all the list_id's of containing lists */
+       while (sq_get_data(sq, &id)) {
+##         repeat retrieve (listid = m.list_id)
+##             where m.member_type = "LIST" and m.member_id = @id {
+             sq_save_unique_data(sq, listid);
+##         }
+         }
+       /* now process each one */
+       while (sq_get_data(sq, &id)) {
+           if (get_ace_internal("LIST", id, action, actarg) == SMS_SUCCESS)
+             found++;
+       }
+       if (get_ace_internal("KERBEROS", aid, action, actarg) == SMS_SUCCESS)
+         found++;
+    }
+
     sq_destroy(sq);    
     if (!found) return(SMS_NO_MATCH);
     return(SMS_SUCCESS);
@@ -1864,7 +1842,8 @@ int get_lists_of_member(q, argv, cl, action, actarg)
     aid = *(int *)argv[1];
     if (!strcmp(atype, "LIST") ||
        !strcmp(atype, "USER") ||
-       !strcmp(atype, "STRING")) {
+       !strcmp(atype, "STRING") ||
+       !strcmp(atype, "KERBEROS")) {
       return(glom_internal(atype, aid, action, actarg));
     }
 
@@ -1930,6 +1909,28 @@ int get_lists_of_member(q, argv, cl, action, actarg)
          found++;
     }
 
+    if (!strcmp(atype, "RKERBERO")) {
+##     range of m is members
+##     repeat retrieve (listid = m.list_id)
+##             where m.member_type = "KERBEROS" and m.member_id = @aid {
+           sq_save_data(sq, listid);
+##     }
+       /* get all the list_id's of containing lists */
+       while (sq_get_data(sq, &id)) {
+##         repeat retrieve (listid = m.list_id)
+##             where m.member_type = "LIST" and m.member_id = @id {
+             sq_save_unique_data(sq, listid);
+##         }
+         }
+       /* now process each one */
+       while (sq_get_data(sq, &id)) {
+           if (glom_internal("LIST", id, action, actarg) == SMS_SUCCESS)
+             found++;
+       }
+       if (glom_internal("KERBEROS", aid, action, actarg) == SMS_SUCCESS)
+         found++;
+    }
+
 ##  repeat replace tblstats (retrieves = tblstats.retrieves + 1)
 ##     where tblstats.#table = "members"
     sq_destroy(sq);    
@@ -2040,6 +2041,15 @@ get_members_of_list(q, argv, cl, action, actarg)
 ##             where m.#list_id = @list_id and m.member_type = "STRING"
 ##                   and m.member_id = strings.string_id
 ##             sort by #member_name
+##  {
+        (*action)(2, targv, actarg);
+##  }
+
+    targv[0] = "KERBEROS";
+##  repeat retrieve (member_name = strings.string)
+##             where m.#list_id = @list_id and m.member_type = "KERBEROS"
+##                   and m.member_id = strings.string_id
+##             sort by #member_name
 ##  {
         (*action)(2, targv, actarg);
 ##  }
@@ -2226,7 +2236,6 @@ register_user(q, argv, cl)
     /* find user */
 ##  repeat retrieve (users_id = u.#users_id)
 ##     where u.#uid = @uid and u.status = 0
-    if (ingres_errno != 0) return(ingres_errno);
 ##  inquire_equel(rowcount = "rowcount");
     if (rowcount == 0)
       return(SMS_NO_MATCH);
@@ -2235,22 +2244,20 @@ register_user(q, argv, cl)
 
     /* check new login name */
 ##  repeat retrieve (flag = any(u.#login where u.#login = @login))
-    if (flag)
-      return(SMS_IN_USE);
+    if (ingres_errno) return(sms_errcode);
+    if (flag) return(SMS_IN_USE);
 ##  repeat retrieve (flag = any(l.#name where l.#name = @login))
-    if (flag)
-      return(SMS_IN_USE);
-##  repeat retrieve (flag = any(filesys.#name where filesys.#name = @login))
-    if (flag)
-      return(SMS_IN_USE);
-    if (ingres_errno != 0) return(ingres_errno);
+    if (ingres_errno) return(sms_errcode);
+    if (flag) return(SMS_IN_USE);
+##  repeat retrieve (flag = any(filesys.#label where filesys.#label = @login))
+    if (ingres_errno) return(sms_errcode);
+    if (flag) return(SMS_IN_USE);
     com_err(whoami, 0, "new login name OK");
 
     /* choose place for pobox, put in mid */
 ##  repeat retrieve (mid = sh.mach_id, machname = m.name)
 ##    where sh.service = "POP" and m.mach_id = sh.mach_id and
 ##     sh.value2 - sh.value1 = max(sh.value2-sh.value1 where sh.service="POP")
-    if (ingres_errno != 0) return(ingres_errno);
 ##  inquire_equel(rowcount = "rowcount");
     if (rowcount == 0)
       return(SMS_NO_POBOX);
@@ -2261,7 +2268,6 @@ register_user(q, argv, cl)
 ##                   pop_id = @mid, pmodtime="now", pmodby=@who,
 ##                   pmodwith=@entity)
 ##     where u.#users_id = @users_id
-    if (ingres_errno != 0) return(ingres_errno);
 ##  inquire_equel(rowcount = "rowcount");
     if (rowcount != 1)
       return(SMS_INTERNAL);
@@ -2275,7 +2281,6 @@ register_user(q, argv, cl)
     if (set_next_object_id("list_id", "list"))
       return(SMS_NO_ID);
 ##  repeat retrieve (list_id = values.value) where values.name = "list_id"
-    if (ingres_errno != 0) return(ingres_errno);
 ##  inquire_equel(rowcount = "rowcount");
     if (rowcount != 1)
       return(SMS_INTERNAL);
@@ -2285,13 +2290,11 @@ register_user(q, argv, cl)
 ##                     acl_type = "USER", acl_id = @users_id, modtime = "now",
 ##                     modby = @who, modwith = @entity)
 ##     where values.name = "gid"
-    if (ingres_errno != 0) return(ingres_errno);
 ##  inquire_equel(rowcount = "rowcount");
     if (rowcount != 1)
       return(SMS_INTERNAL);
 ##  repeat append members (#list_id = @list_id, member_type = "USER",
 ##                        member_id = @users_id)
-    if (ingres_errno != 0) return(ingres_errno);
 ##  inquire_equel(rowcount = "rowcount");
     if (rowcount != 1)
       return(SMS_INTERNAL);
@@ -2311,7 +2314,6 @@ register_user(q, argv, cl)
            m_id = mid;
        }
 ##  }
-    if (ingres_errno != 0) return(ingres_errno);
     if (maxsize == 0)
       return(SMS_NO_FILESYS);
 
@@ -2327,7 +2329,6 @@ register_user(q, argv, cl)
 ##                        lockertype = "HOMEDIR", modtime = "now",
 ##                        modby = @who, modwith = @entity)
 ##     where values.name = "filsys_id"
-    if (ingres_errno != 0) return(ingres_errno);
 ##  inquire_equel(rowcount = "rowcount");
     if (rowcount != 1)
       return(SMS_INTERNAL);
@@ -2336,7 +2337,6 @@ register_user(q, argv, cl)
 
     /* set quota */
 ##  repeat retrieve (quota = values.value) where values.name = "def_quota"
-    if (ingres_errno != 0) return(ingres_errno);
 ##  inquire_equel(rowcount = "rowcount");
     if (rowcount != 1)
       return(SMS_NO_QUOTA);
@@ -2344,14 +2344,12 @@ register_user(q, argv, cl)
 ##                         #quota = @quota, phys_id = @pid, modtime = "now",
 ##                         modby = @who, modwith = @entity)
 ##     where values.name = "filsys_id"
-    if (ingres_errno != 0) return(ingres_errno);
 ##  inquire_equel(rowcount = "rowcount");
     if (rowcount != 1)
       return(SMS_INTERNAL);
 ##  repeat replace nfsphys (allocated = nfsphys.allocated + @quota)
 ##     where nfsphys.nfsphys_id = filesys.#phys_id and
 ##           filesys.filsys_id = values.value and values.name = "filsys_id"
-    if (ingres_errno != 0) return(ingres_errno);
 ##  inquire_equel(rowcount = "rowcount");
     if (rowcount != 1)
       return(SMS_INTERNAL);
@@ -2359,11 +2357,9 @@ register_user(q, argv, cl)
 
 ##  repeat replace tblstats (updates = tblstats.updates + 1, modtime = "now")
 ##     where tblstats.table = "users"
-    if (ingres_errno != 0) return(ingres_errno);
 ##  repeat replace tblstats (appends = tblstats.appends + 1, modtime = "now")
 ##     where tblstats.table = "list" or tblstats.table = "filesys" or
 ##           tblstats.table = "nfsquota"
-    if (ingres_errno != 0) return(ingres_errno);
     return(SMS_SUCCESS);
 ##}
 
@@ -2390,7 +2386,6 @@ int count;
 ##  range of sh is serverhosts
 ##  repeat replace sh (value1 = sh.value1 + @n)
 ##         where sh.service = "POP" and sh.#mach_id = @mach_id
-    if (ingres_errno != 0) return(ingres_errno);
 
     return(SMS_SUCCESS);
 ##}
@@ -2425,6 +2420,7 @@ validate_row(q, argv, v)
     /* look for the record */
 ##  range of rvar is table
 ##  retrieve (rowcount = count(rvar.name where qual))
+    if (ingres_errno) return(sms_errcode);
     if (rowcount == 0) return(SMS_NO_MATCH);
     if (rowcount > 1) return(SMS_NOT_UNIQUE);
     return(SMS_EXISTS);
@@ -2491,6 +2487,9 @@ validate_fields(q, argv, vo, n)
            status = SMS_EXISTS;
            break;
 
+       case V_LOCK:
+           status = lock_table(vo);
+           break;
        }
 
        if (status != SMS_EXISTS) return(status);
@@ -2555,9 +2554,11 @@ validate_id(argv, vo)
     idfield = vo->idfield;
     if (!strcmp(namefield, "uid")) {
 ##    retrieve (id = table.idfield) where table.namefield = int4(name)
+      if (ingres_errno) return(sms_errcode);
 ##    inquire_equel (rowcount = "rowcount")
     } else {
 ##    retrieve (id = table.idfield) where table.namefield = name
+      if (ingres_errno) return(sms_errcode);
 ##    inquire_equel (rowcount = "rowcount")
     }
     if (rowcount != 1) return(vo->error);
@@ -2585,6 +2586,7 @@ validate_name(argv, vo)
     }
 ##  retrieve (rowcount = countu(table.namefield 
 ##            where table.namefield = name))
+    if (ingres_errno) return(sms_errcode);
     return ((rowcount == 1) ? SMS_EXISTS : vo->error);
 ##}
 
@@ -2628,12 +2630,14 @@ struct valobj *vo;
        if (!strcmp(argv[vo->index], argv[vo->index - 1]))
          return(SMS_EXISTS);
 ##     retrieve (id = any(table.namefield where table.namefield = name))
+       if (ingres_errno) return(sms_errcode);
        if (id)
          return(vo->error);
        else
          return(SMS_EXISTS);
     }
 ##  retrieve (id = table.idfield) where table.namefield = name
+    if (ingres_errno) return(sms_errcode);
     if (id == -1 || id == *(int *)argv[vo->index - 1])
       return(SMS_EXISTS);
     else
@@ -2663,6 +2667,7 @@ validate_type(argv, vo)
 ##  repeat retrieve (exists = any(a.trans where a.name = @typename and
 ##                                   a.type = "TYPE" and
 ##                                   a.trans = @value))
+    if (ingres_errno) return(sms_errcode);
     return (exists ? SMS_EXISTS : vo->error);
 ##}
 
@@ -2690,6 +2695,7 @@ validate_typedata(q, argv, vo)
     /* get corresponding data type associated with field type name */
 ##  repeat retrieve (data_type = alias.trans) 
 ##         where alias.#name = @field_type and alias.type = "TYPEDATA"
+    if (ingres_errno) return(sms_errcode);
 ##  inquire_equel (rowcount = "rowcount")
     if (rowcount != 1) return(SMS_TYPE);
 
@@ -2753,6 +2759,26 @@ validate_typedata(q, argv, vo)
 ##}
 
 
+/* Lock the table named by the validation object */
+
+lock_table(vo)
+struct valobj *vo;
+##{
+##  char *table, *idfield;
+##  int rowcount;
+
+    table = vo->table;
+    idfield = vo->idfield;
+##  replace table (modtime = "now") where table.idfield = 0
+    if (ingres_errno) return(sms_errcode);
+##  inquire_equel (rowcount = "rowcount")
+    if (rowcount != 1)
+      return(vo->error);
+    else
+      return(SMS_EXISTS);
+##}
+
+
 /* This looks up a login name and returns the SMS internal ID.  It is used
  * by authenticate to put the users_id in the client structure.
  */
This page took 0.102449 seconds and 4 git commands to generate.