From: mar Date: Wed, 10 Nov 1993 15:34:33 +0000 (+0000) Subject: added followup_ghst X-Git-Tag: release77~71 X-Git-Url: http://andersk.mit.edu/gitweb/moira.git/commitdiff_plain/fde7313cae0df800921608962c1217d0366e47b9 added followup_ghst --- diff --git a/server/qfollow.dc b/server/qfollow.dc index fc13e1db..f541fc37 100644 --- a/server/qfollow.dc +++ b/server/qfollow.dc @@ -751,6 +751,83 @@ followup_gsnt(q, sq, v, action, actarg, cl) } +/* followup_ghst: fix the ace_name in argv[12]. argv[11] will contain the + * ace_type: "LIST", "USER", or "NONE". Decode the id in argv[12] into the + * proper name based on the type, and repace that string in the argv. + * Also fixes the modby field by called followup_fix_modby. + */ + +followup_ghst(q, sq, v, action, actarg, cl) + register struct query *q; + register struct save_queue *sq; + register struct validate *v; + register int (*action)(); + int actarg; + client *cl; +{ + char **argv, *malloc(), *realloc(), *type; + int id, i, idx, status; + + while (sq_get_data(sq, &argv)) { + mr_trim_args(q->vcnt, argv); + + id = atoi(argv[i = q->vcnt - 2]); + if (id > 0) + status = id_to_name(id, "USER", &argv[i]); + else + status = id_to_name(-id, "STRING", &argv[i]); + if (status && status != MR_NO_MATCH) + return(status); + + id = atoi(argv[13]); + status = id_to_name(id, "STRING", &argv[13]); + if (status) return(status); + id = atoi(argv[14]); + status = id_to_name(id, "STRING", &argv[14]); + if (status) return(status); + id = atoi(argv[16]); + if (id < 0) + status = id_to_name(-id, "STRING", &argv[16]); + else + status = id_to_name(id, "USER", &argv[16]); + if (status) return(status); + + idx = 12; + id = atoi(argv[idx]); + type = strtrim(argv[idx - 1]); + + if (!strcmp(type, "LIST")) { + status = id_to_name(id, "LIST", &argv[idx]); + } else if (!strcmp(type, "USER")) { + status = id_to_name(id, "USER", &argv[idx]); + } else if (!strcmp(type, "KERBEROS")) { + status = id_to_name(id, "STRING", &argv[idx]); + } else if (!strcmp(type, "NONE")) { + status = 0; + free(argv[idx]); + argv[idx] = strsave("NONE"); + } else { + status = 0; + free(argv[idx]); + argv[idx] = strsave("???"); + } + if (status && status != MR_NO_MATCH) + return(status); + + /* send the data */ + (*action)(q->vcnt, argv, actarg); + + /* free saved data */ + for (i = 0; i < q->vcnt; i++) + free(argv[i]); + free(argv); + } + + sq_destroy(sq); + return (MR_SUCCESS); +} + + /* followup_glin: fix the ace_name in argv[8]. argv[7] will contain the * ace_type: "LIST", "USER", or "NONE". Decode the id in argv[8] into the * proper name based on the type, and repace that string in the argv.