#endif lint
#include <mit-copyright.h>
-#include "query.h"
#include "mr_server.h"
+#include "query.h"
#include <ctype.h>
EXEC SQL INCLUDE sqlca;
-EXEC SQL INCLUDE sqlda;
#include "qrtn.h"
extern char *whoami;
-extern int ingres_errno, mr_errcode;
+extern int dbms_errno, mr_errcode;
EXEC SQL BEGIN DECLARE SECTION;
extern char stmt_buf[];
EXEC SQL END DECLARE SECTION;
-EXEC SQL WHENEVER SQLERROR CALL ingerr;
+EXEC SQL WHENEVER SQLERROR DO dbmserr();
/* Specialized Access Routines */
* now in argv[0] instead of the login name.
*/
-access_user(q, argv, cl)
- struct query *q;
- char *argv[];
- client *cl;
+int access_user(q, argv, cl)
+ struct query *q;
+ char *argv[];
+ client *cl;
{
if (cl->users_id != *(int *)argv[0])
return(MR_PERM);
* argv[0...n] contain search info. q->
*/
-access_login(q, argv, cl)
- struct query *q;
- char *argv[];
- client *cl;
+int access_login(q, argv, cl)
+ struct query *q;
+ char *argv[];
+ client *cl;
{
EXEC SQL BEGIN DECLARE SECTION;
int id;
- char qual[256];
EXEC SQL END DECLARE SECTION;
- build_qual(q->qual, q->argc, argv, qual);
- if (!strncmp(q->name,"get_user_account",strlen("get_user_account"))) {
- EXEC SQL SELECT users_id INTO :id FROM users u, strings str WHERE :qual;
- } else {
- EXEC SQL SELECT users_id INTO :id FROM users u WHERE :qual;
+ if(q->argc != 1) return MR_ARGS;
+
+ if(!strcmp(q->shortname, "gual")) {
+ EXEC SQL SELECT users_id INTO :id FROM users u, strings str
+ WHERE u.login LIKE :argv[0] AND u.users_id != 0
+ AND u.comments = str.string_id;
+ } else if (!strcmp(q->shortname, "gubl")) {
+ EXEC SQL SELECT users_id INTO :id FROM users u
+ WHERE u.login LIKE :argv[0] AND u.users_id != 0;
+ } else if (!strcmp(q->shortname, "guau")) {
+ EXEC SQL SELECT users_id INTO :id FROM users u, strings str
+ WHERE u.unix_uid = :argv[0] AND u.users_id != 0
+ AND u.comments = str.string_id;
+ } else if(!strcmp(q->shortname, "gubu")) {
+ EXEC SQL SELECT users_id INTO :id FROM users u
+ WHERE u.unix_uid = :argv[0] AND u.users_id != 0;
}
if (sqlca.sqlerrd[2] != 1 || id != cl->users_id)
* and the list is public, allow access if client = member
*/
-access_list(q, argv, cl)
- struct query *q;
- char *argv[];
- client *cl;
+int access_list(q, argv, cl)
+ struct query *q;
+ char *argv[];
+ client *cl;
{
EXEC SQL BEGIN DECLARE SECTION;
int list_id, acl_id, flags, gid;
if (*(int *)argv[2] == client_id) return(MR_SUCCESS);
/* if update_list, don't allow them to change the GID */
} else if (!strcmp("ulis", q->shortname)) {
- if ((!strcmp(argv[7], UNIQUE_GID) && (gid != -1)) ||
- (strcmp(argv[7], UNIQUE_GID) && (gid != atoi(argv[7]))))
- return(MR_PERM);
+ if (!strcmp(argv[7], UNIQUE_GID)) {
+ if(gid != -1) return MR_PERM;
+ } else {
+ if(gid != atoi(argv[7])) return MR_PERM;
+ }
}
/* check for client in access control list */
- status = find_member(acl_type, acl_id, client_type, client_id, 0);
+ status = find_member(acl_type, acl_id, client_type, client_id);
if (!status) return(MR_PERM);
return(MR_SUCCESS);
* cl - client identifier
*/
-access_visible_list(q, argv, cl)
- struct query *q;
- char *argv[];
- client *cl;
+int access_visible_list(q, argv, cl)
+ struct query *q;
+ char *argv[];
+ client *cl;
{
EXEC SQL BEGIN DECLARE SECTION;
int list_id, acl_id, flags ;
return(status);
/* check for client in access control list */
- status = find_member(acl_type, acl_id, client_type, client_id, 0);
+ status = find_member(acl_type, acl_id, client_type, client_id);
if (!status)
return(MR_PERM);
* cl - client identifier
*/
-access_vis_list_by_name(q, argv, cl)
- struct query *q;
- char *argv[];
- client *cl;
+int access_vis_list_by_name(q, argv, cl)
+ struct query *q;
+ char *argv[];
+ client *cl;
{
EXEC SQL BEGIN DECLARE SECTION;
int acl_id, flags, rowcount;
return(status);
/* check for client in access control list */
- status = find_member(acl_type, acl_id, client_type, client_id, 0);
+ status = find_member(acl_type, acl_id, client_type, client_id);
if (!status)
return(MR_PERM);
* on the acl of, or the list is visible.
*/
-access_member(q, argv, cl)
- struct query *q;
- char *argv[];
- client *cl;
+int access_member(q, argv, cl)
+ struct query *q;
+ char *argv[];
+ client *cl;
{
if (!strcmp(argv[0], "LIST") || !strcmp(argv[0], "RLIST"))
return(access_visible_list(q, &argv[1], cl));
* access iff argv[0] == "TRUE" and argv[2] == "FALSE".
*/
-access_qgli(q, argv, cl)
- struct query *q;
- char *argv[];
- client *cl;
+int access_qgli(q, argv, cl)
+ struct query *q;
+ char *argv[];
+ client *cl;
{
if (!strcmp(argv[0], "TRUE") && !strcmp(argv[2], "FALSE"))
return(MR_SUCCESS);
* allow access if a wildcard is used.
*/
-access_service(q, argv, cl)
- struct query *q;
- char *argv[];
- client *cl;
+int access_service(q, argv, cl)
+ struct query *q;
+ char *argv[];
+ client *cl;
{
EXEC SQL BEGIN DECLARE SECTION;
int acl_id;
return(status);
/* check for client in access control list */
- status = find_member(acl_type, acl_id, client_type, client_id, 0);
+ status = find_member(acl_type, acl_id, client_type, client_id);
if (!status) return(MR_PERM);
return(MR_SUCCESS);
* named by argv[0]
*/
-access_filesys(q, argv, cl)
- struct query *q;
- char *argv[];
- client *cl;
+int access_filesys(q, argv, cl)
+ struct query *q;
+ char *argv[];
+ client *cl;
{
EXEC SQL BEGIN DECLARE SECTION;
int users_id, list_id;
return(MR_SUCCESS);
if ((status = get_client(cl, &client_type, &client_id)) != MR_SUCCESS)
return(status);
- status = find_member("LIST", list_id, client_type, client_id, 0);
+ status = find_member("LIST", list_id, client_type, client_id);
if (status)
return(MR_SUCCESS);
else
int host_access_level = 0; /* 1 for network, 2 for host */
-access_host(q, argv, cl)
- struct query *q;
- char *argv[];
- client *cl;
+int access_host(q, argv, cl)
+ struct query *q;
+ char *argv[];
+ client *cl;
{
EXEC SQL BEGIN DECLARE SECTION;
- int mid, sid, users_id, id;
- char mtype[9], stype[9], *name;
+ int mid, sid, id;
+ char mtype[9], stype[9];
EXEC SQL END DECLARE SECTION;
int status, client_id;
char *client_type;
WHERE s.snet_id=:id;
mid =0;
} else if (q->type == RETRIEVE) {
-/* name = argv[0];
- EXEC SQL SELECT m.owner_type, m.owner_id, s.owner_type, s.owner_id
- INTO :mtype, :mid, :stype, :sid FROM machine m, subnet s
- WHERE m.name=:name and s.snet_id=m.snet_id;
-*/
return(MR_SUCCESS);
} else {
id = *(int *)argv[0];
if ((status = get_client(cl, &client_type, &client_id)) != MR_SUCCESS)
return(status);
- status = find_member(stype, sid, client_type, client_id, 0);
+ status = find_member(stype, sid, client_type, client_id);
if (status) {
host_access_level = 1;
return(MR_SUCCESS);
}
- status = find_member(mtype, mid, client_type, client_id, 0);
+ status = find_member(mtype, mid, client_type, client_id);
if (status) {
host_access_level = 2;
return(MR_SUCCESS);
* If deleting an alias, any owner will do.
*/
-access_ahal(q, argv, cl)
- struct query *q;
- char *argv[];
- client *cl;
+int access_ahal(q, argv, cl)
+ struct query *q;
+ char *argv[];
+ client *cl;
{
EXEC SQL BEGIN DECLARE SECTION;
int cnt, id, mid, sid;
char *client_type;
int status, client_id;
+ if (q->type == RETRIEVE)
+ return(MR_SUCCESS);
+
id = *(int *)argv[1];
EXEC SQL SELECT count(name) INTO :cnt from hostalias WHERE mach_id = :id;
- if (ingres_errno) return(mr_errcode);
+ if (dbms_errno) return(mr_errcode);
/* if the type is APPEND, this is ahal and we need to make sure there
* will be no more than 2 aliases. If it's not, it must be dhal and
* any owner will do.
*/
if (q->type == APPEND && cnt >= 2)
return(MR_PERM);
-
EXEC SQL SELECT m.owner_type, m.owner_id, s.owner_type, s.owner_id
INTO :mtype, :mid, :stype, :sid FROM machine m, subnet s
WHERE m.mach_id=:id and s.snet_id=m.snet_id;
if ((status = get_client(cl, &client_type, &client_id)) != MR_SUCCESS)
return(status);
- status = find_member(mtype, mid, client_type, client_id, 0);
+ status = find_member(mtype, mid, client_type, client_id);
if (status)
return(MR_SUCCESS);
- status = find_member(stype, sid, client_type, client_id, 0);
+ status = find_member(stype, sid, client_type, client_id);
if (status)
return(MR_SUCCESS);
else
return(MR_PERM);
}
+
+
+
+/* access_snt - check for retrieving network structure
+ */
+
+int access_snt(q, argv, cl)
+ struct query *q;
+ char *argv[];
+ client *cl;
+{
+ if(q->type == RETRIEVE)
+ return(MR_SUCCESS);
+
+ return(MR_PERM);
+}