EXEC SQL BEGIN DECLARE SECTION;
extern char stmt_buf[];
-int idummy;
-extern char cdummy[];
EXEC SQL END DECLARE SECTION;
/* Specialized Access Routines */
id = *(int *)argv[0];
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 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);
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;
EXEC SQL INSERT INTO strings (string_id, string)
VALUES (:sigwho, :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]);
EXEC SQL INSERT INTO strings (string_id, string)
VALUES (:sigwho, :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;
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);
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;
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 */
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 */
}
+
+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;
+ }
+}
+
/* eof:qsupport.dc */