|
|
1.1 ! root 1: /* compare.c - */ ! 2: ! 3: #ifndef lint ! 4: static char *rcsid = "$Header: /f/osi/quipu/dish/RCS/compare.c,v 7.0 89/11/23 22:19:58 mrose Rel $"; ! 5: #endif ! 6: ! 7: /* ! 8: * $Header: /f/osi/quipu/dish/RCS/compare.c,v 7.0 89/11/23 22:19:58 mrose Rel $ ! 9: * ! 10: * ! 11: * $Log: compare.c,v $ ! 12: * Revision 7.0 89/11/23 22:19:58 mrose ! 13: * Release 6.0 ! 14: * ! 15: */ ! 16: ! 17: /* ! 18: * NOTICE ! 19: * ! 20: * Acquisition, use, and distribution of this module and related ! 21: * materials are subject to the restrictions of a license agreement. ! 22: * Consult the Preface in the User's Manual for the full terms of ! 23: * this agreement. ! 24: * ! 25: */ ! 26: ! 27: ! 28: #include "quipu/util.h" ! 29: #include "quipu/compare.h" ! 30: ! 31: extern DN dn; ! 32: ! 33: #define OPT (!frompipe || rps -> ps_byteno == 0 ? opt : rps) ! 34: #define RPS (!frompipe || opt -> ps_byteno == 0 ? rps : opt) ! 35: extern char frompipe; ! 36: extern PS opt, rps; ! 37: ! 38: call_compare (argc, argv) ! 39: int argc; ! 40: char **argv; ! 41: { ! 42: struct DSError error; ! 43: struct ds_compare_result result; ! 44: struct ds_compare_arg compare_arg; ! 45: ! 46: int x; ! 47: int att_present = 0; ! 48: int print = FALSE; ! 49: char *str1_type; ! 50: char *str1_value; ! 51: char *ptr; ! 52: ! 53: if ((argc = service_control (OPT, argc, argv, &compare_arg.cma_common)) == -1) ! 54: return; ! 55: ! 56: if (argc == 1) { ! 57: ps_print (OPT,"What do you want to compare ?\n"); ! 58: Usage (argv[0]); ! 59: return; ! 60: } ! 61: ! 62: for (x = 1; x < argc; x++) { ! 63: if (test_arg (argv[x],"-attribute",1)) { ! 64: str1_type = argv[++x]; ! 65: att_present = 1; ! 66: } else if (test_arg (argv[x], "-print",3)) { ! 67: print = TRUE; ! 68: } else if (test_arg (argv[x], "-noprint",3)) { ! 69: print = FALSE; ! 70: } else if (move (argv[x]) == OK) ! 71: continue; ! 72: else { ! 73: if (*argv[x] == '-') ! 74: ps_printf (OPT,"Unknown option %s\n",argv[x]); ! 75: else ! 76: ps_printf (OPT,"Invalid attribute assertion syntax %s\n",argv[x]); ! 77: Usage (argv[0]); ! 78: return; ! 79: } ! 80: } ! 81: ! 82: if (att_present == 0) { ! 83: ps_printf (OPT, "We are missing <attribute_type>=<attribute_value>.\n"); ! 84: Usage (argv[0]); ! 85: return; ! 86: } ! 87: ptr = str1_type; ! 88: while (*ptr != '=') { ! 89: ptr++; ! 90: } ! 91: *ptr++ = '\0'; ! 92: str1_value = ptr; ! 93: if (get_ava (&compare_arg.cma_purported, str1_type, str1_value) != OK) { ! 94: Usage (argv[0]); ! 95: return; ! 96: } ! 97: compare_arg.cma_object = dn; ! 98: ! 99: if (rebind () != OK) ! 100: return; ! 101: ! 102: /* Strong authentication */ ! 103: if (compare_arg.cma_common.ca_security != (struct security_parms *) 0) ! 104: { ! 105: struct signature *sign_operation(); ! 106: int encode_DAS_CompareArgumentData(); ! 107: ! 108: compare_arg.cma_common.ca_sig = ! 109: sign_operation((caddr_t)&compare_arg, encode_DAS_CompareArgumentData); ! 110: } ! 111: ! 112: while (ds_compare (&compare_arg, &error, &result) != DS_OK) { ! 113: if (dish_error (OPT, &error) == 0) ! 114: return; ! 115: compare_arg.cma_object = error.ERR_REFERRAL.DSE_ref_candidates->cr_name; ! 116: } ! 117: ! 118: if (result.cmr_common.cr_aliasdereferenced & print) { ! 119: ps_print (RPS, "(Alias dereferenced - "); ! 120: dn_print (RPS, result.cmr_object, EDBOUT); ! 121: dn_free (result.cmr_object); ! 122: ps_print (RPS, ")\n"); ! 123: } ! 124: if (print) { ! 125: if (result.cmr_matched == TRUE) ! 126: ps_print (RPS, "TRUE\n"); ! 127: else ! 128: ps_print (OPT, "FALSE\n"); ! 129: } else { ! 130: if (result.cmr_matched == TRUE) ! 131: ps_print (RPS, "\1"); ! 132: else ! 133: ps_print (OPT, "\0"); ! 134: } ! 135: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.