EXEC SQL BEGIN DECLARE SECTION;
extern char stmt_buf[];
-int idummy;
-extern char cdummy[];
EXEC SQL END DECLARE SECTION;
/* Specialized Access Routines */
char **argv;
{
EXEC SQL BEGIN DECLARE SECTION;
- int flag, id;
+ int flag, id, cnt;
EXEC SQL END DECLARE SECTION;
id = *(int *)argv[0];
if (flag != 0 && flag != 4)
return(MR_IN_USE);
- EXEC SQL REPEATED DELETE FROM quota WHERE entity_id = :id AND type = 'USER';
+ EXEC SQL REPEATED DELETE FROM quota WHERE entity_id = :id AND type='USER';
EXEC SQL REPEATED DELETE FROM krbmap WHERE users_id = :id;
- EXEC SQL REPEATED SELECT member_id INTO :idummy FROM imembers
+ EXEC SQL REPEATED SELECT COUNT(member_id) INTO :cnt FROM imembers
WHERE member_id = :id AND member_type = 'USER';
- if (sqlca.sqlerrd[2] > 0)
+ if (cnt > 0)
return(MR_IN_USE);
- EXEC SQL REPEATED SELECT label INTO :cdummy FROM filesys WHERE owner = :id;
- if (sqlca.sqlerrd[2]> 0)
+ EXEC SQL REPEATED SELECT COUNT(label) INTO :cnt FROM filesys
+ WHERE owner = :id;
+ if (cnt > 0)
return(MR_IN_USE);
- EXEC SQL REPEATED SELECT name INTO :cdummy FROM list
+ EXEC SQL REPEATED SELECT COUNT(name) INTO :cnt FROM list
WHERE acl_id = :id AND acl_type = 'USER';
- if (sqlca.sqlerrd[2] > 0)
+ if (cnt > 0)
return(MR_IN_USE);
- EXEC SQL REPEATED SELECT name INTO :cdummy FROM servers
+ EXEC SQL REPEATED SELECT COUNT(name) INTO :cnt FROM servers
WHERE acl_id = :id AND acl_type = 'USER';
- if (sqlca.sqlerrd[2] > 0)
+ if (cnt > 0)
return(MR_IN_USE);
- EXEC SQL REPEATED SELECT acl_id INTO :idummy FROM hostaccess
+ EXEC SQL REPEATED SELECT COUNT(acl_id) INTO :cnt FROM hostaccess
WHERE acl_id = :id AND acl_type = 'USER';
- if (sqlca.sqlerrd[2] > 0)
+ if (cnt > 0)
return(MR_IN_USE);
if (ingres_errno)
return(mr_errcode);
char **argv;
{
EXEC SQL BEGIN DECLARE SECTION;
- int flag, id;
+ int flag, id, cnt;
EXEC SQL END DECLARE SECTION;
id = *(int *)argv[0];
- EXEC SQL REPEATED SELECT login INTO :cdummy FROM users
+ EXEC SQL REPEATED SELECT COUNT(login) INTO :cnt FROM users
WHERE potype='POP' AND pop_id = :id;
- if (sqlca.sqlerrd[2] > 0)
+ if (cnt > 0)
return(MR_IN_USE);
- EXEC SQL REPEATED SELECT mach_id INTO :idummy FROM serverhosts
+ EXEC SQL REPEATED SELECT COUNT(mach_id) INTO :cnt FROM serverhosts
WHERE mach_id = :id;
- if (sqlca.sqlerrd[2] > 0)
+ if (cnt > 0)
return(MR_IN_USE);
- EXEC SQL REPEATED SELECT mach_id INTO :idummy FROM nfsphys
+ EXEC SQL REPEATED SELECT COUNT(mach_id) INTO :cnt FROM nfsphys
WHERE mach_id = :id;
- if (sqlca.sqlerrd[2] > 0)
+ if (cnt > 0)
return(MR_IN_USE);
- EXEC SQL REPEATED SELECT mach_id INTO :idummy FROM hostaccess
+ EXEC SQL REPEATED SELECT COUNT(mach_id) INTO :cnt FROM hostaccess
WHERE mach_id = :id;
- if (sqlca.sqlerrd[2] > 0)
+ if (cnt > 0)
return(MR_IN_USE);
- EXEC SQL REPEATED SELECT mach_id INTO :idummy FROM printcap
+ EXEC SQL REPEATED SELECT COUNT(mach_id) INTO :cnt FROM printcap
WHERE mach_id = :id;
- if (sqlca.sqlerrd[2] > 0)
+ if (cnt > 0)
return(MR_IN_USE);
- EXEC SQL REPEATED SELECT quotaserver INTO :idummy FROM printcap
+ EXEC SQL REPEATED SELECT COUNT(quotaserver) INTO :cnt FROM printcap
WHERE quotaserver = :id;
- if (sqlca.sqlerrd[2] > 0)
+ if (cnt > 0)
return(MR_IN_USE);
- EXEC SQL REPEATED SELECT mach_id INTO :idummy FROM palladium
+ EXEC SQL REPEATED SELECT COUNT(mach_id) INTO :cnt FROM palladium
WHERE mach_id = :id;
- if (sqlca.sqlerrd[2] > 0)
+ if (cnt > 0)
return(MR_IN_USE);
EXEC SQL REPEATED DELETE FROM mcmap WHERE mach_id = :id;
char **argv;
{
EXEC SQL BEGIN DECLARE SECTION;
- int id;
+ int id, cnt;
EXEC SQL END DECLARE SECTION;
id = *(int *)argv[0];
- EXEC SQL REPEATED SELECT mach_id INTO :idummy FROM mcmap
+ EXEC SQL REPEATED SELECT COUNT(mach_id) INTO :cnt FROM mcmap
WHERE clu_id = :id;
- if (sqlca.sqlerrd[2] > 0)
+ if (cnt > 0)
return(MR_IN_USE);
- EXEC SQL REPEATED SELECT clu_id INTO :idummy FROM svc
+ EXEC SQL REPEATED SELECT COUNT(clu_id) INTO :cnt FROM svc
WHERE clu_id = :id;
- if (sqlca.sqlerrd[2] > 0)
+ if (cnt > 0)
return(MR_IN_USE);
if (ingres_errno)
return(mr_errcode);
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 - ^_ */
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, /* SPACE - / */
+ 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, /* SPACE - / */
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 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, 0, 0, /* P - _ */
var_phys_id = 0;
sprintf(ftype, "fs_access_%s", type);
- EXEC SQL SELECT trans INTO :cdummy FROM alias
- WHERE name = :ftype AND type = 'TYPE' and trans = :access; /** Use mr_select_any() */
+ EXEC SQL SELECT COUNT(trans) INTO :ok FROM alias
+ WHERE name = :ftype AND type = 'TYPE' and trans = :access;
if (ingres_errno) return(mr_errcode);
- if (sqlca.sqlerrd[2] == 0) return(MR_FILESYS_ACCESS);
+ if (ok == 0) return(MR_FILESYS_ACCESS);
if((mr_errcode=prefetch_value(q,argv,cl))!=MR_SUCCESS)
return(mr_errcode);
int mach_id, status;
char *type, *name;
EXEC SQL BEGIN DECLARE SECTION;
- int fid, total, who;
+ int fid, total, who, ok;
char *entity, ftype[32], *access;
int var_phys_id = 0;
short int total_null;
entity = cl->entity;
sprintf(ftype, "fs_access_%s", type);
- EXEC SQL SELECT trans INTO :cdummy FROM alias
+ EXEC SQL SELECT COUNT(trans) INTO :ok FROM alias
WHERE name = :ftype AND type='TYPE' AND trans = :access;
if (ingres_errno) return(mr_errcode);
- if (sqlca.sqlerrd[2] == 0) return(MR_FILESYS_ACCESS);
+ if (ok == 0) return(MR_FILESYS_ACCESS);
EXEC SQL SELECT type INTO :ftype FROM filesys
WHERE filsys_id = :fid;
SELECT nfsphys_id, TRIM (dir) FROM nfsphys
WHERE mach_id = :mach_id
ORDER BY 2 DESC;
+ if (ingres_errno)
+ return(mr_errcode);
EXEC SQL OPEN csr101;
+ if (ingres_errno)
+ return(mr_errcode);
while(1) {
EXEC SQL FETCH csr101 INTO :var_phys_id, :dir;
if(sqlca.sqlcode != 0) break;
client *cl;
{
EXEC SQL BEGIN DECLARE SECTION;
- int id;
+ int id, cnt;
char *dir;
EXEC SQL END DECLARE SECTION;
id = *(int *)argv[0];
dir = argv[1];
- EXEC SQL REPEATED SELECT label INTO :cdummy FROM filesys fs, nfsphys np
+ EXEC SQL REPEATED SELECT fs.tid INTO :cnt FROM filesys fs, nfsphys np
WHERE fs.mach_id = :id AND fs.phys_id = np.nfsphys_id
AND np.mach_id = :id AND np.dir = :dir;
- if (sqlca.sqlerrd[2] > 0)
+ if (cnt > 0)
return(MR_IN_USE);
if (ingres_errno)
return(mr_errcode);
name = argv[1];
if (name_to_id(name, "STRING", &id) != MR_SUCCESS) {
if (q->type != APPEND) return(MR_STRING);
- EXEC SQL SELECT value INTO :id FROM numvalues
- WHERE name = 'strings_id';
- id++;
- EXEC SQL UPDATE numvalues SET value = :id
- WHERE name = 'strings_id';
- EXEC SQL INSERT INTO strings (string_id, string) VALUES (:id, :name);
+ id=add_string(name);
cache_entry(name, "STRING", id);
}
if (ingres_errno) return(mr_errcode);
free(kname);
rsig.data_buf[rsig.data_size] = 0;
si.rawsig = (unsigned char *)strsave(rsig.data_buf);
-#ifdef DEBUG
- com_err(whoami, 0, "rawsig length = %d, sig=\"%s\"", strlen(si.rawsig), si.rawsig);
-#endif /* DEBUG */
+ if (log_flags & LOG_GDSS)
+ com_err(whoami, 0, "rawsig length = %d, sig=\"%s\"", strlen(si.rawsig), si.rawsig);
GDSS_Recompose(&si, sigbuf);
free(si.rawsig);
free(argv[U_SIGNATURE]);
argv[U_SIGNATURE] = strsave(sigbuf);
-#ifdef DEBUG
- com_err(whoami, 0, "generated signature length %d", strlen(sigbuf));
-#endif /* DEBUG */
+ if (log_flags & LOG_GDSS)
+ com_err(whoami, 0, "generated signature length %d", strlen(sigbuf));
}
#endif /* GDSS */
(*action)(q->vcnt, argv, actarg);
#ifdef GDSS
if (q->vcnt == U_END && *argv[U_SIGNATURE]) {
+ /* unquote ' chars in signature */
+ for (dst = src = argv[U_SIGNATURE]; *src; ) {
+ if (*src == '\'')
+ src++;
+ *dst++ = *src++;
+ }
+ *dst = 0;
sprintf(databuf, "%s:%s", argv[U_NAME], argv[U_MITID]);
/* skip bytes for timestamp & kname */
si.rawsig = (unsigned char *) rawsig;
name = kname_unparse(si.pname, si.pinst, si.prealm);
status = name_to_id(name, "STRING", &sigwho);
if (status == MR_NO_MATCH) {
- EXEC SQL REPEATED SELECT value INTO :sigwho FROM numvalues
- WHERE name='strings_id';
- sigwho++;
- EXEC SQL REPEATED UPDATE numvalues SET value = :sigwho
- WHERE name='strings_id';
- EXEC SQL INSERT INTO strings (string_id, string)
- VALUES (:sigwho, :name);
+ sigwho=add_string(name);
} else if (status)
- return(gdss2et(status));
+ return(status);
timestamp = si.timestamp;
- } else
- return(gdss2et(status));
+ } else {
+ if (log_flags & LOG_GDSS)
+ hex_dump(argv[U_SIGNATURE]);
+ return(gdss2et(status));
+ }
} else {
rawsig[0] = 0;
sigwho = 0;
{
EXEC SQL BEGIN DECLARE SECTION;
int who, status, id;
- char *entity, *name;
+ char *entity, *name, *src, *dst;
EXEC SQL END DECLARE SECTION;
#ifdef GDSS
char databuf[32], *kname_unparse();
#ifdef GDSS
if (q->vcnt == U_MODTIME && *argv[U_SIGNATURE + 1]) {
+ /* unquote ' chars in signature */
+ for (dst = src = argv[U_SIGNATURE+1]; *src; ) {
+ if (*src == '\'')
+ src++;
+ *dst++ = *src++;
+ }
+ *dst = 0;
login = malloc(1);
status = id_to_name(id, "USER", &login);
sprintf(databuf, "%s:%s", login, argv[U_MITID+1]);
name = kname_unparse(si.pname, si.pinst, si.prealm);
status = name_to_id(name, "STRING", &sigwho);
if (status == MR_NO_MATCH) {
- EXEC SQL REPEATED SELECT value INTO :sigwho FROM numvalues
- WHERE name='strings_id';
- sigwho++;
- EXEC SQL REPEATED UPDATE numvalues SET value = :sigwho
- WHERE name='strings_id';
- EXEC SQL INSERT INTO strings (string_id, string)
- VALUES (:sigwho, :name);
+ sigwho=add_string(name);
} else if (status)
- return(gdss2et(status));
+ return(status);
timestamp = si.timestamp;
- } else
- return(gdss2et(status));
+ } else {
+ if (log_flags & LOG_GDSS)
+ hex_dump(argv[U_SIGNATURE+1]);
+ return(gdss2et(status));
+ }
} else {
rawsig[0] = 0;
sigwho = 0;
return(MR_BAD_CHAR);
status = name_to_id(box, "STRING", &id);
if (status == MR_NO_MATCH) {
- EXEC SQL REPEATED SELECT value INTO :id FROM numvalues
- WHERE name='strings_id';
- id++;
- EXEC SQL REPEATED UPDATE numvalues SET value = :id
- WHERE name='strings_id';
- EXEC SQL INSERT INTO strings (string_id, string)
- VALUES (:id, :box);
+ id=add_string(box);
} else if (status)
return(status);
EXEC SQL REPEATED UPDATE users SET potype='SMTP', box_id = :id
optimize_sql_stmt(qual);
EXEC SQL DECLARE csr102 CURSOR FOR SELECT list_id FROM list
WHERE :qual;
+ if (ingres_errno)
+ return(mr_errcode);
EXEC SQL OPEN csr102;
+ if (ingres_errno)
+ return(mr_errcode);
while(1)
{
EXEC SQL FETCH csr102 INTO :id;
client *cl;
{
EXEC SQL BEGIN DECLARE SECTION;
- int id, lid, mid, error, who, ref;
+ int id, lid, mid, error, who, ref, rowcnt;
char *mtype, dtype[9], *entity;
EXEC SQL END DECLARE SECTION;
int ancestors[MAXLISTDEPTH], aref[MAXLISTDEPTH], acount, a;
mtype = argv[1];
mid = *(int *)argv[2];
/* if the member is already a direct member of the list, punt */
- EXEC SQL REPEATED SELECT list_id INTO :idummy FROM imembers
+ EXEC SQL REPEATED SELECT COUNT(list_id) INTO :rowcnt FROM imembers
WHERE list_id = :lid AND member_id = :mid
AND member_type = :mtype AND direct = 1;
- if (sqlca.sqlerrd[2] > 0)
+ if (rowcnt > 0)
return(MR_EXISTS);
if (!strcasecmp(mtype, "STRING")) {
buf = malloc(0);
EXEC SQL DECLARE csr103 CURSOR FOR
SELECT list_id, ref_count FROM imembers
WHERE member_id = :lid AND member_type='LIST';
+ if (ingres_errno)
+ return(mr_errcode);
EXEC SQL OPEN csr103;
+ if (ingres_errno)
+ return(mr_errcode);
while(1) {
EXEC SQL FETCH csr103 INTO :id, :ref;
if(sqlca.sqlcode != 0) break;
SELECT member_id, member_type, ref_count
FROM imembers
WHERE list_id = :mid;
+ if (ingres_errno)
+ return(mr_errcode);
EXEC SQL OPEN csr104;
+ if (ingres_errno)
+ return(mr_errcode);
while(1) {
EXEC SQL FETCH csr104 INTO :id, :dtype, :ref;
if(sqlca.sqlcode != 0) break;
if (mid == lid && !strcmp(mtype, "LIST")) {
return(MR_LISTLOOP);
}
- EXEC SQL REPEATED SELECT ref_count INTO :idummy FROM imembers
+ EXEC SQL REPEATED SELECT COUNT(ref_count) INTO :rowcnt
+ FROM imembers
WHERE list_id = :lid AND member_id = :mid
AND member_type = :mtype;
ref = aref[a] * dref[d];
- if (sqlca.sqlerrd[2] > 0) {
+ if (rowcnt > 0) {
if (a == 0 && d == 0) {
EXEC SQL UPDATE imembers
SET ref_count = ref_count+:ref, direct=1
mtype = argv[1];
mid = *(int *)argv[2];
/* if the member is not a direct member of the list, punt */
- EXEC SQL REPEATED SELECT list_id INTO :idummy FROM imembers
+ EXEC SQL REPEATED SELECT COUNT(list_id) INTO :cnt FROM imembers
WHERE list_id = :lid AND member_id = :mid
AND member_type = :mtype AND direct = 1;
if (ingres_errno) return(mr_errcode);
- if (sqlca.sqlcode == 100)
+ if (cnt == 0)
return(MR_NO_MATCH);
ancestors[0] = lid;
aref[0] = 1;
EXEC SQL DECLARE csr105 CURSOR FOR
SELECT list_id, ref_count FROM imembers
WHERE member_id = :lid AND member_type = 'LIST';
+ if (ingres_errno)
+ return(mr_errcode);
EXEC SQL OPEN csr105;
+ if (ingres_errno)
+ return(mr_errcode);
while(1) {
EXEC SQL FETCH csr105 INTO :id, :ref;
if(sqlca.sqlcode!=0) break;
EXEC SQL DECLARE csr106 CURSOR FOR
SELECT member_id, member_type, ref_count FROM imembers
WHERE list_id = :mid;
+ if (ingres_errno)
+ return(mr_errcode);
EXEC SQL OPEN csr106;
+ if (ingres_errno)
+ return(mr_errcode);
while(1) {
EXEC SQL FETCH csr106 INTO :id, :dtype, :ref;
if(sqlca.sqlcode!=0) break;
EXEC SQL DECLARE csr107 CURSOR FOR
SELECT list_id FROM imembers
WHERE member_type='LIST' AND member_id = :aid;
+ if (ingres_errno)
+ return(mr_errcode);
EXEC SQL OPEN csr107;
+ if (ingres_errno)
+ return(mr_errcode);
while(1) {
EXEC SQL FETCH csr107 INTO :listid;
if(sqlca.sqlcode != 0) break;
EXEC SQL DECLARE csr108 CURSOR FOR
SELECT list_id FROM imembers
WHERE member_type='USER' AND member_id = :aid;
+ if (ingres_errno)
+ return(mr_errcode);
EXEC SQL OPEN csr108;
+ if (ingres_errno)
+ return(mr_errcode);
while(1) {
EXEC SQL FETCH csr108 INTO :listid;
if(sqlca.sqlcode != 0) break;
EXEC SQL DECLARE csr109 CURSOR FOR
SELECT list_id FROM imembers
WHERE member_type='KERBEROS' AND member_id = :aid;
+ if (ingres_errno)
+ return(mr_errcode);
EXEC SQL OPEN csr109;
+ if (ingres_errno)
+ return(mr_errcode);
while(1) {
EXEC SQL FETCH csr109 INTO :listid;
if(sqlca.sqlcode != 0) break;
EXEC SQL DECLARE csr110 CURSOR FOR
SELECT label FROM filesys
WHERE owners = :aid;
+ if (ingres_errno)
+ return(mr_errcode);
EXEC SQL OPEN csr110;
+ if (ingres_errno)
+ return(mr_errcode);
while(1) {
EXEC SQL FETCH csr110 INTO :name;
if(sqlca.sqlcode != 0) break;
EXEC SQL DECLARE csr111 CURSOR FOR
SELECT capability FROM capacls
WHERE list_id = :aid ;
+ if (ingres_errno)
+ return(mr_errcode);
EXEC SQL OPEN csr111;
+ if (ingres_errno)
+ return(mr_errcode);
while(1) {
EXEC SQL FETCH csr111 INTO :name ;
if(sqlca.sqlcode != 0) break;
EXEC SQL DECLARE csr112 CURSOR FOR
SELECT label FROM filesys
WHERE owner = :aid;
+ if (ingres_errno)
+ return(mr_errcode);
EXEC SQL OPEN csr112;
+ if (ingres_errno)
+ return(mr_errcode);
while(1) {
EXEC SQL FETCH csr112 INTO :name ;
if(sqlca.sqlcode != 0) break;
EXEC SQL DECLARE csr113 CURSOR FOR
SELECT name FROM list
WHERE acl_type = :atype AND acl_id = :aid;
+ if (ingres_errno)
+ return(mr_errcode);
EXEC SQL OPEN csr113;
+ if (ingres_errno)
+ return(mr_errcode);
while(1) {
EXEC SQL FETCH csr113 INTO :name;
if(sqlca.sqlcode != 0) break;
EXEC SQL DECLARE csr114 CURSOR FOR
SELECT name FROM servers
WHERE acl_type = :atype AND acl_id = :aid;
+ if (ingres_errno)
+ return(mr_errcode);
EXEC SQL OPEN csr114;
+ if (ingres_errno)
+ return(mr_errcode);
while(1) {
EXEC SQL FETCH csr114 INTO :name;
if(sqlca.sqlcode != 0) break;
SELECT name FROM machine m, hostaccess ha
WHERE m.mach_id = ha.mach_id AND ha.acl_type = :atype
AND ha.acl_id = :aid;
+ if (ingres_errno)
+ return(mr_errcode);
EXEC SQL OPEN csr115;
+ if (ingres_errno)
+ return(mr_errcode);
while(1) {
EXEC SQL FETCH csr115 INTO :name;
if(sqlca.sqlcode != 0) break;
OR z.sub_type = :atype AND z.sub_id = :aid
OR z.iws_type = :atype AND z.iws_id = :aid
OR z.iui_type = :atype AND z.iui_id = :aid;
+ if (ingres_errno)
+ return(mr_errcode);
EXEC SQL OPEN csr116;
+ if (ingres_errno)
+ return(mr_errcode);
while(1) {
EXEC SQL FETCH csr116 INTO :name;
if(sqlca.sqlcode != 0) break;
FROM list l, imembers im
WHERE l.list_id = im.list_id AND im.direct = 1
AND im.member_type = :atype AND im.member_id = :aid;
+ if (ingres_errno)
+ return(mr_errcode);
EXEC SQL OPEN csr117a;
+ if (ingres_errno)
+ return(mr_errcode);
while(1) {
EXEC SQL FETCH csr117a
INTO :name, :active, :public, :hidden, :maillist, :grouplist;
FROM list l, imembers im
WHERE l.list_id = im.list_id
AND im.member_type = :atype AND im.member_id = :aid;
+ if (ingres_errno)
+ return(mr_errcode);
EXEC SQL OPEN csr117b;
+ if (ingres_errno)
+ return(mr_errcode);
while(1) {
EXEC SQL FETCH csr117b
INTO :name, :active, :public, :hidden, :maillist, :grouplist;
EXEC SQL DECLARE csr118 CURSOR FOR
SELECT member_type, member_id FROM imembers
WHERE list_id = :list_id AND direct > :direct;
+ if (ingres_errno)
+ return(mr_errcode);
EXEC SQL OPEN csr118;
+ if (ingres_errno)
+ return(mr_errcode);
while(1) {
EXEC SQL FETCH csr118 INTO :member_type, :member_id;
if (sqlca.sqlcode != 0) break;
WHERE im.list_id = :list_id AND im.member_type = 'USER'
AND im.member_id = u.users_id AND im.direct > :direct
ORDER BY 1;
+ if (ingres_errno)
+ return(mr_errcode);
EXEC SQL OPEN csr119;
+ if (ingres_errno)
+ return(mr_errcode);
while(1) {
EXEC SQL FETCH csr119 INTO :member_name;
if(sqlca.sqlcode != 0) break;
WHERE im.list_id = :list_id AND im.member_type='LIST'
AND im.member_id = l.list_id AND im.direct > :direct
ORDER BY 1;
+ if (ingres_errno)
+ return(mr_errcode);
EXEC SQL OPEN csr120;
+ if (ingres_errno)
+ return(mr_errcode);
while(1) {
EXEC SQL FETCH csr120 INTO :member_name;
if(sqlca.sqlcode != 0) break;
WHERE im.list_id = :list_id AND im.member_type='STRING'
AND im.member_id = str.string_id AND im.direct > :direct
ORDER BY 1;
+ if (ingres_errno)
+ return(mr_errcode);
EXEC SQL OPEN csr121;
+ if (ingres_errno)
+ return(mr_errcode);
while(1) {
EXEC SQL FETCH csr121 INTO :member_name;
if(sqlca.sqlcode != 0) break;
AND im.member_id = str.string_id
AND im.direct > :direct
ORDER BY 1;
+ if (ingres_errno)
+ return(mr_errcode);
EXEC SQL OPEN csr122;
+ if (ingres_errno)
+ return(mr_errcode);
while(1) {
EXEC SQL FETCH csr122 INTO :member_name;
if(sqlca.sqlcode != 0) break;
EXEC SQL DECLARE csr124 CURSOR FOR
SELECT sh.service, m.name FROM serverhosts sh, machine m
WHERE :qual;
+ if (ingres_errno)
+ return(mr_errcode);
EXEC SQL OPEN csr124;
+ if (ingres_errno)
+ return(mr_errcode);
while(1) {
EXEC SQL FETCH csr124 INTO :sname, :mname;
if(sqlca.sqlcode != 0) break;
return(MR_NOT_UNIQUE);
/* check new login name */
- EXEC SQL REPEATED SELECT login INTO :cdummy FROM users
- WHERE login = LEFT(:login,SIZE(login)) AND users_id != :users_id;
+ EXEC SQL REPEATED SELECT COUNT(login) INTO :rowcount FROM users
+ WHERE login = :login AND users_id != :users_id;
if (ingres_errno) return(mr_errcode);
- if (sqlca.sqlerrd[2] > 0) return(MR_IN_USE);
- EXEC SQL REPEATED SELECT name INTO :cdummy FROM list
- WHERE name = LEFT(:login,SIZE(name));
+ if (rowcount > 0) return(MR_IN_USE);
+ EXEC SQL REPEATED SELECT COUNT(name) INTO :rowcount FROM list
+ WHERE name = :login;
if (ingres_errno) return(mr_errcode);
- if (sqlca.sqlerrd[2] > 0) return(MR_IN_USE);
- EXEC SQL REPEATED SELECT label INTO :cdummy FROM filesys
- WHERE label = LEFT(:login,SIZE(label));
+ if (rowcount > 0) return(MR_IN_USE);
+ EXEC SQL REPEATED SELECT COUNT(label) INTO :rowcount FROM filesys
+ WHERE label = :login;
if (ingres_errno) return(mr_errcode);
- if (sqlca.sqlerrd[2] > 0) return(MR_IN_USE);
+ if (rowcount > 0) return(MR_IN_USE);
com_err(whoami, 0, "login name OK");
/* choose place for pobox, put in mid */
AND sh.value2 - sh.value1 =
(SELECT MAX(value2 - value1) FROM serverhosts
WHERE service = 'POP');
+ if (ingres_errno)
+ return(mr_errcode);
EXEC SQL OPEN csr130;
+ if (ingres_errno)
+ return(mr_errcode);
EXEC SQL FETCH csr130 INTO :mid, :machname;
if (sqlca.sqlerrd[2] == 0) {
EXEC SQL CLOSE csr130;
return(MR_SUCCESS);
}
+int _sdl_followup(q, argv, cl)
+ struct query *q;
+ char **argv;
+ client *cl;
+{
+ int i;
+ i = atoi(argv[0]);
+ log_flags = i;
+ if (i & LOG_SQL) {
+ EXEC SQL set printqry;
+ } else {
+ EXEC SQL set noprintqry;
+ }
+ return(MR_SUCCESS);
+}
+
\f
/* Validation Routines */
return(MR_EXISTS);
} else if (status == MR_NO_MATCH && !strcmp(tbl, "strings") &&
(q->type == APPEND || q->type == UPDATE)) {
- EXEC SQL SELECT value INTO :id FROM numvalues
- WHERE name = 'strings_id';
- id++;
- EXEC SQL UPDATE numvalues SET value = :id WHERE name = 'strings_id';
- EXEC SQL INSERT INTO strings (string_id, string) VALUES (:id, :name);
+ id=add_string(name);
cache_entry(name, "STRING", id);
*(int *)argv[vo->index] = id;
return(MR_EXISTS);
EXEC SQL BEGIN DECLARE SECTION;
char *typename;
char *val;
+ int cnt;
EXEC SQL END DECLARE SECTION;
register char *c;
/* uppercase type fields */
for (c = val; *c; c++) if (islower(*c)) *c = toupper(*c);
- EXEC SQL SELECT trans INTO :cdummy FROM alias
+ EXEC SQL SELECT COUNT(trans) INTO :cnt FROM alias
WHERE name = :typename AND type='TYPE' AND trans = :val;
if (ingres_errno) return(mr_errcode);
- return (sqlca.sqlerrd[2] ? MR_EXISTS : vo->error);
+ return (cnt ? MR_EXISTS : vo->error);
}
/* validate member or type-specific data field */
*index(data_type, ' ') = 0;
if (!strcmp(data_type, "user")) {
/* USER */
+ if (index(name, '@'))
+ return(MR_USER);
status = name_to_id(name, data_type, &id);
if (status && (status == MR_NO_MATCH || status == MR_NOT_UNIQUE))
return(MR_USER);
return(MR_STRING);
if (status == MR_NO_MATCH) {
if (q->type != APPEND && q->type != UPDATE) return(MR_STRING);
- EXEC SQL SELECT value INTO :id FROM numvalues WHERE name = 'strings_id';
- id++;
- EXEC SQL UPDATE numvalues SET value = :id WHERE name = 'strings_id';
- EXEC SQL INSERT INTO strings (string_id, string) VALUES (:id, :name);
+ id=add_string(name);
cache_entry(name, "STRING", id);
} else if (status) return(status);
} else if (!strcmp(data_type, "none")) {
}
for(j=0; j<QMAXARGS; j++) {
- if((it->sqlvar[j].sqldata=malloc(sizeof(short)+QMAXARGSIZE))==NULL) {
+ if((it->sqlvar[j].sqldata=malloc(sizeof(short)+ARGLEN))==NULL) {
com_err(whoami, MR_NO_MEM, "setting up SQLDA variables");
exit(1);
}
- it->sqlvar[j].sqllen=QMAXARGSIZE;
+ it->sqlvar[j].sqllen=ARGLEN;
it->sqlvar[j].sqlind=null_indicators+j;
null_indicators[j]=0;
}
convert_wildcards(arg)
char *arg;
{
- static char buffer[QMAXARGSIZE];
+ static char buffer[ARGLEN];
register char *s, *d;
for(d=buffer,s=arg;*s;s++) {
convert_wildcards_uppercase(arg)
char *arg;
{
- static char buffer[QMAXARGSIZE];
+ static char buffer[ARGLEN];
register char *s, *d;
for(d=buffer,s=arg;*s;s++) {
}
+
+static hex_dump(p)
+unsigned char *p;
+{
+ char buf[BUFSIZ];
+ int i;
+
+ fprintf(stderr, "Size: %d\n", strlen(p));
+ while (strlen(p) >= 8) {
+ fprintf(stderr, "%02x %02x %02x %02x %02x %02x %02x %02x\n",
+ p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7]);
+ p += 8;
+ }
+ switch (strlen(p)) {
+ case 7:
+ fprintf(stderr, "%02x %02x %02x %02x %02x %02x %02x\n",
+ p[0], p[1], p[2], p[3], p[4], p[5], p[6]);
+ break;
+ case 6:
+ fprintf(stderr, "%02x %02x %02x %02x %02x %02x\n",
+ p[0], p[1], p[2], p[3], p[4], p[5]);
+ break;
+ case 5:
+ fprintf(stderr, "%02x %02x %02x %02x %02x\n",
+ p[0], p[1], p[2], p[3], p[4]);
+ break;
+ case 4:
+ fprintf(stderr, "%02x %02x %02x %02x\n",
+ p[0], p[1], p[2], p[3]);
+ break;
+ case 3:
+ fprintf(stderr, "%02x %02x %02x\n",
+ p[0], p[1], p[2]);
+ break;
+ case 2:
+ fprintf(stderr, "%02x %02x\n",
+ p[0], p[1]);
+ break;
+ case 1:
+ fprintf(stderr, "%02x\n",
+ p[0]);
+ break;
+ default:
+ return;
+ }
+}
+
+
+
+/* Adds a string to the string table. Returns the id number.
+ *
+ */
+int add_string(name)
+ EXEC SQL BEGIN DECLARE SECTION;
+ char *name;
+ EXEC SQL END DECLARE SECTION;
+{
+ EXEC SQL BEGIN DECLARE SECTION;
+ char buf[256];
+ int id;
+ EXEC SQL END DECLARE SECTION;
+
+ EXEC SQL SELECT value INTO :id FROM numvalues WHERE name = 'strings_id';
+ id++;
+ EXEC SQL UPDATE numvalues SET value = :id WHERE name = 'strings_id';
+
+ /* Use sprintf to get around problem with doubled single quotes */
+ sprintf(buf,"INSERT INTO strings (string_id, string) VALUES (%d, '%s')",id,name);
+ EXEC SQL EXECUTE IMMEDIATE :buf;
+
+ return(id);
+}
+
+
/* eof:qsupport.dc */