+ char Token[SIZ];
+ long TLen;
+ char Time[SIZ];
+
+ struct UseTable ut;
+ struct cdbdata *cdbut;
+
+ if (CtdlAccessCheck(ac_aide)) {
+ return;
+ }
+
+ TLen = extract_token(Token, argbuf, 1, '|', sizeof Token);
+ if (strncmp(argbuf, "GET", 3) == 0) {
+ cdbut = cdb_fetch(CDB_USETABLE, Token, TLen);
+ if (cdbut != NULL) {
+ memcpy(&ut, cdbut->ptr, ((cdbut->len > sizeof(struct UseTable)) ? sizeof(struct UseTable) : cdbut->len));
+
+ cprintf("%d %ld\n", CIT_OK, ut.ut_timestamp);
+ } else {
+ cprintf("%d not found\n", ERROR + NOT_HERE);
+ }
+
+ } else if (strncmp(argbuf, "SET", 3) == 0) {
+ memcpy(ut.ut_msgid, Token, TLen);
+ extract_token(Time, argbuf, 2, '|', sizeof Time);
+ ut.ut_timestamp = atol(Time);
+ cdb_store(CDB_USETABLE, Token, TLen, &ut, sizeof(struct UseTable));
+ cprintf("%d token updated\n", CIT_OK);
+ } else if (strncmp(argbuf, "DEL", 3) == 0) {
+ if (cdb_delete(CDB_USETABLE, Token, TLen))
+ cprintf("%d not found\n", ERROR + NOT_HERE);
+ else
+ cprintf("%d deleted.\n", CIT_OK);
+
+ } else {
+ cprintf("%d Usage: [GET|SET|DEL]|Token|timestamp\n", ERROR);
+ }
+