* $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;
/* Specialized Access Routines */
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);
## 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);
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);
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);
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);
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)
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);
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
## 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"))
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);
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);
##}
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
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");
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
## 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
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
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
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);
## endretrieve
}
## }
- if (ingres_errno != 0) return(ingres_errno);
return(status);
##}
## 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);
return(SMS_SUCCESS);
##}
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);
## 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);
##}
## replace table (modtime = "now", modby = who, modwith = entity)
## where table.#name = name
- if (ingres_errno != 0) return(ingres_errno);
return(SMS_SUCCESS);
##}
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);
##}
## 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);
##}
## 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);
##}
## 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);
##}
## 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);
##}
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);
##}
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);
##}
## 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);
##}
## repeat replace z (modtime = "now", modby = @who, modwith = @entity)
## where z.#class = @class
- if (ingres_errno != 0) return(ingres_errno);
return(SMS_SUCCESS);
##}
## 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);
##}
## 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))
/* 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);
##}
## 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);
##}
## 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);
##}
}
sq_destroy(sq);
-#ifdef notdef
## repeat replace tblstats (retrieves = tblstats.retrieves + 1)
## where tblstats.#table = "list"
-#endif
+
return (SMS_SUCCESS);
##}
/* 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);
## 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))
+## repeat retrieve (flag = any(filesys.#label where filesys.#label = @login))
if (flag)
return(SMS_IN_USE);
- if (ingres_errno != 0) return(ingres_errno);
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);
## 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);
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);
## 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);
m_id = mid;
}
## }
- if (ingres_errno != 0) return(ingres_errno);
if (maxsize == 0)
return(SMS_NO_FILESYS);
## 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);
/* 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);
## #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);
## 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);
##}
## 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);
##}